From ca52e88e603bd407a55ee00a791a0a8d1b2583e5 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Thu, 15 Jul 2021 14:34:06 -0300 Subject: [PATCH 01/16] cosmetics: Please cppcheck --- headers/modsecurity/transaction.h | 2 +- src/rule_with_actions.cc | 2 +- test/cppcheck_suppressions.txt | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index 6d9949dbbd..79d7b3b6a6 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -303,7 +303,7 @@ class TransactionSecMarkerManagement { if (m_marker) { return m_marker; } else { - throw; + throw std::runtime_error("Error get current marker\n"); } } diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 5ac17a2673..688cc6285a 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -120,7 +120,7 @@ RuleWithActions::RuleWithActions( delete a; std::cout << "General failure, action: " << a->m_name; std::cout << " has an unknown type." << std::endl; - throw; + throw std::runtime_error("Unexpected condition. Action without a type.\n"); } } delete actions; diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index 281540f061..175097931d 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -57,6 +57,7 @@ knownConditionTrueFalse:src/operators/verify_svnr.cc:87 noExplicitConstructor:seclang-parser.hh constParameter:seclang-parser.hh +accessMoved:seclang-parser.hh unusedFunction missingIncludeSystem From 2e2417f107e87cf526e589e604ea789589126385 Mon Sep 17 00:00:00 2001 From: marshal09 Date: Tue, 25 Aug 2020 05:21:16 -0400 Subject: [PATCH 02/16] Add new transformation call phpArgsNames --- CHANGES | 4 +- Makefile.am | 1 + src/Makefile.am | 1 + src/actions/transformations/php_args_names.cc | 97 + src/actions/transformations/php_args_names.h | 46 + src/actions/transformations/transformation.cc | 2 + src/parser/seclang-parser.cc | 3096 +++--- src/parser/seclang-parser.hh | 599 +- src/parser/seclang-parser.yy | 6 + src/parser/seclang-scanner.cc | 9488 +++++++++-------- src/parser/seclang-scanner.ll | 2 + .../regression/transformations.json | 59 + 12 files changed, 6832 insertions(+), 6569 deletions(-) create mode 100644 src/actions/transformations/php_args_names.cc create mode 100644 src/actions/transformations/php_args_names.h diff --git a/CHANGES b/CHANGES index 3234af79d3..0d27657bdc 100644 --- a/CHANGES +++ b/CHANGES @@ -1,8 +1,8 @@ v3.x.y - YYYY-MMM-DD (to be released) ------------------------------------- - - + - EXPERIMENTAL: Add new transformation call phpArgsNames + [Issue #2387 - @marshal09] v3.0.5 - 2021-Jul-07 diff --git a/Makefile.am b/Makefile.am index 9f32fde9a4..8c85b0a914 100644 --- a/Makefile.am +++ b/Makefile.am @@ -319,6 +319,7 @@ TESTS+=test/test-cases/secrules-language-tests/transformations/htmlEntityDecode. TESTS+=test/test-cases/secrules-language-tests/transformations/jsDecode.json TESTS+=test/test-cases/secrules-language-tests/transformations/length.json TESTS+=test/test-cases/secrules-language-tests/transformations/lowercase.json +TESTS+=test/test-cases/secrules-language-tests/transformations/phpArgsNames.json TESTS+=test/test-cases/secrules-language-tests/transformations/md5.json TESTS+=test/test-cases/secrules-language-tests/transformations/normalisePath.json TESTS+=test/test-cases/secrules-language-tests/transformations/normalisePathWin.json diff --git a/src/Makefile.am b/src/Makefile.am index b339b1ba5d..61e476ba5a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -167,6 +167,7 @@ ACTIONS = \ actions/transformations/js_decode.cc \ actions/transformations/length.cc \ actions/transformations/lower_case.cc \ + actions/transformations/php_args_names.cc \ actions/transformations/md5.cc \ actions/transformations/none.cc \ actions/transformations/normalise_path.cc \ diff --git a/src/actions/transformations/php_args_names.cc b/src/actions/transformations/php_args_names.cc new file mode 100644 index 0000000000..f28d350dd0 --- /dev/null +++ b/src/actions/transformations/php_args_names.cc @@ -0,0 +1,97 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 - 2020 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include "src/actions/transformations/php_args_names.h" + +#include +#include +#include + +#include "modsecurity/transaction.h" +#include "src/actions/transformations/transformation.h" +#include "modsecurity/actions/action.h" + +namespace modsecurity { +namespace actions { +namespace transformations { + + +PhpArgsNames::PhpArgsNames(const std::string &a) + : Transformation(a) { +} + +std::string PhpArgsNames::evaluate(const std::string &val, + Transaction *transaction) { + //Took the logic from php src code: + //https://github.com/php/php-src/blob/master/main/php_variables.c + //Function call PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *track_vars_array) + std::string value(val); + std::string ret = ""; + if(value[0] == '[' || value[0] == '=') { + return ret; + } + std::string::size_type i = 0; + while(value[i] == ' ') { + i++; + } + std::string::size_type val_size = value.length(); + bool is_array = false; + bool is_open_sq_bracket = false; + for (; i < val_size; ++i) { + if(value[i] == '[' && !is_open_sq_bracket) { + if(strchr(&value[i], ']') != NULL) { + is_array = true; + break; + } + + ret += '_'; + is_open_sq_bracket = true; + } + else if( !is_open_sq_bracket && (value[i] == ' ' || value[i] == '.') ) { + ret += '_'; + } + else { + ret += value[i]; + } + } + + if(is_array) { + char* start = &value[0]; + while(true) { + char *tmp = &value[i]; + char *close_bra = strchr(tmp, ']'); + if(close_bra == NULL) { + return ret; + } + int array_size = (int)(close_bra - start) + 1; + if(array_size - i == 3 && value[i+1] == ' ') { + ret += '['; + i+=2; + } + for(;i < array_size; ++i) { + ret += value[i]; + } + if(i >= val_size || value[i] != '[') { + return ret; + } + } + } + return ret; + +} + +} // namespace transformations +} // namespace actions +} // namespace modsecurity diff --git a/src/actions/transformations/php_args_names.h b/src/actions/transformations/php_args_names.h new file mode 100644 index 0000000000..a286b8a1cb --- /dev/null +++ b/src/actions/transformations/php_args_names.h @@ -0,0 +1,46 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 - 2020 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include +#include + +#include "modsecurity/actions/action.h" +#include "src/actions/transformations/transformation.h" + +#ifndef SRC_ACTIONS_TRANSFORMATIONS_PHP_ARGS_NAMES_H_ +#define SRC_ACTIONS_TRANSFORMATIONS_PHP_ARGS_NAMES_H_ + +#ifdef __cplusplus + +namespace modsecurity { +class Transaction; +namespace actions { +namespace transformations { + + +class PhpArgsNames : public Transformation { + public: + explicit PhpArgsNames(const std::string &action); + std::string evaluate(const std::string &exp, + Transaction *transaction) override; +}; + +} // namespace transformations +} // namespace actions +} // namespace modsecurity + +#endif + +#endif // SRC_ACTIONS_TRANSFORMATIONS_PHP_ARGS_NAMES_H_ diff --git a/src/actions/transformations/transformation.cc b/src/actions/transformations/transformation.cc index 3b38431ad1..cd14be790b 100644 --- a/src/actions/transformations/transformation.cc +++ b/src/actions/transformations/transformation.cc @@ -35,6 +35,7 @@ #include "src/actions/transformations/js_decode.h" #include "src/actions/transformations/length.h" #include "src/actions/transformations/lower_case.h" +#include "src/actions/transformations/php_args_names.h" #include "src/actions/transformations/md5.h" #include "src/actions/transformations/none.h" #include "src/actions/transformations/normalise_path.h" @@ -88,6 +89,7 @@ Transformation* Transformation::instantiate(std::string a) { IF_MATCH(jsDecode) { return new JsDecode(a); } IF_MATCH(length) { return new Length(a); } IF_MATCH(lowercase) { return new LowerCase(a); } + IF_MATCH(phpArgsNames) { return new PhpArgsNames(a); } IF_MATCH(md5) { return new Md5(a); } IF_MATCH(none) { return new None(a); } IF_MATCH(normalizePathWin) { return new NormalisePathWin(a); } diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index dfabb43421..9e8f5f8680 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -42,7 +42,7 @@ // Unqualified %code blocks. -#line 325 "seclang-parser.yy" +#line 326 "seclang-parser.yy" #include "src/parser/driver.h" @@ -272,6 +272,7 @@ namespace yy { case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -516,6 +517,7 @@ namespace yy { case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -760,6 +762,7 @@ namespace yy { case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -1003,6 +1006,7 @@ namespace yy { case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -1314,13 +1318,13 @@ namespace yy { // User initialization code. -#line 318 "seclang-parser.yy" +#line 319 "seclang-parser.yy" { // Initialize the initial location. yyla.location.begin.filename = yyla.location.end.filename = new std::string(driver.file); } -#line 1324 "seclang-parser.cc" +#line 1328 "seclang-parser.cc" /* Initialize the stack. The initial state will be set in @@ -1501,6 +1505,7 @@ namespace yy { case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -1685,241 +1690,241 @@ namespace yy { switch (yyn) { case 2: // input: "end of file" -#line 711 "seclang-parser.yy" +#line 713 "seclang-parser.yy" { return 0; } -#line 1693 "seclang-parser.cc" +#line 1698 "seclang-parser.cc" break; case 6: // audit_log: "CONFIG_DIR_AUDIT_DIR_MOD" -#line 724 "seclang-parser.yy" +#line 726 "seclang-parser.yy" { driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } -#line 1701 "seclang-parser.cc" +#line 1706 "seclang-parser.cc" break; case 7: // audit_log: "CONFIG_DIR_AUDIT_DIR" -#line 730 "seclang-parser.yy" +#line 732 "seclang-parser.yy" { driver.m_auditLog->setStorageDir(yystack_[0].value.as < std::string > ()); } -#line 1709 "seclang-parser.cc" +#line 1714 "seclang-parser.cc" break; case 8: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_RELEVANT_ONLY" -#line 736 "seclang-parser.yy" +#line 738 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus); } -#line 1717 "seclang-parser.cc" +#line 1722 "seclang-parser.cc" break; case 9: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_OFF" -#line 740 "seclang-parser.yy" +#line 742 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus); } -#line 1725 "seclang-parser.cc" +#line 1730 "seclang-parser.cc" break; case 10: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_ON" -#line 744 "seclang-parser.yy" +#line 746 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus); } -#line 1733 "seclang-parser.cc" +#line 1738 "seclang-parser.cc" break; case 11: // audit_log: "CONFIG_DIR_AUDIT_FLE_MOD" -#line 750 "seclang-parser.yy" +#line 752 "seclang-parser.yy" { driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } -#line 1741 "seclang-parser.cc" +#line 1746 "seclang-parser.cc" break; case 12: // audit_log: "CONFIG_DIR_AUDIT_LOG2" -#line 756 "seclang-parser.yy" +#line 758 "seclang-parser.yy" { driver.m_auditLog->setFilePath2(yystack_[0].value.as < std::string > ()); } -#line 1749 "seclang-parser.cc" +#line 1754 "seclang-parser.cc" break; case 13: // audit_log: "CONFIG_DIR_AUDIT_LOG_P" -#line 762 "seclang-parser.yy" +#line 764 "seclang-parser.yy" { driver.m_auditLog->setParts(yystack_[0].value.as < std::string > ()); } -#line 1757 "seclang-parser.cc" +#line 1762 "seclang-parser.cc" break; case 14: // audit_log: "CONFIG_DIR_AUDIT_LOG" -#line 768 "seclang-parser.yy" +#line 770 "seclang-parser.yy" { driver.m_auditLog->setFilePath1(yystack_[0].value.as < std::string > ()); } -#line 1765 "seclang-parser.cc" +#line 1770 "seclang-parser.cc" break; case 15: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT JSON -#line 773 "seclang-parser.yy" +#line 775 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::JSONAuditLogFormat); } -#line 1773 "seclang-parser.cc" +#line 1778 "seclang-parser.cc" break; case 16: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT NATIVE -#line 778 "seclang-parser.yy" +#line 780 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::NativeAuditLogFormat); } -#line 1781 "seclang-parser.cc" +#line 1786 "seclang-parser.cc" break; case 17: // audit_log: "CONFIG_DIR_AUDIT_STS" -#line 784 "seclang-parser.yy" +#line 786 "seclang-parser.yy" { std::string relevant_status(yystack_[0].value.as < std::string > ()); driver.m_auditLog->setRelevantStatus(relevant_status); } -#line 1790 "seclang-parser.cc" +#line 1795 "seclang-parser.cc" break; case 18: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_SERIAL" -#line 791 "seclang-parser.yy" +#line 793 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType); } -#line 1798 "seclang-parser.cc" +#line 1803 "seclang-parser.cc" break; case 19: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_PARALLEL" -#line 795 "seclang-parser.yy" +#line 797 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType); } -#line 1806 "seclang-parser.cc" +#line 1811 "seclang-parser.cc" break; case 20: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_HTTPS" -#line 799 "seclang-parser.yy" +#line 801 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType); } -#line 1814 "seclang-parser.cc" +#line 1819 "seclang-parser.cc" break; case 21: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_ON" -#line 805 "seclang-parser.yy" +#line 807 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 1822 "seclang-parser.cc" +#line 1827 "seclang-parser.cc" break; case 22: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_OFF" -#line 809 "seclang-parser.yy" +#line 811 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 1830 "seclang-parser.cc" +#line 1835 "seclang-parser.cc" break; case 23: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_RELEVANT_ONLY" -#line 813 "seclang-parser.yy" +#line 815 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecUploadKeepFiles RelevantOnly is not currently supported. Accepted values are On or Off"); YYERROR; } -#line 1839 "seclang-parser.cc" +#line 1844 "seclang-parser.cc" break; case 24: // audit_log: "CONFIG_UPLOAD_FILE_LIMIT" -#line 818 "seclang-parser.yy" +#line 820 "seclang-parser.yy" { driver.m_uploadFileLimit.m_set = true; driver.m_uploadFileLimit.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 10); } -#line 1848 "seclang-parser.cc" +#line 1853 "seclang-parser.cc" break; case 25: // audit_log: "CONFIG_UPLOAD_FILE_MODE" -#line 823 "seclang-parser.yy" +#line 825 "seclang-parser.yy" { driver.m_uploadFileMode.m_set = true; driver.m_uploadFileMode.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8); } -#line 1857 "seclang-parser.cc" +#line 1862 "seclang-parser.cc" break; case 26: // audit_log: "CONFIG_UPLOAD_DIR" -#line 828 "seclang-parser.yy" +#line 830 "seclang-parser.yy" { driver.m_uploadDirectory.m_set = true; driver.m_uploadDirectory.m_value = yystack_[0].value.as < std::string > (); } -#line 1866 "seclang-parser.cc" +#line 1871 "seclang-parser.cc" break; case 27: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_ON" -#line 833 "seclang-parser.yy" +#line 835 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 1874 "seclang-parser.cc" +#line 1879 "seclang-parser.cc" break; case 28: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_OFF" -#line 837 "seclang-parser.yy" +#line 839 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 1882 "seclang-parser.cc" +#line 1887 "seclang-parser.cc" break; case 29: // actions: "QUOTATION_MARK" actions_may_quoted "QUOTATION_MARK" -#line 844 "seclang-parser.yy" +#line 846 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } -#line 1890 "seclang-parser.cc" +#line 1895 "seclang-parser.cc" break; case 30: // actions: actions_may_quoted -#line 848 "seclang-parser.yy" +#line 850 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } -#line 1898 "seclang-parser.cc" +#line 1903 "seclang-parser.cc" break; case 31: // actions_may_quoted: actions_may_quoted "," act -#line 855 "seclang-parser.yy" +#line 857 "seclang-parser.yy" { ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[3].location) yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[2].value.as < std::unique_ptr > > > ()); } -#line 1908 "seclang-parser.cc" +#line 1913 "seclang-parser.cc" break; case 32: // actions_may_quoted: act -#line 861 "seclang-parser.yy" +#line 863 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[1].location) b->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 1919 "seclang-parser.cc" +#line 1924 "seclang-parser.cc" break; case 33: // op: op_before_init -#line 871 "seclang-parser.yy" +#line 873 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); std::string error; @@ -1928,11 +1933,11 @@ namespace yy { YYERROR; } } -#line 1932 "seclang-parser.cc" +#line 1937 "seclang-parser.cc" break; case 34: // op: "NOT" op_before_init -#line 880 "seclang-parser.yy" +#line 882 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); yylhs.value.as < std::unique_ptr > ()->m_negation = true; @@ -1942,11 +1947,11 @@ namespace yy { YYERROR; } } -#line 1946 "seclang-parser.cc" +#line 1951 "seclang-parser.cc" break; case 35: // op: run_time_string -#line 890 "seclang-parser.yy" +#line 892 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); std::string error; @@ -1955,11 +1960,11 @@ namespace yy { YYERROR; } } -#line 1959 "seclang-parser.cc" +#line 1964 "seclang-parser.cc" break; case 36: // op: "NOT" run_time_string -#line 899 "seclang-parser.yy" +#line 901 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yylhs.value.as < std::unique_ptr > ()->m_negation = true; @@ -1969,302 +1974,302 @@ namespace yy { YYERROR; } } -#line 1973 "seclang-parser.cc" +#line 1978 "seclang-parser.cc" break; case 37: // op_before_init: "OPERATOR_UNCONDITIONAL_MATCH" -#line 912 "seclang-parser.yy" +#line 914 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::UnconditionalMatch()); } -#line 1981 "seclang-parser.cc" +#line 1986 "seclang-parser.cc" break; case 38: // op_before_init: "OPERATOR_DETECT_SQLI" -#line 916 "seclang-parser.yy" +#line 918 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectSQLi()); } -#line 1989 "seclang-parser.cc" +#line 1994 "seclang-parser.cc" break; case 39: // op_before_init: "OPERATOR_DETECT_XSS" -#line 920 "seclang-parser.yy" +#line 922 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectXSS()); } -#line 1997 "seclang-parser.cc" +#line 2002 "seclang-parser.cc" break; case 40: // op_before_init: "OPERATOR_VALIDATE_URL_ENCODING" -#line 924 "seclang-parser.yy" +#line 926 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUrlEncoding()); } -#line 2005 "seclang-parser.cc" +#line 2010 "seclang-parser.cc" break; case 41: // op_before_init: "OPERATOR_VALIDATE_UTF8_ENCODING" -#line 928 "seclang-parser.yy" +#line 930 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUtf8Encoding()); } -#line 2013 "seclang-parser.cc" +#line 2018 "seclang-parser.cc" break; case 42: // op_before_init: "OPERATOR_INSPECT_FILE" run_time_string -#line 932 "seclang-parser.yy" +#line 934 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::InspectFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2021 "seclang-parser.cc" +#line 2026 "seclang-parser.cc" break; case 43: // op_before_init: "OPERATOR_FUZZY_HASH" run_time_string -#line 936 "seclang-parser.yy" +#line 938 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::FuzzyHash(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2029 "seclang-parser.cc" +#line 2034 "seclang-parser.cc" break; case 44: // op_before_init: "OPERATOR_VALIDATE_BYTE_RANGE" run_time_string -#line 940 "seclang-parser.yy" +#line 942 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateByteRange(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2037 "seclang-parser.cc" +#line 2042 "seclang-parser.cc" break; case 45: // op_before_init: "OPERATOR_VALIDATE_DTD" run_time_string -#line 944 "seclang-parser.yy" +#line 946 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateDTD(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2045 "seclang-parser.cc" +#line 2050 "seclang-parser.cc" break; case 46: // op_before_init: "OPERATOR_VALIDATE_HASH" run_time_string -#line 948 "seclang-parser.yy" +#line 950 "seclang-parser.yy" { /* $$ = new operators::ValidateHash($1); */ OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location); } -#line 2054 "seclang-parser.cc" +#line 2059 "seclang-parser.cc" break; case 47: // op_before_init: "OPERATOR_VALIDATE_SCHEMA" run_time_string -#line 953 "seclang-parser.yy" +#line 955 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateSchema(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2062 "seclang-parser.cc" +#line 2067 "seclang-parser.cc" break; case 48: // op_before_init: "OPERATOR_VERIFY_CC" run_time_string -#line 957 "seclang-parser.yy" +#line 959 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2070 "seclang-parser.cc" +#line 2075 "seclang-parser.cc" break; case 49: // op_before_init: "OPERATOR_VERIFY_CPF" run_time_string -#line 961 "seclang-parser.yy" +#line 963 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCPF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2078 "seclang-parser.cc" +#line 2083 "seclang-parser.cc" break; case 50: // op_before_init: "OPERATOR_VERIFY_SSN" run_time_string -#line 965 "seclang-parser.yy" +#line 967 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySSN(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2086 "seclang-parser.cc" +#line 2091 "seclang-parser.cc" break; case 51: // op_before_init: "OPERATOR_VERIFY_SVNR" run_time_string -#line 969 "seclang-parser.yy" +#line 971 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySVNR(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2094 "seclang-parser.cc" +#line 2099 "seclang-parser.cc" break; case 52: // op_before_init: "OPERATOR_GSB_LOOKUP" run_time_string -#line 973 "seclang-parser.yy" +#line 975 "seclang-parser.yy" { /* $$ = new operators::GsbLookup($1); */ OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location); } -#line 2103 "seclang-parser.cc" +#line 2108 "seclang-parser.cc" break; case 53: // op_before_init: "OPERATOR_RSUB" run_time_string -#line 978 "seclang-parser.yy" +#line 980 "seclang-parser.yy" { /* $$ = new operators::Rsub($1); */ OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location); } -#line 2112 "seclang-parser.cc" +#line 2117 "seclang-parser.cc" break; case 54: // op_before_init: "OPERATOR_WITHIN" run_time_string -#line 983 "seclang-parser.yy" +#line 985 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Within(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2120 "seclang-parser.cc" +#line 2125 "seclang-parser.cc" break; case 55: // op_before_init: "OPERATOR_CONTAINS_WORD" run_time_string -#line 987 "seclang-parser.yy" +#line 989 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ContainsWord(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2128 "seclang-parser.cc" +#line 2133 "seclang-parser.cc" break; case 56: // op_before_init: "OPERATOR_CONTAINS" run_time_string -#line 991 "seclang-parser.yy" +#line 993 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Contains(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2136 "seclang-parser.cc" +#line 2141 "seclang-parser.cc" break; case 57: // op_before_init: "OPERATOR_ENDS_WITH" run_time_string -#line 995 "seclang-parser.yy" +#line 997 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::EndsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2144 "seclang-parser.cc" +#line 2149 "seclang-parser.cc" break; case 58: // op_before_init: "OPERATOR_EQ" run_time_string -#line 999 "seclang-parser.yy" +#line 1001 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Eq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2152 "seclang-parser.cc" +#line 2157 "seclang-parser.cc" break; case 59: // op_before_init: "OPERATOR_GE" run_time_string -#line 1003 "seclang-parser.yy" +#line 1005 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Ge(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2160 "seclang-parser.cc" +#line 2165 "seclang-parser.cc" break; case 60: // op_before_init: "OPERATOR_GT" run_time_string -#line 1007 "seclang-parser.yy" +#line 1009 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Gt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2168 "seclang-parser.cc" +#line 2173 "seclang-parser.cc" break; case 61: // op_before_init: "OPERATOR_IP_MATCH_FROM_FILE" run_time_string -#line 1011 "seclang-parser.yy" +#line 1013 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatchF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2176 "seclang-parser.cc" +#line 2181 "seclang-parser.cc" break; case 62: // op_before_init: "OPERATOR_IP_MATCH" run_time_string -#line 1015 "seclang-parser.yy" +#line 1017 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2184 "seclang-parser.cc" +#line 2189 "seclang-parser.cc" break; case 63: // op_before_init: "OPERATOR_LE" run_time_string -#line 1019 "seclang-parser.yy" +#line 1021 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Le(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2192 "seclang-parser.cc" +#line 2197 "seclang-parser.cc" break; case 64: // op_before_init: "OPERATOR_LT" run_time_string -#line 1023 "seclang-parser.yy" +#line 1025 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Lt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2200 "seclang-parser.cc" +#line 2205 "seclang-parser.cc" break; case 65: // op_before_init: "OPERATOR_PM_FROM_FILE" run_time_string -#line 1027 "seclang-parser.yy" +#line 1029 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::PmFromFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2208 "seclang-parser.cc" +#line 2213 "seclang-parser.cc" break; case 66: // op_before_init: "OPERATOR_PM" run_time_string -#line 1031 "seclang-parser.yy" +#line 1033 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Pm(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2216 "seclang-parser.cc" +#line 2221 "seclang-parser.cc" break; case 67: // op_before_init: "OPERATOR_RBL" run_time_string -#line 1035 "seclang-parser.yy" +#line 1037 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rbl(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2224 "seclang-parser.cc" +#line 2229 "seclang-parser.cc" break; case 68: // op_before_init: "OPERATOR_RX" run_time_string -#line 1039 "seclang-parser.yy" +#line 1041 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2232 "seclang-parser.cc" +#line 2237 "seclang-parser.cc" break; case 69: // op_before_init: "OPERATOR_RX_GLOBAL" run_time_string -#line 1043 "seclang-parser.yy" +#line 1045 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::RxGlobal(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2240 "seclang-parser.cc" +#line 2245 "seclang-parser.cc" break; case 70: // op_before_init: "OPERATOR_STR_EQ" run_time_string -#line 1047 "seclang-parser.yy" +#line 1049 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrEq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2248 "seclang-parser.cc" +#line 2253 "seclang-parser.cc" break; case 71: // op_before_init: "OPERATOR_STR_MATCH" run_time_string -#line 1051 "seclang-parser.yy" +#line 1053 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2256 "seclang-parser.cc" +#line 2261 "seclang-parser.cc" break; case 72: // op_before_init: "OPERATOR_BEGINS_WITH" run_time_string -#line 1055 "seclang-parser.yy" +#line 1057 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::BeginsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2264 "seclang-parser.cc" +#line 2269 "seclang-parser.cc" break; case 73: // op_before_init: "OPERATOR_GEOLOOKUP" -#line 1059 "seclang-parser.yy" +#line 1061 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::GeoLookup()); @@ -2275,11 +2280,11 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 2279 "seclang-parser.cc" +#line 2284 "seclang-parser.cc" break; case 75: // expression: "DIRECTIVE" variables op actions -#line 1074 "seclang-parser.yy" +#line 1076 "seclang-parser.yy" { std::vector *a = new std::vector(); std::vector *t = new std::vector(); @@ -2309,11 +2314,11 @@ namespace yy { YYERROR; } } -#line 2313 "seclang-parser.cc" +#line 2318 "seclang-parser.cc" break; case 76: // expression: "DIRECTIVE" variables op -#line 1104 "seclang-parser.yy" +#line 1106 "seclang-parser.yy" { variables::Variables *v = new variables::Variables(); for (auto &i : *yystack_[1].value.as < std::unique_ptr > > > ().get()) { @@ -2332,11 +2337,11 @@ namespace yy { YYERROR; } } -#line 2336 "seclang-parser.cc" +#line 2341 "seclang-parser.cc" break; case 77: // expression: "CONFIG_DIR_SEC_ACTION" actions -#line 1123 "seclang-parser.yy" +#line 1125 "seclang-parser.yy" { std::vector *a = new std::vector(); std::vector *t = new std::vector(); @@ -2355,11 +2360,11 @@ namespace yy { )); driver.addSecAction(std::move(rule)); } -#line 2359 "seclang-parser.cc" +#line 2364 "seclang-parser.cc" break; case 78: // expression: "DIRECTIVE_SECRULESCRIPT" actions -#line 1142 "seclang-parser.yy" +#line 1144 "seclang-parser.yy" { std::string err; std::vector *a = new std::vector(); @@ -2387,11 +2392,11 @@ namespace yy { YYERROR; } } -#line 2391 "seclang-parser.cc" +#line 2396 "seclang-parser.cc" break; case 79: // expression: "CONFIG_DIR_SEC_DEFAULT_ACTION" actions -#line 1170 "seclang-parser.yy" +#line 1172 "seclang-parser.yy" { bool hasDisruptive = false; std::vector *actions = new std::vector(); @@ -2448,78 +2453,78 @@ namespace yy { delete actions; } -#line 2452 "seclang-parser.cc" +#line 2457 "seclang-parser.cc" break; case 80: // expression: "CONFIG_DIR_SEC_MARKER" -#line 1227 "seclang-parser.yy" +#line 1229 "seclang-parser.yy" { driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as < std::string > ()), /* file name */ std::unique_ptr(new std::string(*yystack_[0].location.end.filename)), /* line number */ yystack_[0].location.end.line ); } -#line 2463 "seclang-parser.cc" +#line 2468 "seclang-parser.cc" break; case 81: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_OFF" -#line 1234 "seclang-parser.yy" +#line 1236 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DisabledRuleEngine; } -#line 2471 "seclang-parser.cc" +#line 2476 "seclang-parser.cc" break; case 82: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_ON" -#line 1238 "seclang-parser.yy" +#line 1240 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::EnabledRuleEngine; } -#line 2479 "seclang-parser.cc" +#line 2484 "seclang-parser.cc" break; case 83: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_DETC" -#line 1242 "seclang-parser.yy" +#line 1244 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DetectionOnlyRuleEngine; } -#line 2487 "seclang-parser.cc" +#line 2492 "seclang-parser.cc" break; case 84: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_ON" -#line 1246 "seclang-parser.yy" +#line 1248 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2495 "seclang-parser.cc" +#line 2500 "seclang-parser.cc" break; case 85: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_OFF" -#line 1250 "seclang-parser.yy" +#line 1252 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2503 "seclang-parser.cc" +#line 2508 "seclang-parser.cc" break; case 86: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_ON" -#line 1254 "seclang-parser.yy" +#line 1256 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2511 "seclang-parser.cc" +#line 2516 "seclang-parser.cc" break; case 87: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_OFF" -#line 1258 "seclang-parser.yy" +#line 1260 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2519 "seclang-parser.cc" +#line 2524 "seclang-parser.cc" break; case 88: // expression: "CONFIG_SEC_ARGUMENT_SEPARATOR" -#line 1262 "seclang-parser.yy" +#line 1264 "seclang-parser.yy" { if (yystack_[0].value.as < std::string > ().length() != 1) { driver.error(yystack_[1].location, "Argument separator should be set to a single character."); @@ -2528,259 +2533,259 @@ namespace yy { driver.m_secArgumentSeparator.m_value = yystack_[0].value.as < std::string > (); driver.m_secArgumentSeparator.m_set = true; } -#line 2532 "seclang-parser.cc" +#line 2537 "seclang-parser.cc" break; case 89: // expression: "CONFIG_COMPONENT_SIG" -#line 1271 "seclang-parser.yy" +#line 1273 "seclang-parser.yy" { driver.m_components.push_back(yystack_[0].value.as < std::string > ()); } -#line 2540 "seclang-parser.cc" +#line 2545 "seclang-parser.cc" break; case 90: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_ON" -#line 1275 "seclang-parser.yy" +#line 1277 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecConnEngine is not yet supported."); YYERROR; } -#line 2549 "seclang-parser.cc" +#line 2554 "seclang-parser.cc" break; case 91: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_OFF" -#line 1280 "seclang-parser.yy" +#line 1282 "seclang-parser.yy" { } -#line 2556 "seclang-parser.cc" +#line 2561 "seclang-parser.cc" break; case 92: // expression: "CONFIG_SEC_WEB_APP_ID" -#line 1283 "seclang-parser.yy" +#line 1285 "seclang-parser.yy" { driver.m_secWebAppId.m_value = yystack_[0].value.as < std::string > (); driver.m_secWebAppId.m_set = true; } -#line 2565 "seclang-parser.cc" +#line 2570 "seclang-parser.cc" break; case 93: // expression: "CONFIG_SEC_SERVER_SIG" -#line 1288 "seclang-parser.yy" +#line 1290 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecServerSignature is not supported."); YYERROR; } -#line 2574 "seclang-parser.cc" +#line 2579 "seclang-parser.cc" break; case 94: // expression: "CONFIG_SEC_CACHE_TRANSFORMATIONS" -#line 1293 "seclang-parser.yy" +#line 1295 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCacheTransformations is not supported."); YYERROR; } -#line 2583 "seclang-parser.cc" +#line 2588 "seclang-parser.cc" break; case 95: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_ON" -#line 1298 "seclang-parser.yy" +#line 1300 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecDisableBackendCompression is not supported."); YYERROR; } -#line 2592 "seclang-parser.cc" +#line 2597 "seclang-parser.cc" break; case 96: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_OFF" -#line 1303 "seclang-parser.yy" +#line 1305 "seclang-parser.yy" { } -#line 2599 "seclang-parser.cc" +#line 2604 "seclang-parser.cc" break; case 97: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_ON" -#line 1306 "seclang-parser.yy" +#line 1308 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecContentInjection is not yet supported."); YYERROR; } -#line 2608 "seclang-parser.cc" +#line 2613 "seclang-parser.cc" break; case 98: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_OFF" -#line 1311 "seclang-parser.yy" +#line 1313 "seclang-parser.yy" { } -#line 2615 "seclang-parser.cc" +#line 2620 "seclang-parser.cc" break; case 99: // expression: "CONFIG_SEC_CHROOT_DIR" -#line 1314 "seclang-parser.yy" +#line 1316 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecChrootDir is not supported."); YYERROR; } -#line 2624 "seclang-parser.cc" +#line 2629 "seclang-parser.cc" break; case 100: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_ON" -#line 1319 "seclang-parser.yy" +#line 1321 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecHashEngine is not yet supported."); YYERROR; } -#line 2633 "seclang-parser.cc" +#line 2638 "seclang-parser.cc" break; case 101: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_OFF" -#line 1324 "seclang-parser.yy" +#line 1326 "seclang-parser.yy" { } -#line 2640 "seclang-parser.cc" +#line 2645 "seclang-parser.cc" break; case 102: // expression: "CONFIG_SEC_HASH_KEY" -#line 1327 "seclang-parser.yy" +#line 1329 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashKey is not yet supported."); YYERROR; } -#line 2649 "seclang-parser.cc" +#line 2654 "seclang-parser.cc" break; case 103: // expression: "CONFIG_SEC_HASH_PARAM" -#line 1332 "seclang-parser.yy" +#line 1334 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashParam is not yet supported."); YYERROR; } -#line 2658 "seclang-parser.cc" +#line 2663 "seclang-parser.cc" break; case 104: // expression: "CONFIG_SEC_HASH_METHOD_RX" -#line 1337 "seclang-parser.yy" +#line 1339 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodRx is not yet supported."); YYERROR; } -#line 2667 "seclang-parser.cc" +#line 2672 "seclang-parser.cc" break; case 105: // expression: "CONFIG_SEC_HASH_METHOD_PM" -#line 1342 "seclang-parser.yy" +#line 1344 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodPm is not yet supported."); YYERROR; } -#line 2676 "seclang-parser.cc" +#line 2681 "seclang-parser.cc" break; case 106: // expression: "CONFIG_DIR_GSB_DB" -#line 1347 "seclang-parser.yy" +#line 1349 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGsbLookupDb is not supported."); YYERROR; } -#line 2685 "seclang-parser.cc" +#line 2690 "seclang-parser.cc" break; case 107: // expression: "CONFIG_SEC_GUARDIAN_LOG" -#line 1352 "seclang-parser.yy" +#line 1354 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGuardianLog is not supported."); YYERROR; } -#line 2694 "seclang-parser.cc" +#line 2699 "seclang-parser.cc" break; case 108: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_ON" -#line 1357 "seclang-parser.yy" +#line 1359 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecInterceptOnError is not yet supported."); YYERROR; } -#line 2703 "seclang-parser.cc" +#line 2708 "seclang-parser.cc" break; case 109: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_OFF" -#line 1362 "seclang-parser.yy" +#line 1364 "seclang-parser.yy" { } -#line 2710 "seclang-parser.cc" +#line 2715 "seclang-parser.cc" break; case 110: // expression: "CONFIG_SEC_CONN_R_STATE_LIMIT" -#line 1365 "seclang-parser.yy" +#line 1367 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnReadStateLimit is not yet supported."); YYERROR; } -#line 2719 "seclang-parser.cc" +#line 2724 "seclang-parser.cc" break; case 111: // expression: "CONFIG_SEC_CONN_W_STATE_LIMIT" -#line 1370 "seclang-parser.yy" +#line 1372 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnWriteStateLimit is not yet supported."); YYERROR; } -#line 2728 "seclang-parser.cc" +#line 2733 "seclang-parser.cc" break; case 112: // expression: "CONFIG_SEC_SENSOR_ID" -#line 1375 "seclang-parser.yy" +#line 1377 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecSensorId is not yet supported."); YYERROR; } -#line 2737 "seclang-parser.cc" +#line 2742 "seclang-parser.cc" break; case 113: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_ON" -#line 1380 "seclang-parser.yy" +#line 1382 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecRuleInheritance is not yet supported."); YYERROR; } -#line 2746 "seclang-parser.cc" +#line 2751 "seclang-parser.cc" break; case 114: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_OFF" -#line 1385 "seclang-parser.yy" +#line 1387 "seclang-parser.yy" { } -#line 2753 "seclang-parser.cc" +#line 2758 "seclang-parser.cc" break; case 115: // expression: "CONFIG_SEC_RULE_PERF_TIME" -#line 1388 "seclang-parser.yy" +#line 1390 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecRulePerfTime is not yet supported."); YYERROR; } -#line 2762 "seclang-parser.cc" +#line 2767 "seclang-parser.cc" break; case 116: // expression: "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" -#line 1393 "seclang-parser.yy" +#line 1395 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamInBodyInspection is not supported."); YYERROR; } -#line 2771 "seclang-parser.cc" +#line 2776 "seclang-parser.cc" break; case 117: // expression: "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" -#line 1398 "seclang-parser.yy" +#line 1400 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamOutBodyInspection is not supported."); YYERROR; } -#line 2780 "seclang-parser.cc" +#line 2785 "seclang-parser.cc" break; case 118: // expression: "CONFIG_SEC_RULE_REMOVE_BY_ID" -#line 1403 "seclang-parser.yy" +#line 1405 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.load(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2793,11 +2798,11 @@ namespace yy { YYERROR; } } -#line 2797 "seclang-parser.cc" +#line 2802 "seclang-parser.cc" break; case 119: // expression: "CONFIG_SEC_RULE_REMOVE_BY_TAG" -#line 1416 "seclang-parser.yy" +#line 1418 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByTag(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2810,11 +2815,11 @@ namespace yy { YYERROR; } } -#line 2814 "seclang-parser.cc" +#line 2819 "seclang-parser.cc" break; case 120: // expression: "CONFIG_SEC_RULE_REMOVE_BY_MSG" -#line 1429 "seclang-parser.yy" +#line 1431 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByMsg(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2827,11 +2832,11 @@ namespace yy { YYERROR; } } -#line 2831 "seclang-parser.cc" +#line 2836 "seclang-parser.cc" break; case 121: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" variables_pre_process -#line 1442 "seclang-parser.yy" +#line 1444 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByTag(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2844,11 +2849,11 @@ namespace yy { YYERROR; } } -#line 2848 "seclang-parser.cc" +#line 2853 "seclang-parser.cc" break; case 122: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" variables_pre_process -#line 1455 "seclang-parser.yy" +#line 1457 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByMsg(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2861,11 +2866,11 @@ namespace yy { YYERROR; } } -#line 2865 "seclang-parser.cc" +#line 2870 "seclang-parser.cc" break; case 123: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" variables_pre_process -#line 1468 "seclang-parser.yy" +#line 1470 "seclang-parser.yy" { std::string error; double ruleId; @@ -2891,11 +2896,11 @@ namespace yy { YYERROR; } } -#line 2895 "seclang-parser.cc" +#line 2900 "seclang-parser.cc" break; case 124: // expression: "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" actions -#line 1494 "seclang-parser.yy" +#line 1496 "seclang-parser.yy" { std::string error; double ruleId; @@ -2922,11 +2927,11 @@ namespace yy { YYERROR; } } -#line 2926 "seclang-parser.cc" +#line 2931 "seclang-parser.cc" break; case 125: // expression: "CONFIG_DIR_DEBUG_LVL" -#line 1522 "seclang-parser.yy" +#line 1524 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { driver.m_debugLog->setDebugLogLevel(atoi(yystack_[0].value.as < std::string > ().c_str())); @@ -2938,11 +2943,11 @@ namespace yy { YYERROR; } } -#line 2942 "seclang-parser.cc" +#line 2947 "seclang-parser.cc" break; case 126: // expression: "CONFIG_DIR_DEBUG_LOG" -#line 1534 "seclang-parser.yy" +#line 1536 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { std::string error; @@ -2961,11 +2966,11 @@ namespace yy { YYERROR; } } -#line 2965 "seclang-parser.cc" +#line 2970 "seclang-parser.cc" break; case 127: // expression: "CONFIG_DIR_GEO_DB" -#line 1554 "seclang-parser.yy" +#line 1556 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) std::string err; @@ -2992,38 +2997,38 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 2996 "seclang-parser.cc" +#line 3001 "seclang-parser.cc" break; case 128: // expression: "CONFIG_DIR_ARGS_LIMIT" -#line 1581 "seclang-parser.yy" +#line 1583 "seclang-parser.yy" { driver.m_argumentsLimit.m_set = true; driver.m_argumentsLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3005 "seclang-parser.cc" +#line 3010 "seclang-parser.cc" break; case 129: // expression: "CONFIG_DIR_REQ_BODY_LIMIT" -#line 1587 "seclang-parser.yy" +#line 1589 "seclang-parser.yy" { driver.m_requestBodyLimit.m_set = true; driver.m_requestBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3014 "seclang-parser.cc" +#line 3019 "seclang-parser.cc" break; case 130: // expression: "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" -#line 1592 "seclang-parser.yy" +#line 1594 "seclang-parser.yy" { driver.m_requestBodyNoFilesLimit.m_set = true; driver.m_requestBodyNoFilesLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3023 "seclang-parser.cc" +#line 3028 "seclang-parser.cc" break; case 131: // expression: "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" -#line 1597 "seclang-parser.yy" +#line 1599 "seclang-parser.yy" { std::stringstream ss; ss << "As of ModSecurity version 3.0, SecRequestBodyInMemoryLimit is no longer "; @@ -3032,68 +3037,68 @@ namespace yy { driver.error(yystack_[1].location, ss.str()); YYERROR; } -#line 3036 "seclang-parser.cc" +#line 3041 "seclang-parser.cc" break; case 132: // expression: "CONFIG_DIR_RES_BODY_LIMIT" -#line 1606 "seclang-parser.yy" +#line 1608 "seclang-parser.yy" { driver.m_responseBodyLimit.m_set = true; driver.m_responseBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3045 "seclang-parser.cc" +#line 3050 "seclang-parser.cc" break; case 133: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1611 "seclang-parser.yy" +#line 1613 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3053 "seclang-parser.cc" +#line 3058 "seclang-parser.cc" break; case 134: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1615 "seclang-parser.yy" +#line 1617 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3061 "seclang-parser.cc" +#line 3066 "seclang-parser.cc" break; case 135: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1619 "seclang-parser.yy" +#line 1621 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3069 "seclang-parser.cc" +#line 3074 "seclang-parser.cc" break; case 136: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1623 "seclang-parser.yy" +#line 1625 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3077 "seclang-parser.cc" +#line 3082 "seclang-parser.cc" break; case 137: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_ABORT" -#line 1627 "seclang-parser.yy" +#line 1629 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction; } -#line 3085 "seclang-parser.cc" +#line 3090 "seclang-parser.cc" break; case 138: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_WARN" -#line 1631 "seclang-parser.yy" +#line 1633 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction; } -#line 3093 "seclang-parser.cc" +#line 3098 "seclang-parser.cc" break; case 141: // expression: "CONGIG_DIR_RESPONSE_BODY_MP" -#line 1645 "seclang-parser.yy" +#line 1647 "seclang-parser.yy" { std::istringstream buf(yystack_[0].value.as < std::string > ()); std::istream_iterator beg(buf), end; @@ -3105,37 +3110,37 @@ namespace yy { driver.m_responseBodyTypeToBeInspected.m_value.insert(*it); } } -#line 3109 "seclang-parser.cc" +#line 3114 "seclang-parser.cc" break; case 142: // expression: "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" -#line 1657 "seclang-parser.yy" +#line 1659 "seclang-parser.yy" { driver.m_responseBodyTypeToBeInspected.m_set = true; driver.m_responseBodyTypeToBeInspected.m_clear = true; driver.m_responseBodyTypeToBeInspected.m_value.clear(); } -#line 3119 "seclang-parser.cc" +#line 3124 "seclang-parser.cc" break; case 143: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_OFF" -#line 1663 "seclang-parser.yy" +#line 1665 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 3127 "seclang-parser.cc" +#line 3132 "seclang-parser.cc" break; case 144: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_ON" -#line 1667 "seclang-parser.yy" +#line 1669 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 3135 "seclang-parser.cc" +#line 3140 "seclang-parser.cc" break; case 145: // expression: "CONGIG_DIR_SEC_TMP_DIR" -#line 1671 "seclang-parser.yy" +#line 1673 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default installations with modsecurity.conf-recommended std::stringstream ss; @@ -3146,31 +3151,31 @@ namespace yy { YYERROR; */ } -#line 3150 "seclang-parser.cc" +#line 3155 "seclang-parser.cc" break; case 148: // expression: "CONGIG_DIR_SEC_COOKIE_FORMAT" -#line 1692 "seclang-parser.yy" +#line 1694 "seclang-parser.yy" { if (atoi(yystack_[0].value.as < std::string > ().c_str()) == 1) { driver.error(yystack_[1].location, "SecCookieFormat 1 is not yet supported."); YYERROR; } } -#line 3161 "seclang-parser.cc" +#line 3166 "seclang-parser.cc" break; case 149: // expression: "CONFIG_SEC_COOKIEV0_SEPARATOR" -#line 1699 "seclang-parser.yy" +#line 1701 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCookieV0Separator is not yet supported."); YYERROR; } -#line 3170 "seclang-parser.cc" +#line 3175 "seclang-parser.cc" break; case 151: // expression: "CONFIG_DIR_UNICODE_MAP_FILE" -#line 1709 "seclang-parser.yy" +#line 1711 "seclang-parser.yy" { std::string error; std::vector param; @@ -3224,31 +3229,31 @@ namespace yy { } } -#line 3228 "seclang-parser.cc" +#line 3233 "seclang-parser.cc" break; case 152: // expression: "CONFIG_SEC_COLLECTION_TIMEOUT" -#line 1763 "seclang-parser.yy" +#line 1765 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default CRS installations with crs-setup.conf-recommended driver.error(@0, "SecCollectionTimeout is not yet supported."); YYERROR; */ } -#line 3239 "seclang-parser.cc" +#line 3244 "seclang-parser.cc" break; case 153: // expression: "CONFIG_SEC_HTTP_BLKEY" -#line 1770 "seclang-parser.yy" +#line 1772 "seclang-parser.yy" { driver.m_httpblKey.m_set = true; driver.m_httpblKey.m_value = yystack_[0].value.as < std::string > (); } -#line 3248 "seclang-parser.cc" +#line 3253 "seclang-parser.cc" break; case 154: // variables: variables_pre_process -#line 1778 "seclang-parser.yy" +#line 1780 "seclang-parser.yy" { std::unique_ptr > > originalList = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); std::unique_ptr>> newList(new std::vector>()); @@ -3282,2363 +3287,2371 @@ namespace yy { } yylhs.value.as < std::unique_ptr > > > () = std::move(newNewList); } -#line 3286 "seclang-parser.cc" +#line 3291 "seclang-parser.cc" break; case 155: // variables_pre_process: variables_may_be_quoted -#line 1815 "seclang-parser.yy" +#line 1817 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } -#line 3294 "seclang-parser.cc" +#line 3299 "seclang-parser.cc" break; case 156: // variables_pre_process: "QUOTATION_MARK" variables_may_be_quoted "QUOTATION_MARK" -#line 1819 "seclang-parser.yy" +#line 1821 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } -#line 3302 "seclang-parser.cc" +#line 3307 "seclang-parser.cc" break; case 157: // variables_may_be_quoted: variables_may_be_quoted PIPE var -#line 1826 "seclang-parser.yy" +#line 1828 "seclang-parser.yy" { yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[2].value.as < std::unique_ptr > > > ()); } -#line 3311 "seclang-parser.cc" +#line 3316 "seclang-parser.cc" break; case 158: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_EXCLUSION var -#line 1831 "seclang-parser.yy" +#line 1833 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[3].value.as < std::unique_ptr > > > ()); } -#line 3321 "seclang-parser.cc" +#line 3326 "seclang-parser.cc" break; case 159: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_COUNT var -#line 1837 "seclang-parser.yy" +#line 1839 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[3].value.as < std::unique_ptr > > > ()); } -#line 3331 "seclang-parser.cc" +#line 3336 "seclang-parser.cc" break; case 160: // variables_may_be_quoted: var -#line 1843 "seclang-parser.yy" +#line 1845 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); b->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3341 "seclang-parser.cc" +#line 3346 "seclang-parser.cc" break; case 161: // variables_may_be_quoted: VAR_EXCLUSION var -#line 1849 "seclang-parser.yy" +#line 1851 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3352 "seclang-parser.cc" +#line 3357 "seclang-parser.cc" break; case 162: // variables_may_be_quoted: VAR_COUNT var -#line 1856 "seclang-parser.yy" +#line 1858 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3363 "seclang-parser.cc" +#line 3368 "seclang-parser.cc" break; case 163: // var: VARIABLE_ARGS "Dictionary element" -#line 1866 "seclang-parser.yy" +#line 1868 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3371 "seclang-parser.cc" +#line 3376 "seclang-parser.cc" break; case 164: // var: VARIABLE_ARGS "Dictionary element, selected by regexp" -#line 1870 "seclang-parser.yy" +#line 1872 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3379 "seclang-parser.cc" +#line 3384 "seclang-parser.cc" break; case 165: // var: VARIABLE_ARGS -#line 1874 "seclang-parser.yy" +#line 1876 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_NoDictElement()); } -#line 3387 "seclang-parser.cc" +#line 3392 "seclang-parser.cc" break; case 166: // var: VARIABLE_ARGS_POST "Dictionary element" -#line 1878 "seclang-parser.yy" +#line 1880 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3395 "seclang-parser.cc" +#line 3400 "seclang-parser.cc" break; case 167: // var: VARIABLE_ARGS_POST "Dictionary element, selected by regexp" -#line 1882 "seclang-parser.yy" +#line 1884 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3403 "seclang-parser.cc" +#line 3408 "seclang-parser.cc" break; case 168: // var: VARIABLE_ARGS_POST -#line 1886 "seclang-parser.yy" +#line 1888 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_NoDictElement()); } -#line 3411 "seclang-parser.cc" +#line 3416 "seclang-parser.cc" break; case 169: // var: VARIABLE_ARGS_GET "Dictionary element" -#line 1890 "seclang-parser.yy" +#line 1892 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3419 "seclang-parser.cc" +#line 3424 "seclang-parser.cc" break; case 170: // var: VARIABLE_ARGS_GET "Dictionary element, selected by regexp" -#line 1894 "seclang-parser.yy" +#line 1896 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3427 "seclang-parser.cc" +#line 3432 "seclang-parser.cc" break; case 171: // var: VARIABLE_ARGS_GET -#line 1898 "seclang-parser.yy" +#line 1900 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_NoDictElement()); } -#line 3435 "seclang-parser.cc" +#line 3440 "seclang-parser.cc" break; case 172: // var: VARIABLE_FILES_SIZES "Dictionary element" -#line 1902 "seclang-parser.yy" +#line 1904 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3443 "seclang-parser.cc" +#line 3448 "seclang-parser.cc" break; case 173: // var: VARIABLE_FILES_SIZES "Dictionary element, selected by regexp" -#line 1906 "seclang-parser.yy" +#line 1908 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3451 "seclang-parser.cc" +#line 3456 "seclang-parser.cc" break; case 174: // var: VARIABLE_FILES_SIZES -#line 1910 "seclang-parser.yy" +#line 1912 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_NoDictElement()); } -#line 3459 "seclang-parser.cc" +#line 3464 "seclang-parser.cc" break; case 175: // var: VARIABLE_FILES_NAMES "Dictionary element" -#line 1914 "seclang-parser.yy" +#line 1916 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3467 "seclang-parser.cc" +#line 3472 "seclang-parser.cc" break; case 176: // var: VARIABLE_FILES_NAMES "Dictionary element, selected by regexp" -#line 1918 "seclang-parser.yy" +#line 1920 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3475 "seclang-parser.cc" +#line 3480 "seclang-parser.cc" break; case 177: // var: VARIABLE_FILES_NAMES -#line 1922 "seclang-parser.yy" +#line 1924 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_NoDictElement()); } -#line 3483 "seclang-parser.cc" +#line 3488 "seclang-parser.cc" break; case 178: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element" -#line 1926 "seclang-parser.yy" +#line 1928 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3491 "seclang-parser.cc" +#line 3496 "seclang-parser.cc" break; case 179: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element, selected by regexp" -#line 1930 "seclang-parser.yy" +#line 1932 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3499 "seclang-parser.cc" +#line 3504 "seclang-parser.cc" break; case 180: // var: VARIABLE_FILES_TMP_CONTENT -#line 1934 "seclang-parser.yy" +#line 1936 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_NoDictElement()); } -#line 3507 "seclang-parser.cc" +#line 3512 "seclang-parser.cc" break; case 181: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element" -#line 1938 "seclang-parser.yy" +#line 1940 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3515 "seclang-parser.cc" +#line 3520 "seclang-parser.cc" break; case 182: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element, selected by regexp" -#line 1942 "seclang-parser.yy" +#line 1944 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3523 "seclang-parser.cc" +#line 3528 "seclang-parser.cc" break; case 183: // var: VARIABLE_MULTIPART_FILENAME -#line 1946 "seclang-parser.yy" +#line 1948 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_NoDictElement()); } -#line 3531 "seclang-parser.cc" +#line 3536 "seclang-parser.cc" break; case 184: // var: VARIABLE_MULTIPART_NAME "Dictionary element" -#line 1950 "seclang-parser.yy" +#line 1952 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3539 "seclang-parser.cc" +#line 3544 "seclang-parser.cc" break; case 185: // var: VARIABLE_MULTIPART_NAME "Dictionary element, selected by regexp" -#line 1954 "seclang-parser.yy" +#line 1956 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3547 "seclang-parser.cc" +#line 3552 "seclang-parser.cc" break; case 186: // var: VARIABLE_MULTIPART_NAME -#line 1958 "seclang-parser.yy" +#line 1960 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_NoDictElement()); } -#line 3555 "seclang-parser.cc" +#line 3560 "seclang-parser.cc" break; case 187: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element" -#line 1962 "seclang-parser.yy" +#line 1964 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3563 "seclang-parser.cc" +#line 3568 "seclang-parser.cc" break; case 188: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element, selected by regexp" -#line 1966 "seclang-parser.yy" +#line 1968 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3571 "seclang-parser.cc" +#line 3576 "seclang-parser.cc" break; case 189: // var: VARIABLE_MATCHED_VARS_NAMES -#line 1970 "seclang-parser.yy" +#line 1972 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_NoDictElement()); } -#line 3579 "seclang-parser.cc" +#line 3584 "seclang-parser.cc" break; case 190: // var: VARIABLE_MATCHED_VARS "Dictionary element" -#line 1974 "seclang-parser.yy" +#line 1976 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3587 "seclang-parser.cc" +#line 3592 "seclang-parser.cc" break; case 191: // var: VARIABLE_MATCHED_VARS "Dictionary element, selected by regexp" -#line 1978 "seclang-parser.yy" +#line 1980 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3595 "seclang-parser.cc" +#line 3600 "seclang-parser.cc" break; case 192: // var: VARIABLE_MATCHED_VARS -#line 1982 "seclang-parser.yy" +#line 1984 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_NoDictElement()); } -#line 3603 "seclang-parser.cc" +#line 3608 "seclang-parser.cc" break; case 193: // var: VARIABLE_FILES "Dictionary element" -#line 1986 "seclang-parser.yy" +#line 1988 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3611 "seclang-parser.cc" +#line 3616 "seclang-parser.cc" break; case 194: // var: VARIABLE_FILES "Dictionary element, selected by regexp" -#line 1990 "seclang-parser.yy" +#line 1992 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3619 "seclang-parser.cc" +#line 3624 "seclang-parser.cc" break; case 195: // var: VARIABLE_FILES -#line 1994 "seclang-parser.yy" +#line 1996 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_NoDictElement()); } -#line 3627 "seclang-parser.cc" +#line 3632 "seclang-parser.cc" break; case 196: // var: VARIABLE_REQUEST_COOKIES "Dictionary element" -#line 1998 "seclang-parser.yy" +#line 2000 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3635 "seclang-parser.cc" +#line 3640 "seclang-parser.cc" break; case 197: // var: VARIABLE_REQUEST_COOKIES "Dictionary element, selected by regexp" -#line 2002 "seclang-parser.yy" +#line 2004 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3643 "seclang-parser.cc" +#line 3648 "seclang-parser.cc" break; case 198: // var: VARIABLE_REQUEST_COOKIES -#line 2006 "seclang-parser.yy" +#line 2008 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_NoDictElement()); } -#line 3651 "seclang-parser.cc" +#line 3656 "seclang-parser.cc" break; case 199: // var: VARIABLE_REQUEST_HEADERS "Dictionary element" -#line 2010 "seclang-parser.yy" +#line 2012 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3659 "seclang-parser.cc" +#line 3664 "seclang-parser.cc" break; case 200: // var: VARIABLE_REQUEST_HEADERS "Dictionary element, selected by regexp" -#line 2014 "seclang-parser.yy" +#line 2016 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3667 "seclang-parser.cc" +#line 3672 "seclang-parser.cc" break; case 201: // var: VARIABLE_REQUEST_HEADERS -#line 2018 "seclang-parser.yy" +#line 2020 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_NoDictElement()); } -#line 3675 "seclang-parser.cc" +#line 3680 "seclang-parser.cc" break; case 202: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element" -#line 2022 "seclang-parser.yy" +#line 2024 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3683 "seclang-parser.cc" +#line 3688 "seclang-parser.cc" break; case 203: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element, selected by regexp" -#line 2026 "seclang-parser.yy" +#line 2028 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3691 "seclang-parser.cc" +#line 3696 "seclang-parser.cc" break; case 204: // var: VARIABLE_RESPONSE_HEADERS -#line 2030 "seclang-parser.yy" +#line 2032 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_NoDictElement()); } -#line 3699 "seclang-parser.cc" +#line 3704 "seclang-parser.cc" break; case 205: // var: VARIABLE_GEO "Dictionary element" -#line 2034 "seclang-parser.yy" +#line 2036 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3707 "seclang-parser.cc" +#line 3712 "seclang-parser.cc" break; case 206: // var: VARIABLE_GEO "Dictionary element, selected by regexp" -#line 2038 "seclang-parser.yy" +#line 2040 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3715 "seclang-parser.cc" +#line 3720 "seclang-parser.cc" break; case 207: // var: VARIABLE_GEO -#line 2042 "seclang-parser.yy" +#line 2044 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_NoDictElement()); } -#line 3723 "seclang-parser.cc" +#line 3728 "seclang-parser.cc" break; case 208: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element" -#line 2046 "seclang-parser.yy" +#line 2048 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3731 "seclang-parser.cc" +#line 3736 "seclang-parser.cc" break; case 209: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element, selected by regexp" -#line 2050 "seclang-parser.yy" +#line 2052 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3739 "seclang-parser.cc" +#line 3744 "seclang-parser.cc" break; case 210: // var: VARIABLE_REQUEST_COOKIES_NAMES -#line 2054 "seclang-parser.yy" +#line 2056 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_NoDictElement()); } -#line 3747 "seclang-parser.cc" +#line 3752 "seclang-parser.cc" break; case 211: // var: VARIABLE_RULE "Dictionary element" -#line 2058 "seclang-parser.yy" +#line 2060 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3755 "seclang-parser.cc" +#line 3760 "seclang-parser.cc" break; case 212: // var: VARIABLE_RULE "Dictionary element, selected by regexp" -#line 2062 "seclang-parser.yy" +#line 2064 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3763 "seclang-parser.cc" +#line 3768 "seclang-parser.cc" break; case 213: // var: VARIABLE_RULE -#line 2066 "seclang-parser.yy" +#line 2068 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_NoDictElement()); } -#line 3771 "seclang-parser.cc" +#line 3776 "seclang-parser.cc" break; case 214: // var: "RUN_TIME_VAR_ENV" "Dictionary element" -#line 2070 "seclang-parser.yy" +#line 2072 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3779 "seclang-parser.cc" +#line 3784 "seclang-parser.cc" break; case 215: // var: "RUN_TIME_VAR_ENV" "Dictionary element, selected by regexp" -#line 2074 "seclang-parser.yy" +#line 2076 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3787 "seclang-parser.cc" +#line 3792 "seclang-parser.cc" break; case 216: // var: "RUN_TIME_VAR_ENV" -#line 2078 "seclang-parser.yy" +#line 2080 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV")); } -#line 3795 "seclang-parser.cc" +#line 3800 "seclang-parser.cc" break; case 217: // var: "RUN_TIME_VAR_XML" "Dictionary element" -#line 2082 "seclang-parser.yy" +#line 2084 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } -#line 3803 "seclang-parser.cc" +#line 3808 "seclang-parser.cc" break; case 218: // var: "RUN_TIME_VAR_XML" "Dictionary element, selected by regexp" -#line 2086 "seclang-parser.yy" +#line 2088 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } -#line 3811 "seclang-parser.cc" +#line 3816 "seclang-parser.cc" break; case 219: // var: "RUN_TIME_VAR_XML" -#line 2090 "seclang-parser.yy" +#line 2092 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML_NoDictElement()); } -#line 3819 "seclang-parser.cc" +#line 3824 "seclang-parser.cc" break; case 220: // var: "FILES_TMPNAMES" "Dictionary element" -#line 2094 "seclang-parser.yy" +#line 2096 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3827 "seclang-parser.cc" +#line 3832 "seclang-parser.cc" break; case 221: // var: "FILES_TMPNAMES" "Dictionary element, selected by regexp" -#line 2098 "seclang-parser.yy" +#line 2100 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3835 "seclang-parser.cc" +#line 3840 "seclang-parser.cc" break; case 222: // var: "FILES_TMPNAMES" -#line 2102 "seclang-parser.yy" +#line 2104 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_NoDictElement()); } -#line 3843 "seclang-parser.cc" +#line 3848 "seclang-parser.cc" break; case 223: // var: "RESOURCE" run_time_string -#line 2106 "seclang-parser.yy" +#line 2108 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3851 "seclang-parser.cc" +#line 3856 "seclang-parser.cc" break; case 224: // var: "RESOURCE" "Dictionary element" -#line 2110 "seclang-parser.yy" +#line 2112 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3859 "seclang-parser.cc" +#line 3864 "seclang-parser.cc" break; case 225: // var: "RESOURCE" "Dictionary element, selected by regexp" -#line 2114 "seclang-parser.yy" +#line 2116 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3867 "seclang-parser.cc" +#line 3872 "seclang-parser.cc" break; case 226: // var: "RESOURCE" -#line 2118 "seclang-parser.yy" +#line 2120 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_NoDictElement()); } -#line 3875 "seclang-parser.cc" +#line 3880 "seclang-parser.cc" break; case 227: // var: "VARIABLE_IP" run_time_string -#line 2122 "seclang-parser.yy" +#line 2124 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3883 "seclang-parser.cc" +#line 3888 "seclang-parser.cc" break; case 228: // var: "VARIABLE_IP" "Dictionary element" -#line 2126 "seclang-parser.yy" +#line 2128 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3891 "seclang-parser.cc" +#line 3896 "seclang-parser.cc" break; case 229: // var: "VARIABLE_IP" "Dictionary element, selected by regexp" -#line 2130 "seclang-parser.yy" +#line 2132 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3899 "seclang-parser.cc" +#line 3904 "seclang-parser.cc" break; case 230: // var: "VARIABLE_IP" -#line 2134 "seclang-parser.yy" +#line 2136 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_NoDictElement()); } -#line 3907 "seclang-parser.cc" +#line 3912 "seclang-parser.cc" break; case 231: // var: "VARIABLE_GLOBAL" run_time_string -#line 2138 "seclang-parser.yy" +#line 2140 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3915 "seclang-parser.cc" +#line 3920 "seclang-parser.cc" break; case 232: // var: "VARIABLE_GLOBAL" "Dictionary element" -#line 2142 "seclang-parser.yy" +#line 2144 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3923 "seclang-parser.cc" +#line 3928 "seclang-parser.cc" break; case 233: // var: "VARIABLE_GLOBAL" "Dictionary element, selected by regexp" -#line 2146 "seclang-parser.yy" +#line 2148 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3931 "seclang-parser.cc" +#line 3936 "seclang-parser.cc" break; case 234: // var: "VARIABLE_GLOBAL" -#line 2150 "seclang-parser.yy" +#line 2152 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_NoDictElement()); } -#line 3939 "seclang-parser.cc" +#line 3944 "seclang-parser.cc" break; case 235: // var: "VARIABLE_USER" run_time_string -#line 2154 "seclang-parser.yy" +#line 2156 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3947 "seclang-parser.cc" +#line 3952 "seclang-parser.cc" break; case 236: // var: "VARIABLE_USER" "Dictionary element" -#line 2158 "seclang-parser.yy" +#line 2160 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3955 "seclang-parser.cc" +#line 3960 "seclang-parser.cc" break; case 237: // var: "VARIABLE_USER" "Dictionary element, selected by regexp" -#line 2162 "seclang-parser.yy" +#line 2164 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3963 "seclang-parser.cc" +#line 3968 "seclang-parser.cc" break; case 238: // var: "VARIABLE_USER" -#line 2166 "seclang-parser.yy" +#line 2168 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_NoDictElement()); } -#line 3971 "seclang-parser.cc" +#line 3976 "seclang-parser.cc" break; case 239: // var: "VARIABLE_TX" run_time_string -#line 2170 "seclang-parser.yy" +#line 2172 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3979 "seclang-parser.cc" +#line 3984 "seclang-parser.cc" break; case 240: // var: "VARIABLE_TX" "Dictionary element" -#line 2174 "seclang-parser.yy" +#line 2176 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3987 "seclang-parser.cc" +#line 3992 "seclang-parser.cc" break; case 241: // var: "VARIABLE_TX" "Dictionary element, selected by regexp" -#line 2178 "seclang-parser.yy" +#line 2180 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3995 "seclang-parser.cc" +#line 4000 "seclang-parser.cc" break; case 242: // var: "VARIABLE_TX" -#line 2182 "seclang-parser.yy" +#line 2184 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_NoDictElement()); } -#line 4003 "seclang-parser.cc" +#line 4008 "seclang-parser.cc" break; case 243: // var: "VARIABLE_SESSION" run_time_string -#line 2186 "seclang-parser.yy" +#line 2188 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 4011 "seclang-parser.cc" +#line 4016 "seclang-parser.cc" break; case 244: // var: "VARIABLE_SESSION" "Dictionary element" -#line 2190 "seclang-parser.yy" +#line 2192 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4019 "seclang-parser.cc" +#line 4024 "seclang-parser.cc" break; case 245: // var: "VARIABLE_SESSION" "Dictionary element, selected by regexp" -#line 2194 "seclang-parser.yy" +#line 2196 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4027 "seclang-parser.cc" +#line 4032 "seclang-parser.cc" break; case 246: // var: "VARIABLE_SESSION" -#line 2198 "seclang-parser.yy" +#line 2200 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_NoDictElement()); } -#line 4035 "seclang-parser.cc" +#line 4040 "seclang-parser.cc" break; case 247: // var: "Variable ARGS_NAMES" "Dictionary element" -#line 2202 "seclang-parser.yy" +#line 2204 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4043 "seclang-parser.cc" +#line 4048 "seclang-parser.cc" break; case 248: // var: "Variable ARGS_NAMES" "Dictionary element, selected by regexp" -#line 2206 "seclang-parser.yy" +#line 2208 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4051 "seclang-parser.cc" +#line 4056 "seclang-parser.cc" break; case 249: // var: "Variable ARGS_NAMES" -#line 2210 "seclang-parser.yy" +#line 2212 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_NoDictElement()); } -#line 4059 "seclang-parser.cc" +#line 4064 "seclang-parser.cc" break; case 250: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element" -#line 2214 "seclang-parser.yy" +#line 2216 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4067 "seclang-parser.cc" +#line 4072 "seclang-parser.cc" break; case 251: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element, selected by regexp" -#line 2218 "seclang-parser.yy" +#line 2220 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4075 "seclang-parser.cc" +#line 4080 "seclang-parser.cc" break; case 252: // var: VARIABLE_ARGS_GET_NAMES -#line 2222 "seclang-parser.yy" +#line 2224 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_NoDictElement()); } -#line 4083 "seclang-parser.cc" +#line 4088 "seclang-parser.cc" break; case 253: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element" -#line 2227 "seclang-parser.yy" +#line 2229 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4091 "seclang-parser.cc" +#line 4096 "seclang-parser.cc" break; case 254: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element, selected by regexp" -#line 2231 "seclang-parser.yy" +#line 2233 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4099 "seclang-parser.cc" +#line 4104 "seclang-parser.cc" break; case 255: // var: VARIABLE_ARGS_POST_NAMES -#line 2235 "seclang-parser.yy" +#line 2237 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_NoDictElement()); } -#line 4107 "seclang-parser.cc" +#line 4112 "seclang-parser.cc" break; case 256: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element" -#line 2240 "seclang-parser.yy" +#line 2242 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4115 "seclang-parser.cc" +#line 4120 "seclang-parser.cc" break; case 257: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2244 "seclang-parser.yy" +#line 2246 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4123 "seclang-parser.cc" +#line 4128 "seclang-parser.cc" break; case 258: // var: VARIABLE_REQUEST_HEADERS_NAMES -#line 2248 "seclang-parser.yy" +#line 2250 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_NoDictElement()); } -#line 4131 "seclang-parser.cc" +#line 4136 "seclang-parser.cc" break; case 259: // var: VARIABLE_RESPONSE_CONTENT_TYPE -#line 2253 "seclang-parser.yy" +#line 2255 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentType()); } -#line 4139 "seclang-parser.cc" +#line 4144 "seclang-parser.cc" break; case 260: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element" -#line 2258 "seclang-parser.yy" +#line 2260 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4147 "seclang-parser.cc" +#line 4152 "seclang-parser.cc" break; case 261: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2262 "seclang-parser.yy" +#line 2264 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4155 "seclang-parser.cc" +#line 4160 "seclang-parser.cc" break; case 262: // var: VARIABLE_RESPONSE_HEADERS_NAMES -#line 2266 "seclang-parser.yy" +#line 2268 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_NoDictElement()); } -#line 4163 "seclang-parser.cc" +#line 4168 "seclang-parser.cc" break; case 263: // var: VARIABLE_ARGS_COMBINED_SIZE -#line 2270 "seclang-parser.yy" +#line 2272 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsCombinedSize()); } -#line 4171 "seclang-parser.cc" +#line 4176 "seclang-parser.cc" break; case 264: // var: "AUTH_TYPE" -#line 2274 "seclang-parser.yy" +#line 2276 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::AuthType()); } -#line 4179 "seclang-parser.cc" +#line 4184 "seclang-parser.cc" break; case 265: // var: "FILES_COMBINED_SIZE" -#line 2278 "seclang-parser.yy" +#line 2280 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesCombinedSize()); } -#line 4187 "seclang-parser.cc" +#line 4192 "seclang-parser.cc" break; case 266: // var: "FULL_REQUEST" -#line 2282 "seclang-parser.yy" +#line 2284 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequest()); } -#line 4195 "seclang-parser.cc" +#line 4200 "seclang-parser.cc" break; case 267: // var: "FULL_REQUEST_LENGTH" -#line 2286 "seclang-parser.yy" +#line 2288 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequestLength()); } -#line 4203 "seclang-parser.cc" +#line 4208 "seclang-parser.cc" break; case 268: // var: "INBOUND_DATA_ERROR" -#line 2290 "seclang-parser.yy" +#line 2292 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::InboundDataError()); } -#line 4211 "seclang-parser.cc" +#line 4216 "seclang-parser.cc" break; case 269: // var: "MATCHED_VAR" -#line 2294 "seclang-parser.yy" +#line 2296 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVar()); } -#line 4219 "seclang-parser.cc" +#line 4224 "seclang-parser.cc" break; case 270: // var: "MATCHED_VAR_NAME" -#line 2298 "seclang-parser.yy" +#line 2300 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarName()); } -#line 4227 "seclang-parser.cc" +#line 4232 "seclang-parser.cc" break; case 271: // var: VARIABLE_MULTIPART_BOUNDARY_QUOTED -#line 2302 "seclang-parser.yy" +#line 2304 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryQuoted()); } -#line 4235 "seclang-parser.cc" +#line 4240 "seclang-parser.cc" break; case 272: // var: VARIABLE_MULTIPART_BOUNDARY_WHITESPACE -#line 2306 "seclang-parser.yy" +#line 2308 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryWhiteSpace()); } -#line 4243 "seclang-parser.cc" +#line 4248 "seclang-parser.cc" break; case 273: // var: "MULTIPART_CRLF_LF_LINES" -#line 2310 "seclang-parser.yy" +#line 2312 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartCrlfLFLines()); } -#line 4251 "seclang-parser.cc" +#line 4256 "seclang-parser.cc" break; case 274: // var: "MULTIPART_DATA_AFTER" -#line 2314 "seclang-parser.yy" +#line 2316 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateAfter()); } -#line 4259 "seclang-parser.cc" +#line 4264 "seclang-parser.cc" break; case 275: // var: VARIABLE_MULTIPART_DATA_BEFORE -#line 2318 "seclang-parser.yy" +#line 2320 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateBefore()); } -#line 4267 "seclang-parser.cc" +#line 4272 "seclang-parser.cc" break; case 276: // var: "MULTIPART_FILE_LIMIT_EXCEEDED" -#line 2322 "seclang-parser.yy" +#line 2324 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartFileLimitExceeded()); } -#line 4275 "seclang-parser.cc" +#line 4280 "seclang-parser.cc" break; case 277: // var: "MULTIPART_HEADER_FOLDING" -#line 2326 "seclang-parser.yy" +#line 2328 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartHeaderFolding()); } -#line 4283 "seclang-parser.cc" +#line 4288 "seclang-parser.cc" break; case 278: // var: "MULTIPART_INVALID_HEADER_FOLDING" -#line 2330 "seclang-parser.yy" +#line 2332 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidHeaderFolding()); } -#line 4291 "seclang-parser.cc" +#line 4296 "seclang-parser.cc" break; case 279: // var: VARIABLE_MULTIPART_INVALID_PART -#line 2334 "seclang-parser.yy" +#line 2336 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidPart()); } -#line 4299 "seclang-parser.cc" +#line 4304 "seclang-parser.cc" break; case 280: // var: "MULTIPART_INVALID_QUOTING" -#line 2338 "seclang-parser.yy" +#line 2340 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidQuoting()); } -#line 4307 "seclang-parser.cc" +#line 4312 "seclang-parser.cc" break; case 281: // var: VARIABLE_MULTIPART_LF_LINE -#line 2342 "seclang-parser.yy" +#line 2344 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartLFLine()); } -#line 4315 "seclang-parser.cc" +#line 4320 "seclang-parser.cc" break; case 282: // var: VARIABLE_MULTIPART_MISSING_SEMICOLON -#line 2346 "seclang-parser.yy" +#line 2348 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4323 "seclang-parser.cc" +#line 4328 "seclang-parser.cc" break; case 283: // var: VARIABLE_MULTIPART_SEMICOLON_MISSING -#line 2350 "seclang-parser.yy" +#line 2352 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4331 "seclang-parser.cc" +#line 4336 "seclang-parser.cc" break; case 284: // var: "MULTIPART_STRICT_ERROR" -#line 2354 "seclang-parser.yy" +#line 2356 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartStrictError()); } -#line 4339 "seclang-parser.cc" +#line 4344 "seclang-parser.cc" break; case 285: // var: "MULTIPART_UNMATCHED_BOUNDARY" -#line 2358 "seclang-parser.yy" +#line 2360 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartUnmatchedBoundary()); } -#line 4347 "seclang-parser.cc" +#line 4352 "seclang-parser.cc" break; case 286: // var: "OUTBOUND_DATA_ERROR" -#line 2362 "seclang-parser.yy" +#line 2364 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::OutboundDataError()); } -#line 4355 "seclang-parser.cc" +#line 4360 "seclang-parser.cc" break; case 287: // var: "PATH_INFO" -#line 2366 "seclang-parser.yy" +#line 2368 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::PathInfo()); } -#line 4363 "seclang-parser.cc" +#line 4368 "seclang-parser.cc" break; case 288: // var: "QUERY_STRING" -#line 2370 "seclang-parser.yy" +#line 2372 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::QueryString()); } -#line 4371 "seclang-parser.cc" +#line 4376 "seclang-parser.cc" break; case 289: // var: "REMOTE_ADDR" -#line 2374 "seclang-parser.yy" +#line 2376 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteAddr()); } -#line 4379 "seclang-parser.cc" +#line 4384 "seclang-parser.cc" break; case 290: // var: "REMOTE_HOST" -#line 2378 "seclang-parser.yy" +#line 2380 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteHost()); } -#line 4387 "seclang-parser.cc" +#line 4392 "seclang-parser.cc" break; case 291: // var: "REMOTE_PORT" -#line 2382 "seclang-parser.yy" +#line 2384 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemotePort()); } -#line 4395 "seclang-parser.cc" +#line 4400 "seclang-parser.cc" break; case 292: // var: "REQBODY_ERROR" -#line 2386 "seclang-parser.yy" +#line 2388 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyError()); } -#line 4403 "seclang-parser.cc" +#line 4408 "seclang-parser.cc" break; case 293: // var: "REQBODY_ERROR_MSG" -#line 2390 "seclang-parser.yy" +#line 2392 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyErrorMsg()); } -#line 4411 "seclang-parser.cc" +#line 4416 "seclang-parser.cc" break; case 294: // var: "REQBODY_PROCESSOR" -#line 2394 "seclang-parser.yy" +#line 2396 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessor()); } -#line 4419 "seclang-parser.cc" +#line 4424 "seclang-parser.cc" break; case 295: // var: "REQBODY_PROCESSOR_ERROR" -#line 2398 "seclang-parser.yy" +#line 2400 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorError()); } -#line 4427 "seclang-parser.cc" +#line 4432 "seclang-parser.cc" break; case 296: // var: "REQBODY_PROCESSOR_ERROR_MSG" -#line 2402 "seclang-parser.yy" +#line 2404 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorErrorMsg()); } -#line 4435 "seclang-parser.cc" +#line 4440 "seclang-parser.cc" break; case 297: // var: "REQUEST_BASENAME" -#line 2406 "seclang-parser.yy" +#line 2408 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBasename()); } -#line 4443 "seclang-parser.cc" +#line 4448 "seclang-parser.cc" break; case 298: // var: "REQUEST_BODY" -#line 2410 "seclang-parser.yy" +#line 2412 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBody()); } -#line 4451 "seclang-parser.cc" +#line 4456 "seclang-parser.cc" break; case 299: // var: "REQUEST_BODY_LENGTH" -#line 2414 "seclang-parser.yy" +#line 2416 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBodyLength()); } -#line 4459 "seclang-parser.cc" +#line 4464 "seclang-parser.cc" break; case 300: // var: "REQUEST_FILENAME" -#line 2418 "seclang-parser.yy" +#line 2420 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestFilename()); } -#line 4467 "seclang-parser.cc" +#line 4472 "seclang-parser.cc" break; case 301: // var: "REQUEST_LINE" -#line 2422 "seclang-parser.yy" +#line 2424 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestLine()); } -#line 4475 "seclang-parser.cc" +#line 4480 "seclang-parser.cc" break; case 302: // var: "REQUEST_METHOD" -#line 2426 "seclang-parser.yy" +#line 2428 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestMethod()); } -#line 4483 "seclang-parser.cc" +#line 4488 "seclang-parser.cc" break; case 303: // var: "REQUEST_PROTOCOL" -#line 2430 "seclang-parser.yy" +#line 2432 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestProtocol()); } -#line 4491 "seclang-parser.cc" +#line 4496 "seclang-parser.cc" break; case 304: // var: "REQUEST_URI" -#line 2434 "seclang-parser.yy" +#line 2436 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURI()); } -#line 4499 "seclang-parser.cc" +#line 4504 "seclang-parser.cc" break; case 305: // var: "REQUEST_URI_RAW" -#line 2438 "seclang-parser.yy" +#line 2440 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURIRaw()); } -#line 4507 "seclang-parser.cc" +#line 4512 "seclang-parser.cc" break; case 306: // var: "RESPONSE_BODY" -#line 2442 "seclang-parser.yy" +#line 2444 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseBody()); } -#line 4515 "seclang-parser.cc" +#line 4520 "seclang-parser.cc" break; case 307: // var: "RESPONSE_CONTENT_LENGTH" -#line 2446 "seclang-parser.yy" +#line 2448 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentLength()); } -#line 4523 "seclang-parser.cc" +#line 4528 "seclang-parser.cc" break; case 308: // var: "RESPONSE_PROTOCOL" -#line 2450 "seclang-parser.yy" +#line 2452 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseProtocol()); } -#line 4531 "seclang-parser.cc" +#line 4536 "seclang-parser.cc" break; case 309: // var: "RESPONSE_STATUS" -#line 2454 "seclang-parser.yy" +#line 2456 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseStatus()); } -#line 4539 "seclang-parser.cc" +#line 4544 "seclang-parser.cc" break; case 310: // var: "SERVER_ADDR" -#line 2458 "seclang-parser.yy" +#line 2460 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerAddr()); } -#line 4547 "seclang-parser.cc" +#line 4552 "seclang-parser.cc" break; case 311: // var: "SERVER_NAME" -#line 2462 "seclang-parser.yy" +#line 2464 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerName()); } -#line 4555 "seclang-parser.cc" +#line 4560 "seclang-parser.cc" break; case 312: // var: "SERVER_PORT" -#line 2466 "seclang-parser.yy" +#line 2468 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerPort()); } -#line 4563 "seclang-parser.cc" +#line 4568 "seclang-parser.cc" break; case 313: // var: "SESSIONID" -#line 2470 "seclang-parser.yy" +#line 2472 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::SessionID()); } -#line 4571 "seclang-parser.cc" +#line 4576 "seclang-parser.cc" break; case 314: // var: "UNIQUE_ID" -#line 2474 "seclang-parser.yy" +#line 2476 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UniqueID()); } -#line 4579 "seclang-parser.cc" +#line 4584 "seclang-parser.cc" break; case 315: // var: "URLENCODED_ERROR" -#line 2478 "seclang-parser.yy" +#line 2480 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UrlEncodedError()); } -#line 4587 "seclang-parser.cc" +#line 4592 "seclang-parser.cc" break; case 316: // var: "USERID" -#line 2482 "seclang-parser.yy" +#line 2484 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UserID()); } -#line 4595 "seclang-parser.cc" +#line 4600 "seclang-parser.cc" break; case 317: // var: "VARIABLE_STATUS" -#line 2486 "seclang-parser.yy" +#line 2488 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4603 "seclang-parser.cc" +#line 4608 "seclang-parser.cc" break; case 318: // var: "VARIABLE_STATUS_LINE" -#line 2490 "seclang-parser.yy" +#line 2492 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4611 "seclang-parser.cc" +#line 4616 "seclang-parser.cc" break; case 319: // var: "WEBAPPID" -#line 2494 "seclang-parser.yy" +#line 2496 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::WebAppId()); } -#line 4619 "seclang-parser.cc" +#line 4624 "seclang-parser.cc" break; case 320: // var: "RUN_TIME_VAR_DUR" -#line 2498 "seclang-parser.yy" +#line 2500 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Duration(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4630 "seclang-parser.cc" +#line 4635 "seclang-parser.cc" break; case 321: // var: "RUN_TIME_VAR_BLD" -#line 2506 "seclang-parser.yy" +#line 2508 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new ModsecBuild(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4641 "seclang-parser.cc" +#line 4646 "seclang-parser.cc" break; case 322: // var: "RUN_TIME_VAR_HSV" -#line 2513 "seclang-parser.yy" +#line 2515 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new HighestSeverity(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4652 "seclang-parser.cc" +#line 4657 "seclang-parser.cc" break; case 323: // var: "RUN_TIME_VAR_REMOTE_USER" -#line 2520 "seclang-parser.yy" +#line 2522 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new RemoteUser(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4663 "seclang-parser.cc" +#line 4668 "seclang-parser.cc" break; case 324: // var: "RUN_TIME_VAR_TIME" -#line 2527 "seclang-parser.yy" +#line 2529 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Time(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4674 "seclang-parser.cc" +#line 4679 "seclang-parser.cc" break; case 325: // var: "RUN_TIME_VAR_TIME_DAY" -#line 2534 "seclang-parser.yy" +#line 2536 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4685 "seclang-parser.cc" +#line 4690 "seclang-parser.cc" break; case 326: // var: "RUN_TIME_VAR_TIME_EPOCH" -#line 2541 "seclang-parser.yy" +#line 2543 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeEpoch(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4696 "seclang-parser.cc" +#line 4701 "seclang-parser.cc" break; case 327: // var: "RUN_TIME_VAR_TIME_HOUR" -#line 2548 "seclang-parser.yy" +#line 2550 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeHour(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4707 "seclang-parser.cc" +#line 4712 "seclang-parser.cc" break; case 328: // var: "RUN_TIME_VAR_TIME_MIN" -#line 2555 "seclang-parser.yy" +#line 2557 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMin(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4718 "seclang-parser.cc" +#line 4723 "seclang-parser.cc" break; case 329: // var: "RUN_TIME_VAR_TIME_MON" -#line 2562 "seclang-parser.yy" +#line 2564 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMon(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4729 "seclang-parser.cc" +#line 4734 "seclang-parser.cc" break; case 330: // var: "RUN_TIME_VAR_TIME_SEC" -#line 2569 "seclang-parser.yy" +#line 2571 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeSec(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4740 "seclang-parser.cc" +#line 4745 "seclang-parser.cc" break; case 331: // var: "RUN_TIME_VAR_TIME_WDAY" -#line 2576 "seclang-parser.yy" +#line 2578 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeWDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4751 "seclang-parser.cc" +#line 4756 "seclang-parser.cc" break; case 332: // var: "RUN_TIME_VAR_TIME_YEAR" -#line 2583 "seclang-parser.yy" +#line 2585 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeYear(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4762 "seclang-parser.cc" +#line 4767 "seclang-parser.cc" break; case 333: // act: "Accuracy" -#line 2593 "seclang-parser.yy" +#line 2595 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Accuracy(yystack_[0].value.as < std::string > ())); } -#line 4770 "seclang-parser.cc" +#line 4775 "seclang-parser.cc" break; case 334: // act: "Allow" -#line 2597 "seclang-parser.yy" +#line 2599 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Allow(yystack_[0].value.as < std::string > ())); } -#line 4778 "seclang-parser.cc" +#line 4783 "seclang-parser.cc" break; case 335: // act: "Append" -#line 2601 "seclang-parser.yy" +#line 2603 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Append", yystack_[1].location); } -#line 4786 "seclang-parser.cc" +#line 4791 "seclang-parser.cc" break; case 336: // act: "AuditLog" -#line 2605 "seclang-parser.yy" +#line 2607 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::AuditLog(yystack_[0].value.as < std::string > ())); } -#line 4794 "seclang-parser.cc" +#line 4799 "seclang-parser.cc" break; case 337: // act: "Block" -#line 2609 "seclang-parser.yy" +#line 2611 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Block(yystack_[0].value.as < std::string > ())); } -#line 4802 "seclang-parser.cc" +#line 4807 "seclang-parser.cc" break; case 338: // act: "Capture" -#line 2613 "seclang-parser.yy" +#line 2615 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Capture(yystack_[0].value.as < std::string > ())); } -#line 4810 "seclang-parser.cc" +#line 4815 "seclang-parser.cc" break; case 339: // act: "Chain" -#line 2617 "seclang-parser.yy" +#line 2619 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Chain(yystack_[0].value.as < std::string > ())); } -#line 4818 "seclang-parser.cc" +#line 4823 "seclang-parser.cc" break; case 340: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_ON" -#line 2621 "seclang-parser.yy" +#line 2623 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4827 "seclang-parser.cc" +#line 4832 "seclang-parser.cc" break; case 341: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_OFF" -#line 2626 "seclang-parser.yy" +#line 2628 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4836 "seclang-parser.cc" +#line 4841 "seclang-parser.cc" break; case 342: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_RELEVANT_ONLY" -#line 2631 "seclang-parser.yy" +#line 2633 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4845 "seclang-parser.cc" +#line 4850 "seclang-parser.cc" break; case 343: // act: "ACTION_CTL_AUDIT_LOG_PARTS" -#line 2636 "seclang-parser.yy" +#line 2638 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::AuditLogParts(yystack_[0].value.as < std::string > ())); } -#line 4853 "seclang-parser.cc" +#line 4858 "seclang-parser.cc" break; case 344: // act: "ACTION_CTL_BDY_JSON" -#line 2640 "seclang-parser.yy" +#line 2642 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorJSON(yystack_[0].value.as < std::string > ())); } -#line 4861 "seclang-parser.cc" +#line 4866 "seclang-parser.cc" break; case 345: // act: "ACTION_CTL_BDY_XML" -#line 2644 "seclang-parser.yy" +#line 2646 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorXML(yystack_[0].value.as < std::string > ())); } -#line 4869 "seclang-parser.cc" +#line 4874 "seclang-parser.cc" break; case 346: // act: "ACTION_CTL_BDY_URLENCODED" -#line 2648 "seclang-parser.yy" +#line 2650 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorURLENCODED(yystack_[0].value.as < std::string > ())); } -#line 4877 "seclang-parser.cc" +#line 4882 "seclang-parser.cc" break; case 347: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_ON" -#line 2652 "seclang-parser.yy" +#line 2654 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4886 "seclang-parser.cc" +#line 4891 "seclang-parser.cc" break; case 348: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_OFF" -#line 2657 "seclang-parser.yy" +#line 2659 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4895 "seclang-parser.cc" +#line 4900 "seclang-parser.cc" break; case 349: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_ON" -#line 2662 "seclang-parser.yy" +#line 2664 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "true")); } -#line 4903 "seclang-parser.cc" +#line 4908 "seclang-parser.cc" break; case 350: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_OFF" -#line 2666 "seclang-parser.yy" +#line 2668 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "false")); } -#line 4911 "seclang-parser.cc" +#line 4916 "seclang-parser.cc" break; case 351: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_ON" -#line 2670 "seclang-parser.yy" +#line 2672 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=on")); } -#line 4919 "seclang-parser.cc" +#line 4924 "seclang-parser.cc" break; case 352: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_OFF" -#line 2674 "seclang-parser.yy" +#line 2676 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=off")); } -#line 4927 "seclang-parser.cc" +#line 4932 "seclang-parser.cc" break; case 353: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_DETC" -#line 2678 "seclang-parser.yy" +#line 2680 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=detectiononly")); } -#line 4935 "seclang-parser.cc" +#line 4940 "seclang-parser.cc" break; case 354: // act: "ACTION_CTL_RULE_REMOVE_BY_ID" -#line 2682 "seclang-parser.yy" +#line 2684 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveById(yystack_[0].value.as < std::string > ())); } -#line 4943 "seclang-parser.cc" +#line 4948 "seclang-parser.cc" break; case 355: // act: "ACTION_CTL_RULE_REMOVE_BY_TAG" -#line 2686 "seclang-parser.yy" +#line 2688 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveByTag(yystack_[0].value.as < std::string > ())); } -#line 4951 "seclang-parser.cc" +#line 4956 "seclang-parser.cc" break; case 356: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" -#line 2690 "seclang-parser.yy" +#line 2692 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetById(yystack_[0].value.as < std::string > ())); } -#line 4959 "seclang-parser.cc" +#line 4964 "seclang-parser.cc" break; case 357: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" -#line 2694 "seclang-parser.yy" +#line 2696 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetByTag(yystack_[0].value.as < std::string > ())); } -#line 4967 "seclang-parser.cc" +#line 4972 "seclang-parser.cc" break; case 358: // act: "Deny" -#line 2698 "seclang-parser.yy" +#line 2700 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Deny(yystack_[0].value.as < std::string > ())); } -#line 4975 "seclang-parser.cc" +#line 4980 "seclang-parser.cc" break; case 359: // act: "DeprecateVar" -#line 2702 "seclang-parser.yy" +#line 2704 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[1].location); } -#line 4983 "seclang-parser.cc" +#line 4988 "seclang-parser.cc" break; case 360: // act: "Drop" -#line 2706 "seclang-parser.yy" +#line 2708 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Drop(yystack_[0].value.as < std::string > ())); } -#line 4991 "seclang-parser.cc" +#line 4996 "seclang-parser.cc" break; case 361: // act: "Exec" -#line 2710 "seclang-parser.yy" +#line 2712 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Exec(yystack_[0].value.as < std::string > ())); } -#line 4999 "seclang-parser.cc" +#line 5004 "seclang-parser.cc" break; case 362: // act: "ExpireVar" -#line 2714 "seclang-parser.yy" +#line 2716 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("ExpireVar", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[0].value.as < std::string > ())); } -#line 5008 "seclang-parser.cc" +#line 5013 "seclang-parser.cc" break; case 363: // act: "Id" -#line 2719 "seclang-parser.yy" +#line 2721 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::RuleId(yystack_[0].value.as < std::string > ())); } -#line 5016 "seclang-parser.cc" +#line 5021 "seclang-parser.cc" break; case 364: // act: "InitCol" run_time_string -#line 2723 "seclang-parser.yy" +#line 2725 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::InitCol(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5024 "seclang-parser.cc" +#line 5029 "seclang-parser.cc" break; case 365: // act: "LogData" run_time_string -#line 2727 "seclang-parser.yy" +#line 2729 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::LogData(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5032 "seclang-parser.cc" +#line 5037 "seclang-parser.cc" break; case 366: // act: "Log" -#line 2731 "seclang-parser.yy" +#line 2733 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Log(yystack_[0].value.as < std::string > ())); } -#line 5040 "seclang-parser.cc" +#line 5045 "seclang-parser.cc" break; case 367: // act: "Maturity" -#line 2735 "seclang-parser.yy" +#line 2737 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Maturity(yystack_[0].value.as < std::string > ())); } -#line 5048 "seclang-parser.cc" +#line 5053 "seclang-parser.cc" break; case 368: // act: "Msg" run_time_string -#line 2739 "seclang-parser.yy" +#line 2741 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Msg(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5056 "seclang-parser.cc" +#line 5061 "seclang-parser.cc" break; case 369: // act: "MultiMatch" -#line 2743 "seclang-parser.yy" +#line 2745 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::MultiMatch(yystack_[0].value.as < std::string > ())); } -#line 5064 "seclang-parser.cc" +#line 5069 "seclang-parser.cc" break; case 370: // act: "NoAuditLog" -#line 2747 "seclang-parser.yy" +#line 2749 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoAuditLog(yystack_[0].value.as < std::string > ())); } -#line 5072 "seclang-parser.cc" +#line 5077 "seclang-parser.cc" break; case 371: // act: "NoLog" -#line 2751 "seclang-parser.yy" +#line 2753 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoLog(yystack_[0].value.as < std::string > ())); } -#line 5080 "seclang-parser.cc" +#line 5085 "seclang-parser.cc" break; case 372: // act: "Pass" -#line 2755 "seclang-parser.yy" +#line 2757 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Pass(yystack_[0].value.as < std::string > ())); } -#line 5088 "seclang-parser.cc" +#line 5093 "seclang-parser.cc" break; case 373: // act: "Pause" -#line 2759 "seclang-parser.yy" +#line 2761 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Pause", yystack_[1].location); } -#line 5096 "seclang-parser.cc" +#line 5101 "seclang-parser.cc" break; case 374: // act: "Phase" -#line 2763 "seclang-parser.yy" +#line 2765 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Phase(yystack_[0].value.as < std::string > ())); } -#line 5104 "seclang-parser.cc" +#line 5109 "seclang-parser.cc" break; case 375: // act: "Prepend" -#line 2767 "seclang-parser.yy" +#line 2769 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Prepend", yystack_[1].location); } -#line 5112 "seclang-parser.cc" +#line 5117 "seclang-parser.cc" break; case 376: // act: "Proxy" -#line 2771 "seclang-parser.yy" +#line 2773 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Proxy", yystack_[1].location); } -#line 5120 "seclang-parser.cc" +#line 5125 "seclang-parser.cc" break; case 377: // act: "Redirect" run_time_string -#line 2775 "seclang-parser.yy" +#line 2777 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Redirect(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5128 "seclang-parser.cc" +#line 5133 "seclang-parser.cc" break; case 378: // act: "Rev" -#line 2779 "seclang-parser.yy" +#line 2781 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Rev(yystack_[0].value.as < std::string > ())); } -#line 5136 "seclang-parser.cc" +#line 5141 "seclang-parser.cc" break; case 379: // act: "SanitiseArg" -#line 2783 "seclang-parser.yy" +#line 2785 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[1].location); } -#line 5144 "seclang-parser.cc" +#line 5149 "seclang-parser.cc" break; case 380: // act: "SanitiseMatched" -#line 2787 "seclang-parser.yy" +#line 2789 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[1].location); } -#line 5152 "seclang-parser.cc" +#line 5157 "seclang-parser.cc" break; case 381: // act: "SanitiseMatchedBytes" -#line 2791 "seclang-parser.yy" +#line 2793 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[1].location); } -#line 5160 "seclang-parser.cc" +#line 5165 "seclang-parser.cc" break; case 382: // act: "SanitiseRequestHeader" -#line 2795 "seclang-parser.yy" +#line 2797 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[1].location); } -#line 5168 "seclang-parser.cc" +#line 5173 "seclang-parser.cc" break; case 383: // act: "SanitiseResponseHeader" -#line 2799 "seclang-parser.yy" +#line 2801 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[1].location); } -#line 5176 "seclang-parser.cc" +#line 5181 "seclang-parser.cc" break; case 384: // act: "SetEnv" run_time_string -#line 2803 "seclang-parser.yy" +#line 2805 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetENV(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5184 "seclang-parser.cc" +#line 5189 "seclang-parser.cc" break; case 385: // act: "SetRsc" run_time_string -#line 2807 "seclang-parser.yy" +#line 2809 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetRSC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5192 "seclang-parser.cc" +#line 5197 "seclang-parser.cc" break; case 386: // act: "SetSid" run_time_string -#line 2811 "seclang-parser.yy" +#line 2813 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetSID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5200 "seclang-parser.cc" +#line 5205 "seclang-parser.cc" break; case 387: // act: "SetUID" run_time_string -#line 2815 "seclang-parser.yy" +#line 2817 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetUID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5208 "seclang-parser.cc" +#line 5213 "seclang-parser.cc" break; case 388: // act: "SetVar" setvar_action -#line 2819 "seclang-parser.yy" +#line 2821 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); } -#line 5216 "seclang-parser.cc" +#line 5221 "seclang-parser.cc" break; case 389: // act: "Severity" -#line 2823 "seclang-parser.yy" +#line 2825 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Severity(yystack_[0].value.as < std::string > ())); } -#line 5224 "seclang-parser.cc" +#line 5229 "seclang-parser.cc" break; case 390: // act: "Skip" -#line 2827 "seclang-parser.yy" +#line 2829 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Skip(yystack_[0].value.as < std::string > ())); } -#line 5232 "seclang-parser.cc" +#line 5237 "seclang-parser.cc" break; case 391: // act: "SkipAfter" -#line 2831 "seclang-parser.yy" +#line 2833 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SkipAfter(yystack_[0].value.as < std::string > ())); } -#line 5240 "seclang-parser.cc" +#line 5245 "seclang-parser.cc" break; case 392: // act: "Status" -#line 2835 "seclang-parser.yy" +#line 2837 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::data::Status(yystack_[0].value.as < std::string > ())); } -#line 5248 "seclang-parser.cc" +#line 5253 "seclang-parser.cc" break; case 393: // act: "Tag" run_time_string -#line 2839 "seclang-parser.yy" +#line 2841 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Tag(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5256 "seclang-parser.cc" +#line 5261 "seclang-parser.cc" break; case 394: // act: "Ver" -#line 2843 "seclang-parser.yy" +#line 2845 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Ver(yystack_[0].value.as < std::string > ())); } -#line 5264 "seclang-parser.cc" +#line 5269 "seclang-parser.cc" break; case 395: // act: "xmlns" -#line 2847 "seclang-parser.yy" +#line 2849 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::XmlNS(yystack_[0].value.as < std::string > ())); } -#line 5272 "seclang-parser.cc" +#line 5277 "seclang-parser.cc" break; case 396: // act: "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" -#line 2851 "seclang-parser.yy" +#line 2853 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityZero7bit(yystack_[0].value.as < std::string > ())); } -#line 5280 "seclang-parser.cc" +#line 5285 "seclang-parser.cc" break; case 397: // act: "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" -#line 2855 "seclang-parser.yy" +#line 2857 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityOdd7bit(yystack_[0].value.as < std::string > ())); } -#line 5288 "seclang-parser.cc" +#line 5293 "seclang-parser.cc" break; case 398: // act: "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" -#line 2859 "seclang-parser.yy" +#line 2861 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityEven7bit(yystack_[0].value.as < std::string > ())); } -#line 5296 "seclang-parser.cc" +#line 5301 "seclang-parser.cc" break; case 399: // act: "ACTION_TRANSFORMATION_SQL_HEX_DECODE" -#line 2863 "seclang-parser.yy" +#line 2865 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::SqlHexDecode(yystack_[0].value.as < std::string > ())); } -#line 5304 "seclang-parser.cc" +#line 5309 "seclang-parser.cc" break; case 400: // act: "ACTION_TRANSFORMATION_BASE_64_ENCODE" -#line 2867 "seclang-parser.yy" +#line 2869 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Encode(yystack_[0].value.as < std::string > ())); } -#line 5312 "seclang-parser.cc" +#line 5317 "seclang-parser.cc" break; case 401: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE" -#line 2871 "seclang-parser.yy" +#line 2873 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Decode(yystack_[0].value.as < std::string > ())); } -#line 5320 "seclang-parser.cc" +#line 5325 "seclang-parser.cc" break; case 402: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" -#line 2875 "seclang-parser.yy" +#line 2877 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64DecodeExt(yystack_[0].value.as < std::string > ())); } -#line 5328 "seclang-parser.cc" +#line 5333 "seclang-parser.cc" break; case 403: // act: "ACTION_TRANSFORMATION_CMD_LINE" -#line 2879 "seclang-parser.yy" +#line 2881 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CmdLine(yystack_[0].value.as < std::string > ())); } -#line 5336 "seclang-parser.cc" +#line 5341 "seclang-parser.cc" break; case 404: // act: "ACTION_TRANSFORMATION_SHA1" -#line 2883 "seclang-parser.yy" +#line 2885 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Sha1(yystack_[0].value.as < std::string > ())); } -#line 5344 "seclang-parser.cc" +#line 5349 "seclang-parser.cc" break; case 405: // act: "ACTION_TRANSFORMATION_MD5" -#line 2887 "seclang-parser.yy" +#line 2889 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Md5(yystack_[0].value.as < std::string > ())); } -#line 5352 "seclang-parser.cc" +#line 5357 "seclang-parser.cc" break; case 406: // act: "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" -#line 2891 "seclang-parser.yy" +#line 2893 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::EscapeSeqDecode(yystack_[0].value.as < std::string > ())); } -#line 5360 "seclang-parser.cc" +#line 5365 "seclang-parser.cc" break; case 407: // act: "ACTION_TRANSFORMATION_HEX_ENCODE" -#line 2895 "seclang-parser.yy" +#line 2897 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexEncode(yystack_[0].value.as < std::string > ())); } -#line 5368 "seclang-parser.cc" +#line 5373 "seclang-parser.cc" break; case 408: // act: "ACTION_TRANSFORMATION_HEX_DECODE" -#line 2899 "seclang-parser.yy" +#line 2901 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexDecode(yystack_[0].value.as < std::string > ())); } -#line 5376 "seclang-parser.cc" +#line 5381 "seclang-parser.cc" break; case 409: // act: "ACTION_TRANSFORMATION_LOWERCASE" -#line 2903 "seclang-parser.yy" +#line 2905 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::LowerCase(yystack_[0].value.as < std::string > ())); } -#line 5384 "seclang-parser.cc" +#line 5389 "seclang-parser.cc" break; - case 410: // act: "ACTION_TRANSFORMATION_UPPERCASE" -#line 2907 "seclang-parser.yy" + case 410: // act: "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" +#line 2909 "seclang-parser.yy" + { + ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::PhpArgsNames(yystack_[0].value.as < std::string > ())); + } +#line 5397 "seclang-parser.cc" + break; + + case 411: // act: "ACTION_TRANSFORMATION_UPPERCASE" +#line 2913 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UpperCase(yystack_[0].value.as < std::string > ())); } -#line 5392 "seclang-parser.cc" +#line 5405 "seclang-parser.cc" break; - case 411: // act: "ACTION_TRANSFORMATION_URL_DECODE_UNI" -#line 2911 "seclang-parser.yy" + case 412: // act: "ACTION_TRANSFORMATION_URL_DECODE_UNI" +#line 2917 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecodeUni(yystack_[0].value.as < std::string > ())); } -#line 5400 "seclang-parser.cc" +#line 5413 "seclang-parser.cc" break; - case 412: // act: "ACTION_TRANSFORMATION_URL_DECODE" -#line 2915 "seclang-parser.yy" + case 413: // act: "ACTION_TRANSFORMATION_URL_DECODE" +#line 2921 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecode(yystack_[0].value.as < std::string > ())); } -#line 5408 "seclang-parser.cc" +#line 5421 "seclang-parser.cc" break; - case 413: // act: "ACTION_TRANSFORMATION_URL_ENCODE" -#line 2919 "seclang-parser.yy" + case 414: // act: "ACTION_TRANSFORMATION_URL_ENCODE" +#line 2925 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlEncode(yystack_[0].value.as < std::string > ())); } -#line 5416 "seclang-parser.cc" +#line 5429 "seclang-parser.cc" break; - case 414: // act: "ACTION_TRANSFORMATION_NONE" -#line 2923 "seclang-parser.yy" + case 415: // act: "ACTION_TRANSFORMATION_NONE" +#line 2929 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::None(yystack_[0].value.as < std::string > ())); } -#line 5424 "seclang-parser.cc" +#line 5437 "seclang-parser.cc" break; - case 415: // act: "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" -#line 2927 "seclang-parser.yy" + case 416: // act: "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" +#line 2933 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CompressWhitespace(yystack_[0].value.as < std::string > ())); } -#line 5432 "seclang-parser.cc" +#line 5445 "seclang-parser.cc" break; - case 416: // act: "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" -#line 2931 "seclang-parser.yy" + case 417: // act: "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" +#line 2937 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveWhitespace(yystack_[0].value.as < std::string > ())); } -#line 5440 "seclang-parser.cc" +#line 5453 "seclang-parser.cc" break; - case 417: // act: "ACTION_TRANSFORMATION_REPLACE_NULLS" -#line 2935 "seclang-parser.yy" + case 418: // act: "ACTION_TRANSFORMATION_REPLACE_NULLS" +#line 2941 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceNulls(yystack_[0].value.as < std::string > ())); } -#line 5448 "seclang-parser.cc" +#line 5461 "seclang-parser.cc" break; - case 418: // act: "ACTION_TRANSFORMATION_REMOVE_NULLS" -#line 2939 "seclang-parser.yy" + case 419: // act: "ACTION_TRANSFORMATION_REMOVE_NULLS" +#line 2945 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveNulls(yystack_[0].value.as < std::string > ())); } -#line 5456 "seclang-parser.cc" +#line 5469 "seclang-parser.cc" break; - case 419: // act: "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" -#line 2943 "seclang-parser.yy" + case 420: // act: "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" +#line 2949 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HtmlEntityDecode(yystack_[0].value.as < std::string > ())); } -#line 5464 "seclang-parser.cc" +#line 5477 "seclang-parser.cc" break; - case 420: // act: "ACTION_TRANSFORMATION_JS_DECODE" -#line 2947 "seclang-parser.yy" + case 421: // act: "ACTION_TRANSFORMATION_JS_DECODE" +#line 2953 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::JsDecode(yystack_[0].value.as < std::string > ())); } -#line 5472 "seclang-parser.cc" +#line 5485 "seclang-parser.cc" break; - case 421: // act: "ACTION_TRANSFORMATION_CSS_DECODE" -#line 2951 "seclang-parser.yy" + case 422: // act: "ACTION_TRANSFORMATION_CSS_DECODE" +#line 2957 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CssDecode(yystack_[0].value.as < std::string > ())); } -#line 5480 "seclang-parser.cc" +#line 5493 "seclang-parser.cc" break; - case 422: // act: "ACTION_TRANSFORMATION_TRIM" -#line 2955 "seclang-parser.yy" + case 423: // act: "ACTION_TRANSFORMATION_TRIM" +#line 2961 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Trim(yystack_[0].value.as < std::string > ())); } -#line 5488 "seclang-parser.cc" +#line 5501 "seclang-parser.cc" break; - case 423: // act: "ACTION_TRANSFORMATION_TRIM_LEFT" -#line 2959 "seclang-parser.yy" + case 424: // act: "ACTION_TRANSFORMATION_TRIM_LEFT" +#line 2965 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimLeft(yystack_[0].value.as < std::string > ())); } -#line 5496 "seclang-parser.cc" +#line 5509 "seclang-parser.cc" break; - case 424: // act: "ACTION_TRANSFORMATION_TRIM_RIGHT" -#line 2963 "seclang-parser.yy" + case 425: // act: "ACTION_TRANSFORMATION_TRIM_RIGHT" +#line 2969 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimRight(yystack_[0].value.as < std::string > ())); } -#line 5504 "seclang-parser.cc" +#line 5517 "seclang-parser.cc" break; - case 425: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" -#line 2967 "seclang-parser.yy" + case 426: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" +#line 2973 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePathWin(yystack_[0].value.as < std::string > ())); } -#line 5512 "seclang-parser.cc" +#line 5525 "seclang-parser.cc" break; - case 426: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH" -#line 2971 "seclang-parser.yy" + case 427: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH" +#line 2977 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePath(yystack_[0].value.as < std::string > ())); } -#line 5520 "seclang-parser.cc" +#line 5533 "seclang-parser.cc" break; - case 427: // act: "ACTION_TRANSFORMATION_LENGTH" -#line 2975 "seclang-parser.yy" + case 428: // act: "ACTION_TRANSFORMATION_LENGTH" +#line 2981 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Length(yystack_[0].value.as < std::string > ())); } -#line 5528 "seclang-parser.cc" +#line 5541 "seclang-parser.cc" break; - case 428: // act: "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" -#line 2979 "seclang-parser.yy" + case 429: // act: "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" +#line 2985 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Utf8ToUnicode(yystack_[0].value.as < std::string > ())); } -#line 5536 "seclang-parser.cc" +#line 5549 "seclang-parser.cc" break; - case 429: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" -#line 2983 "seclang-parser.yy" + case 430: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" +#line 2989 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveCommentsChar(yystack_[0].value.as < std::string > ())); } -#line 5544 "seclang-parser.cc" +#line 5557 "seclang-parser.cc" break; - case 430: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS" -#line 2987 "seclang-parser.yy" + case 431: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS" +#line 2993 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveComments(yystack_[0].value.as < std::string > ())); } -#line 5552 "seclang-parser.cc" +#line 5565 "seclang-parser.cc" break; - case 431: // act: "ACTION_TRANSFORMATION_REPLACE_COMMENTS" -#line 2991 "seclang-parser.yy" + case 432: // act: "ACTION_TRANSFORMATION_REPLACE_COMMENTS" +#line 2997 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceComments(yystack_[0].value.as < std::string > ())); } -#line 5560 "seclang-parser.cc" +#line 5573 "seclang-parser.cc" break; - case 432: // setvar_action: "NOT" var -#line 2998 "seclang-parser.yy" + case 433: // setvar_action: "NOT" var +#line 3004 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5568 "seclang-parser.cc" +#line 5581 "seclang-parser.cc" break; - case 433: // setvar_action: var -#line 3002 "seclang-parser.yy" + case 434: // setvar_action: var +#line 3008 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5576 "seclang-parser.cc" +#line 5589 "seclang-parser.cc" break; - case 434: // setvar_action: var SETVAR_OPERATION_EQUALS run_time_string -#line 3006 "seclang-parser.yy" + case 435: // setvar_action: var SETVAR_OPERATION_EQUALS run_time_string +#line 3012 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5584 "seclang-parser.cc" +#line 5597 "seclang-parser.cc" break; - case 435: // setvar_action: var SETVAR_OPERATION_EQUALS_PLUS run_time_string -#line 3010 "seclang-parser.yy" + case 436: // setvar_action: var SETVAR_OPERATION_EQUALS_PLUS run_time_string +#line 3016 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5592 "seclang-parser.cc" +#line 5605 "seclang-parser.cc" break; - case 436: // setvar_action: var SETVAR_OPERATION_EQUALS_MINUS run_time_string -#line 3014 "seclang-parser.yy" + case 437: // setvar_action: var SETVAR_OPERATION_EQUALS_MINUS run_time_string +#line 3020 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5600 "seclang-parser.cc" +#line 5613 "seclang-parser.cc" break; - case 437: // run_time_string: run_time_string "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3021 "seclang-parser.yy" + case 438: // run_time_string: run_time_string "FREE_TEXT_QUOTE_MACRO_EXPANSION" +#line 3027 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendText(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5609 "seclang-parser.cc" +#line 5622 "seclang-parser.cc" break; - case 438: // run_time_string: run_time_string var -#line 3026 "seclang-parser.yy" + case 439: // run_time_string: run_time_string var +#line 3032 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5618 "seclang-parser.cc" +#line 5631 "seclang-parser.cc" break; - case 439: // run_time_string: "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3031 "seclang-parser.yy" + case 440: // run_time_string: "FREE_TEXT_QUOTE_MACRO_EXPANSION" +#line 3037 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendText(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5628 "seclang-parser.cc" +#line 5641 "seclang-parser.cc" break; - case 440: // run_time_string: var -#line 3037 "seclang-parser.yy" + case 441: // run_time_string: var +#line 3043 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5638 "seclang-parser.cc" +#line 5651 "seclang-parser.cc" break; -#line 5642 "seclang-parser.cc" +#line 5655 "seclang-parser.cc" default: break; @@ -5987,66 +6000,66 @@ namespace yy { } - const short seclang_parser::yypact_ninf_ = -422; + const short seclang_parser::yypact_ninf_ = -423; const signed char seclang_parser::yytable_ninf_ = -1; const short seclang_parser::yypact_[] = { - 2504, -422, -250, -422, -86, -422, -154, -422, -422, -422, - -422, -422, -274, -422, -422, -422, -422, -422, -286, -422, - -422, -422, -152, -147, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -145, -422, - -422, -146, -422, -141, -422, -136, -131, -422, -260, 2850, - 2850, -422, -422, -422, -422, -129, -299, -422, -422, -422, - 1148, 1148, 1148, 2850, -268, -127, -422, -422, -422, -125, - -422, -422, -422, -422, -422, -422, -422, -422, -422, 1148, - 2850, 2664, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, 2122, -256, -422, -422, -422, -422, - -422, -422, -422, -266, -422, -422, -422, -422, -123, -121, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - 2216, -422, 2216, -422, 2216, -422, -422, -422, -422, -422, - -422, -422, -422, 2216, -422, -422, -422, -422, -422, -422, - 2216, 2216, 2216, 2216, -422, -422, -422, -422, 2216, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, 3032, -422, 5, - -422, -422, -422, -422, -422, -422, 2546, 2546, -155, -153, - -151, -149, -144, -142, -139, -137, -135, -132, -130, -128, - -126, -124, -122, -120, -422, -118, -116, -114, -112, -422, - -422, -110, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -108, -422, -422, - -422, -422, -422, 50, -422, -422, -422, -106, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - 457, 546, 635, 968, 1057, -104, -102, 1480, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, 6, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, 1660, -422, -422, -422, -422, 2546, - -49, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 4, 3032, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, - -422, -422, -422, 2320, -422, -422, -422, -422, 2320, -422, - -422, 2320, -422, -422, 2320, -422, -422, 2320, -422, -422, - 2320, -422, -422, -422, -422, 9, 1571, 1990, 2216, 2216, - 2216, -422, -422, 2216, 2216, 2216, -422, 2216, 2216, 2216, - 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, - 2216, 2216, 2216, -422, 2216, 2216, 2216, 2216, -422, -422, - 2216, 2216, 2216, 2216, 2216, 2850, -422, 2320, -422, 2216, - 2216, 2216, -422, -422, -422, -422, -422, 2546, 2546, -422, - -422, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, -422, 2320, 2320, 2320, -422, -422 + 2508, -423, -251, -423, -86, -423, -157, -423, -423, -423, + -423, -423, -275, -423, -423, -423, -423, -423, -287, -423, + -423, -423, -154, -152, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -147, -423, + -423, -148, -423, -143, -423, -144, -132, -423, -261, 2856, + 2856, -423, -423, -423, -423, -130, -300, -423, -423, -423, + 1150, 1150, 1150, 2856, -269, -128, -423, -423, -423, -126, + -423, -423, -423, -423, -423, -423, -423, -423, -423, 1150, + 2856, 2669, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, 2126, -257, -423, -423, -423, -423, + -423, -423, -423, -267, -423, -423, -423, -423, -124, -122, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + 2220, -423, 2220, -423, 2220, -423, -423, -423, -423, -423, + -423, -423, -423, 2220, -423, -423, -423, -423, -423, -423, + 2220, 2220, 2220, 2220, -423, -423, -423, -423, 2220, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, 3039, -423, + 5, -423, -423, -423, -423, -423, -423, 2551, 2551, -156, + -153, -151, -149, -146, -142, -139, -137, -135, -131, -129, + -127, -125, -123, -121, -119, -423, -117, -115, -113, -111, + -423, -423, -109, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -107, -423, + -423, -423, -423, -423, 50, -423, -423, -423, -105, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, 458, 547, 636, 970, 1059, -103, -101, 1483, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, 6, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, 1663, -423, -423, -423, -423, + 2551, -49, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, 4, 3039, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, 2325, -423, -423, -423, -423, 2325, + -423, -423, 2325, -423, -423, 2325, -423, -423, 2325, -423, + -423, 2325, -423, -423, -423, -423, 9, 1574, 1994, 2220, + 2220, 2220, -423, -423, 2220, 2220, 2220, -423, 2220, 2220, + 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, + 2220, 2220, 2220, 2220, -423, 2220, 2220, 2220, 2220, -423, + -423, 2220, 2220, 2220, 2220, 2220, 2856, -423, 2325, -423, + 2220, 2220, 2220, -423, -423, -423, -423, -423, 2551, 2551, + -423, -423, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, 2325, + 2325, 2325, 2325, 2325, -423, 2325, 2325, 2325, -423, -423 }; const short @@ -6069,108 +6082,108 @@ namespace yy { 0, 366, 0, 367, 0, 369, 370, 371, 372, 373, 374, 375, 376, 0, 378, 379, 380, 381, 382, 383, 0, 0, 0, 0, 389, 390, 391, 392, 0, 400, - 401, 402, 403, 415, 421, 406, 407, 408, 419, 420, - 427, 409, 405, 414, 426, 425, 398, 397, 396, 430, - 429, 418, 416, 431, 417, 404, 399, 422, 423, 424, - 410, 413, 412, 411, 428, 394, 395, 0, 77, 30, - 32, 79, 109, 108, 137, 138, 0, 0, 165, 168, - 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, - 201, 204, 207, 210, 263, 252, 213, 249, 255, 264, - 265, 222, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 293, 292, - 296, 295, 294, 297, 299, 298, 300, 258, 301, 302, - 303, 305, 304, 226, 306, 307, 259, 262, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 319, 317, 318, - 230, 234, 242, 246, 238, 216, 219, 0, 321, 320, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 121, 155, 160, 122, 123, 124, 22, 21, 23, - 28, 27, 143, 144, 0, 154, 78, 1, 3, 0, - 433, 388, 353, 352, 351, 341, 340, 342, 348, 347, - 350, 349, 439, 440, 364, 365, 368, 377, 384, 385, - 386, 387, 393, 0, 0, 162, 161, 163, 164, 166, - 167, 169, 170, 172, 173, 175, 176, 178, 179, 181, - 182, 184, 185, 187, 188, 190, 191, 193, 194, 196, - 197, 199, 200, 202, 203, 205, 206, 208, 209, 250, - 251, 211, 212, 247, 248, 253, 254, 220, 221, 256, - 257, 224, 225, 223, 260, 261, 228, 229, 227, 232, - 233, 231, 240, 241, 239, 244, 245, 243, 236, 237, - 235, 214, 215, 217, 218, 0, 0, 0, 0, 0, - 0, 38, 39, 0, 0, 0, 73, 0, 0, 0, + 401, 402, 403, 416, 422, 406, 407, 408, 420, 421, + 428, 409, 410, 405, 415, 427, 426, 398, 397, 396, + 431, 430, 419, 417, 432, 418, 404, 399, 423, 424, + 425, 411, 414, 413, 412, 429, 394, 395, 0, 77, + 30, 32, 79, 109, 108, 137, 138, 0, 0, 165, + 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, + 198, 201, 204, 207, 210, 263, 252, 213, 249, 255, + 264, 265, 222, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 293, + 292, 296, 295, 294, 297, 299, 298, 300, 258, 301, + 302, 303, 305, 304, 226, 306, 307, 259, 262, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 319, 317, + 318, 230, 234, 242, 246, 238, 216, 219, 0, 321, + 320, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 121, 155, 160, 122, 123, 124, 22, 21, + 23, 28, 27, 143, 144, 0, 154, 78, 1, 3, + 0, 434, 388, 353, 352, 351, 341, 340, 342, 348, + 347, 350, 349, 440, 441, 364, 365, 368, 377, 384, + 385, 386, 387, 393, 0, 0, 162, 161, 163, 164, + 166, 167, 169, 170, 172, 173, 175, 176, 178, 179, + 181, 182, 184, 185, 187, 188, 190, 191, 193, 194, + 196, 197, 199, 200, 202, 203, 205, 206, 208, 209, + 250, 251, 211, 212, 247, 248, 253, 254, 220, 221, + 256, 257, 224, 225, 223, 260, 261, 228, 229, 227, + 232, 233, 231, 240, 241, 239, 244, 245, 243, 236, + 237, 235, 214, 215, 217, 218, 0, 0, 0, 0, + 0, 0, 38, 39, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 0, 40, 41, - 0, 0, 0, 0, 0, 76, 33, 35, 432, 0, - 0, 0, 437, 438, 29, 31, 156, 0, 0, 157, - 34, 36, 72, 56, 55, 57, 58, 43, 59, 52, - 60, 42, 61, 62, 63, 64, 65, 66, 67, 53, - 68, 69, 70, 71, 44, 45, 46, 47, 48, 49, - 50, 51, 54, 75, 434, 435, 436, 159, 158 + 0, 0, 0, 0, 37, 0, 0, 0, 0, 40, + 41, 0, 0, 0, 0, 0, 76, 33, 35, 433, + 0, 0, 0, 438, 439, 29, 31, 156, 0, 0, + 157, 34, 36, 72, 56, 55, 57, 58, 43, 59, + 52, 60, 42, 61, 62, 63, 64, 65, 66, 67, + 53, 68, 69, 70, 71, 44, 45, 46, 47, 48, + 49, 50, 51, 54, 75, 435, 436, 437, 159, 158 }; const short seclang_parser::yypgoto_[] = { - -422, -422, -71, -422, -46, -193, -422, -421, -422, -422, - -56, -285, -60, -340, -422, -133 + -423, -423, -71, -423, -46, -194, -423, -422, -423, -423, + -56, -286, -60, -341, -423, -133 }; const short seclang_parser::yydefgoto_[] = { - -1, 81, 82, 83, 208, 209, 475, 476, 84, 334, - 321, 322, 353, 210, 341, 354 + -1, 81, 82, 83, 209, 210, 476, 477, 84, 335, + 322, 323, 354, 211, 342, 355 }; const short seclang_parser::yytable_[] = { - 323, 323, 323, 214, 211, 324, 325, 364, 364, 355, - 338, 356, 436, 215, 363, 436, 490, 326, 94, 323, - 357, 95, 435, 335, 485, 96, 0, 358, 359, 360, - 361, 91, 92, 0, 336, 362, 93, 327, 328, 345, - 346, 0, 329, 111, 347, 112, 113, 342, 0, 343, - 344, 479, 480, 481, 340, 85, 86, 87, 88, 0, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, - 413, 89, 90, 97, 98, 0, 365, 366, 99, 100, - 101, 102, 103, 104, 105, 106, 0, 418, 421, 424, - 427, 430, 107, 108, 109, 110, 212, 213, 330, 331, - 332, 333, 348, 349, 350, 351, 367, 368, 369, 370, - 371, 372, 373, 374, 0, 0, 0, 375, 376, 377, - 378, 477, 379, 380, 381, 382, 383, 384, 0, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 414, 415, 431, 432, 433, - 434, 0, 0, 0, 0, 0, 0, 323, 0, 0, + 324, 324, 324, 215, 212, 325, 326, 365, 365, 356, + 339, 357, 437, 216, 364, 437, 491, 327, 94, 324, + 358, 95, 436, 336, 486, 96, 0, 359, 360, 361, + 362, 91, 92, 0, 337, 363, 93, 328, 329, 346, + 347, 0, 330, 111, 348, 112, 113, 343, 0, 344, + 345, 480, 481, 482, 341, 85, 86, 87, 88, 0, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 89, + 90, 414, 97, 98, 99, 100, 0, 366, 367, 101, + 102, 103, 104, 105, 106, 107, 108, 0, 419, 422, + 425, 428, 431, 0, 109, 110, 213, 214, 331, 332, + 333, 334, 349, 350, 351, 352, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 0, 0, + 378, 379, 478, 380, 381, 382, 383, 384, 385, 0, + 0, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 415, 416, 432, + 433, 434, 435, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 0, 491, 492, 493, 494, 0, 0, - 495, 496, 497, 0, 498, 499, 500, 501, 502, 503, + 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 0, 492, 493, 494, 495, 0, + 0, 496, 497, 498, 0, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 484, 514, 515, 516, 517, 486, 0, 518, 519, 520, - 521, 522, 0, 0, 0, 0, 524, 525, 526, 0, - 0, 0, 0, 483, 0, 0, 0, 0, 483, 0, - 0, 483, 0, 0, 483, 0, 0, 483, 0, 0, - 483, 0, 0, 0, 0, 352, 489, 308, 309, 310, + 514, 485, 515, 516, 517, 518, 487, 0, 519, 520, + 521, 522, 523, 0, 0, 0, 0, 525, 526, 527, + 0, 0, 0, 0, 484, 0, 0, 0, 0, 484, + 0, 0, 484, 0, 0, 484, 0, 0, 484, 0, + 0, 484, 0, 0, 0, 0, 353, 490, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 411, 412, 0, 0, 0, 0, 0, 0, 0, + 321, 0, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 483, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 527, 528, 523, - 0, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 0, 483, 483, 483, 218, 219, 220, + 0, 0, 0, 0, 0, 0, 0, 0, 484, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 528, 529, + 524, 0, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 484, 484, 484, 0, 484, 484, 484, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, @@ -6179,7 +6192,7 @@ namespace yy { 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 218, 219, 220, 221, + 301, 302, 303, 304, 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, @@ -6188,7 +6201,7 @@ namespace yy { 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 218, 219, 220, 221, 222, + 302, 303, 304, 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, @@ -6197,31 +6210,40 @@ namespace yy { 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 303, 304, 305, 306, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 0, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 416, 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 353, 0, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 0, + 417, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 0, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 0, 419, 420, 0, + 0, 0, 0, 353, 0, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 0, 420, + 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 352, 0, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 422, 423, 218, 219, + 0, 0, 353, 0, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 0, 423, 424, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, @@ -6230,82 +6252,74 @@ namespace yy { 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 352, 0, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 0, 425, - 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 353, 0, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 0, 426, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 0, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 428, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 353, 0, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 0, 429, 430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 487, - 488, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, - 0, 0, 0, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 0, 0, 0, 0, 0, 308, 309, 310, + 0, 0, 0, 0, 0, 0, 0, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 488, 489, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 0, 0, 0, 0, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 0, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 0, 0, 0, 0, 0, + 0, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6313,155 +6327,155 @@ namespace yy { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 352, 0, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, - 0, 0, 0, 0, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 0, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 0, 0, 0, 0, 339, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 352, 0, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, + 0, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 0, 0, 0, 0, 0, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 0, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 0, 0, 0, 0, 340, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 0, + 353, 0, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 0, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 482, 4, 308, 309, 310, + 0, 0, 0, 0, 0, 0, 353, 0, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 0, 0, 0, 337, 0, 0, 0, 2, 3, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 4, 483, 0, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 0, 0, 0, 338, + 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 0, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 0, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 114, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, - 0, 0, 0, 0, 0, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 114, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 0, 0, 0, 0, 0, + 0, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 207, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206 + 0, 0, 0, 208, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207 }; const short seclang_parser::yycheck_[] = { - 60, 61, 62, 302, 50, 61, 62, 3, 3, 142, - 81, 144, 6, 312, 207, 6, 437, 63, 304, 79, - 153, 307, 307, 79, 364, 311, -1, 160, 161, 162, - 163, 305, 306, -1, 80, 168, 310, 305, 306, 305, - 306, -1, 310, 303, 310, 305, 306, 303, -1, 305, - 306, 100, 101, 102, 114, 305, 306, 143, 144, -1, + 60, 61, 62, 303, 50, 61, 62, 3, 3, 142, + 81, 144, 6, 313, 208, 6, 438, 63, 305, 79, + 153, 308, 308, 79, 365, 312, -1, 160, 161, 162, + 163, 306, 307, -1, 80, 168, 311, 306, 307, 306, + 307, -1, 311, 304, 311, 306, 307, 304, -1, 306, + 307, 100, 101, 102, 114, 306, 307, 143, 144, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6470,90 +6484,39 @@ namespace yy { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, - 283, 305, 306, 305, 306, -1, 216, 217, 305, 306, - 305, 306, 308, 309, 305, 306, -1, 300, 301, 302, - 303, 304, 308, 309, 305, 306, 305, 306, 305, 306, - 305, 306, 305, 306, 305, 306, 341, 342, 341, 342, - 341, 342, 341, 342, -1, -1, -1, 341, 342, 341, - 342, 334, 341, 342, 341, 342, 341, 342, -1, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, -1, -1, -1, -1, -1, -1, 307, -1, -1, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 306, + 307, 284, 306, 307, 306, 307, -1, 217, 218, 306, + 307, 309, 310, 306, 307, 309, 310, -1, 301, 302, + 303, 304, 305, -1, 306, 307, 306, 307, 306, 307, + 306, 307, 306, 307, 306, 307, 342, 343, -1, 342, + 343, 342, 343, 342, 343, -1, 342, 343, -1, -1, + 342, 343, 335, 342, 343, 342, 343, 342, 343, -1, + -1, 342, 343, 342, 343, 342, 343, 342, 343, 342, + 343, 342, 343, 342, 343, 342, 343, 342, 343, 342, + 343, 342, 343, 342, 343, 342, 343, 342, 343, 342, + 343, 342, 343, -1, -1, -1, -1, -1, 308, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 354, 355, 356, 357, 358, 359, - 360, 361, 362, -1, 437, 438, 439, 440, -1, -1, - 443, 444, 445, -1, 447, 448, 449, 450, 451, 452, + 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, + 360, 361, 362, 363, -1, 438, 439, 440, 441, -1, + -1, 444, 445, 446, -1, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 326, 464, 465, 466, 467, 326, -1, 470, 471, 472, - 473, 474, -1, -1, -1, -1, 479, 480, 481, -1, - -1, -1, -1, 413, -1, -1, -1, -1, 418, -1, - -1, 421, -1, -1, 424, -1, -1, 427, -1, -1, - 430, -1, -1, -1, -1, 325, 436, 327, 328, 329, + 463, 327, 465, 466, 467, 468, 327, -1, 471, 472, + 473, 474, 475, -1, -1, -1, -1, 480, 481, 482, + -1, -1, -1, -1, 414, -1, -1, -1, -1, 419, + -1, -1, 422, -1, -1, 425, -1, -1, 428, -1, + -1, 431, -1, -1, -1, -1, 326, 437, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, + 340, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 477, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 487, 488, 475, - -1, 491, 492, 493, 494, 495, 496, 497, 498, 499, + -1, -1, -1, -1, -1, -1, -1, -1, 478, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 488, 489, + 476, -1, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 521, 522, -1, 524, 525, 526, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 325, -1, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, -1, 341, 342, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 325, -1, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, -1, 341, 342, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 325, -1, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, -1, 341, 342, 10, 11, + 520, 521, 522, 523, -1, 525, 526, 527, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -6571,40 +6534,40 @@ namespace yy { 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, 94, 95, 96, 97, 98, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 325, -1, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, -1, 341, - 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 326, -1, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, -1, + 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 325, -1, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 326, -1, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, -1, 342, + 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 8, 9, + -1, -1, 326, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, -1, 342, 343, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6613,16 +6576,16 @@ namespace yy { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6632,53 +6595,95 @@ namespace yy { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, - -1, -1, -1, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, -1, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, -1, -1, -1, -1, -1, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 326, -1, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 326, -1, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 325, -1, 327, 328, 329, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, - -1, -1, -1, -1, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, -1, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, -1, -1, -1, -1, 103, 10, 11, 12, 13, + 340, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, -1, -1, -1, -1, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, -1, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, -1, -1, -1, -1, -1, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 326, + -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, -1, -1, -1, -1, -1, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, -1, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, @@ -6687,8 +6692,7 @@ namespace yy { 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 325, -1, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 94, 95, 96, 97, 98, -1, -1, -1, -1, 103, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -6698,108 +6702,119 @@ namespace yy { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, + 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 0, -1, -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 325, -1, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 325, 142, 327, 328, 329, + -1, -1, -1, -1, -1, -1, 326, -1, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, - -1, -1, -1, -1, 0, -1, -1, -1, 4, 5, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 340, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 142, 326, -1, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, -1, -1, -1, 0, + -1, -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 142, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 142, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 99, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, -1, - -1, -1, -1, -1, -1, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 99, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, -1, -1, -1, -1, -1, + -1, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 99, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 326, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236 + -1, -1, -1, 327, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237 }; const short seclang_parser::yystos_[] = { - 0, 0, 4, 5, 142, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 344, 345, 346, 351, 305, 306, 143, 144, 305, - 306, 305, 306, 310, 304, 307, 311, 305, 306, 305, - 306, 305, 306, 308, 309, 305, 306, 308, 309, 305, - 306, 303, 305, 306, 99, 145, 146, 147, 148, 149, + 0, 0, 4, 5, 142, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 345, 346, 347, 352, 306, 307, 143, 144, 306, + 307, 306, 307, 311, 305, 308, 312, 306, 307, 306, + 307, 306, 307, 309, 310, 306, 307, 309, 310, 306, + 307, 304, 306, 307, 99, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, @@ -6808,77 +6823,60 @@ namespace yy { 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 326, 347, 348, - 356, 347, 305, 306, 302, 312, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 326, 327, 328, + 230, 231, 232, 233, 234, 235, 236, 237, 327, 348, + 349, 357, 348, 306, 307, 303, 313, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 353, 354, 355, 353, 353, 347, 305, 306, 310, - 305, 306, 305, 306, 352, 353, 347, 0, 345, 103, - 355, 357, 303, 305, 306, 305, 306, 310, 305, 306, - 305, 306, 325, 355, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 348, 3, 355, 355, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 341, 342, 341, 342, 341, 342, 341, - 342, 341, 342, 358, 341, 342, 341, 342, 358, 341, - 342, 358, 341, 342, 358, 341, 342, 358, 341, 342, - 358, 341, 342, 341, 342, 354, 6, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 349, 350, 358, 355, 100, - 101, 102, 325, 355, 326, 356, 326, 8, 9, 355, - 350, 358, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 347, 358, 358, 358, 355, 355 + 339, 340, 354, 355, 356, 354, 354, 348, 306, 307, + 311, 306, 307, 306, 307, 353, 354, 348, 0, 346, + 103, 356, 358, 304, 306, 307, 306, 307, 311, 306, + 307, 306, 307, 326, 356, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 349, 3, 356, 356, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 342, 343, 342, 343, 342, 343, + 342, 343, 342, 343, 359, 342, 343, 342, 343, 359, + 342, 343, 359, 342, 343, 359, 342, 343, 359, 342, + 343, 359, 342, 343, 342, 343, 355, 6, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 350, 351, 359, 356, + 100, 101, 102, 326, 356, 327, 357, 327, 8, 9, + 356, 351, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 348, 359, 359, 359, 356, 356 }; const short seclang_parser::yyr1_[] = { - 0, 343, 344, 344, 344, 345, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, 346, 347, - 347, 348, 348, 349, 349, 349, 349, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 0, 344, 345, 345, 345, 346, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, 347, 348, + 348, 349, 349, 350, 350, 350, 350, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 352, 353, 353, 354, 354, 354, - 354, 354, 354, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, + 351, 351, 351, 351, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 353, 354, 354, 355, 355, 355, 355, 355, 355, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, @@ -6889,8 +6887,25 @@ namespace yy { 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 357, 357, 357, 357, 357, 358, 358, 358, - 358 + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, + 357, 357, 357, 358, 358, 358, 358, 358, 359, 359, + 359, 359 }; const signed char @@ -6939,8 +6954,8 @@ namespace yy { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 1, 3, 3, 3, 2, 2, 1, - 1 + 1, 1, 1, 2, 1, 3, 3, 3, 2, 2, + 1, 1 }; @@ -7038,8 +7053,9 @@ namespace yy { "\"ACTION_TRANSFORMATION_HTML_ENTITY_DECODE\"", "\"ACTION_TRANSFORMATION_JS_DECODE\"", "\"ACTION_TRANSFORMATION_LENGTH\"", - "\"ACTION_TRANSFORMATION_LOWERCASE\"", "\"ACTION_TRANSFORMATION_MD5\"", - "\"ACTION_TRANSFORMATION_NONE\"", + "\"ACTION_TRANSFORMATION_LOWERCASE\"", + "\"ACTION_TRANSFORMATION_PHP_ARGS_NAMES\"", + "\"ACTION_TRANSFORMATION_MD5\"", "\"ACTION_TRANSFORMATION_NONE\"", "\"ACTION_TRANSFORMATION_NORMALISE_PATH\"", "\"ACTION_TRANSFORMATION_NORMALISE_PATH_WIN\"", "\"ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT\"", @@ -7131,51 +7147,51 @@ namespace yy { const short seclang_parser::yyrline_[] = { - 0, 710, 710, 714, 715, 718, 723, 729, 735, 739, - 743, 749, 755, 761, 767, 772, 777, 783, 790, 794, - 798, 804, 808, 812, 817, 822, 827, 832, 836, 843, - 847, 854, 860, 870, 879, 889, 898, 911, 915, 919, - 923, 927, 931, 935, 939, 943, 947, 952, 956, 960, - 964, 968, 972, 977, 982, 986, 990, 994, 998, 1002, - 1006, 1010, 1014, 1018, 1022, 1026, 1030, 1034, 1038, 1042, - 1046, 1050, 1054, 1058, 1072, 1073, 1103, 1122, 1141, 1169, - 1226, 1233, 1237, 1241, 1245, 1249, 1253, 1257, 1261, 1270, - 1274, 1279, 1282, 1287, 1292, 1297, 1302, 1305, 1310, 1313, - 1318, 1323, 1326, 1331, 1336, 1341, 1346, 1351, 1356, 1361, - 1364, 1369, 1374, 1379, 1384, 1387, 1392, 1397, 1402, 1415, - 1428, 1441, 1454, 1467, 1493, 1521, 1533, 1553, 1580, 1586, - 1591, 1596, 1605, 1610, 1614, 1618, 1622, 1626, 1630, 1634, - 1639, 1644, 1656, 1662, 1666, 1670, 1681, 1690, 1691, 1698, - 1703, 1708, 1762, 1769, 1777, 1814, 1818, 1825, 1830, 1836, - 1842, 1848, 1855, 1865, 1869, 1873, 1877, 1881, 1885, 1889, - 1893, 1897, 1901, 1905, 1909, 1913, 1917, 1921, 1925, 1929, - 1933, 1937, 1941, 1945, 1949, 1953, 1957, 1961, 1965, 1969, - 1973, 1977, 1981, 1985, 1989, 1993, 1997, 2001, 2005, 2009, - 2013, 2017, 2021, 2025, 2029, 2033, 2037, 2041, 2045, 2049, - 2053, 2057, 2061, 2065, 2069, 2073, 2077, 2081, 2085, 2089, - 2093, 2097, 2101, 2105, 2109, 2113, 2117, 2121, 2125, 2129, - 2133, 2137, 2141, 2145, 2149, 2153, 2157, 2161, 2165, 2169, - 2173, 2177, 2181, 2185, 2189, 2193, 2197, 2201, 2205, 2209, - 2213, 2217, 2221, 2226, 2230, 2234, 2239, 2243, 2247, 2252, - 2257, 2261, 2265, 2269, 2273, 2277, 2281, 2285, 2289, 2293, - 2297, 2301, 2305, 2309, 2313, 2317, 2321, 2325, 2329, 2333, - 2337, 2341, 2345, 2349, 2353, 2357, 2361, 2365, 2369, 2373, - 2377, 2381, 2385, 2389, 2393, 2397, 2401, 2405, 2409, 2413, - 2417, 2421, 2425, 2429, 2433, 2437, 2441, 2445, 2449, 2453, - 2457, 2461, 2465, 2469, 2473, 2477, 2481, 2485, 2489, 2493, - 2497, 2505, 2512, 2519, 2526, 2533, 2540, 2547, 2554, 2561, - 2568, 2575, 2582, 2592, 2596, 2600, 2604, 2608, 2612, 2616, - 2620, 2625, 2630, 2635, 2639, 2643, 2647, 2651, 2656, 2661, - 2665, 2669, 2673, 2677, 2681, 2685, 2689, 2693, 2697, 2701, - 2705, 2709, 2713, 2718, 2722, 2726, 2730, 2734, 2738, 2742, - 2746, 2750, 2754, 2758, 2762, 2766, 2770, 2774, 2778, 2782, - 2786, 2790, 2794, 2798, 2802, 2806, 2810, 2814, 2818, 2822, - 2826, 2830, 2834, 2838, 2842, 2846, 2850, 2854, 2858, 2862, - 2866, 2870, 2874, 2878, 2882, 2886, 2890, 2894, 2898, 2902, - 2906, 2910, 2914, 2918, 2922, 2926, 2930, 2934, 2938, 2942, - 2946, 2950, 2954, 2958, 2962, 2966, 2970, 2974, 2978, 2982, - 2986, 2990, 2997, 3001, 3005, 3009, 3013, 3020, 3025, 3030, - 3036 + 0, 712, 712, 716, 717, 720, 725, 731, 737, 741, + 745, 751, 757, 763, 769, 774, 779, 785, 792, 796, + 800, 806, 810, 814, 819, 824, 829, 834, 838, 845, + 849, 856, 862, 872, 881, 891, 900, 913, 917, 921, + 925, 929, 933, 937, 941, 945, 949, 954, 958, 962, + 966, 970, 974, 979, 984, 988, 992, 996, 1000, 1004, + 1008, 1012, 1016, 1020, 1024, 1028, 1032, 1036, 1040, 1044, + 1048, 1052, 1056, 1060, 1074, 1075, 1105, 1124, 1143, 1171, + 1228, 1235, 1239, 1243, 1247, 1251, 1255, 1259, 1263, 1272, + 1276, 1281, 1284, 1289, 1294, 1299, 1304, 1307, 1312, 1315, + 1320, 1325, 1328, 1333, 1338, 1343, 1348, 1353, 1358, 1363, + 1366, 1371, 1376, 1381, 1386, 1389, 1394, 1399, 1404, 1417, + 1430, 1443, 1456, 1469, 1495, 1523, 1535, 1555, 1582, 1588, + 1593, 1598, 1607, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1641, 1646, 1658, 1664, 1668, 1672, 1683, 1692, 1693, 1700, + 1705, 1710, 1764, 1771, 1779, 1816, 1820, 1827, 1832, 1838, + 1844, 1850, 1857, 1867, 1871, 1875, 1879, 1883, 1887, 1891, + 1895, 1899, 1903, 1907, 1911, 1915, 1919, 1923, 1927, 1931, + 1935, 1939, 1943, 1947, 1951, 1955, 1959, 1963, 1967, 1971, + 1975, 1979, 1983, 1987, 1991, 1995, 1999, 2003, 2007, 2011, + 2015, 2019, 2023, 2027, 2031, 2035, 2039, 2043, 2047, 2051, + 2055, 2059, 2063, 2067, 2071, 2075, 2079, 2083, 2087, 2091, + 2095, 2099, 2103, 2107, 2111, 2115, 2119, 2123, 2127, 2131, + 2135, 2139, 2143, 2147, 2151, 2155, 2159, 2163, 2167, 2171, + 2175, 2179, 2183, 2187, 2191, 2195, 2199, 2203, 2207, 2211, + 2215, 2219, 2223, 2228, 2232, 2236, 2241, 2245, 2249, 2254, + 2259, 2263, 2267, 2271, 2275, 2279, 2283, 2287, 2291, 2295, + 2299, 2303, 2307, 2311, 2315, 2319, 2323, 2327, 2331, 2335, + 2339, 2343, 2347, 2351, 2355, 2359, 2363, 2367, 2371, 2375, + 2379, 2383, 2387, 2391, 2395, 2399, 2403, 2407, 2411, 2415, + 2419, 2423, 2427, 2431, 2435, 2439, 2443, 2447, 2451, 2455, + 2459, 2463, 2467, 2471, 2475, 2479, 2483, 2487, 2491, 2495, + 2499, 2507, 2514, 2521, 2528, 2535, 2542, 2549, 2556, 2563, + 2570, 2577, 2584, 2594, 2598, 2602, 2606, 2610, 2614, 2618, + 2622, 2627, 2632, 2637, 2641, 2645, 2649, 2653, 2658, 2663, + 2667, 2671, 2675, 2679, 2683, 2687, 2691, 2695, 2699, 2703, + 2707, 2711, 2715, 2720, 2724, 2728, 2732, 2736, 2740, 2744, + 2748, 2752, 2756, 2760, 2764, 2768, 2772, 2776, 2780, 2784, + 2788, 2792, 2796, 2800, 2804, 2808, 2812, 2816, 2820, 2824, + 2828, 2832, 2836, 2840, 2844, 2848, 2852, 2856, 2860, 2864, + 2868, 2872, 2876, 2880, 2884, 2888, 2892, 2896, 2900, 2904, + 2908, 2912, 2916, 2920, 2924, 2928, 2932, 2936, 2940, 2944, + 2948, 2952, 2956, 2960, 2964, 2968, 2972, 2976, 2980, 2984, + 2988, 2992, 2996, 3003, 3007, 3011, 3015, 3019, 3026, 3031, + 3036, 3042 }; void @@ -7207,9 +7223,9 @@ namespace yy { } // yy -#line 7211 "seclang-parser.cc" +#line 7227 "seclang-parser.cc" -#line 3043 "seclang-parser.yy" +#line 3049 "seclang-parser.yy" void yy::seclang_parser::error (const location_type& l, const std::string& m) { diff --git a/src/parser/seclang-parser.hh b/src/parser/seclang-parser.hh index cc0ecc82cc..1db831f2f6 100644 --- a/src/parser/seclang-parser.hh +++ b/src/parser/seclang-parser.hh @@ -116,6 +116,7 @@ class Driver; #include "src/actions/transformations/none.h" #include "src/actions/transformations/url_decode.h" #include "src/actions/transformations/lower_case.h" +#include "src/actions/transformations/php_args_names.h" #include "src/actions/transformations/upper_case.h" #include "src/actions/transformations/hex_decode.h" #include "src/actions/transformations/url_encode.h" @@ -350,7 +351,7 @@ using namespace modsecurity::operators; a = std::move(c); -#line 354 "seclang-parser.hh" +#line 355 "seclang-parser.hh" # include # include // std::abort @@ -484,7 +485,7 @@ using namespace modsecurity::operators; #endif namespace yy { -#line 488 "seclang-parser.hh" +#line 489 "seclang-parser.hh" @@ -764,6 +765,7 @@ namespace yy { // "ACTION_TRANSFORMATION_JS_DECODE" // "ACTION_TRANSFORMATION_LENGTH" // "ACTION_TRANSFORMATION_LOWERCASE" + // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" // "ACTION_TRANSFORMATION_MD5" // "ACTION_TRANSFORMATION_NONE" // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -1179,137 +1181,138 @@ namespace yy { TOK_ACTION_TRANSFORMATION_JS_DECODE = 464, // "ACTION_TRANSFORMATION_JS_DECODE" TOK_ACTION_TRANSFORMATION_LENGTH = 465, // "ACTION_TRANSFORMATION_LENGTH" TOK_ACTION_TRANSFORMATION_LOWERCASE = 466, // "ACTION_TRANSFORMATION_LOWERCASE" - TOK_ACTION_TRANSFORMATION_MD5 = 467, // "ACTION_TRANSFORMATION_MD5" - TOK_ACTION_TRANSFORMATION_NONE = 468, // "ACTION_TRANSFORMATION_NONE" - TOK_ACTION_TRANSFORMATION_NORMALISE_PATH = 469, // "ACTION_TRANSFORMATION_NORMALISE_PATH" - TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 470, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 471, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 472, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 473, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 474, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 475, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - TOK_ACTION_TRANSFORMATION_REMOVE_NULLS = 476, // "ACTION_TRANSFORMATION_REMOVE_NULLS" - TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 477, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 478, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - TOK_ACTION_TRANSFORMATION_REPLACE_NULLS = 479, // "ACTION_TRANSFORMATION_REPLACE_NULLS" - TOK_ACTION_TRANSFORMATION_SHA1 = 480, // "ACTION_TRANSFORMATION_SHA1" - TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 481, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - TOK_ACTION_TRANSFORMATION_TRIM = 482, // "ACTION_TRANSFORMATION_TRIM" - TOK_ACTION_TRANSFORMATION_TRIM_LEFT = 483, // "ACTION_TRANSFORMATION_TRIM_LEFT" - TOK_ACTION_TRANSFORMATION_TRIM_RIGHT = 484, // "ACTION_TRANSFORMATION_TRIM_RIGHT" - TOK_ACTION_TRANSFORMATION_UPPERCASE = 485, // "ACTION_TRANSFORMATION_UPPERCASE" - TOK_ACTION_TRANSFORMATION_URL_ENCODE = 486, // "ACTION_TRANSFORMATION_URL_ENCODE" - TOK_ACTION_TRANSFORMATION_URL_DECODE = 487, // "ACTION_TRANSFORMATION_URL_DECODE" - TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI = 488, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 489, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - TOK_ACTION_VER = 490, // "Ver" - TOK_ACTION_XMLNS = 491, // "xmlns" - TOK_CONFIG_COMPONENT_SIG = 492, // "CONFIG_COMPONENT_SIG" - TOK_CONFIG_CONN_ENGINE = 493, // "CONFIG_CONN_ENGINE" - TOK_CONFIG_SEC_ARGUMENT_SEPARATOR = 494, // "CONFIG_SEC_ARGUMENT_SEPARATOR" - TOK_CONFIG_SEC_WEB_APP_ID = 495, // "CONFIG_SEC_WEB_APP_ID" - TOK_CONFIG_SEC_SERVER_SIG = 496, // "CONFIG_SEC_SERVER_SIG" - TOK_CONFIG_DIR_AUDIT_DIR = 497, // "CONFIG_DIR_AUDIT_DIR" - TOK_CONFIG_DIR_AUDIT_DIR_MOD = 498, // "CONFIG_DIR_AUDIT_DIR_MOD" - TOK_CONFIG_DIR_AUDIT_ENG = 499, // "CONFIG_DIR_AUDIT_ENG" - TOK_CONFIG_DIR_AUDIT_FLE_MOD = 500, // "CONFIG_DIR_AUDIT_FLE_MOD" - TOK_CONFIG_DIR_AUDIT_LOG = 501, // "CONFIG_DIR_AUDIT_LOG" - TOK_CONFIG_DIR_AUDIT_LOG2 = 502, // "CONFIG_DIR_AUDIT_LOG2" - TOK_CONFIG_DIR_AUDIT_LOG_P = 503, // "CONFIG_DIR_AUDIT_LOG_P" - TOK_CONFIG_DIR_AUDIT_STS = 504, // "CONFIG_DIR_AUDIT_STS" - TOK_CONFIG_DIR_AUDIT_TPE = 505, // "CONFIG_DIR_AUDIT_TPE" - TOK_CONFIG_DIR_DEBUG_LOG = 506, // "CONFIG_DIR_DEBUG_LOG" - TOK_CONFIG_DIR_DEBUG_LVL = 507, // "CONFIG_DIR_DEBUG_LVL" - TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS = 508, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 509, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - TOK_CONFIG_SEC_HASH_ENGINE = 510, // "CONFIG_SEC_HASH_ENGINE" - TOK_CONFIG_SEC_HASH_KEY = 511, // "CONFIG_SEC_HASH_KEY" - TOK_CONFIG_SEC_HASH_PARAM = 512, // "CONFIG_SEC_HASH_PARAM" - TOK_CONFIG_SEC_HASH_METHOD_RX = 513, // "CONFIG_SEC_HASH_METHOD_RX" - TOK_CONFIG_SEC_HASH_METHOD_PM = 514, // "CONFIG_SEC_HASH_METHOD_PM" - TOK_CONFIG_SEC_CHROOT_DIR = 515, // "CONFIG_SEC_CHROOT_DIR" - TOK_CONFIG_DIR_GEO_DB = 516, // "CONFIG_DIR_GEO_DB" - TOK_CONFIG_DIR_GSB_DB = 517, // "CONFIG_DIR_GSB_DB" - TOK_CONFIG_SEC_GUARDIAN_LOG = 518, // "CONFIG_SEC_GUARDIAN_LOG" - TOK_CONFIG_DIR_PCRE_MATCH_LIMIT = 519, // "CONFIG_DIR_PCRE_MATCH_LIMIT" - TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 520, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - TOK_CONFIG_SEC_CONN_R_STATE_LIMIT = 521, // "CONFIG_SEC_CONN_R_STATE_LIMIT" - TOK_CONFIG_SEC_CONN_W_STATE_LIMIT = 522, // "CONFIG_SEC_CONN_W_STATE_LIMIT" - TOK_CONFIG_SEC_SENSOR_ID = 523, // "CONFIG_SEC_SENSOR_ID" - TOK_CONFIG_DIR_ARGS_LIMIT = 524, // "CONFIG_DIR_ARGS_LIMIT" - TOK_CONFIG_DIR_REQ_BODY = 525, // "CONFIG_DIR_REQ_BODY" - TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 526, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - TOK_CONFIG_DIR_REQ_BODY_LIMIT = 527, // "CONFIG_DIR_REQ_BODY_LIMIT" - TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 528, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 529, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - TOK_CONFIG_DIR_RES_BODY = 530, // "CONFIG_DIR_RES_BODY" - TOK_CONFIG_DIR_RES_BODY_LIMIT = 531, // "CONFIG_DIR_RES_BODY_LIMIT" - TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 532, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - TOK_CONFIG_SEC_RULE_INHERITANCE = 533, // "CONFIG_SEC_RULE_INHERITANCE" - TOK_CONFIG_SEC_RULE_PERF_TIME = 534, // "CONFIG_SEC_RULE_PERF_TIME" - TOK_CONFIG_DIR_RULE_ENG = 535, // "CONFIG_DIR_RULE_ENG" - TOK_CONFIG_DIR_SEC_ACTION = 536, // "CONFIG_DIR_SEC_ACTION" - TOK_CONFIG_DIR_SEC_DEFAULT_ACTION = 537, // "CONFIG_DIR_SEC_DEFAULT_ACTION" - TOK_CONFIG_DIR_SEC_MARKER = 538, // "CONFIG_DIR_SEC_MARKER" - TOK_CONFIG_DIR_UNICODE_MAP_FILE = 539, // "CONFIG_DIR_UNICODE_MAP_FILE" - TOK_CONFIG_DIR_UNICODE_CODE_PAGE = 540, // "CONFIG_DIR_UNICODE_CODE_PAGE" - TOK_CONFIG_SEC_COLLECTION_TIMEOUT = 541, // "CONFIG_SEC_COLLECTION_TIMEOUT" - TOK_CONFIG_SEC_HTTP_BLKEY = 542, // "CONFIG_SEC_HTTP_BLKEY" - TOK_CONFIG_SEC_INTERCEPT_ON_ERROR = 543, // "CONFIG_SEC_INTERCEPT_ON_ERROR" - TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 544, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - TOK_CONFIG_SEC_RULE_REMOVE_BY_ID = 545, // "CONFIG_SEC_RULE_REMOVE_BY_ID" - TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG = 546, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG = 547, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 548, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 549, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 550, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 551, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - TOK_CONFIG_UPDLOAD_KEEP_FILES = 552, // "CONFIG_UPDLOAD_KEEP_FILES" - TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES = 553, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - TOK_CONFIG_UPLOAD_DIR = 554, // "CONFIG_UPLOAD_DIR" - TOK_CONFIG_UPLOAD_FILE_LIMIT = 555, // "CONFIG_UPLOAD_FILE_LIMIT" - TOK_CONFIG_UPLOAD_FILE_MODE = 556, // "CONFIG_UPLOAD_FILE_MODE" - TOK_CONFIG_VALUE_ABORT = 557, // "CONFIG_VALUE_ABORT" - TOK_CONFIG_VALUE_DETC = 558, // "CONFIG_VALUE_DETC" - TOK_CONFIG_VALUE_HTTPS = 559, // "CONFIG_VALUE_HTTPS" - TOK_CONFIG_VALUE_OFF = 560, // "CONFIG_VALUE_OFF" - TOK_CONFIG_VALUE_ON = 561, // "CONFIG_VALUE_ON" - TOK_CONFIG_VALUE_PARALLEL = 562, // "CONFIG_VALUE_PARALLEL" - TOK_CONFIG_VALUE_PROCESS_PARTIAL = 563, // "CONFIG_VALUE_PROCESS_PARTIAL" - TOK_CONFIG_VALUE_REJECT = 564, // "CONFIG_VALUE_REJECT" - TOK_CONFIG_VALUE_RELEVANT_ONLY = 565, // "CONFIG_VALUE_RELEVANT_ONLY" - TOK_CONFIG_VALUE_SERIAL = 566, // "CONFIG_VALUE_SERIAL" - TOK_CONFIG_VALUE_WARN = 567, // "CONFIG_VALUE_WARN" - TOK_CONFIG_XML_EXTERNAL_ENTITY = 568, // "CONFIG_XML_EXTERNAL_ENTITY" - TOK_CONGIG_DIR_RESPONSE_BODY_MP = 569, // "CONGIG_DIR_RESPONSE_BODY_MP" - TOK_CONGIG_DIR_SEC_ARG_SEP = 570, // "CONGIG_DIR_SEC_ARG_SEP" - TOK_CONGIG_DIR_SEC_COOKIE_FORMAT = 571, // "CONGIG_DIR_SEC_COOKIE_FORMAT" - TOK_CONFIG_SEC_COOKIEV0_SEPARATOR = 572, // "CONFIG_SEC_COOKIEV0_SEPARATOR" - TOK_CONGIG_DIR_SEC_DATA_DIR = 573, // "CONGIG_DIR_SEC_DATA_DIR" - TOK_CONGIG_DIR_SEC_STATUS_ENGINE = 574, // "CONGIG_DIR_SEC_STATUS_ENGINE" - TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 575, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 576, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - TOK_CONGIG_DIR_SEC_TMP_DIR = 577, // "CONGIG_DIR_SEC_TMP_DIR" - TOK_DIRECTIVE = 578, // "DIRECTIVE" - TOK_DIRECTIVE_SECRULESCRIPT = 579, // "DIRECTIVE_SECRULESCRIPT" - TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION = 580, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - TOK_QUOTATION_MARK = 581, // "QUOTATION_MARK" - TOK_RUN_TIME_VAR_BLD = 582, // "RUN_TIME_VAR_BLD" - TOK_RUN_TIME_VAR_DUR = 583, // "RUN_TIME_VAR_DUR" - TOK_RUN_TIME_VAR_HSV = 584, // "RUN_TIME_VAR_HSV" - TOK_RUN_TIME_VAR_REMOTE_USER = 585, // "RUN_TIME_VAR_REMOTE_USER" - TOK_RUN_TIME_VAR_TIME = 586, // "RUN_TIME_VAR_TIME" - TOK_RUN_TIME_VAR_TIME_DAY = 587, // "RUN_TIME_VAR_TIME_DAY" - TOK_RUN_TIME_VAR_TIME_EPOCH = 588, // "RUN_TIME_VAR_TIME_EPOCH" - TOK_RUN_TIME_VAR_TIME_HOUR = 589, // "RUN_TIME_VAR_TIME_HOUR" - TOK_RUN_TIME_VAR_TIME_MIN = 590, // "RUN_TIME_VAR_TIME_MIN" - TOK_RUN_TIME_VAR_TIME_MON = 591, // "RUN_TIME_VAR_TIME_MON" - TOK_RUN_TIME_VAR_TIME_SEC = 592, // "RUN_TIME_VAR_TIME_SEC" - TOK_RUN_TIME_VAR_TIME_WDAY = 593, // "RUN_TIME_VAR_TIME_WDAY" - TOK_RUN_TIME_VAR_TIME_YEAR = 594, // "RUN_TIME_VAR_TIME_YEAR" - TOK_VARIABLE = 595, // "VARIABLE" - TOK_DICT_ELEMENT = 596, // "Dictionary element" - TOK_DICT_ELEMENT_REGEXP = 597 // "Dictionary element, selected by regexp" + TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES = 467, // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + TOK_ACTION_TRANSFORMATION_MD5 = 468, // "ACTION_TRANSFORMATION_MD5" + TOK_ACTION_TRANSFORMATION_NONE = 469, // "ACTION_TRANSFORMATION_NONE" + TOK_ACTION_TRANSFORMATION_NORMALISE_PATH = 470, // "ACTION_TRANSFORMATION_NORMALISE_PATH" + TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 471, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 472, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 473, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 474, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 475, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 476, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + TOK_ACTION_TRANSFORMATION_REMOVE_NULLS = 477, // "ACTION_TRANSFORMATION_REMOVE_NULLS" + TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 478, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 479, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + TOK_ACTION_TRANSFORMATION_REPLACE_NULLS = 480, // "ACTION_TRANSFORMATION_REPLACE_NULLS" + TOK_ACTION_TRANSFORMATION_SHA1 = 481, // "ACTION_TRANSFORMATION_SHA1" + TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 482, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + TOK_ACTION_TRANSFORMATION_TRIM = 483, // "ACTION_TRANSFORMATION_TRIM" + TOK_ACTION_TRANSFORMATION_TRIM_LEFT = 484, // "ACTION_TRANSFORMATION_TRIM_LEFT" + TOK_ACTION_TRANSFORMATION_TRIM_RIGHT = 485, // "ACTION_TRANSFORMATION_TRIM_RIGHT" + TOK_ACTION_TRANSFORMATION_UPPERCASE = 486, // "ACTION_TRANSFORMATION_UPPERCASE" + TOK_ACTION_TRANSFORMATION_URL_ENCODE = 487, // "ACTION_TRANSFORMATION_URL_ENCODE" + TOK_ACTION_TRANSFORMATION_URL_DECODE = 488, // "ACTION_TRANSFORMATION_URL_DECODE" + TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI = 489, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 490, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + TOK_ACTION_VER = 491, // "Ver" + TOK_ACTION_XMLNS = 492, // "xmlns" + TOK_CONFIG_COMPONENT_SIG = 493, // "CONFIG_COMPONENT_SIG" + TOK_CONFIG_CONN_ENGINE = 494, // "CONFIG_CONN_ENGINE" + TOK_CONFIG_SEC_ARGUMENT_SEPARATOR = 495, // "CONFIG_SEC_ARGUMENT_SEPARATOR" + TOK_CONFIG_SEC_WEB_APP_ID = 496, // "CONFIG_SEC_WEB_APP_ID" + TOK_CONFIG_SEC_SERVER_SIG = 497, // "CONFIG_SEC_SERVER_SIG" + TOK_CONFIG_DIR_AUDIT_DIR = 498, // "CONFIG_DIR_AUDIT_DIR" + TOK_CONFIG_DIR_AUDIT_DIR_MOD = 499, // "CONFIG_DIR_AUDIT_DIR_MOD" + TOK_CONFIG_DIR_AUDIT_ENG = 500, // "CONFIG_DIR_AUDIT_ENG" + TOK_CONFIG_DIR_AUDIT_FLE_MOD = 501, // "CONFIG_DIR_AUDIT_FLE_MOD" + TOK_CONFIG_DIR_AUDIT_LOG = 502, // "CONFIG_DIR_AUDIT_LOG" + TOK_CONFIG_DIR_AUDIT_LOG2 = 503, // "CONFIG_DIR_AUDIT_LOG2" + TOK_CONFIG_DIR_AUDIT_LOG_P = 504, // "CONFIG_DIR_AUDIT_LOG_P" + TOK_CONFIG_DIR_AUDIT_STS = 505, // "CONFIG_DIR_AUDIT_STS" + TOK_CONFIG_DIR_AUDIT_TPE = 506, // "CONFIG_DIR_AUDIT_TPE" + TOK_CONFIG_DIR_DEBUG_LOG = 507, // "CONFIG_DIR_DEBUG_LOG" + TOK_CONFIG_DIR_DEBUG_LVL = 508, // "CONFIG_DIR_DEBUG_LVL" + TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS = 509, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 510, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + TOK_CONFIG_SEC_HASH_ENGINE = 511, // "CONFIG_SEC_HASH_ENGINE" + TOK_CONFIG_SEC_HASH_KEY = 512, // "CONFIG_SEC_HASH_KEY" + TOK_CONFIG_SEC_HASH_PARAM = 513, // "CONFIG_SEC_HASH_PARAM" + TOK_CONFIG_SEC_HASH_METHOD_RX = 514, // "CONFIG_SEC_HASH_METHOD_RX" + TOK_CONFIG_SEC_HASH_METHOD_PM = 515, // "CONFIG_SEC_HASH_METHOD_PM" + TOK_CONFIG_SEC_CHROOT_DIR = 516, // "CONFIG_SEC_CHROOT_DIR" + TOK_CONFIG_DIR_GEO_DB = 517, // "CONFIG_DIR_GEO_DB" + TOK_CONFIG_DIR_GSB_DB = 518, // "CONFIG_DIR_GSB_DB" + TOK_CONFIG_SEC_GUARDIAN_LOG = 519, // "CONFIG_SEC_GUARDIAN_LOG" + TOK_CONFIG_DIR_PCRE_MATCH_LIMIT = 520, // "CONFIG_DIR_PCRE_MATCH_LIMIT" + TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 521, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + TOK_CONFIG_SEC_CONN_R_STATE_LIMIT = 522, // "CONFIG_SEC_CONN_R_STATE_LIMIT" + TOK_CONFIG_SEC_CONN_W_STATE_LIMIT = 523, // "CONFIG_SEC_CONN_W_STATE_LIMIT" + TOK_CONFIG_SEC_SENSOR_ID = 524, // "CONFIG_SEC_SENSOR_ID" + TOK_CONFIG_DIR_ARGS_LIMIT = 525, // "CONFIG_DIR_ARGS_LIMIT" + TOK_CONFIG_DIR_REQ_BODY = 526, // "CONFIG_DIR_REQ_BODY" + TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 527, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + TOK_CONFIG_DIR_REQ_BODY_LIMIT = 528, // "CONFIG_DIR_REQ_BODY_LIMIT" + TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 529, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 530, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + TOK_CONFIG_DIR_RES_BODY = 531, // "CONFIG_DIR_RES_BODY" + TOK_CONFIG_DIR_RES_BODY_LIMIT = 532, // "CONFIG_DIR_RES_BODY_LIMIT" + TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 533, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + TOK_CONFIG_SEC_RULE_INHERITANCE = 534, // "CONFIG_SEC_RULE_INHERITANCE" + TOK_CONFIG_SEC_RULE_PERF_TIME = 535, // "CONFIG_SEC_RULE_PERF_TIME" + TOK_CONFIG_DIR_RULE_ENG = 536, // "CONFIG_DIR_RULE_ENG" + TOK_CONFIG_DIR_SEC_ACTION = 537, // "CONFIG_DIR_SEC_ACTION" + TOK_CONFIG_DIR_SEC_DEFAULT_ACTION = 538, // "CONFIG_DIR_SEC_DEFAULT_ACTION" + TOK_CONFIG_DIR_SEC_MARKER = 539, // "CONFIG_DIR_SEC_MARKER" + TOK_CONFIG_DIR_UNICODE_MAP_FILE = 540, // "CONFIG_DIR_UNICODE_MAP_FILE" + TOK_CONFIG_DIR_UNICODE_CODE_PAGE = 541, // "CONFIG_DIR_UNICODE_CODE_PAGE" + TOK_CONFIG_SEC_COLLECTION_TIMEOUT = 542, // "CONFIG_SEC_COLLECTION_TIMEOUT" + TOK_CONFIG_SEC_HTTP_BLKEY = 543, // "CONFIG_SEC_HTTP_BLKEY" + TOK_CONFIG_SEC_INTERCEPT_ON_ERROR = 544, // "CONFIG_SEC_INTERCEPT_ON_ERROR" + TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 545, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + TOK_CONFIG_SEC_RULE_REMOVE_BY_ID = 546, // "CONFIG_SEC_RULE_REMOVE_BY_ID" + TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG = 547, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG = 548, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 549, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 550, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 551, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 552, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + TOK_CONFIG_UPDLOAD_KEEP_FILES = 553, // "CONFIG_UPDLOAD_KEEP_FILES" + TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES = 554, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + TOK_CONFIG_UPLOAD_DIR = 555, // "CONFIG_UPLOAD_DIR" + TOK_CONFIG_UPLOAD_FILE_LIMIT = 556, // "CONFIG_UPLOAD_FILE_LIMIT" + TOK_CONFIG_UPLOAD_FILE_MODE = 557, // "CONFIG_UPLOAD_FILE_MODE" + TOK_CONFIG_VALUE_ABORT = 558, // "CONFIG_VALUE_ABORT" + TOK_CONFIG_VALUE_DETC = 559, // "CONFIG_VALUE_DETC" + TOK_CONFIG_VALUE_HTTPS = 560, // "CONFIG_VALUE_HTTPS" + TOK_CONFIG_VALUE_OFF = 561, // "CONFIG_VALUE_OFF" + TOK_CONFIG_VALUE_ON = 562, // "CONFIG_VALUE_ON" + TOK_CONFIG_VALUE_PARALLEL = 563, // "CONFIG_VALUE_PARALLEL" + TOK_CONFIG_VALUE_PROCESS_PARTIAL = 564, // "CONFIG_VALUE_PROCESS_PARTIAL" + TOK_CONFIG_VALUE_REJECT = 565, // "CONFIG_VALUE_REJECT" + TOK_CONFIG_VALUE_RELEVANT_ONLY = 566, // "CONFIG_VALUE_RELEVANT_ONLY" + TOK_CONFIG_VALUE_SERIAL = 567, // "CONFIG_VALUE_SERIAL" + TOK_CONFIG_VALUE_WARN = 568, // "CONFIG_VALUE_WARN" + TOK_CONFIG_XML_EXTERNAL_ENTITY = 569, // "CONFIG_XML_EXTERNAL_ENTITY" + TOK_CONGIG_DIR_RESPONSE_BODY_MP = 570, // "CONGIG_DIR_RESPONSE_BODY_MP" + TOK_CONGIG_DIR_SEC_ARG_SEP = 571, // "CONGIG_DIR_SEC_ARG_SEP" + TOK_CONGIG_DIR_SEC_COOKIE_FORMAT = 572, // "CONGIG_DIR_SEC_COOKIE_FORMAT" + TOK_CONFIG_SEC_COOKIEV0_SEPARATOR = 573, // "CONFIG_SEC_COOKIEV0_SEPARATOR" + TOK_CONGIG_DIR_SEC_DATA_DIR = 574, // "CONGIG_DIR_SEC_DATA_DIR" + TOK_CONGIG_DIR_SEC_STATUS_ENGINE = 575, // "CONGIG_DIR_SEC_STATUS_ENGINE" + TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 576, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 577, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + TOK_CONGIG_DIR_SEC_TMP_DIR = 578, // "CONGIG_DIR_SEC_TMP_DIR" + TOK_DIRECTIVE = 579, // "DIRECTIVE" + TOK_DIRECTIVE_SECRULESCRIPT = 580, // "DIRECTIVE_SECRULESCRIPT" + TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION = 581, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + TOK_QUOTATION_MARK = 582, // "QUOTATION_MARK" + TOK_RUN_TIME_VAR_BLD = 583, // "RUN_TIME_VAR_BLD" + TOK_RUN_TIME_VAR_DUR = 584, // "RUN_TIME_VAR_DUR" + TOK_RUN_TIME_VAR_HSV = 585, // "RUN_TIME_VAR_HSV" + TOK_RUN_TIME_VAR_REMOTE_USER = 586, // "RUN_TIME_VAR_REMOTE_USER" + TOK_RUN_TIME_VAR_TIME = 587, // "RUN_TIME_VAR_TIME" + TOK_RUN_TIME_VAR_TIME_DAY = 588, // "RUN_TIME_VAR_TIME_DAY" + TOK_RUN_TIME_VAR_TIME_EPOCH = 589, // "RUN_TIME_VAR_TIME_EPOCH" + TOK_RUN_TIME_VAR_TIME_HOUR = 590, // "RUN_TIME_VAR_TIME_HOUR" + TOK_RUN_TIME_VAR_TIME_MIN = 591, // "RUN_TIME_VAR_TIME_MIN" + TOK_RUN_TIME_VAR_TIME_MON = 592, // "RUN_TIME_VAR_TIME_MON" + TOK_RUN_TIME_VAR_TIME_SEC = 593, // "RUN_TIME_VAR_TIME_SEC" + TOK_RUN_TIME_VAR_TIME_WDAY = 594, // "RUN_TIME_VAR_TIME_WDAY" + TOK_RUN_TIME_VAR_TIME_YEAR = 595, // "RUN_TIME_VAR_TIME_YEAR" + TOK_VARIABLE = 596, // "VARIABLE" + TOK_DICT_ELEMENT = 597, // "Dictionary element" + TOK_DICT_ELEMENT_REGEXP = 598 // "Dictionary element, selected by regexp" }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -1326,7 +1329,7 @@ namespace yy { { enum symbol_kind_type { - YYNTOKENS = 343, ///< Number of tokens. + YYNTOKENS = 344, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -1540,153 +1543,154 @@ namespace yy { S_ACTION_TRANSFORMATION_JS_DECODE = 209, // "ACTION_TRANSFORMATION_JS_DECODE" S_ACTION_TRANSFORMATION_LENGTH = 210, // "ACTION_TRANSFORMATION_LENGTH" S_ACTION_TRANSFORMATION_LOWERCASE = 211, // "ACTION_TRANSFORMATION_LOWERCASE" - S_ACTION_TRANSFORMATION_MD5 = 212, // "ACTION_TRANSFORMATION_MD5" - S_ACTION_TRANSFORMATION_NONE = 213, // "ACTION_TRANSFORMATION_NONE" - S_ACTION_TRANSFORMATION_NORMALISE_PATH = 214, // "ACTION_TRANSFORMATION_NORMALISE_PATH" - S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 215, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 216, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 217, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 218, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - S_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 219, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 220, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - S_ACTION_TRANSFORMATION_REMOVE_NULLS = 221, // "ACTION_TRANSFORMATION_REMOVE_NULLS" - S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 222, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - S_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 223, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - S_ACTION_TRANSFORMATION_REPLACE_NULLS = 224, // "ACTION_TRANSFORMATION_REPLACE_NULLS" - S_ACTION_TRANSFORMATION_SHA1 = 225, // "ACTION_TRANSFORMATION_SHA1" - S_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 226, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - S_ACTION_TRANSFORMATION_TRIM = 227, // "ACTION_TRANSFORMATION_TRIM" - S_ACTION_TRANSFORMATION_TRIM_LEFT = 228, // "ACTION_TRANSFORMATION_TRIM_LEFT" - S_ACTION_TRANSFORMATION_TRIM_RIGHT = 229, // "ACTION_TRANSFORMATION_TRIM_RIGHT" - S_ACTION_TRANSFORMATION_UPPERCASE = 230, // "ACTION_TRANSFORMATION_UPPERCASE" - S_ACTION_TRANSFORMATION_URL_ENCODE = 231, // "ACTION_TRANSFORMATION_URL_ENCODE" - S_ACTION_TRANSFORMATION_URL_DECODE = 232, // "ACTION_TRANSFORMATION_URL_DECODE" - S_ACTION_TRANSFORMATION_URL_DECODE_UNI = 233, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 234, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - S_ACTION_VER = 235, // "Ver" - S_ACTION_XMLNS = 236, // "xmlns" - S_CONFIG_COMPONENT_SIG = 237, // "CONFIG_COMPONENT_SIG" - S_CONFIG_CONN_ENGINE = 238, // "CONFIG_CONN_ENGINE" - S_CONFIG_SEC_ARGUMENT_SEPARATOR = 239, // "CONFIG_SEC_ARGUMENT_SEPARATOR" - S_CONFIG_SEC_WEB_APP_ID = 240, // "CONFIG_SEC_WEB_APP_ID" - S_CONFIG_SEC_SERVER_SIG = 241, // "CONFIG_SEC_SERVER_SIG" - S_CONFIG_DIR_AUDIT_DIR = 242, // "CONFIG_DIR_AUDIT_DIR" - S_CONFIG_DIR_AUDIT_DIR_MOD = 243, // "CONFIG_DIR_AUDIT_DIR_MOD" - S_CONFIG_DIR_AUDIT_ENG = 244, // "CONFIG_DIR_AUDIT_ENG" - S_CONFIG_DIR_AUDIT_FLE_MOD = 245, // "CONFIG_DIR_AUDIT_FLE_MOD" - S_CONFIG_DIR_AUDIT_LOG = 246, // "CONFIG_DIR_AUDIT_LOG" - S_CONFIG_DIR_AUDIT_LOG2 = 247, // "CONFIG_DIR_AUDIT_LOG2" - S_CONFIG_DIR_AUDIT_LOG_P = 248, // "CONFIG_DIR_AUDIT_LOG_P" - S_CONFIG_DIR_AUDIT_STS = 249, // "CONFIG_DIR_AUDIT_STS" - S_CONFIG_DIR_AUDIT_TPE = 250, // "CONFIG_DIR_AUDIT_TPE" - S_CONFIG_DIR_DEBUG_LOG = 251, // "CONFIG_DIR_DEBUG_LOG" - S_CONFIG_DIR_DEBUG_LVL = 252, // "CONFIG_DIR_DEBUG_LVL" - S_CONFIG_SEC_CACHE_TRANSFORMATIONS = 253, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 254, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - S_CONFIG_SEC_HASH_ENGINE = 255, // "CONFIG_SEC_HASH_ENGINE" - S_CONFIG_SEC_HASH_KEY = 256, // "CONFIG_SEC_HASH_KEY" - S_CONFIG_SEC_HASH_PARAM = 257, // "CONFIG_SEC_HASH_PARAM" - S_CONFIG_SEC_HASH_METHOD_RX = 258, // "CONFIG_SEC_HASH_METHOD_RX" - S_CONFIG_SEC_HASH_METHOD_PM = 259, // "CONFIG_SEC_HASH_METHOD_PM" - S_CONFIG_SEC_CHROOT_DIR = 260, // "CONFIG_SEC_CHROOT_DIR" - S_CONFIG_DIR_GEO_DB = 261, // "CONFIG_DIR_GEO_DB" - S_CONFIG_DIR_GSB_DB = 262, // "CONFIG_DIR_GSB_DB" - S_CONFIG_SEC_GUARDIAN_LOG = 263, // "CONFIG_SEC_GUARDIAN_LOG" - S_CONFIG_DIR_PCRE_MATCH_LIMIT = 264, // "CONFIG_DIR_PCRE_MATCH_LIMIT" - S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 265, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - S_CONFIG_SEC_CONN_R_STATE_LIMIT = 266, // "CONFIG_SEC_CONN_R_STATE_LIMIT" - S_CONFIG_SEC_CONN_W_STATE_LIMIT = 267, // "CONFIG_SEC_CONN_W_STATE_LIMIT" - S_CONFIG_SEC_SENSOR_ID = 268, // "CONFIG_SEC_SENSOR_ID" - S_CONFIG_DIR_ARGS_LIMIT = 269, // "CONFIG_DIR_ARGS_LIMIT" - S_CONFIG_DIR_REQ_BODY = 270, // "CONFIG_DIR_REQ_BODY" - S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 271, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - S_CONFIG_DIR_REQ_BODY_LIMIT = 272, // "CONFIG_DIR_REQ_BODY_LIMIT" - S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 273, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 274, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - S_CONFIG_DIR_RES_BODY = 275, // "CONFIG_DIR_RES_BODY" - S_CONFIG_DIR_RES_BODY_LIMIT = 276, // "CONFIG_DIR_RES_BODY_LIMIT" - S_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 277, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - S_CONFIG_SEC_RULE_INHERITANCE = 278, // "CONFIG_SEC_RULE_INHERITANCE" - S_CONFIG_SEC_RULE_PERF_TIME = 279, // "CONFIG_SEC_RULE_PERF_TIME" - S_CONFIG_DIR_RULE_ENG = 280, // "CONFIG_DIR_RULE_ENG" - S_CONFIG_DIR_SEC_ACTION = 281, // "CONFIG_DIR_SEC_ACTION" - S_CONFIG_DIR_SEC_DEFAULT_ACTION = 282, // "CONFIG_DIR_SEC_DEFAULT_ACTION" - S_CONFIG_DIR_SEC_MARKER = 283, // "CONFIG_DIR_SEC_MARKER" - S_CONFIG_DIR_UNICODE_MAP_FILE = 284, // "CONFIG_DIR_UNICODE_MAP_FILE" - S_CONFIG_DIR_UNICODE_CODE_PAGE = 285, // "CONFIG_DIR_UNICODE_CODE_PAGE" - S_CONFIG_SEC_COLLECTION_TIMEOUT = 286, // "CONFIG_SEC_COLLECTION_TIMEOUT" - S_CONFIG_SEC_HTTP_BLKEY = 287, // "CONFIG_SEC_HTTP_BLKEY" - S_CONFIG_SEC_INTERCEPT_ON_ERROR = 288, // "CONFIG_SEC_INTERCEPT_ON_ERROR" - S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 289, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - S_CONFIG_SEC_RULE_REMOVE_BY_ID = 290, // "CONFIG_SEC_RULE_REMOVE_BY_ID" - S_CONFIG_SEC_RULE_REMOVE_BY_MSG = 291, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - S_CONFIG_SEC_RULE_REMOVE_BY_TAG = 292, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 293, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 294, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 295, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 296, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - S_CONFIG_UPDLOAD_KEEP_FILES = 297, // "CONFIG_UPDLOAD_KEEP_FILES" - S_CONFIG_UPDLOAD_SAVE_TMP_FILES = 298, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - S_CONFIG_UPLOAD_DIR = 299, // "CONFIG_UPLOAD_DIR" - S_CONFIG_UPLOAD_FILE_LIMIT = 300, // "CONFIG_UPLOAD_FILE_LIMIT" - S_CONFIG_UPLOAD_FILE_MODE = 301, // "CONFIG_UPLOAD_FILE_MODE" - S_CONFIG_VALUE_ABORT = 302, // "CONFIG_VALUE_ABORT" - S_CONFIG_VALUE_DETC = 303, // "CONFIG_VALUE_DETC" - S_CONFIG_VALUE_HTTPS = 304, // "CONFIG_VALUE_HTTPS" - S_CONFIG_VALUE_OFF = 305, // "CONFIG_VALUE_OFF" - S_CONFIG_VALUE_ON = 306, // "CONFIG_VALUE_ON" - S_CONFIG_VALUE_PARALLEL = 307, // "CONFIG_VALUE_PARALLEL" - S_CONFIG_VALUE_PROCESS_PARTIAL = 308, // "CONFIG_VALUE_PROCESS_PARTIAL" - S_CONFIG_VALUE_REJECT = 309, // "CONFIG_VALUE_REJECT" - S_CONFIG_VALUE_RELEVANT_ONLY = 310, // "CONFIG_VALUE_RELEVANT_ONLY" - S_CONFIG_VALUE_SERIAL = 311, // "CONFIG_VALUE_SERIAL" - S_CONFIG_VALUE_WARN = 312, // "CONFIG_VALUE_WARN" - S_CONFIG_XML_EXTERNAL_ENTITY = 313, // "CONFIG_XML_EXTERNAL_ENTITY" - S_CONGIG_DIR_RESPONSE_BODY_MP = 314, // "CONGIG_DIR_RESPONSE_BODY_MP" - S_CONGIG_DIR_SEC_ARG_SEP = 315, // "CONGIG_DIR_SEC_ARG_SEP" - S_CONGIG_DIR_SEC_COOKIE_FORMAT = 316, // "CONGIG_DIR_SEC_COOKIE_FORMAT" - S_CONFIG_SEC_COOKIEV0_SEPARATOR = 317, // "CONFIG_SEC_COOKIEV0_SEPARATOR" - S_CONGIG_DIR_SEC_DATA_DIR = 318, // "CONGIG_DIR_SEC_DATA_DIR" - S_CONGIG_DIR_SEC_STATUS_ENGINE = 319, // "CONGIG_DIR_SEC_STATUS_ENGINE" - S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 320, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 321, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - S_CONGIG_DIR_SEC_TMP_DIR = 322, // "CONGIG_DIR_SEC_TMP_DIR" - S_DIRECTIVE = 323, // "DIRECTIVE" - S_DIRECTIVE_SECRULESCRIPT = 324, // "DIRECTIVE_SECRULESCRIPT" - S_FREE_TEXT_QUOTE_MACRO_EXPANSION = 325, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - S_QUOTATION_MARK = 326, // "QUOTATION_MARK" - S_RUN_TIME_VAR_BLD = 327, // "RUN_TIME_VAR_BLD" - S_RUN_TIME_VAR_DUR = 328, // "RUN_TIME_VAR_DUR" - S_RUN_TIME_VAR_HSV = 329, // "RUN_TIME_VAR_HSV" - S_RUN_TIME_VAR_REMOTE_USER = 330, // "RUN_TIME_VAR_REMOTE_USER" - S_RUN_TIME_VAR_TIME = 331, // "RUN_TIME_VAR_TIME" - S_RUN_TIME_VAR_TIME_DAY = 332, // "RUN_TIME_VAR_TIME_DAY" - S_RUN_TIME_VAR_TIME_EPOCH = 333, // "RUN_TIME_VAR_TIME_EPOCH" - S_RUN_TIME_VAR_TIME_HOUR = 334, // "RUN_TIME_VAR_TIME_HOUR" - S_RUN_TIME_VAR_TIME_MIN = 335, // "RUN_TIME_VAR_TIME_MIN" - S_RUN_TIME_VAR_TIME_MON = 336, // "RUN_TIME_VAR_TIME_MON" - S_RUN_TIME_VAR_TIME_SEC = 337, // "RUN_TIME_VAR_TIME_SEC" - S_RUN_TIME_VAR_TIME_WDAY = 338, // "RUN_TIME_VAR_TIME_WDAY" - S_RUN_TIME_VAR_TIME_YEAR = 339, // "RUN_TIME_VAR_TIME_YEAR" - S_VARIABLE = 340, // "VARIABLE" - S_DICT_ELEMENT = 341, // "Dictionary element" - S_DICT_ELEMENT_REGEXP = 342, // "Dictionary element, selected by regexp" - S_YYACCEPT = 343, // $accept - S_input = 344, // input - S_line = 345, // line - S_audit_log = 346, // audit_log - S_actions = 347, // actions - S_actions_may_quoted = 348, // actions_may_quoted - S_op = 349, // op - S_op_before_init = 350, // op_before_init - S_expression = 351, // expression - S_variables = 352, // variables - S_variables_pre_process = 353, // variables_pre_process - S_variables_may_be_quoted = 354, // variables_may_be_quoted - S_var = 355, // var - S_act = 356, // act - S_setvar_action = 357, // setvar_action - S_run_time_string = 358 // run_time_string + S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES = 212, // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + S_ACTION_TRANSFORMATION_MD5 = 213, // "ACTION_TRANSFORMATION_MD5" + S_ACTION_TRANSFORMATION_NONE = 214, // "ACTION_TRANSFORMATION_NONE" + S_ACTION_TRANSFORMATION_NORMALISE_PATH = 215, // "ACTION_TRANSFORMATION_NORMALISE_PATH" + S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 216, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 217, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 218, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 219, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + S_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 220, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 221, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + S_ACTION_TRANSFORMATION_REMOVE_NULLS = 222, // "ACTION_TRANSFORMATION_REMOVE_NULLS" + S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 223, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + S_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 224, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + S_ACTION_TRANSFORMATION_REPLACE_NULLS = 225, // "ACTION_TRANSFORMATION_REPLACE_NULLS" + S_ACTION_TRANSFORMATION_SHA1 = 226, // "ACTION_TRANSFORMATION_SHA1" + S_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 227, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + S_ACTION_TRANSFORMATION_TRIM = 228, // "ACTION_TRANSFORMATION_TRIM" + S_ACTION_TRANSFORMATION_TRIM_LEFT = 229, // "ACTION_TRANSFORMATION_TRIM_LEFT" + S_ACTION_TRANSFORMATION_TRIM_RIGHT = 230, // "ACTION_TRANSFORMATION_TRIM_RIGHT" + S_ACTION_TRANSFORMATION_UPPERCASE = 231, // "ACTION_TRANSFORMATION_UPPERCASE" + S_ACTION_TRANSFORMATION_URL_ENCODE = 232, // "ACTION_TRANSFORMATION_URL_ENCODE" + S_ACTION_TRANSFORMATION_URL_DECODE = 233, // "ACTION_TRANSFORMATION_URL_DECODE" + S_ACTION_TRANSFORMATION_URL_DECODE_UNI = 234, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 235, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + S_ACTION_VER = 236, // "Ver" + S_ACTION_XMLNS = 237, // "xmlns" + S_CONFIG_COMPONENT_SIG = 238, // "CONFIG_COMPONENT_SIG" + S_CONFIG_CONN_ENGINE = 239, // "CONFIG_CONN_ENGINE" + S_CONFIG_SEC_ARGUMENT_SEPARATOR = 240, // "CONFIG_SEC_ARGUMENT_SEPARATOR" + S_CONFIG_SEC_WEB_APP_ID = 241, // "CONFIG_SEC_WEB_APP_ID" + S_CONFIG_SEC_SERVER_SIG = 242, // "CONFIG_SEC_SERVER_SIG" + S_CONFIG_DIR_AUDIT_DIR = 243, // "CONFIG_DIR_AUDIT_DIR" + S_CONFIG_DIR_AUDIT_DIR_MOD = 244, // "CONFIG_DIR_AUDIT_DIR_MOD" + S_CONFIG_DIR_AUDIT_ENG = 245, // "CONFIG_DIR_AUDIT_ENG" + S_CONFIG_DIR_AUDIT_FLE_MOD = 246, // "CONFIG_DIR_AUDIT_FLE_MOD" + S_CONFIG_DIR_AUDIT_LOG = 247, // "CONFIG_DIR_AUDIT_LOG" + S_CONFIG_DIR_AUDIT_LOG2 = 248, // "CONFIG_DIR_AUDIT_LOG2" + S_CONFIG_DIR_AUDIT_LOG_P = 249, // "CONFIG_DIR_AUDIT_LOG_P" + S_CONFIG_DIR_AUDIT_STS = 250, // "CONFIG_DIR_AUDIT_STS" + S_CONFIG_DIR_AUDIT_TPE = 251, // "CONFIG_DIR_AUDIT_TPE" + S_CONFIG_DIR_DEBUG_LOG = 252, // "CONFIG_DIR_DEBUG_LOG" + S_CONFIG_DIR_DEBUG_LVL = 253, // "CONFIG_DIR_DEBUG_LVL" + S_CONFIG_SEC_CACHE_TRANSFORMATIONS = 254, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 255, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + S_CONFIG_SEC_HASH_ENGINE = 256, // "CONFIG_SEC_HASH_ENGINE" + S_CONFIG_SEC_HASH_KEY = 257, // "CONFIG_SEC_HASH_KEY" + S_CONFIG_SEC_HASH_PARAM = 258, // "CONFIG_SEC_HASH_PARAM" + S_CONFIG_SEC_HASH_METHOD_RX = 259, // "CONFIG_SEC_HASH_METHOD_RX" + S_CONFIG_SEC_HASH_METHOD_PM = 260, // "CONFIG_SEC_HASH_METHOD_PM" + S_CONFIG_SEC_CHROOT_DIR = 261, // "CONFIG_SEC_CHROOT_DIR" + S_CONFIG_DIR_GEO_DB = 262, // "CONFIG_DIR_GEO_DB" + S_CONFIG_DIR_GSB_DB = 263, // "CONFIG_DIR_GSB_DB" + S_CONFIG_SEC_GUARDIAN_LOG = 264, // "CONFIG_SEC_GUARDIAN_LOG" + S_CONFIG_DIR_PCRE_MATCH_LIMIT = 265, // "CONFIG_DIR_PCRE_MATCH_LIMIT" + S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 266, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + S_CONFIG_SEC_CONN_R_STATE_LIMIT = 267, // "CONFIG_SEC_CONN_R_STATE_LIMIT" + S_CONFIG_SEC_CONN_W_STATE_LIMIT = 268, // "CONFIG_SEC_CONN_W_STATE_LIMIT" + S_CONFIG_SEC_SENSOR_ID = 269, // "CONFIG_SEC_SENSOR_ID" + S_CONFIG_DIR_ARGS_LIMIT = 270, // "CONFIG_DIR_ARGS_LIMIT" + S_CONFIG_DIR_REQ_BODY = 271, // "CONFIG_DIR_REQ_BODY" + S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 272, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + S_CONFIG_DIR_REQ_BODY_LIMIT = 273, // "CONFIG_DIR_REQ_BODY_LIMIT" + S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 274, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 275, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + S_CONFIG_DIR_RES_BODY = 276, // "CONFIG_DIR_RES_BODY" + S_CONFIG_DIR_RES_BODY_LIMIT = 277, // "CONFIG_DIR_RES_BODY_LIMIT" + S_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 278, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + S_CONFIG_SEC_RULE_INHERITANCE = 279, // "CONFIG_SEC_RULE_INHERITANCE" + S_CONFIG_SEC_RULE_PERF_TIME = 280, // "CONFIG_SEC_RULE_PERF_TIME" + S_CONFIG_DIR_RULE_ENG = 281, // "CONFIG_DIR_RULE_ENG" + S_CONFIG_DIR_SEC_ACTION = 282, // "CONFIG_DIR_SEC_ACTION" + S_CONFIG_DIR_SEC_DEFAULT_ACTION = 283, // "CONFIG_DIR_SEC_DEFAULT_ACTION" + S_CONFIG_DIR_SEC_MARKER = 284, // "CONFIG_DIR_SEC_MARKER" + S_CONFIG_DIR_UNICODE_MAP_FILE = 285, // "CONFIG_DIR_UNICODE_MAP_FILE" + S_CONFIG_DIR_UNICODE_CODE_PAGE = 286, // "CONFIG_DIR_UNICODE_CODE_PAGE" + S_CONFIG_SEC_COLLECTION_TIMEOUT = 287, // "CONFIG_SEC_COLLECTION_TIMEOUT" + S_CONFIG_SEC_HTTP_BLKEY = 288, // "CONFIG_SEC_HTTP_BLKEY" + S_CONFIG_SEC_INTERCEPT_ON_ERROR = 289, // "CONFIG_SEC_INTERCEPT_ON_ERROR" + S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 290, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + S_CONFIG_SEC_RULE_REMOVE_BY_ID = 291, // "CONFIG_SEC_RULE_REMOVE_BY_ID" + S_CONFIG_SEC_RULE_REMOVE_BY_MSG = 292, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + S_CONFIG_SEC_RULE_REMOVE_BY_TAG = 293, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 294, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 295, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 296, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 297, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + S_CONFIG_UPDLOAD_KEEP_FILES = 298, // "CONFIG_UPDLOAD_KEEP_FILES" + S_CONFIG_UPDLOAD_SAVE_TMP_FILES = 299, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + S_CONFIG_UPLOAD_DIR = 300, // "CONFIG_UPLOAD_DIR" + S_CONFIG_UPLOAD_FILE_LIMIT = 301, // "CONFIG_UPLOAD_FILE_LIMIT" + S_CONFIG_UPLOAD_FILE_MODE = 302, // "CONFIG_UPLOAD_FILE_MODE" + S_CONFIG_VALUE_ABORT = 303, // "CONFIG_VALUE_ABORT" + S_CONFIG_VALUE_DETC = 304, // "CONFIG_VALUE_DETC" + S_CONFIG_VALUE_HTTPS = 305, // "CONFIG_VALUE_HTTPS" + S_CONFIG_VALUE_OFF = 306, // "CONFIG_VALUE_OFF" + S_CONFIG_VALUE_ON = 307, // "CONFIG_VALUE_ON" + S_CONFIG_VALUE_PARALLEL = 308, // "CONFIG_VALUE_PARALLEL" + S_CONFIG_VALUE_PROCESS_PARTIAL = 309, // "CONFIG_VALUE_PROCESS_PARTIAL" + S_CONFIG_VALUE_REJECT = 310, // "CONFIG_VALUE_REJECT" + S_CONFIG_VALUE_RELEVANT_ONLY = 311, // "CONFIG_VALUE_RELEVANT_ONLY" + S_CONFIG_VALUE_SERIAL = 312, // "CONFIG_VALUE_SERIAL" + S_CONFIG_VALUE_WARN = 313, // "CONFIG_VALUE_WARN" + S_CONFIG_XML_EXTERNAL_ENTITY = 314, // "CONFIG_XML_EXTERNAL_ENTITY" + S_CONGIG_DIR_RESPONSE_BODY_MP = 315, // "CONGIG_DIR_RESPONSE_BODY_MP" + S_CONGIG_DIR_SEC_ARG_SEP = 316, // "CONGIG_DIR_SEC_ARG_SEP" + S_CONGIG_DIR_SEC_COOKIE_FORMAT = 317, // "CONGIG_DIR_SEC_COOKIE_FORMAT" + S_CONFIG_SEC_COOKIEV0_SEPARATOR = 318, // "CONFIG_SEC_COOKIEV0_SEPARATOR" + S_CONGIG_DIR_SEC_DATA_DIR = 319, // "CONGIG_DIR_SEC_DATA_DIR" + S_CONGIG_DIR_SEC_STATUS_ENGINE = 320, // "CONGIG_DIR_SEC_STATUS_ENGINE" + S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 321, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 322, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + S_CONGIG_DIR_SEC_TMP_DIR = 323, // "CONGIG_DIR_SEC_TMP_DIR" + S_DIRECTIVE = 324, // "DIRECTIVE" + S_DIRECTIVE_SECRULESCRIPT = 325, // "DIRECTIVE_SECRULESCRIPT" + S_FREE_TEXT_QUOTE_MACRO_EXPANSION = 326, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + S_QUOTATION_MARK = 327, // "QUOTATION_MARK" + S_RUN_TIME_VAR_BLD = 328, // "RUN_TIME_VAR_BLD" + S_RUN_TIME_VAR_DUR = 329, // "RUN_TIME_VAR_DUR" + S_RUN_TIME_VAR_HSV = 330, // "RUN_TIME_VAR_HSV" + S_RUN_TIME_VAR_REMOTE_USER = 331, // "RUN_TIME_VAR_REMOTE_USER" + S_RUN_TIME_VAR_TIME = 332, // "RUN_TIME_VAR_TIME" + S_RUN_TIME_VAR_TIME_DAY = 333, // "RUN_TIME_VAR_TIME_DAY" + S_RUN_TIME_VAR_TIME_EPOCH = 334, // "RUN_TIME_VAR_TIME_EPOCH" + S_RUN_TIME_VAR_TIME_HOUR = 335, // "RUN_TIME_VAR_TIME_HOUR" + S_RUN_TIME_VAR_TIME_MIN = 336, // "RUN_TIME_VAR_TIME_MIN" + S_RUN_TIME_VAR_TIME_MON = 337, // "RUN_TIME_VAR_TIME_MON" + S_RUN_TIME_VAR_TIME_SEC = 338, // "RUN_TIME_VAR_TIME_SEC" + S_RUN_TIME_VAR_TIME_WDAY = 339, // "RUN_TIME_VAR_TIME_WDAY" + S_RUN_TIME_VAR_TIME_YEAR = 340, // "RUN_TIME_VAR_TIME_YEAR" + S_VARIABLE = 341, // "VARIABLE" + S_DICT_ELEMENT = 342, // "Dictionary element" + S_DICT_ELEMENT_REGEXP = 343, // "Dictionary element, selected by regexp" + S_YYACCEPT = 344, // $accept + S_input = 345, // input + S_line = 346, // line + S_audit_log = 347, // audit_log + S_actions = 348, // actions + S_actions_may_quoted = 349, // actions_may_quoted + S_op = 350, // op + S_op_before_init = 351, // op_before_init + S_expression = 352, // expression + S_variables = 353, // variables + S_variables_pre_process = 354, // variables_pre_process + S_variables_may_be_quoted = 355, // variables_may_be_quoted + S_var = 356, // var + S_act = 357, // act + S_setvar_action = 358, // setvar_action + S_run_time_string = 359 // run_time_string }; }; @@ -1789,6 +1793,7 @@ namespace yy { case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -2154,6 +2159,7 @@ switch (yykind) case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -2420,13 +2426,13 @@ switch (yykind) symbol_type (int tok, std::string v, location_type l) : super_type(token_type (tok), std::move (v), std::move (l)) { - YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); + YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); } #else symbol_type (int tok, const std::string& v, const location_type& l) : super_type(token_type (tok), v, l) { - YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); + YY_ASSERT (tok == token::TOK_ACTION_ACCURACY || tok == token::TOK_ACTION_ALLOW || tok == token::TOK_ACTION_APPEND || tok == token::TOK_ACTION_AUDIT_LOG || tok == token::TOK_ACTION_BLOCK || tok == token::TOK_ACTION_CAPTURE || tok == token::TOK_ACTION_CHAIN || tok == token::TOK_ACTION_CTL_AUDIT_ENGINE || tok == token::TOK_ACTION_CTL_AUDIT_LOG_PARTS || tok == token::TOK_ACTION_CTL_BDY_JSON || tok == token::TOK_ACTION_CTL_BDY_XML || tok == token::TOK_ACTION_CTL_BDY_URLENCODED || tok == token::TOK_ACTION_CTL_FORCE_REQ_BODY_VAR || tok == token::TOK_ACTION_CTL_REQUEST_BODY_ACCESS || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_BY_TAG || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID || tok == token::TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG || tok == token::TOK_ACTION_DENY || tok == token::TOK_ACTION_DEPRECATE_VAR || tok == token::TOK_ACTION_DROP || tok == token::TOK_ACTION_EXEC || tok == token::TOK_ACTION_EXPIRE_VAR || tok == token::TOK_ACTION_ID || tok == token::TOK_ACTION_INITCOL || tok == token::TOK_ACTION_LOG || tok == token::TOK_ACTION_LOG_DATA || tok == token::TOK_ACTION_MATURITY || tok == token::TOK_ACTION_MSG || tok == token::TOK_ACTION_MULTI_MATCH || tok == token::TOK_ACTION_NO_AUDIT_LOG || tok == token::TOK_ACTION_NO_LOG || tok == token::TOK_ACTION_PASS || tok == token::TOK_ACTION_PAUSE || tok == token::TOK_ACTION_PHASE || tok == token::TOK_ACTION_PREPEND || tok == token::TOK_ACTION_PROXY || tok == token::TOK_ACTION_REDIRECT || tok == token::TOK_ACTION_REV || tok == token::TOK_ACTION_SANITISE_ARG || tok == token::TOK_ACTION_SANITISE_MATCHED || tok == token::TOK_ACTION_SANITISE_MATCHED_BYTES || tok == token::TOK_ACTION_SANITISE_REQUEST_HEADER || tok == token::TOK_ACTION_SANITISE_RESPONSE_HEADER || tok == token::TOK_ACTION_SETENV || tok == token::TOK_ACTION_SETRSC || tok == token::TOK_ACTION_SETSID || tok == token::TOK_ACTION_SETUID || tok == token::TOK_ACTION_SEVERITY || tok == token::TOK_ACTION_SKIP || tok == token::TOK_ACTION_SKIP_AFTER || tok == token::TOK_ACTION_STATUS || tok == token::TOK_ACTION_TAG || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT || tok == token::TOK_ACTION_TRANSFORMATION_CMD_LINE || tok == token::TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_CSS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_JS_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_LENGTH || tok == token::TOK_ACTION_TRANSFORMATION_LOWERCASE || tok == token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES || tok == token::TOK_ACTION_TRANSFORMATION_MD5 || tok == token::TOK_ACTION_TRANSFORMATION_NONE || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH || tok == token::TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS || tok == token::TOK_ACTION_TRANSFORMATION_REPLACE_NULLS || tok == token::TOK_ACTION_TRANSFORMATION_SHA1 || tok == token::TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_TRIM || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_LEFT || tok == token::TOK_ACTION_TRANSFORMATION_TRIM_RIGHT || tok == token::TOK_ACTION_TRANSFORMATION_UPPERCASE || tok == token::TOK_ACTION_TRANSFORMATION_URL_ENCODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE || tok == token::TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI || tok == token::TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE || tok == token::TOK_ACTION_VER || tok == token::TOK_ACTION_XMLNS || tok == token::TOK_CONFIG_COMPONENT_SIG || tok == token::TOK_CONFIG_CONN_ENGINE || tok == token::TOK_CONFIG_SEC_ARGUMENT_SEPARATOR || tok == token::TOK_CONFIG_SEC_WEB_APP_ID || tok == token::TOK_CONFIG_SEC_SERVER_SIG || tok == token::TOK_CONFIG_DIR_AUDIT_DIR || tok == token::TOK_CONFIG_DIR_AUDIT_DIR_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_ENG || tok == token::TOK_CONFIG_DIR_AUDIT_FLE_MOD || tok == token::TOK_CONFIG_DIR_AUDIT_LOG || tok == token::TOK_CONFIG_DIR_AUDIT_LOG2 || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_P || tok == token::TOK_CONFIG_DIR_AUDIT_STS || tok == token::TOK_CONFIG_DIR_AUDIT_TPE || tok == token::TOK_CONFIG_DIR_DEBUG_LOG || tok == token::TOK_CONFIG_DIR_DEBUG_LVL || tok == token::TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS || tok == token::TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS || tok == token::TOK_CONFIG_SEC_HASH_ENGINE || tok == token::TOK_CONFIG_SEC_HASH_KEY || tok == token::TOK_CONFIG_SEC_HASH_PARAM || tok == token::TOK_CONFIG_SEC_HASH_METHOD_RX || tok == token::TOK_CONFIG_SEC_HASH_METHOD_PM || tok == token::TOK_CONFIG_SEC_CHROOT_DIR || tok == token::TOK_CONFIG_DIR_GEO_DB || tok == token::TOK_CONFIG_DIR_GSB_DB || tok == token::TOK_CONFIG_SEC_GUARDIAN_LOG || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT || tok == token::TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION || tok == token::TOK_CONFIG_SEC_CONN_R_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_CONN_W_STATE_LIMIT || tok == token::TOK_CONFIG_SEC_SENSOR_ID || tok == token::TOK_CONFIG_DIR_ARGS_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY || tok == token::TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT || tok == token::TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION || tok == token::TOK_CONFIG_SEC_RULE_INHERITANCE || tok == token::TOK_CONFIG_SEC_RULE_PERF_TIME || tok == token::TOK_CONFIG_DIR_RULE_ENG || tok == token::TOK_CONFIG_DIR_SEC_ACTION || tok == token::TOK_CONFIG_DIR_SEC_DEFAULT_ACTION || tok == token::TOK_CONFIG_DIR_SEC_MARKER || tok == token::TOK_CONFIG_DIR_UNICODE_MAP_FILE || tok == token::TOK_CONFIG_DIR_UNICODE_CODE_PAGE || tok == token::TOK_CONFIG_SEC_COLLECTION_TIMEOUT || tok == token::TOK_CONFIG_SEC_HTTP_BLKEY || tok == token::TOK_CONFIG_SEC_INTERCEPT_ON_ERROR || tok == token::TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID || tok == token::TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID || tok == token::TOK_CONFIG_UPDLOAD_KEEP_FILES || tok == token::TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES || tok == token::TOK_CONFIG_UPLOAD_DIR || tok == token::TOK_CONFIG_UPLOAD_FILE_LIMIT || tok == token::TOK_CONFIG_UPLOAD_FILE_MODE || tok == token::TOK_CONFIG_VALUE_ABORT || tok == token::TOK_CONFIG_VALUE_DETC || tok == token::TOK_CONFIG_VALUE_HTTPS || tok == token::TOK_CONFIG_VALUE_OFF || tok == token::TOK_CONFIG_VALUE_ON || tok == token::TOK_CONFIG_VALUE_PARALLEL || tok == token::TOK_CONFIG_VALUE_PROCESS_PARTIAL || tok == token::TOK_CONFIG_VALUE_REJECT || tok == token::TOK_CONFIG_VALUE_RELEVANT_ONLY || tok == token::TOK_CONFIG_VALUE_SERIAL || tok == token::TOK_CONFIG_VALUE_WARN || tok == token::TOK_CONFIG_XML_EXTERNAL_ENTITY || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP || tok == token::TOK_CONGIG_DIR_SEC_ARG_SEP || tok == token::TOK_CONGIG_DIR_SEC_COOKIE_FORMAT || tok == token::TOK_CONFIG_SEC_COOKIEV0_SEPARATOR || tok == token::TOK_CONGIG_DIR_SEC_DATA_DIR || tok == token::TOK_CONGIG_DIR_SEC_STATUS_ENGINE || tok == token::TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION || tok == token::TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION || tok == token::TOK_CONGIG_DIR_SEC_TMP_DIR || tok == token::TOK_DIRECTIVE || tok == token::TOK_DIRECTIVE_SECRULESCRIPT || tok == token::TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION || tok == token::TOK_QUOTATION_MARK || tok == token::TOK_RUN_TIME_VAR_BLD || tok == token::TOK_RUN_TIME_VAR_DUR || tok == token::TOK_RUN_TIME_VAR_HSV || tok == token::TOK_RUN_TIME_VAR_REMOTE_USER || tok == token::TOK_RUN_TIME_VAR_TIME || tok == token::TOK_RUN_TIME_VAR_TIME_DAY || tok == token::TOK_RUN_TIME_VAR_TIME_EPOCH || tok == token::TOK_RUN_TIME_VAR_TIME_HOUR || tok == token::TOK_RUN_TIME_VAR_TIME_MIN || tok == token::TOK_RUN_TIME_VAR_TIME_MON || tok == token::TOK_RUN_TIME_VAR_TIME_SEC || tok == token::TOK_RUN_TIME_VAR_TIME_WDAY || tok == token::TOK_RUN_TIME_VAR_TIME_YEAR || tok == token::TOK_VARIABLE || tok == token::TOK_DICT_ELEMENT || tok == token::TOK_DICT_ELEMENT_REGEXP); } #endif }; @@ -5657,6 +5663,21 @@ switch (yykind) return symbol_type (token::TOK_ACTION_TRANSFORMATION_LOWERCASE, v, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES (std::string v, location_type l) + { + return symbol_type (token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES (const std::string& v, const location_type& l) + { + return symbol_type (token::TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -7952,9 +7973,9 @@ switch (yykind) /// Constants. enum { - yylast_ = 3268, ///< Last index in yytable_. + yylast_ = 3276, ///< Last index in yytable_. yynnts_ = 16, ///< Number of nonterminal symbols. - yyfinal_ = 337 ///< Termination state number. + yyfinal_ = 338 ///< Termination state number. }; @@ -8032,10 +8053,10 @@ switch (yykind) 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342 + 335, 336, 337, 338, 339, 340, 341, 342, 343 }; // Last valid token kind. - const int code_max = 597; + const int code_max = 598; if (t <= 0) return symbol_kind::S_YYEOF; @@ -8120,6 +8141,7 @@ switch (yykind) case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -8378,6 +8400,7 @@ switch (yykind) case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" + case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -8603,7 +8626,7 @@ switch (yykind) } } // yy -#line 8607 "seclang-parser.hh" +#line 8630 "seclang-parser.hh" diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index fdb2bb1113..75ee7c08e0 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -77,6 +77,7 @@ class Driver; #include "src/actions/transformations/none.h" #include "src/actions/transformations/url_decode.h" #include "src/actions/transformations/lower_case.h" +#include "src/actions/transformations/php_args_names.h" #include "src/actions/transformations/upper_case.h" #include "src/actions/transformations/hex_decode.h" #include "src/actions/transformations/url_encode.h" @@ -546,6 +547,7 @@ using namespace modsecurity::operators; ACTION_TRANSFORMATION_JS_DECODE "ACTION_TRANSFORMATION_JS_DECODE" ACTION_TRANSFORMATION_LENGTH "ACTION_TRANSFORMATION_LENGTH" ACTION_TRANSFORMATION_LOWERCASE "ACTION_TRANSFORMATION_LOWERCASE" + ACTION_TRANSFORMATION_PHP_ARGS_NAMES "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" ACTION_TRANSFORMATION_MD5 "ACTION_TRANSFORMATION_MD5" ACTION_TRANSFORMATION_NONE "ACTION_TRANSFORMATION_NONE" ACTION_TRANSFORMATION_NORMALISE_PATH "ACTION_TRANSFORMATION_NORMALISE_PATH" @@ -2903,6 +2905,10 @@ act: { ACTION_CONTAINER($$, new actions::transformations::LowerCase($1)); } + | ACTION_TRANSFORMATION_PHP_ARGS_NAMES + { + ACTION_CONTAINER($$, new actions::transformations::PhpArgsNames($1)); + } | ACTION_TRANSFORMATION_UPPERCASE { ACTION_CONTAINER($$, new actions::transformations::UpperCase($1)); diff --git a/src/parser/seclang-scanner.cc b/src/parser/seclang-scanner.cc index 74418c522b..5cbf5a6293 100644 --- a/src/parser/seclang-scanner.cc +++ b/src/parser/seclang-scanner.cc @@ -433,8 +433,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 540 -#define YY_END_OF_BUFFER 541 +#define YY_NUM_RULES 541 +#define YY_END_OF_BUFFER 542 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -442,440 +442,441 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3927] = +static const flex_int16_t yy_accept[3938] = { 0, - 0, 0, 0, 0, 271, 271, 279, 279, 0, 0, + 0, 0, 0, 0, 272, 272, 280, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 283, 283, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 541, 533, 527, 264, 268, 269, - 267, 270, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 287, 287, 540, 287, 287, - - 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 125, 271, 277, 279, - 281, 275, 274, 276, 273, 279, 272, 491, 491, 490, - 491, 491, 491, 120, 119, 118, 127, 127, 127, 134, - 126, 127, 129, 129, 129, 128, 134, 129, 132, 132, - 132, 131, 134, 130, 132, 532, 532, 532, 540, 493, - 492, 442, 445, 540, 445, 442, 442, 442, 431, 431, - 431, 434, 436, 431, 435, 431, 425, 431, 501, 501, - 501, 500, 505, 501, 503, 503, 503, 502, 505, 503, - 117, 117, 109, 117, 114, 108, 117, 117, 117, 117, - - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 112, 117, 111, 540, 510, 540, - 506, 519, 540, 283, 284, 540, 497, 497, 496, 499, - 497, 495, 495, 494, 499, 495, 149, 534, 535, 536, - 136, 135, 136, 136, 136, 136, 136, 136, 140, 139, - 144, 145, 145, 144, 142, 141, 139, 147, 148, 148, - 146, 147, 527, 264, 0, 267, 267, 267, 0, 0, - 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, - 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 410, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 415, 0, - 0, 0, 0, 0, 121, 0, 124, 271, 277, 279, - 281, 278, 279, 280, 281, 282, 527, 0, 0, 0, + 0, 0, 0, 0, 542, 534, 528, 265, 269, 270, + 268, 271, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 288, 288, 541, 288, 288, + + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 126, 272, 278, 280, + 282, 276, 275, 277, 274, 280, 273, 492, 492, 491, + 492, 492, 492, 121, 120, 119, 128, 128, 128, 135, + 127, 128, 130, 130, 130, 129, 135, 130, 133, 133, + 133, 132, 135, 131, 133, 533, 533, 533, 541, 494, + 493, 443, 446, 541, 446, 443, 443, 443, 432, 432, + 432, 435, 437, 432, 436, 432, 426, 432, 502, 502, + 502, 501, 506, 502, 504, 504, 504, 503, 506, 504, + 118, 118, 110, 118, 115, 109, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 113, 118, 112, 541, 511, 541, + 507, 520, 541, 284, 285, 541, 498, 498, 497, 500, + 498, 496, 496, 495, 500, 496, 150, 535, 536, 537, + 137, 136, 137, 137, 137, 137, 137, 137, 141, 140, + 145, 146, 146, 145, 143, 142, 140, 148, 149, 149, + 147, 148, 528, 265, 0, 268, 268, 268, 0, 0, + 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, + 0, 0, 529, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, + 0, 0, 0, 0, 122, 0, 125, 272, 278, 280, + 282, 279, 280, 281, 282, 283, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 127, 0, 127, 127, 127, - 0, 133, 121, 127, 127, 129, 0, 0, 129, 129, - 129, 0, 129, 121, 129, 132, 0, 0, 132, 132, - 132, 0, 132, 121, 132, 532, 532, 532, 0, 530, - 532, 442, 0, 442, 0, 442, 442, 0, 442, 442, - 431, 0, 0, 430, 431, 431, 431, 0, 431, 504, - - 431, 431, 0, 430, 0, 431, 423, 424, 431, 431, - 501, 0, 0, 501, 501, 501, 0, 501, 121, 501, - 503, 0, 503, 503, 0, 503, 0, 0, 121, 503, - 503, 0, 109, 0, 108, 0, 110, 114, 115, 0, - 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 0, 128, 128, 128, + 0, 134, 122, 128, 128, 130, 0, 0, 130, 130, + 130, 0, 130, 122, 130, 133, 0, 0, 133, 133, + 133, 0, 133, 122, 133, 533, 533, 533, 0, 531, + 533, 443, 0, 443, 0, 443, 443, 0, 443, 443, + 432, 0, 0, 431, 432, 432, 432, 0, 432, 505, + + 432, 432, 0, 431, 0, 432, 424, 425, 432, 432, + 502, 0, 0, 502, 502, 502, 0, 502, 122, 502, + 504, 0, 504, 504, 0, 504, 0, 0, 122, 504, + 504, 0, 110, 0, 109, 0, 111, 115, 116, 0, + 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 106, 0, 0, 112, 0, 113, 111, - 111, 0, 510, 0, 519, 0, 510, 508, 518, 0, - 506, 519, 0, 0, 526, 0, 509, 0, 283, 284, - - 0, 284, 0, 0, 497, 0, 497, 0, 498, 497, - 495, 0, 0, 495, 0, 495, 534, 535, 536, 0, - 0, 0, 0, 0, 0, 137, 138, 144, 0, 0, - 144, 0, 144, 143, 147, 0, 0, 147, 0, 147, - 267, 0, 0, 0, 0, 0, 0, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 528, 529, 0, 0, - 0, 393, 0, 0, 383, 0, 0, 0, 418, 0, + 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 107, 0, 0, 113, 0, 114, 112, + 112, 0, 511, 0, 520, 0, 511, 509, 519, 0, + 507, 520, 0, 0, 527, 0, 510, 0, 284, 285, + + 0, 285, 0, 0, 498, 0, 498, 0, 499, 498, + 496, 0, 0, 496, 0, 496, 535, 536, 537, 0, + 0, 0, 0, 0, 0, 138, 139, 145, 0, 0, + 145, 0, 145, 144, 148, 0, 0, 148, 0, 148, + 268, 0, 0, 0, 0, 0, 0, 0, 216, 0, + 0, 0, 0, 0, 0, 0, 529, 530, 0, 0, + 0, 394, 0, 0, 384, 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 421, 0, 0, 0, 0, 391, 121, - 122, 123, 0, 0, 0, 0, 463, 0, 464, 0, - - 465, 0, 0, 468, 469, 471, 0, 0, 473, 0, - 0, 0, 0, 0, 0, 464, 0, 0, 0, 127, - 0, 0, 121, 122, 0, 129, 0, 0, 121, 122, - 0, 132, 0, 0, 121, 122, 530, 531, 442, 0, - 442, 0, 437, 0, 437, 0, 442, 0, 431, 0, - 0, 431, 0, 430, 0, 431, 431, 431, 431, 431, - 0, 0, 0, 0, 431, 431, 431, 0, 501, 0, - 0, 121, 122, 0, 503, 0, 0, 121, 121, 122, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 422, 0, 0, 0, 0, 392, 122, + 123, 124, 0, 0, 0, 0, 464, 0, 465, 0, + + 466, 0, 0, 469, 470, 472, 0, 0, 474, 0, + 0, 0, 0, 0, 0, 465, 0, 0, 0, 128, + 0, 0, 122, 123, 0, 130, 0, 0, 122, 123, + 0, 133, 0, 0, 122, 123, 531, 532, 443, 0, + 443, 0, 438, 0, 438, 0, 443, 0, 432, 0, + 0, 432, 0, 431, 0, 432, 432, 432, 432, 432, + 0, 0, 0, 0, 432, 432, 432, 0, 502, 0, + 0, 122, 123, 0, 504, 0, 0, 122, 122, 123, + 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 107, 508, 518, 514, 517, 0, 521, - 0, 0, 526, 0, 0, 509, 507, 516, 0, 0, - 285, 0, 0, 497, 0, 0, 0, 495, 0, 0, - 0, 0, 0, 0, 0, 144, 0, 0, 0, 147, - 0, 0, 267, 0, 0, 0, 0, 0, 168, 0, + 0, 0, 107, 108, 509, 519, 515, 518, 0, 522, + 0, 0, 527, 0, 0, 510, 508, 517, 0, 0, + 286, 0, 0, 498, 0, 0, 0, 496, 0, 0, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 148, + 0, 0, 268, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, - 529, 359, 0, 0, 394, 0, 0, 384, 0, 0, + 530, 360, 0, 0, 395, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 387, 0, 0, 0, 406, 0, 0, 416, - 0, 0, 392, 122, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 470, 472, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 127, 0, 122, 129, - 0, 122, 132, 0, 122, 531, 442, 0, 0, 0, - 0, 442, 0, 0, 438, 443, 439, 438, 443, 439, - 431, 0, 431, 431, 431, 0, 431, 0, 0, 0, - 0, 431, 0, 430, 0, 431, 431, 426, 432, 427, - - 426, 432, 427, 0, 0, 431, 431, 501, 0, 122, - 503, 0, 122, 122, 0, 0, 0, 0, 0, 0, + 0, 0, 388, 0, 0, 0, 407, 0, 0, 417, + 0, 0, 393, 123, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 471, 473, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 128, 0, 123, 130, + 0, 123, 133, 0, 123, 532, 443, 0, 0, 0, + 0, 443, 0, 0, 439, 444, 440, 439, 444, 440, + 432, 0, 432, 432, 432, 0, 432, 0, 0, 0, + 0, 432, 0, 431, 0, 432, 432, 427, 433, 428, + + 427, 433, 428, 0, 0, 432, 432, 502, 0, 123, + 504, 0, 123, 123, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 49, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 0, 0, 107, 514, 517, 513, - 521, 0, 524, 0, 0, 520, 0, 0, 507, 516, - 512, 515, 285, 0, 286, 497, 0, 495, 0, 0, + 0, 0, 0, 0, 63, 0, 0, 108, 515, 518, + 514, 522, 0, 525, 0, 0, 521, 0, 0, 508, + 517, 513, 516, 286, 0, 287, 498, 0, 496, 0, - 0, 0, 0, 144, 0, 147, 0, 267, 267, 212, - 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 145, 0, 148, 0, 268, 268, + 213, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, - 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, - 0, 0, 0, 422, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 489, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, + 0, 376, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 389, 0, 0, + 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 440, 440, 440, 0, 0, - 428, 428, 0, 0, 0, 431, 431, 0, 428, 0, - 431, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 14, 0, - 0, 16, 0, 53, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 441, 441, 441, 0, + 0, 429, 429, 0, 0, 0, 432, 432, 0, 429, + 0, 432, 0, 0, 0, 0, 0, 0, 0, 26, + 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 14, + 0, 0, 16, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, - 524, 0, 525, 520, 0, 522, 0, 512, 515, 511, + 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 514, 525, 0, 526, 521, 0, 523, 0, 513, - 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 267, 267, 0, 0, 0, 169, 0, 0, - 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 516, 512, 287, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 268, 268, 0, 0, 0, 170, + 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, - 0, 0, 0, 376, 0, 0, 409, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 0, + 0, 0, 0, 0, 0, 377, 0, 0, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 357, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 444, 441, 444, 441, - 433, 429, 433, 429, 0, 428, 0, 0, 0, 431, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 41, 0, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 358, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 445, 442, + 445, 442, 434, 430, 434, 430, 0, 429, 0, 0, + 0, 432, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 41, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, - 0, 74, 0, 92, 0, 0, 0, 0, 0, 0, - 0, 0, 525, 522, 0, 523, 511, 0, 0, 0, + 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, + 0, 0, 0, 0, 74, 0, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 526, 523, 0, 524, 512, - 267, 267, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 268, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 0, 0, 41, 0, - 41, 41, 0, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 15, 0, 52, 0, 54, 22, 55, 56, - 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 460, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 41, 0, 41, 41, 0, 0, 0, 0, 0, + 0, 0, 50, 0, 0, 15, 0, 52, 0, 54, + 22, 55, 56, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, - 523, 0, 0, 267, 267, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 0, 0, 65, 524, 0, 0, 268, 268, 0, + 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 0, 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 420, 0, 0, - 399, 0, 0, 402, 403, 404, 0, 0, 0, 0, - 358, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, - - 0, 0, 0, 0, 0, 40, 41, 40, 0, 41, - 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 23, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, + 0, 0, 362, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 64, 0, 267, 267, 0, 0, 0, 0, 537, 0, - 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, + 0, 421, 0, 0, 400, 0, 0, 403, 404, 405, + 0, 0, 0, 0, 359, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 27, 0, 0, 0, 0, 0, 0, 40, + 41, 40, 0, 41, 0, 0, 103, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, + 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64, 0, 268, 268, 0, + 0, 0, 0, 538, 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, - 0, 0, 363, 295, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 419, 0, 0, 0, 0, 354, 0, 0, 401, - 407, 405, 355, 0, 0, 0, 461, 0, 0, 462, - 0, 0, 0, 0, 466, 0, 474, 476, 0, 0, - 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 0, 40, 0, 0, 0, 0, 0, 0, 50, 0, - - 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, - 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 363, 0, 0, 364, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 267, 267, 265, - 0, 265, 217, 0, 0, 0, 0, 0, 0, 0, + 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 420, 0, 0, 0, + 0, 355, 0, 0, 402, 408, 406, 356, 0, 0, + 0, 462, 0, 0, 463, 0, 0, 0, 0, 467, + 0, 475, 477, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 242, 0, + 0, 0, 0, 0, 40, 0, 40, 0, 0, 0, + + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, - - 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 268, 268, 266, 0, 266, 218, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, - 0, 0, 0, 0, 0, 0, 479, 0, 488, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 485, 486, - 0, 0, 0, 0, 0, 0, 25, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 48, 0, 48, 10, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, + 0, 0, 0, 0, 0, 292, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, - 0, 0, 0, 267, 0, 265, 265, 265, 265, 265, - 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, - - 367, 365, 0, 0, 0, 0, 0, 301, 0, 0, + 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, + 0, 0, 480, 0, 489, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 486, 487, 0, 0, 0, 0, + 0, 0, 25, 0, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 48, 0, 48, + 10, 11, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 325, 326, 327, 398, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, - 0, 0, 351, 352, 353, 414, 0, 0, 477, 0, - 0, 450, 447, 0, 0, 470, 0, 0, 0, 0, - 0, 0, 0, 487, 0, 0, 456, 0, 453, 0, - 0, 0, 0, 25, 0, 0, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 44, 44, 0, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, + 268, 0, 266, 266, 266, 266, 266, 0, 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 91, 0, 78, 77, - 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 80, 83, 81, 0, 267, 267, - 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 243, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 366, 0, - 0, 298, 0, 0, 373, 0, 395, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 293, 0, 0, 368, 366, 0, + 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, + 327, 328, 399, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 344, 0, 0, 0, 0, 0, 352, + 353, 354, 415, 0, 0, 478, 0, 0, 451, 448, + 0, 0, 471, 0, 0, 0, 0, 0, 0, 0, + 488, 0, 0, 457, 0, 454, 0, 0, 0, 0, + 25, 0, 0, 0, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 44, 0, 0, 48, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 324, 0, 0, 0, 335, 0, 0, 0, 339, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, + 0, 0, 0, 92, 0, 78, 77, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 449, 478, 0, 0, 0, 481, 0, 0, 0, 0, - 0, 455, 0, 0, 0, 0, 24, 0, 0, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, - 44, 44, 0, 44, 0, 44, 44, 0, 0, 47, + 0, 95, 81, 84, 82, 0, 268, 268, 0, 0, + 0, 0, 221, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 369, 367, 0, 0, 299, + 0, 0, 374, 0, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, + 0, 0, 336, 0, 0, 0, 340, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 450, 479, + 0, 0, 0, 482, 0, 0, 0, 0, 0, 456, + 0, 0, 0, 0, 24, 0, 0, 24, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 44, 44, + + 0, 44, 0, 44, 44, 0, 0, 47, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, - 266, 266, 266, 266, 213, 0, 0, 0, 0, 0, - 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, - 0, 174, 0, 0, 0, 0, 0, 0, 241, 0, - 0, 0, 190, 0, 0, 0, 0, 189, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 234, 0, 0, - 0, 0, 0, 153, 153, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 374, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 267, 267, + 267, 267, 267, 214, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 329, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 344, 0, 0, 0, 0, 0, 0, 460, - 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, - 24, 25, 26, 0, 0, 0, 0, 0, 0, 103, - 44, 43, 44, 44, 43, 0, 0, 44, 43, 0, - 0, 44, 43, 44, 44, 45, 47, 48, 0, 0, - - 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, + 0, 0, 241, 0, 0, 0, 0, 0, 0, 0, + 175, 0, 0, 0, 0, 0, 0, 242, 0, 0, + + 0, 191, 0, 0, 0, 0, 190, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, + 0, 0, 154, 154, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, - 218, 0, 0, 161, 0, 163, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, - 248, 0, 0, 263, 263, 0, 0, 0, 0, 0, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 345, 0, 0, 0, 0, 0, 0, 461, 0, + 0, 0, 483, 0, 0, 0, 0, 0, 0, 24, + 25, 26, 0, 0, 0, 0, 0, 0, 104, 44, + 43, 44, 44, 43, 0, 0, 44, 43, 0, 0, + + 44, 43, 44, 44, 45, 47, 48, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 219, 0, 0, 162, 0, 164, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, + 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, + 249, 0, 0, 264, 264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 289, 0, 0, 389, 0, 0, 0, 0, + 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, + 0, 0, 290, 0, 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, + 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 43, 0, 44, 44, 43, 0, 43, 0, 0, 43, 0, 0, 45, 43, 45, 45, 43, 0, 44, 43, 44, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 60, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 60, 0, 60, 0, 60, 0, 0, 71, 70, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 87, 69, 82, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 0, 173, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, - 0, 0, 0, 0, 0, 245, 244, 0, 0, 0, + 0, 0, 0, 80, 0, 0, 0, 88, 69, 83, + 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 176, 0, 0, 0, 0, 0, 246, 245, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 153, 0, 0, 0, 0, 291, + 294, 0, 391, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, + 0, 0, 0, 0, 0, 0, 0, 378, 0, 380, + 0, 343, 0, 0, 0, 351, 0, 0, 0, 0, + 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 0, 0, 42, 44, 42, 0, 44, 42, + 0, 0, 42, 44, 0, 42, 0, 42, 45, 45, + 42, 45, 26, 0, 18, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, + 0, 0, 97, 97, 0, 67, 0, 0, 0, 0, + 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 240, 0, 0, 0, 0, 0, 0, 0, 0, 260, + 0, 178, 178, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 0, 290, 293, - 0, 390, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 318, 0, 0, - - 0, 0, 0, 0, 0, 0, 377, 0, 379, 0, - 342, 0, 0, 0, 350, 0, 0, 0, 0, 0, - 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 0, 0, 42, 44, 42, 0, 44, 42, 0, - 0, 42, 44, 0, 42, 0, 42, 45, 45, 42, - 45, 26, 0, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, - 0, 96, 96, 0, 67, 0, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - - 177, 177, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, - 0, 0, 0, 152, 0, 0, 294, 0, 0, 0, - 397, 0, 0, 300, 0, 0, 0, 0, 0, 0, + 210, 0, 0, 0, 153, 0, 0, 295, 0, 0, + 0, 398, 0, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 333, 0, 378, 0, 336, 380, 0, 341, 0, 381, - 0, 356, 0, 466, 0, 0, 0, 0, 0, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 42, 42, - 0, 42, 0, 44, 0, 42, 45, 43, 45, 45, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, 68, 66, 100, 0, - 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, + 0, 334, 0, 379, 0, 337, 381, 0, 342, 0, + 382, 0, 357, 0, 467, 0, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 42, + + 42, 0, 42, 0, 44, 0, 42, 45, 43, 45, + 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 60, 0, 0, 0, 0, 0, 0, 68, 66, 101, + 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 254, 0, 0, 0, 236, 0, 0, 0, - 232, 232, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 369, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 328, 332, 0, 0, 0, 0, 382, 0, 349, 0, + 0, 0, 0, 255, 0, 0, 0, 237, 0, 0, + 0, 233, 233, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, + 0, 329, 333, 0, 0, 0, 0, 383, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 43, 45, 45, 43, 45, - 0, 0, 0, 0, 0, 0, 60, 0, 72, 0, - 76, 0, 0, 0, 0, 0, 101, 0, 0, 0, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 0, 247, 0, 0, 0, 539, 0, - 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, + 0, 0, 0, 0, 0, 43, 43, 45, 45, 43, + 45, 0, 0, 0, 0, 0, 0, 60, 0, 72, + 0, 76, 0, 0, 0, 0, 0, 102, 0, 0, + 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 177, 0, 248, 0, 0, 0, 540, + 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 206, 0, 288, 0, 370, 0, 299, 371, 0, 0, - 0, 0, 309, 0, 0, 0, 0, 0, 0, 0, + 0, 207, 0, 289, 0, 371, 0, 300, 372, 0, + 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 43, 0, 0, 0, 0, 0, 60, - 0, 89, 95, 95, 0, 86, 0, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 249, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 193, 193, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 211, 0, 296, 297, 372, - 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 322, 0, 334, 0, 0, 0, - - 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 155, 0, 165, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, - 0, 0, 0, 0, 0, 0, 194, 194, 0, 196, - 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 210, 223, 0, 0, 0, 305, 0, 0, 0, 0, + 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, + 60, 0, 90, 96, 96, 0, 87, 0, 181, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, + 0, 0, 250, 180, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 194, 194, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 0, 297, 298, + 373, 0, 0, 0, 0, 309, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 323, 0, 335, 0, 0, + 0, 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 448, 0, 0, 0, 454, 0, 0, 29, - 0, 0, 0, 36, 0, 0, 19, 0, 0, 85, - - 99, 0, 0, 162, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 183, 0, 0, 188, + 0, 0, 0, 0, 0, 156, 0, 166, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, + 0, 0, 0, 0, 0, 0, 0, 195, 195, 0, + 197, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 211, 224, 0, 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 306, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 385, 337, - 0, 346, 0, 451, 0, 0, 457, 0, 0, 0, - 0, 37, 0, 20, 0, 160, 226, 226, 0, 160, - 156, 0, 0, 0, 262, 0, 250, 0, 229, 0, - 0, 0, 0, 0, 0, 0, 187, 0, 0, 195, - 197, 0, 0, 0, 0, 151, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 313, 0, 0, - 0, 320, 0, 0, 386, 338, 0, 347, 452, 0, - 458, 0, 34, 0, 0, 21, 0, 0, 0, 157, - 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 151, 0, 0, 207, - 0, 0, 304, 0, 0, 0, 0, 0, 0, 0, - 331, 345, 348, 0, 0, 0, 0, 159, 0, 0, - 237, 0, 0, 0, 228, 0, 0, 261, 0, 0, + 0, 0, 0, 449, 0, 0, 0, 455, 0, 0, + + 29, 0, 0, 0, 36, 0, 0, 19, 0, 0, + 86, 100, 0, 0, 163, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, + 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 193, 0, 0, 0, 307, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, + 338, 0, 347, 0, 452, 0, 0, 458, 0, 0, + 0, 0, 37, 0, 20, 0, 161, 227, 227, 0, + 161, 157, 0, 0, 0, 263, 0, 251, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, + + 196, 198, 0, 0, 0, 0, 152, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, + 0, 0, 321, 0, 0, 387, 339, 0, 348, 453, + 0, 459, 0, 34, 0, 0, 21, 0, 0, 0, + 158, 0, 0, 252, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 152, 0, 0, + 208, 0, 0, 305, 0, 0, 0, 0, 0, 0, + 0, 332, 346, 349, 0, 0, 0, 0, 160, 0, + 0, 238, 0, 0, 0, 229, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 310, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 158, 150, 0, 0, 0, - 0, 0, 182, 0, 0, 224, 224, 0, 205, 0, - 203, 0, 0, 0, 255, 0, 302, 0, 0, 0, - 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 150, 0, 0, 0, 0, 186, 0, 0, 0, 201, - 0, 199, 0, 256, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 38, 0, 171, 171, 0, - 0, 0, 0, 0, 0, 204, 202, 0, 0, 0, - 0, 0, 316, 317, 0, 330, 0, 0, 0, 0, - 39, 0, 257, 178, 0, 184, 0, 200, 198, 0, - - 0, 0, 321, 0, 0, 0, 31, 172, 181, 225, - 303, 307, 0, 33, 30, 0, 0, 0, 0, 0, - 312, 0, 0, 0, 32, 0 + 0, 0, 0, 0, 311, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 159, 151, 0, 0, + 0, 0, 0, 183, 0, 0, 225, 225, 0, 206, + 0, 204, 0, 0, 0, 256, 0, 303, 0, 0, + 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 151, 0, 0, 0, 0, 187, 0, 0, 0, + 202, 0, 200, 0, 257, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, 172, 172, + 0, 0, 0, 0, 0, 0, 205, 203, 0, 0, + 0, 0, 0, 317, 318, 0, 331, 0, 0, 0, + + 0, 39, 0, 258, 179, 0, 185, 0, 201, 199, + 0, 0, 0, 322, 0, 0, 0, 31, 173, 182, + 226, 304, 308, 0, 33, 30, 0, 0, 0, 0, + 0, 313, 0, 0, 0, 32, 0 } ; static const YY_CHAR yy_ec[256] = @@ -923,960 +924,962 @@ static const YY_CHAR yy_meta[88] = 15, 15, 15, 15, 17, 18, 1 } ; -static const flex_int16_t yy_base[4212] = +static const flex_int16_t yy_base[4223] = { 0, 0, 80, 161, 0, 4, 8, 14, 247, 21, 87, 101, 254, 25, 40, 53, 261, 265, 275, 284, 290, - 94, 304,11906,11905,11902,11853, 324, 347, 365, 383, + 94, 304,12084,12083,12082,12081, 324, 347, 365, 383, 413, 434, 314, 448, 335, 397, 505, 0, 457, 464, 591, 597, 603, 609, 419, 425, 271, 298, 102, 612, - 11854,11851,11825,11819,11818,11815,11789,11783, 614, 622, - 0, 0,11756,11753, 428, 611, 646, 668, 0, 0, - 57, 79, 620, 627,11774,14170, 673,14170,14170,14170, - 308,14170, 4, 25, 59, 52, 71, 72, 96, 279, - 315, 97, 220, 271, 8,14170, 443,14170, 655, 269, + 12080,12079,12077,12076,12023,11940,11938,11922, 614, 622, + 0, 0,11892,11891, 428, 611, 646, 668, 0, 0, + 57, 79, 620, 627,11917,14180, 673,14180,14180,14180, + 308,14180, 4, 25, 59, 52, 71, 72, 96, 279, + 315, 97, 220, 271, 8,14180, 443,14180, 655, 269, 312, 578, 673, 330, 429, 681, 327, 358, 368, 686, - 679, 699, 707, 421, 422, 38,11758, 133, 765, 771, - 783,14170,14170,14170,14170, 789,14170,14170, 631,14170, - 815, 76, 764,14170,14170,14170, 278, 798, 348, 417, - 11710, 801, 372, 829, 752,11707, 540, 814, 855, 895, - 883,11636, 546,11553, 904, 830, 901,14170, 913,14170, - 14170, 918,11484,11478,11477, 924, 957, 964, 934, 980, - 991,11474, 601, 1012,11430, 1024, 725, 1042, 770, 1054, - 831,11424, 625, 1063, 645, 978, 802, 867, 663, 1072, - 14170, 1081,14170,11477, 484, 475, 1047, 719, 764, 874, + 679, 699, 707, 421, 422, 38,11858, 133, 765, 771, + 783,14180,14180,14180,14180, 789,14180,14180, 631,14180, + 815, 76, 764,14180,14180,14180, 278, 798, 348, 417, + 11810, 801, 372, 829, 752,11807, 540, 814, 855, 895, + 883,11781, 546,11775, 904, 830, 901,14180, 913,14180, + 14180, 918,11774,11771,11745, 924, 957, 964, 934, 980, + 991,11739, 601, 1012,11738, 1024, 725, 1042, 770, 1054, + 831,11735, 625, 1063, 645, 978, 802, 867, 663, 1072, + 14180, 1081,14180,11781, 484, 475, 1047, 719, 764, 874, 717, 940, 752, 1056, 800, 953, 1064, 818, 1059, 917, - 821, 885, 405, 1139,14170,11474, 1143, 1147, 476, 309, - 1153, 1159, 410, 1011, 490, 493, 1096, 1114,11394, 911, - 1122, 1124, 1129,11388, 943, 1158,14170, 0, 0, 0, - 14170,14170, 990, 1017, 1053, 1062, 1105, 1118,14170, 120, - 1162,11387, 1113, 1168,14170,14170, 282, 1178,11384, 1116, - 11359, 1199, 1200,14170, 495, 0, 1187,11347, 1135, 1140, - 1144, 1149, 1180, 1172, 1168, 1184,14170, 1173, 1178, 1184, - 1199, 1182, 636,11406, 1229, 620, 1196, 1187, 1190, 1187, + 821, 885, 405, 1139,14180,11775, 1143, 1147, 476, 309, + 1153, 1159, 410, 1011, 490, 493, 1096, 1114,11720, 911, + 1122, 1124, 1129,11717, 943, 1158,14180, 0, 0, 0, + 14180,14180, 990, 1017, 1053, 1062, 1105, 1118,14180, 120, + 1162,11646, 1113, 1168,14180,14180, 282, 1178,11563, 1116, + 11494, 1199, 1200,14180, 495, 0, 1187,11482, 1135, 1140, + 1144, 1149, 1180, 1172, 1168, 1184,14180, 1173, 1178, 1184, + 1199, 1182, 636,11541, 1229, 620, 1196, 1187, 1190, 1187, 1198, 1200, 1198, 1199, 1213, 1221, 297, 1205, 1225, 1220, 1213, 1214, 1234, 1230, 1232, 1236, 1245, 1237, 735, 1243, - 1246, 1254, 1261, 1252, 641,11403,11313, 642, 1321, 1327, - 1333,14170, 1293,14170, 1304,14170, 1294, 1279, 1270, 1283, + 1246, 1254, 1261, 1252, 641,11538,11412, 642, 1321, 1327, + 1333,14180, 1293,14180, 1304,14180, 1294, 1279, 1270, 1283, 1297, 1268, 1304, 1311, 1298, 1302, 1317, 1302, 1314, 1328, - 1321, 1329, 1354, 1321, 1339, 920,11335, 670, 1395, 1405, - 1400,14170, 1409, 1410, 1406, 1416,11334,11331, 998, 1423, - 1431, 1417, 1429, 1435, 1440, 1439,11323,11317, 1391, 1454, - 1467, 1448, 1468, 1474, 1484, 1498, 1504,14170, 1510, 933, - 1514, 1525,11316, 1518,11363, 1541, 1561, 346, 1578, 1584, - 1585,11224,11018, 1609, 1527, 1624, 1642, 1500, 1648,14170, - - 1673, 1677, 1615, 1707, 842, 1708,14170,14170, 1733, 1739, - 1488,11012,11011, 1005, 1722, 1549, 1633, 1684, 1745, 1701, - 1568,11008, 1172, 1751, 1671, 1599, 1664, 1605, 1764, 1767, - 1734, 1780,14170,11018, 949, 816,14170, 1784,14170,11012, + 1321, 1329, 1354, 1321, 1339, 920,11434, 670, 1395, 1405, + 1400,14180, 1409, 1410, 1406, 1416,11433,11430, 998, 1423, + 1431, 1417, 1429, 1435, 1440, 1439,11404,11398, 1391, 1454, + 1467, 1448, 1468, 1474, 1484, 1498, 1504,14180, 1510, 933, + 1514, 1525,11397, 1518,11444, 1541, 1561, 346, 1578, 1584, + 1585,11369,11363, 1609, 1527, 1624, 1642, 1500, 1648,14180, + + 1673, 1677, 1615, 1707, 842, 1708,14180,14180, 1733, 1739, + 1488,11362,11359, 1005, 1722, 1549, 1633, 1684, 1745, 1701, + 1568,11351, 1172, 1751, 1671, 1599, 1664, 1605, 1764, 1767, + 1734, 1780,14180,11399, 949, 816,14180, 1784,14180,11398, 1463, 1335, 1402, 1444, 1474, 1477, 1503, 1529, 1581, 1753, - 1658, 1746,10986, 1734, 1739, 1728, 1761, 1758, 1774, 1771, - 14170, 1761, 1780, 1778, 1780, 1771, 1767, 1779, 1791, 1829, - 1792, 1782, 1806, 1533,11008, 1879,14170,10929,14170, 1883, - 1907, 1911, 1567, 701, 1917, 1075, 1691, 1560, 1847,10923, + 1658, 1746,11370, 1734, 1739, 1728, 1761, 1758, 1774, 1771, + 14180, 1761, 1780, 1778, 1780, 1771, 1767, 1779, 1791, 1829, + 1792, 1782, 1806, 1533,11387, 1879,14180,11381,14180, 1883, + 1907, 1911, 1567, 701, 1917, 1075, 1691, 1560, 1847,11380, 1923, 1930, 1861, 898, 1755, 1100, 1889, 1035, 1936, 1851, - 1110, 1937, 1942,10922, 1860,10865, 1293, 1888,14170, 1941, - 1943,10839,10833, 1428, 1945, 1947, 0, 0, 0, 1829, - 1030, 1882, 1899, 1476, 1921,14170,14170, 1956,10832,10829, - 1955, 1948, 1968,14170, 1979,10821,10815, 1996, 1978, 2008, - 10810, 1919, 1940, 1946, 1936, 1954, 1955, 1975,14170, 1985, + 1110, 1937, 1942,11377, 1860,11234, 1293, 1888,14180, 1941, + 1943,11028,11022, 1428, 1945, 1947, 0, 0, 0, 1829, + 1030, 1882, 1899, 1476, 1921,14180,14180, 1956,11021,11018, + 1955, 1948, 1968,14180, 1979,10974,10968, 1996, 1978, 2008, + 10963, 1919, 1940, 1946, 1936, 1954, 1955, 1975,14180, 1985, 1984, 1984, 1986, 2035, 1983, 1982, 1967, 2026, 1980, 1992, - 2001, 1633, 1998, 1992, 1669, 2007, 2005, 2003,14170, 2018, + 2001, 1633, 1998, 1992, 1669, 2007, 2005, 2003,14180, 2018, 2003, 2009, 2031, 2026, 2022, 2030, 2067, 2059, 2047, 2041, - 2046, 2057, 2073,14170, 2068, 2084, 2072, 2091, 2109, 2036, - 2123,14170, 2087, 2085, 2080, 2097,14170, 2078, 2093, 2107, + 2046, 2057, 2073,14180, 2068, 2084, 2072, 2091, 2109, 2036, + 2123,14180, 2087, 2085, 2080, 2097,14180, 2078, 2093, 2107, - 14170, 2092, 2099,14170,14170, 2108, 2103, 2098, 2114, 2105, + 14180, 2092, 2099,14180,14180, 2108, 2103, 2098, 2114, 2105, 2121, 2113, 2108, 2110, 2111, 2118, 2131, 2123, 2114, 2164, - 10783,10686, 2185, 2196,10682, 2168,10618,10596, 2200, 2207, - 10578, 2208,10532,10556, 2217, 2224, 2198, 2211, 2233, 2186, - 2253, 856, 2273,10523, 2215, 2178, 2293,10444, 2237,10410, - 10437, 2316, 2307, 2339, 2193, 2360, 2393, 2408, 2426, 2446, - 10473, 2288, 2295, 2383, 2461, 2486, 2495,10377, 2260,10309, - 10331, 2425, 2447, 2184, 2327,10302,10327, 2457, 2281, 2476, - 14170, 2194, 2214, 2226, 2260, 2274, 2265, 2294,10281, 2293, - 2305, 2320, 2312, 2330, 2327, 2515, 2319, 2337, 2355,10245, - - 2364, 2368, 2435,14170, 2436, 2440, 2443, 2449, 2462, 2482, - 10177, 2483, 2510, 2490, 2480, 2478, 2498, 2520, 2497, 2516, - 2499, 2525, 2521, 2519, 2536, 2533, 2533, 2524, 2555,10087, - 10069, 2534, 2402, 2419, 2472, 2504, 2482, 2602, 2608, 2579, - 2609,10076, 2580, 2615, 1372, 2616, 2622, 2623, 9752, 2630, - 2634, 2636, 2555, 2372, 9244, 9271, 9270, 2635, 9241, 9268, - 2587, 2581, 2585, 2596, 9267, 2641, 9238, 9265, 9264, 2645, - 9235, 9262, 92, 2599, 2599, 2620, 2609, 2608,14170, 2609, - 2621, 2630, 2633, 2615, 2649, 2645, 2640, 2666, 2674, 2624, - 2649, 2651, 2671, 2681, 2642, 2675, 2674, 2671, 2689,14170, - - 2721, 2710, 9260, 2680,14170, 2683, 9259,14170, 2704, 2701, - 2688, 2703, 2711, 2712, 2708, 9258, 2699, 2705, 2711, 2722, - 2710, 2717, 2502, 2730, 2727, 2719, 9257, 2720, 2728, 2758, - 2727, 2741,14170, 2775, 2739, 2737, 2753, 2742, 2736, 2753, - 2754, 2756, 2772, 2757,14170, 2775, 2766, 2774, 2765, 2772, - 2773, 2775, 2779, 2776, 2776, 2783, 1723, 2816, 2842, 2227, - 2822, 2846, 2845, 2851, 2857, 2861, 2875, 947, 2168, 2850, - 9296, 2908, 42, 2858, 9256, 916, 9255,14170, 9293,14170, - 2874, 2859, 2915, 2940, 2941, 1309, 2961, 2888, 2931, 9250, - 2973, 3004, 3003, 3029, 2228, 3038, 3063, 3042, 2259, 3062, - - 14170, 9249,14170, 989, 2442, 3095, 3096, 2817, 2928, 3077, - 2861, 2924, 2994, 2907, 2822, 2838, 2852, 2889, 2913, 2933, - 2943, 3073,14170, 2957, 2967,14170, 9231, 2959, 3119, 3135, - 3005, 3024, 3041,14170, 3055, 3089, 3098,14170, 3101, 3112, - 3113, 3095, 3117, 9246, 3116, 3123, 3119, 3130, 3131, 3140, - 3124, 3146, 3122, 3130, 3146, 3139, 3134, 3151, 3131, 3143, - 3153, 3144, 3136, 9233, 3158, 3142, 3176, 3161, 3161, 3165, - 3163, 3179, 3187,14170, 9243, 3175, 2890, 2892, 3124, 2981, - 3091, 3231, 3110, 3237, 3238, 3125, 3251, 9251, 3223, 3252, - 3224, 3258, 3259, 3264, 3265, 2967, 3236, 3019, 3265, 3196, - - 3197, 3223, 3251, 3267, 3263, 3271, 3270, 9181, 9128,14170, - 3236, 3235,14170, 3253, 3253, 3247, 3242, 3245, 3266, 3248, - 3264, 3268, 3270, 3256, 3263, 3259, 3278, 3262, 3273, 3289, - 3309, 3292, 3293, 3294, 3297, 3299, 3305, 3308, 3307, 3322, - 3310, 3318, 3316, 3327, 3318, 3319,14170, 3357, 3313, 3325, - 3349, 3317, 3325, 3325, 3352, 3362, 3366, 3354, 3353, 3366, - 9148, 3371, 3374, 3360, 3362, 3367,14170, 3364, 3368, 3365, - 3409, 3382, 3387,14170, 3387, 3377, 3378, 3391, 3415, 3417, - 3400, 3400, 3411, 3412, 3424, 3410, 3416,14170, 3420, 3419, - 3436, 3424, 3435, 3434, 3434, 3443, 3432, 3435, 3448, 3434, - - 9109, 9136, 9105, 9125, 8945, 3506, 3484, 1508, 8861, 8791, - 3510, 3485, 3488, 3028, 1344, 3531, 3540, 3508, 3593, 3557, - 3597, 3522, 3611, 8815, 8776, 3459, 8724, 3498, 8767, 3514, - 3511,14170, 3506,14170, 3505, 3516, 3584, 3533, 3528, 8761, - 3575, 3650, 3575, 3571, 3584, 3581, 3586,14170,14170, 8698, - 3583,14170, 3593, 8604, 0, 3591, 3579, 3599, 3599, 3602, - 3589, 3600, 3661, 3630, 3629, 3654, 3648, 3645, 3658, 3662, - 3661, 3656, 3664, 3663, 3666,14170, 3667, 3660, 3665, 3660, - 3665, 8594, 3670, 3666, 3675, 3677, 8565, 18, 8494, 3414, - 3525, 3578, 3529, 3585, 3639, 3640, 3739, 3711, 3740, 3720, - - 3746, 3658, 8395, 8417, 8388, 3692, 3701, 3705, 8364, 8335, - 8345, 8270, 8242, 8249, 3704, 3714, 3719,14170, 3720, 3707, - 14170, 3713, 3719, 3708, 3721, 3723, 3718, 3722, 3719, 3722, - 3726, 3737, 3718, 3739, 3740, 3731, 3732, 3727, 3738, 3733, - 3755, 3764, 3771, 3763, 3758, 3764, 3776, 3763, 3761, 3764, - 3780, 3782, 3784, 3774, 3789, 3786,14170, 3777, 3788, 3793, - 3780, 3771, 3782,14170, 3813, 3793, 3841, 3782, 3827, 3830, - 8254, 3834, 3822, 3823, 3819, 8147, 3815, 3821, 3839, 3824, - 8133, 3831, 8131, 3845, 3831, 3833, 3841, 3844, 3847, 3847, - 8018, 3838,14170, 3845, 3835, 3839, 3858, 3852, 3874, 3879, - - 3873, 3874, 3887, 3888, 3879, 3891,14170, 3874, 3892, 3896, - 3873, 3885, 3881, 3887, 3899, 3903, 3917, 2883, 1689, 8053, - 3918, 3961, 1818, 8052, 3954, 1837, 3979, 1749, 2985, 4005, - 3924, 3904, 3945,14170, 3894, 3935, 3943, 3930, 3938, 3946, - 3963, 3957, 0, 4023, 3947,14170, 3959, 3983, 3976, 4000, - 3982, 4021, 4005, 4010, 8054, 3995, 7977, 7970, 7958, 7832, - 7825, 3995, 4062, 3996, 7809, 7811, 4008, 4000, 4014, 4004, - 4016, 4020, 4031, 4035, 4020, 4042,14170, 4062, 4045, 4047, - 4069,14170, 4066, 4060, 4055, 4069, 4061, 4056, 966, 7778, - 2285, 0, 3938, 3987, 4050, 4051, 4056, 3941, 4074, 4065, - - 7738, 7737, 4075, 4066, 4110, 4071, 4068, 4066, 4072, 4076, - 4070, 4087, 4079, 4090, 4081, 4108, 4105, 4107, 4115, 4114, - 4104, 4125, 4113, 4114, 4126, 4129, 4130, 4115, 4130, 4123, - 4117, 4134, 4128, 4167, 4131, 4145, 4130, 4151, 4157, 4168, - 4160, 4176, 4165, 4158, 4171, 4167, 4176, 4171, 4175, 4178, - 4178, 4194, 4187, 4185, 4182,14170, 7686, 7682, 7678, 4199, - 4184, 4202, 4201, 4188, 4224, 7676, 7640, 4217, 4223, 4230, - 4254, 4221, 4212, 4223, 4218, 4228, 4229, 4244, 4247, 4248, - 4242, 4250, 4251, 4252, 4235, 4248, 4245, 4258, 4279, 4270, - 4273, 4267, 4280, 4283, 4292, 4291, 4286, 4276, 4295,14170, - - 4280, 4289, 4292, 4282, 4315, 4345, 4359, 4282, 4302, 4306, - 4306,14170, 4309, 4317, 4316, 4335, 4325, 4334, 4378, 2871, - 7632, 4379, 4351, 7636, 7544, 4332, 4339, 4350, 4363, 4402, - 4359, 4371,14170, 4362,14170, 4378,14170,14170,14170,14170, - 7559, 4359, 4383, 4428, 7509, 4386, 4396, 4405, 4408, 4411, - 4412, 4412, 4412, 4422, 4428, 4420, 4408, 4429, 4432, 4413, - 4433, 4430, 4437, 4441, 4442, 4431, 7366, 3511, 7409, 0, - 4394, 4442, 4380, 7338, 1989, 4434, 4435, 4506,14170, 4450, - 4437, 4442, 4452, 4459, 4449, 4450, 4479, 4472, 4473, 4483, - 4471, 4476, 4486, 4484, 4482, 4483, 4484, 4485, 4486, 4493, - - 4489, 4499, 4500, 4505, 4495, 4505, 4491, 4510, 4507, 4494, - 4506, 4511, 4512, 4522, 4533, 4539, 4527, 4526, 4527, 4527, - 4534, 4531, 4528, 4547, 4548, 4540, 4537, 4556, 4578, 4554, - 4540, 4556,14170, 4549, 4550, 4538, 4551, 4547, 4550, 4577, - 4560, 4562, 4573, 7344, 4579, 4580, 4595, 4585, 4586, 4583, - 4598, 4641, 4617, 7324, 4601, 4606, 4593,14170, 4608, 4604, - 14170, 4614, 4600,14170,14170,14170, 4595, 4605, 4620, 4627, - 14170, 4619, 4629, 4620, 4633, 4636, 4648, 4639, 4638, 4640, - 4657, 4658, 4659, 4657, 4662, 4653, 4669, 4677, 4657, 4671, - 4675, 4674, 4679, 4695, 2584, 7318, 4702, 4688,14170, 4686, - - 4704, 4705, 4706, 4707, 4699, 7064, 4771, 7050, 4732, 7086, - 4699, 0,14170, 7062, 4716, 4711, 4773, 4714, 4722, 4727, - 4737, 4732, 7053, 4760,14170, 7052, 4753, 4791, 4770, 4771, - 4771, 4776, 4773, 4778, 4779, 4775, 4792,14170, 4796, 4791, - 4800, 4813, 4802, 4805, 4804, 4804, 4811, 4798, 4799, 4796, - 4826, 4738, 6966, 6805, 6803, 4809, 4815, 0, 4743, 4813, - 4818,14170, 4820, 4832, 4832, 4830, 4845, 4830, 4846, 4845, - 4855, 4852, 4843, 4859, 4848, 4852, 4848, 4864, 4859, 4860, - 4871, 4866, 4857, 4863, 4867, 4875, 4882, 4478, 4868, 4872, - 4872, 4883, 4896, 4896, 4887, 4893, 4889, 4904, 4903, 4898, - - 4914, 4912, 4644, 4917, 4918, 4933, 4915, 4920, 4917,14170, - 4914, 4910, 4961,14170, 4936, 4936, 4937, 4932, 4938, 4953, - 4961, 4962, 4955, 6674, 4964,14170, 4964, 4971, 4957, 4959, - 4973, 4961, 4962, 4980, 4967, 4974, 4979, 4976, 4982, 4970, - 4975,14170, 5016, 4990, 4984, 4980,14170, 4985, 4992,14170, - 14170,14170,14170, 4998, 6666, 4994, 4994, 5008, 5010,14170, - 5023, 5017, 5018, 5027, 5019, 5026,14170,14170, 5030, 5066, - 14170, 5035, 5029, 5030, 5037, 5031, 5035, 5044, 5078, 5073, - 5037, 5052, 5071, 5057, 5069, 5075, 5085, 5069, 5077, 5149, - 6696, 5111, 5112, 6672, 6649, 5113, 5097, 5100,14170, 5102, - - 5121, 5111, 5116, 5108, 5116,14170, 5118, 5140, 5137, 5195, - 6631, 5138, 5130,14170, 5126, 5142, 5142, 5148, 5149, 5145, - 5150, 5146, 5175, 5145, 5174, 5174, 5182, 5181, 5195, 5202, - 5203, 5190, 5203, 5193, 5209, 5210, 5201, 2413, 6424, 5275, - 6252, 5279,14170, 5203, 6300, 5214, 5223, 5235, 5249, 5250, - 5257, 5250, 5251, 5247, 5255, 5261, 5246, 5258, 5253, 6207, - 5187, 5262, 5269, 5269, 5251, 5252, 5261, 5267,14170, 5269, - 5278, 5275, 5265, 5191, 5279, 5269, 5289, 5306, 5303, 5308, - 5308, 5300, 5307, 5316, 5316, 5312, 5308, 5309, 5303, 5353, - 5305, 5314, 5320, 5322, 5327, 5329, 5316, 5321, 5335, 5360, - - 14170, 5323, 5329, 5327, 5334, 5355, 5364, 5349, 5347, 5350, - 5353, 5360, 5399, 5375, 5364, 5364, 5366, 5367, 5370, 5371, - 5376, 5374, 5390, 5394, 5411, 5423, 5411, 5406, 5412, 5419, - 5417, 5419, 5433, 5424, 5423, 5426, 5440, 5427, 5444,14170, - 6048, 5445, 5449, 5443, 5450, 5984,14170, 5965,14170, 5449, - 5448, 5459, 5450, 5442, 5448, 5468, 5471, 5461,14170,14170, - 5458, 5471, 1035, 1169, 5467, 5470, 5501, 5502, 5512, 5493, - 5494, 5489, 5490, 5501, 5492, 5506, 5501, 5514, 5503, 5238, - 14170, 5519, 5529, 5537,14170,14170, 5513, 5502, 5501, 5507, - 5515, 5520, 5515, 5525, 5515, 5538, 5597, 5576, 5535, 5536, - - 5571, 5566, 5563, 5565, 5580, 0, 5592, 5593, 5574, 5594, - 5586, 5605, 5608, 5594,14170, 5610, 5611, 5612, 5613, 5615, - 5603, 5609, 5620, 5624, 5620, 5615, 5634,14170, 5620, 5646, - 5647, 5648, 5645, 5901, 5899, 5683, 1957, 3059, 5697, 5693, - 5647,14170, 5653, 5648, 5655, 5666, 5753, 5662, 5659, 5663, - 5663, 5670, 5666, 5681, 5674, 5671, 5672, 5408, 5720, 5690, - 5693, 5682, 5683, 5695, 5694, 5694, 5702, 5693, 5703, 5770, - 0, 5722, 5721, 5719, 5736, 5725, 5722, 5728, 5727, 5734, - 5732, 0, 5746, 5747, 5753, 5736, 0, 5814, 5748, 5764, - 5752, 5762, 5770, 5587, 5765, 5783, 5777,14170, 5793, 5781, - - 5392, 5817, 5783, 5790, 5786, 5803, 5808, 5791, 5807, 5797, - 5795, 5813, 5808, 5815, 5807, 5819, 5817, 5826, 5823, 5815, - 5810, 5824,14170,14170,14170,14170, 5817, 5832, 5839, 5821, - 5836, 5845, 5847, 5847, 5853, 5842, 5735, 5860, 5851, 5865, - 5852, 5867,14170,14170,14170,14170, 5864, 5852,14170, 5855, - 5756,14170,14170, 5871, 5864,14170, 5867, 5862, 5879, 5865, - 5877, 5874, 5881,14170, 1446, 1625,14170, 2438,14170, 5874, - 5879, 5893, 5702, 5551, 5714, 5547, 5918,14170, 5883, 5896, - 5899, 5890, 5906, 5909, 5905, 5903, 5910, 250, 5979, 5538, - 5473, 5350, 5935, 5346, 5941, 5915, 5920, 5924, 5917, 5923, - - 5919, 5925,14170, 5938, 5921, 5927, 5990, 5935, 5945, 5968, - 5975, 5960, 5961, 5976, 5984, 5981, 5990, 5989, 5977, 5990, - 5977, 5980, 0, 5984, 5985, 5995,14170, 6003,14170,14170, - 5983,14170, 5993, 5994, 5997, 5282, 5997, 6000, 6002, 5995, - 6006, 6017, 6015,14170,14170, 6011,14170, 6030, 5247, 6073, - 5134, 6077, 6009, 6043,14170, 6051, 6037, 6092, 5725, 6044, - 6050, 6053, 6050, 6046, 6043, 6051, 5983, 6057, 6054, 6069, - 6055, 6058, 6068, 6067, 6080, 0, 6120, 6135, 6081, 6068, - 6086, 6086, 6105, 6096, 6115, 6117,14170, 6150, 6108, 5172, - 6112, 6121, 6123, 6113, 6124, 6121, 6122, 6127, 6113, 6129, - - 0, 6121, 6127, 6123, 6138, 5171, 6129, 6126, 6171, 6139, - 6129, 6199, 6146, 6146, 6148, 6152, 6162,14170,14170, 6172, - 6165, 5084, 6162, 5078, 6196, 6168,14170, 6163, 6173, 6166, - 6175, 6187, 6167, 5030, 6171, 6178, 6179, 6179, 6185, 6198, - 14170, 6182, 6196, 6188, 5026, 6194, 6190, 6201,14170, 6194, - 6196, 6203, 6197, 6203, 6229, 6215, 6216, 6220, 6222, 6237, - 14170,14170, 6236, 6242, 6239,14170, 6237, 6241, 6242, 5043, - 2570,14170, 6247, 6247, 4964, 4768, 4715, 6271, 4753, 6272, - 6273, 6236, 6248, 6242, 6238, 6245, 6248, 6243,14170, 6242, - 4649, 6319, 6307, 6293, 6330, 6339, 6350, 4640, 4407, 4316, - - 6299, 4337, 6301, 6315, 6268, 4323, 6284, 6294, 6302, 6293, - 6296, 6309, 6314, 6308,14170, 6325, 6324, 6337, 6335, 6326, - 6342, 6330, 6334, 6335, 6334, 6334, 6338, 6344, 6345, 6353, - 6349, 6360, 6361, 6360, 6365, 6367, 6372, 6373, 4152, 6373, - 4015, 6374, 6366, 6381, 6376, 6382, 6391, 6382, 6385, 3938, - 6433,14170, 3887, 6437,14170, 6392, 6395, 6406, 6411, 0, - 0, 6446, 6401, 6408, 6407, 6408, 6415, 6414, 6414, 6425, - 6461, 6414, 6426,14170, 6436, 6420, 6436, 6441, 6429, 3931, - 0, 0, 6424, 6440, 6439, 6450, 6454, 6454,14170, 6465, - 6510, 6452,14170, 6458, 6452, 6447, 6472,14170, 6466, 6474, - - 6486, 6518, 6490, 6491, 6482, 6493, 6483,14170, 6486, 6496, - 6531, 6500, 6499, 0, 6546, 1544, 6495, 3777, 6498, 6517, - 6523, 6509, 6511, 6520, 6525, 6531,14170, 6523, 6538, 6528, - 6537, 6543, 6541, 6543, 6547, 6537, 6532, 6547, 6544, 6545, - 6556, 3772, 3771, 6539, 6560, 6551, 6561, 6567, 6551, 6569, - 6575, 6582,14170, 6579, 6582, 6573, 6569, 6574, 6578,14170, - 6586, 6586, 6581,14170, 6587, 6588, 6598, 6592, 6591, 6602, - 6626, 6627,14170, 6596, 6612, 6609, 6613, 6614, 6617,14170, - 3699, 6640, 6674, 6680, 3600, 6661, 6662, 6681, 6637, 6699, - 6700, 6715, 652, 6731, 6740, 3628, 6642, 6658, 6651, 6648, - - 6664,14170, 6686, 6688, 6676, 6690, 6687, 6689, 6689, 6700, - 6705, 6709, 6719, 6715, 6711, 6725, 6728, 6729, 6722,14170, - 6738, 6734, 6739, 6740, 6727, 6746, 6745, 6731, 6733, 6752, - 6746, 6758, 6747,14170, 6746, 6761, 6751, 6769, 6767, 6776, - 14170, 6783, 6772,14170, 3627, 0, 6773, 6782, 6777, 6771, - 6787, 6777, 6791, 6782, 0, 0, 6790, 6793, 6781, 6802, - 6802, 6786, 6806,14170, 3594, 6804, 6795, 6806, 6662, 6868, - 14170, 6803, 6793, 0, 6874, 6817, 6813, 6846, 6846, 6811, - 6840, 6837, 6823, 6884, 6848, 6852, 6837, 6857, 6838, 6861, - 6865, 6858, 0, 0, 6859, 6856, 6863, 1551, 3534, 1922, - - 6868, 6855, 5946, 6858, 3519, 6891, 6877, 6879, 6867, 6874, - 6896, 6885, 6899, 3514, 3456, 6890, 6901, 6895, 6899, 6900, - 6924, 6910, 6911, 6896, 6912, 6906, 6902, 6910, 6919, 6908, - 6915, 6910,14170, 6915, 6910, 6924, 6921, 6937, 6924, 6931, - 6930, 6938, 6940, 6953, 6958, 6957, 6948, 6950, 6961, 6951, - 6987, 6965, 6954, 6954, 6950, 3401, 6975, 7022, 6997, 749, - 7034, 7040, 7055, 7059, 3403, 3305, 7020, 7036, 7044, 7046, - 5393, 7080, 942, 7103, 7112, 7118, 7124, 6998, 7133, 7137, - 7002, 3288, 3223, 6980,14170, 7006, 7000, 7023, 7026, 7044, - 7057, 7069, 7080, 3179, 7100, 7104,14170, 7113,14170, 7115, - - 14170, 7116, 7110, 7120,14170, 7122, 7113, 7126, 7125, 7126, - 7126, 7117, 7129, 7120, 7126, 7129,14170,14170,14170, 7141, - 7129, 7141,14170, 7139, 7145, 7158, 7148, 7147, 7171,14170, - 7155, 3126, 7163, 7163, 7174, 7160, 7161, 7014, 7165,14170, - 7172, 7171, 7174, 7084, 7217,14170,14170, 7172, 7182, 0, - 7192, 7193, 7184, 7190, 7187, 7202, 7192, 7094, 7216, 0, - 7245, 7190, 7205, 7207, 7260, 7224, 7212, 7235, 7228, 3121, - 7228, 7240, 7233, 3061, 2033, 3073, 7232, 7238,14170, 7085, - 7229,14170, 7235, 7236, 7227, 7236, 7242, 7253, 7258, 7248, - 7261, 7265, 7258, 7253, 7270, 7267, 7270,14170, 7270, 7269, - - 7289, 7275, 7276, 7281, 7292, 7286, 7316, 7296, 7317, 7290, - 14170, 7285, 7287, 7293,14170, 7292, 3006, 7306, 7317, 7305, - 14170, 7307, 7323, 7326, 7316, 7329, 3008, 7315, 7317, 7340, - 14170, 7315, 7341, 1445, 7376, 2956, 7367, 7382, 7344, 7401, - 7405, 7413, 7424, 2981, 7375, 7380, 2631, 7436, 7407, 7442, - 7454,14170, 2977, 7395, 7397, 7405, 2909, 7412, 2893, 7411, - 2863, 7415, 7408, 7429, 7420,14170, 7430, 7418, 7426, 7442, - 7432, 7426, 7429, 7434,14170, 7435, 7437, 7456, 7439,14170, - 7459, 7441, 7460, 7451, 7447, 7496, 7471, 7469, 7465,14170, - 7474, 7485, 7478, 7486, 7484, 7533, 7502, 7524,14170, 7505, - - 0, 7526, 0, 7538, 7493, 7492, 2829, 7507, 7514, 7507, - 7519, 7527, 7531, 7526, 7527, 7535, 7578, 7545, 7532, 7551, - 2733, 7545, 7548, 7538, 7571, 7543, 7549, 7554, 7560,14170, - 7567, 7573, 7576, 2900, 7568, 7563,14170, 7581, 7571, 7585, - 14170, 7579, 7590,14170, 7578, 7591, 7592, 7594, 7587, 7592, - 2615, 7598, 7598, 7598, 7595, 2606, 7600, 7592, 7604, 7594, - 14170, 7606,14170, 7600,14170,14170, 7601,14170, 2473, 7634, - 7625,14170, 7632,14170, 7625, 7639, 7643, 7633, 7629, 7646, - 7636,14170, 7633, 7651, 7651, 7637, 7647, 7639, 7714, 7688, - 5562, 7689, 7725, 7726, 7710, 7745, 7746, 2828, 7757, 7761, - - 7687, 7714, 7718, 7734, 7734, 2460, 7742, 7738, 7748,14170, - 7735, 7741, 7753, 7755, 7752, 7753,14170,14170, 7761, 7762, - 7747, 7747, 7688, 7763, 7765,14170, 7826, 7757, 7769, 7779, - 7766, 7762, 7782, 7788, 7789, 7844, 7794, 7854, 7821, 2432, - 7810, 7840, 0, 7815, 7826, 7849, 7847, 7848, 7857, 7848, - 7849, 7858, 7875, 7718, 7866, 7867,14170, 7860, 7871, 7872, - 0, 7841, 7859, 7865, 7876, 7845, 7861, 7846, 7864, 7878, - 7887, 7867, 7671, 7874, 7877, 7877, 7872, 2351, 7878, 7893, - 7895, 7897, 7906, 2329,14170, 2298, 7898, 7909, 7911, 7902, - 14170, 2289, 7898, 7918, 7928, 7919,14170, 7916,14170, 7917, - - 7930, 7929, 7926, 7932, 7934, 7934, 7944, 2300, 7934, 7947, - 7936, 7948, 7952, 7947, 8011, 7973, 8012, 7984, 8027, 8031, - 7950, 7972, 7985, 7979, 7989, 2292,14170, 7970,14170, 8004, - 14170, 8002, 8000, 8001, 8009, 8016,14170, 8007, 8072, 8052, - 8020, 8069, 8080, 8008, 8025, 8011, 8011, 8071, 8080, 8085, - 8082, 8082, 8118, 8083,14170, 8081, 8144, 8095, 0, 8100, - 8083, 8090, 8084, 8105, 8113, 8114, 8137,14170, 8062, 8076, - 8080, 8129, 8124, 8175, 8132, 8130, 8146, 8181, 8182, 8192, - 14170, 8142,14170, 8158,14170, 8157,14170, 7707, 2234, 8154, - 8163, 8154, 7824, 8164, 8159, 8187, 8159, 8165, 8174, 8194, - - 8181, 8195, 8197, 8195, 8196, 8205, 8186, 8211, 8206, 8206, - 14170, 8201, 8207, 8209, 8204, 8210, 8174, 8217, 8217, 8221, - 2234, 8218, 8224, 8279, 8229, 8231, 8247, 2216, 8230,14170, - 8255,14170,14170,14170, 8258,14170, 8242, 8276, 8302, 8309, - 8308, 8256, 8271, 8291, 8281, 8284, 8295, 8292,14170, 8289, - 8307,14170, 8347, 8318, 8319, 8304, 8309, 8381, 8321, 8308, - 8311, 8325, 0, 8385, 8386, 8390, 8344, 8345, 8394, 8359, - 8352, 8361, 2189, 8404, 8411, 8422, 8356,14170,14170,14170, - 8376, 8385, 8377, 8379,14170, 8400, 8412, 8421, 8427, 8408, - 8425, 2019, 8413, 1998,14170, 8414,14170, 8428, 8429, 8421, - - 8420, 8424,14170, 2050, 8431, 8425, 3018, 8433, 8427, 8469, - 8428, 8436, 8477, 0, 1830, 8464, 8466, 8481, 8483, 1759, - 8483, 8471, 8405, 8507, 8529, 8555,14170, 8485, 8488, 8492, - 8412, 8503, 8489, 8502, 8413, 8512, 8508, 8511,14170, 8514, - 8583, 8535, 8521, 8522, 8589, 8517, 1709, 8470, 0, 1652, - 8474, 0, 8518, 8528, 3980, 8551, 8558, 8553, 8608, 8617, - 8630,14170, 8546, 8579, 8574,14170, 8612, 1579, 8624, 8628, - 8612, 8616, 8619, 8620, 8619, 8633, 8618, 8618, 8619, 8632, - 8635, 8636,14170, 1374, 8635, 3289,14170, 3975, 8636, 8671, - 8633, 8665, 8666, 0, 0, 8684,14170, 8669, 8683,14170, - - 14170, 8717, 8728, 8657, 8697, 8518, 8685, 8756, 8519, 0, - 8681, 8718, 8686, 8688, 8698, 8683, 8765, 8689, 8698,14170, - 8791, 8708, 8724, 1313, 1065, 8732, 8758, 7520, 1008, 8128, - 8722, 8741, 8759, 8818, 8759, 8766, 8771,14170, 8772, 8780, - 8786, 8771, 8774, 8787, 8788, 8780, 8785, 8786, 7987, 8391, - 8796,14170, 8801,14170, 989, 3995,14170, 5244, 8820, 914, - 8804, 0, 8802,14170, 8812, 8860, 8882, 0, 0, 0, - 14170, 8813, 8864, 8819, 8879, 8875, 0, 0, 8888, 0, - 8848, 8843, 8849, 8865, 8869, 8870, 8904, 8860, 8877,14170, - 14170, 8879, 8880, 8866, 8885, 879, 8617, 876, 8878, 8869, - - 8872, 8882, 8883, 8885, 8885, 8904, 8915,14170, 8912, 8919, - 8904,14170, 8903, 8907,14170,14170, 8918, 8598,14170, 5561, - 14170, 8909,14170, 8913, 8920,14170, 830, 8912, 0, 8964, - 0, 8957, 0, 743, 8916, 8933, 8929, 8935, 8930, 8934, - 8949, 8987, 8728, 8758, 8953, 8957, 8988, 8951, 8958,14170, - 8964, 8969,14170, 8973, 8970, 8961, 8966, 8966, 8963, 8969, - 670,14170,14170, 8976, 8971, 8986, 8990,14170, 8974, 602, - 0, 9001, 447, 9010,14170, 8977, 8983,14170, 8986, 8987, - 8994, 8997, 8868, 9011, 9048, 9058, 9064, 9066, 9002, 9007, - 9028, 9024, 9040,14170, 436, 9039, 9035, 9039, 9045, 9038, - - 9051, 461, 367, 9046, 9082,14170, 330, 9078, 366, 9047, - 9044, 9050,14170, 9041, 9048, 0, 9091, 9052, 9093, 0, - 9116, 0, 9122, 9123,14170, 9064,14170, 9066, 9078, 9079, - 14170, 9081, 9087, 9101, 9084, 9102, 9097, 0, 315, 9137, - 9090, 9093, 9097, 9095, 9144,14170, 9115, 262, 254, 9150, - 0, 9151, 0,14170, 9132, 9130, 9122, 9124, 9132, 9122, - 9134, 9130, 9125, 9127, 9134, 0, 0, 143, 9178, 0, - 9137, 9199, 9182, 9208, 9155,14170,14170, 138, 109, 9155, - 9154, 9166,14170,14170, 9156,14170, 9177, 9170, 9195, 9196, - 0, 43,14170, 9225, 9251, 9260, 9193,14170,14170, 9225, - - 9227, 9228,14170, 6, 9219, 9229,14170,14170, 9274,14170, - 14170,14170, 9263,14170,14170, 9259, 9260, 9272, 9269, 9262, - 14170, 9274, 9274, 9276,14170,14170, 9338, 9356, 9374, 9392, - 9410, 9428, 9446, 9464, 9482, 9500, 9518, 9536, 9554, 9572, - 9590, 9608, 9626, 9644, 9662, 9680, 9698, 9716, 9734, 9752, - 9770, 9788, 9806, 9824, 9842, 9860, 9878, 9896, 9914, 9932, - 9950, 9968, 9986,10004,10022,10040,10058,10076,10094,10112, - 10130,10148,10166,10184,10202,10220,10238,10256,10274,10292, - 10310,10328,10346,10364,10382,10399,10417,10435,10453,10471, - 10489,10506,10524,10542,10560,10578,10596,10614,10632,10650, - - 10668,10686,10704,10722,10740,10758,10776,10794,10812,10830, - 10848,10866,10884,10902,10920,10937,10955,10973,10991,11009, - 11027,11045,11063,11080,11098,11116,11134,11152,11170,11188, - 11206,11224,11242,11260,11278,11296,11314,11332,11350,11368, - 11386,11404,11421,11439,11457,11475,11493,11511,11529,11546, - 11564,11582,11600,11618,11636,11654,11672,11690,11708,11726, - 11744,11762,11780,11798,11816,11834,11852,11869,11887,11905, - 11923,11941,11959,11977,11995,12013,12031,12049,12060,12074, - 12092,12100,12116,12133,12137,12153,12171,12181,12197,12215, - 12233,12251,12268,12284,12302,12320,12338,12356,12374,12391, - - 12407,12425,12434,12450,12468,12486,12504,12521,12529,12544, - 12560,12577,12595,12613,12631,12649,12667,12685,12703,12721, - 12739,12757,12767,12775,12790,12805,12816,12824,12832,12848, - 12864,12880,12897,12915,12933,12951,12969,12987,13005,13023, - 13041,13059,13077,13095,13113,13131,13149,13167,13180,13188, - 13196,13204,13215,13231,13247,13255,13263,13279,13297,13315, - 13333,13351,13369,13387,13405,13423,13441,13459,13477,13493, - 13509,13527,13545,13555,13571,13587,13600,13618,13635,13652, - 13669,13680,13696,13713,13730,13742,13758,13776,13793,13811, - 13828,13846,13863,13879,13896,13906,13922,13939,13957,13974, - - 13992,14010,14027,14044,14062,14074,14090,14107,14124,14135, - 14151 + 10936,10885, 2185, 2196,10879, 2168,10850,10875, 2200, 2207, + 10849, 2208,10815,10842, 2217, 2224, 2198, 2211, 2233, 2186, + 2253, 856, 2273,10878, 2215, 2178, 2293,10831, 2237,10797, + 10824, 2316, 2307, 2339, 2193, 2360, 2393, 2408, 2426, 2446, + 10860, 2288, 2295, 2383, 2461, 2486, 2495,10696, 2260,10664, + 10656, 2425, 2447, 2184, 2327,10578,10588, 2457, 2281, 2476, + 14180, 2194, 2214, 2226, 2260, 2274, 2265, 2294,10599, 2293, + 2305, 2320, 2312, 2330, 2327, 2515, 2319, 2337, 2355,10595, + + 2364, 2368, 2435,14180, 2436, 2440, 2443, 2449, 2462, 2482, + 10523, 2483, 2510, 2490, 2480, 2478, 2498, 2520, 2497, 2516, + 2499, 2525, 2521, 2519, 2537, 2532, 2533, 2524, 2556,10483, + 10477, 2533, 2402, 2419, 2472, 2504, 2482, 2605, 2609, 2576, + 2613,10501, 2580, 2617, 1372, 2621, 2631, 2633,10498, 2637, + 2641, 2643, 2544, 2372,10359,10347,10341, 2642,10312,10337, + 2577, 2568, 2576, 2579,10262, 2644,10198,10158,10068, 2650, + 10022,10032, 92, 2597, 2605, 2625, 2612, 2612,14180, 2612, + 2624, 2632, 2635, 2617, 2637, 2645, 2643, 2668, 2650, 2633, + 2649, 2654, 2679, 2677, 2650, 2676, 2688, 2681, 2694,14180, + + 2724, 2715, 9707, 2683,14180, 2685, 9286,14180, 2704, 2701, + 2686, 2700, 2704, 2702, 2699, 9285, 2691, 2699, 2709, 2721, + 2706, 2714, 2502, 2725, 2729, 2719, 9284, 2720, 2731, 2761, + 2730, 2744,14180, 2778, 2742, 2736, 2755, 2742, 2736, 2751, + 2752, 2749, 2766, 2753,14180, 2770, 2763, 2773, 2761, 2771, + 2772, 2774, 2778, 2773, 2772, 2785, 1723, 2825, 2844, 2227, + 2840, 2853, 2816, 2841, 2857, 2863, 2873, 947, 2168, 2835, + 9323, 2904, 42, 2859, 9283, 916, 9282,14180, 9320,14180, + 2874, 2861, 2922, 2937, 2960, 1309, 2991, 2882, 2925, 9319, + 2981, 3014, 3023, 3032, 2228, 3058, 3067, 3076, 2259, 3083, + + 14180, 9318,14180, 989, 2442, 3092, 3115, 2574, 2889, 2943, + 2817, 2907, 3002, 2923, 2839, 2839, 2851, 2858, 2872, 2905, + 2913, 3070,14180, 2934, 2941,14180, 9307, 2929, 3131, 3140, + 2954, 2996, 2988,14180, 3014, 3022, 3038,14180, 3074, 3076, + 3078, 3059, 3071, 9317, 3093, 3101, 3099, 3129, 3130, 3139, + 3126, 3149, 3124, 3130, 3147, 3139, 3134, 3151, 3131, 3143, + 3153, 3144, 3136, 9303, 3146, 3143, 3146, 3158, 3162, 3153, + 3160, 3154, 3163, 3170,14180, 9314, 3175, 2971, 2990, 3121, + 3049, 3130, 3233, 3234, 3239, 3240, 3246, 3248, 9322, 3252, + 3254, 3258, 3260, 3264, 3266, 3270, 2822, 3035, 2847, 3267, + + 3199, 3213, 3231, 2888, 3269, 3268, 3273, 3271, 9263, 9244, + 14180, 3234, 3236,14180, 3253, 3254, 3248, 3242, 3243, 3263, + 3245, 3262, 3267, 3270, 3256, 3263, 3259, 3280, 3262, 3268, + 3288, 3307, 3293, 3293, 3295, 3298, 3299, 3306, 3308, 3308, + 3320, 3308, 3318, 3316, 3327, 3318, 3319,14180, 3357, 3313, + 3325, 3348, 3319, 3327, 3323, 3349, 3363, 3366, 3356, 3353, + 3366, 9264, 3372, 3374, 3360, 3362, 3367,14180, 3364, 3368, + 3365, 3409, 3382, 3387,14180, 3389, 3379, 3380, 3402, 3418, + 3417, 3401, 3400, 3412, 3414, 3425, 3411, 3418,14180, 3420, + 3419, 3436, 3424, 3435, 3434, 3434, 3443, 3434, 3437, 3450, + + 3442, 9236, 9212, 9183, 9210, 9180, 3503, 3485, 1508, 9207, + 9130, 3518, 3496, 3484, 3495, 1344, 3536, 3590, 3506, 3605, + 3537, 3623, 3516, 3554, 9154, 9125, 3465, 9117, 3498, 8905, + 3506, 3507,14180, 3510,14180, 3527, 3540, 3563, 3555, 3546, + 8879, 3564, 3634, 3556, 3553, 3570, 3578, 3597,14180,14180, + 8796, 3595,14180, 3608, 8798, 0, 3605, 3593, 3615, 3616, + 3617, 3617, 3627, 3662, 3632, 3620, 3635, 3632, 3629, 3643, + 3659, 3665, 3650, 3660, 3664, 3669,14180, 3671, 3664, 3669, + 3678, 3665, 3669, 8768, 3674, 3670, 3679, 3681, 8714, 18, + 8603, 3414, 3562, 3717, 3574, 3582, 3743, 3728, 3744, 3750, + + 3751, 3752, 3757, 3690, 8544, 8550, 8452, 3718, 3713, 3718, + 8479, 8411, 8378, 8293, 8275, 8155, 3716, 3726, 3731,14180, + 3732, 3719,14180, 3725, 3731, 3720, 3733, 3735, 3729, 3734, + 3731, 3734, 3738, 3749, 3730, 3751, 3752, 3743, 3744, 3739, + 3752, 3757, 3781, 3776, 3784, 3775, 3770, 3776, 3788, 3775, + 3773, 3776, 3792, 3794, 3796, 3785, 3801, 3798,14180, 3789, + 3800, 3805, 3792, 3783, 3794,14180, 3826, 3805, 3005, 3791, + 3812, 3838, 8149, 3842, 3833, 3834, 3830, 8148, 3825, 3831, + 3849, 3834, 8142, 3840, 8093, 3854, 3840, 3843, 3850, 3855, + 3857, 3857, 8046, 3848,14180, 3855, 3844, 3848, 3860, 3852, + + 3876, 3888, 3883, 3884, 3898, 3899, 3890, 3902,14180, 3885, + 3902, 3906, 3883, 3895, 3890, 3896, 3908, 3913, 3927, 3000, + 1689, 8069, 3928, 3971, 1818, 8062, 3961, 1837, 3975, 1749, + 3930, 4005, 3970, 3914, 3948,14180, 3929, 3956, 3963, 3950, + 3954, 3961, 3974, 3969, 0, 4033, 3957,14180, 3969, 3985, + 3971, 3999, 3991, 4015, 4008, 4010, 8026, 3997, 8005, 7988, + 7981, 7837, 7832, 4000, 4073, 4001, 7825, 7767, 4013, 4005, + 4019, 4010, 4024, 4016, 4038, 4042, 4026, 4029,14180, 4052, + 4036, 4041, 4050, 4075,14180, 4072, 4067, 4060, 4075, 4068, + 4063, 966, 7728, 2285, 0, 3947, 3948, 4114, 3953, 3990, + + 3209, 4085, 4076, 7717, 7695, 4087, 4078, 4062, 4082, 4079, + 4076, 4082, 4085, 4079, 4096, 4087, 4098, 4094, 4110, 4107, + 4105, 4113, 4112, 4111, 4132, 4120, 4121, 4134, 4139, 4137, + 4123, 4141, 4135, 4129, 4146, 4138, 4166, 4143, 4160, 4147, + 4169, 4164, 4187, 4174, 4189, 4175, 4168, 4181, 4175, 4184, + 4181, 4186, 4190, 4190, 4205, 4198, 4195, 4192,14180, 7654, + 7613, 7536, 4209, 4196, 4217, 4218, 4206, 4230, 7419, 7406, + 4222, 4224, 4242, 4263, 4228, 4216, 4230, 4226, 4234, 4239, + 4257, 4261, 4262, 4255, 4261, 4263, 4265, 4254, 4264, 4261, + 4262, 4282, 4276, 4278, 4274, 4288, 4291, 4298, 4298, 4293, + + 4283, 4301,14180, 4288, 4298, 4305, 4296, 4330, 4346, 4361, + 4294, 4315, 4323, 4332,14180, 4332, 4340, 4325, 4345, 4332, + 4338, 4407, 2881, 7399, 4418, 4354, 7398, 7373, 4334, 4343, + 4354, 4386, 4416, 4353, 4392,14180, 4379,14180, 4396,14180, + 14180,14180,14180, 7362, 4389, 4410, 4427, 7237, 4414, 4426, + 4430, 4430, 4433, 4434, 4424, 4424, 4432, 4438, 4432, 4421, + 4440, 4443, 4446, 4426, 4446, 4443, 4450, 4451, 4452, 4442, + 7092, 2914, 7135, 0, 4063, 4453, 3563, 7059, 1989, 4446, + 4448, 4182,14180, 4469, 4456, 4459, 4479, 4482, 4469, 4471, + 4489, 4479, 4481, 4491, 4479, 4486, 4497, 4494, 4492, 4493, + + 4494, 4492, 4493, 4500, 4496, 4506, 4508, 4513, 4504, 4515, + 4508, 4526, 4524, 4521, 4529, 4531, 4533, 4543, 4544, 4547, + 4535, 4534, 4535, 4537, 4545, 4541, 4538, 4557, 4558, 4547, + 4544, 4563, 4585, 4561, 4547, 4564,14180, 4557, 4561, 4556, + 4580, 4578, 4581, 4597, 4581, 4583, 4585, 7064, 4591, 4589, + 4604, 4594, 4596, 4593, 4609, 4652, 4367, 7058, 4611, 4615, + 4602,14180, 4614, 4610,14180, 4617, 4603,14180,14180,14180, + 4597, 4605, 4634, 4636,14180, 4634, 4647, 4638, 4642, 4642, + 4654, 4644, 4646, 4649, 4665, 4666, 4665, 4663, 4668, 4657, + 4673, 4678, 4688, 4680, 4689, 4690, 4692, 4708, 3031, 7086, + + 4713, 4698,14180, 4696, 4712, 4713, 4714, 4715, 4707, 7055, + 4752, 7049, 3001, 7078, 4705, 0,14180, 7032, 4723, 4713, + 4773, 4715, 4723, 4728, 4743, 4754, 7008, 4771,14180, 7007, + 4734, 4801, 4770, 4748, 4738, 4761, 4758, 4767, 4768, 4766, + 4783,14180, 4787, 4797, 4803, 4788, 4810, 4804, 4815, 4814, + 4814, 4821, 4808, 4810, 4805, 3505, 4374, 6667, 6673, 6643, + 4807, 4813, 0, 4867, 4812, 4817,14180, 4818, 4824, 4825, + 4825, 4841, 4842, 4858, 4857, 4864, 4858, 4849, 4864, 4854, + 4859, 4855, 4871, 4866, 4867, 4878, 4873, 4856, 4862, 4865, + 4873, 4880, 4924, 4867, 4870, 4869, 4875, 4894, 4910, 4901, + + 4907, 4903, 4919, 4915, 4906, 4921, 4918, 4956, 4925, 4927, + 4930, 4926, 4932, 4929,14180, 4925, 4921, 4958,14180, 4940, + 4938, 4939, 4945, 4945, 4952, 4973, 4974, 4967, 6621, 4973, + 14180, 4970, 4976, 4962, 4964, 4978, 4966, 4970, 4991, 4974, + 4981, 4986, 4984, 4989, 4977, 4978,14180, 5023, 4995, 4987, + 4983,14180, 4999, 5007,14180,14180,14180,14180, 5026, 6620, + 5012, 5010, 5023, 5017,14180, 5029, 5022, 5024, 5035, 5027, + 5034,14180,14180, 5038, 5074,14180, 5043, 5037, 5038, 5043, + 5037, 5041, 5053, 5084, 3606, 5050, 5050, 5082, 5063, 5070, + 5077, 5091, 5076, 5085, 5155, 6481, 4603, 5119, 6450, 6329, + + 5120, 5099, 5101,14180, 5104, 5112, 5125, 5118, 5108, 5118, + 14180, 5120, 5142, 5140, 5201, 6309, 5143, 5135,14180, 5131, + 5147, 5147, 5152, 5154, 5150, 5155, 5142, 5181, 5153, 5177, + 5180, 5185, 5186, 5187, 5203, 5209, 5209, 5196, 5209, 5199, + 5215, 5216, 5207, 2413, 6270, 5281, 6179, 5285,14180, 5208, + 6183, 5217, 5229, 5241, 5255, 5256, 5263, 5257, 5258, 5254, + 5261, 5267, 5252, 5264, 5259, 6104, 5192, 5268, 5275, 5275, + 5257, 5258, 5267, 5273,14180, 5275, 5284, 5281, 5271, 5344, + 5294, 5296, 5316, 5315, 5313, 5318, 5318, 5311, 5318, 5327, + 5325, 5321, 5317, 5318, 5312, 5362, 5314, 5323, 5329, 5331, + + 5336, 5338, 5325, 5330, 5346, 4377,14180, 5335, 5344, 5343, + 5346, 5366, 5370, 5355, 5354, 5358, 5361, 5368, 5407, 5383, + 5372, 5371, 5374, 5376, 5379, 5381, 5388, 5386, 5414, 5408, + 5417, 5429, 5418, 5414, 5420, 5427, 5425, 5427, 5440, 5432, + 5432, 5435, 5450, 5439, 5456,14180, 6011, 5460, 5458, 5452, + 5460, 5990,14180, 5989,14180, 5459, 5457, 5469, 5460, 5451, + 5457, 5478, 5479, 5466,14180,14180, 5467, 5479, 1035, 1169, + 5475, 5478, 5136, 5509, 5510, 5496, 5501, 5497, 5500, 5512, + 5499, 5513, 5508, 5521, 5509, 5183,14180, 5526, 5527, 5543, + 14180,14180, 5520, 5509, 5509, 5515, 5523, 5528, 5520, 5531, + + 5520, 5527, 5586, 5649, 5529, 5539, 5559, 5575, 5557, 5558, + 5583, 0, 5583, 5591, 5573, 5592, 5581, 5597, 5598, 5584, + 14180, 5600, 5601, 5602, 5603, 5616, 5609, 5628, 5634, 5637, + 5641, 5636, 5631, 5650,14180, 5634, 5651, 5653, 5654, 5651, + 5738, 5679, 5689, 1957, 5692, 5695, 5698, 5661,14180, 5665, + 5651, 5664, 5676, 5754, 5675, 5672, 5677, 5673, 5681, 5677, + 5694, 5686, 5685, 5686, 5410, 5722, 5704, 5707, 5693, 5694, + 5700, 5700, 5700, 5726, 5716, 5727, 5590, 0, 5740, 5737, + 5735, 5749, 5738, 5735, 5734, 5733, 5740, 5737, 0, 5752, + 5754, 5761, 5744, 0, 5818, 5750, 5767, 5753, 5785, 5798, + + 5416, 5790, 5800, 5793,14180, 5806, 5794, 5822, 5823, 5798, + 5797, 5793, 5809, 5814, 5798, 5812, 5803, 5801, 5821, 5814, + 5819, 5813, 5822, 5820, 5829, 5833, 5823, 5828, 5842,14180, + 14180,14180,14180, 5839, 5856, 5855, 5836, 5851, 5858, 5860, + 5862, 5860, 5849, 5670, 5866, 5857, 5871, 5858, 5873,14180, + 14180,14180,14180, 5870, 5860,14180, 5861, 5716,14180,14180, + 5875, 5870,14180, 5870, 5865, 5882, 5874, 5886, 5892, 5899, + 14180, 1446, 1625,14180, 2438,14180, 5895, 5898, 5909, 5584, + 5525, 5934, 5515, 5935,14180, 5899, 5912, 5913, 5906, 5922, + 5916, 5911, 5909, 5916, 250, 5959, 5393, 5356, 5266, 5947, + + 5261, 5948, 5926, 5934, 5935, 5927, 5931, 5930, 5936,14180, + 5954, 5938, 5944, 6000, 5959, 5954, 5971, 5966, 5966, 5966, + 5982, 5993, 5992, 6000, 5998, 5987, 6000, 5990, 5995, 0, + 5999, 6000, 6008,14180, 6013,14180,14180, 5993,14180, 6003, + 6004, 6007, 5288, 6007, 6010, 6011, 6013, 6007, 6015, 6020, + 6020,14180,14180, 6015,14180, 6034, 5253, 6086, 5204, 6094, + 6015, 6053,14180, 6065, 6043, 6099, 5638, 6053, 6063, 6072, + 6070, 6059, 6055, 6062, 5994, 6069, 6065, 6081, 6067, 6069, + 6079, 6078, 6087, 0, 6122, 6150, 6090, 6076, 6099, 6100, + 6106, 6103, 6121, 6125,14180, 6159, 6118, 5249, 6123, 6132, + + 6135, 6125, 6136, 6133, 6134, 6139, 6125, 6142, 0, 6134, + 6140, 6135, 6149, 5248, 6140, 6137, 6183, 6151, 6143, 6211, + 6161, 6160, 6161, 6161, 6177,14180,14180, 6180, 6175, 5146, + 6173, 5141, 6206, 6181,14180, 6175, 6185, 6178, 6187, 6199, + 6179, 5127, 6184, 6192, 6194, 6190, 6196, 6210,14180, 6194, + 6209, 6201, 4970, 6207, 6204, 6215,14180, 6206, 6207, 6212, + 6207, 6218, 6237, 6225, 6227, 6233, 6234, 6249,14180,14180, + 6248, 6254, 6251,14180, 6249, 6254, 6256, 4682, 3131,14180, + 6261, 6258, 4629, 4395, 4349, 6282, 4388, 6283, 6285, 6248, + 6261, 6255, 6251, 6259, 6262, 6255,14180, 6253, 4377, 6336, + + 6304, 6316, 6342, 6348, 6357, 4373, 4375, 4294, 6310, 4262, + 6311, 6313, 6274, 4060, 6275, 6312, 6320, 6316, 6325, 6337, + 6341, 6333,14180, 6344, 6341, 6349, 6347, 6335, 6351, 6338, + 6341, 6342, 6341, 6341, 6347, 6351, 6352, 6359, 6356, 6367, + 6378, 6374, 6386, 6388, 6396, 6399, 4040, 6399, 3980, 6397, + 6398, 6385, 6400, 6393, 6395, 6404, 6395, 6397, 3894, 6441, + 14180, 3785, 6449,14180, 6403, 6401, 6409, 6418, 0, 0, + 6466, 6408, 6415, 6421, 6424, 6432, 6432, 6433, 6444, 6481, + 6432, 6448,14180, 6458, 6440, 6456, 6461, 6448, 3724, 0, + 0, 6443, 6457, 6458, 6469, 6471, 6467,14180, 6463, 6523, + + 6468,14180, 6475, 6467, 6471, 6496,14180, 6483, 6491, 6503, + 6536, 6505, 6512, 6501, 6512, 6502,14180, 6503, 6513, 6563, + 6508, 6516, 0, 6579, 1544, 6515, 3668, 6510, 6525, 6532, + 6518, 6519, 6530, 6543, 6554,14180, 6546, 6560, 6548, 6557, + 6565, 6563, 6565, 6570, 6560, 6554, 6569, 6566, 6567, 6576, + 3667, 3663, 6559, 6578, 6569, 6577, 6582, 6566, 6581, 6583, + 6591,14180, 6588, 6590, 6583, 6587, 6597, 6601,14180, 6608, + 6606, 6601,14180, 6609, 6610, 6620, 6615, 6614, 6624, 6648, + 6649,14180, 6618, 6632, 6629, 6631, 6632, 6633,14180, 3702, + 6655, 6692, 6696, 3575, 6659, 6660, 6698, 6652, 6717, 6721, + + 6729, 652, 6733, 6752, 3559, 6657, 6690, 6678, 6687, 6693, + 14180, 6716, 6717, 6706, 6712, 6712, 6711, 6712, 6718, 6723, + 6724, 6732, 6728, 6723, 6736, 6739, 6740, 6734,14180, 6752, + 6748, 6757, 6758, 6745, 6765, 6767, 6756, 6757, 6776, 6772, + 6780, 6765, 6772,14180, 6768, 6783, 6770, 6787, 6785, 6791, + 14180, 6796, 6785,14180, 3546, 0, 6786, 6796, 6789, 6783, + 6802, 6790, 6806, 6798, 0, 0, 6809, 6812, 6801, 6823, + 6825, 6812, 6832,14180, 3530, 6829, 6822, 6833, 6551, 6868, + 14180, 6829, 6820, 0, 6873, 6845, 6838, 6878, 6862, 6829, + 6854, 6852, 6833, 6892, 6856, 6867, 6853, 6870, 6852, 6876, + + 6880, 6879, 0, 0, 6880, 6875, 6883, 1551, 3474, 1922, + 6888, 6875, 6908, 6878, 3461, 6913, 6893, 6902, 6890, 6895, + 6913, 6902, 6915, 3457, 3376, 6909, 6919, 6915, 6919, 6920, + 6946, 6927, 6928, 6912, 6929, 6923, 6920, 6927, 6940, 6927, + 6935, 6930,14180, 6935, 6930, 6940, 6943, 6960, 6946, 6951, + 6951, 6958, 6958, 6971, 6974, 6976, 6966, 6970, 6981, 6971, + 7004, 6982, 6970, 6971, 6967, 3395, 6994, 7050, 7020, 749, + 7051, 7066, 7081, 7082, 3403, 3305, 7035, 7047, 7062, 7070, + 3002, 7113, 942, 7119, 7128, 7139, 7148, 7019, 7154, 7160, + 7013, 3290, 3284, 7004,14180, 7041, 7035, 7052, 7059, 7078, + + 7099, 7115, 7106, 3237, 7125, 7124,14180, 7138,14180, 7138, + 14180, 7139, 7134, 7144,14180, 7146, 7139, 7154, 7150, 7152, + 7153, 7143, 7155,14180, 7145, 7151, 7154,14180,14180,14180, + 7165, 7155, 7165,14180, 7163, 7167, 7182, 7165, 7167, 7193, + 14180, 7179, 3236, 7186, 7186, 7198, 7184, 7185, 7064, 7189, + 14180, 7197, 7196, 7199, 7100, 7243,14180,14180, 7196, 7207, + 0, 7218, 7218, 7209, 7215, 7211, 7233, 7215, 7264, 7246, + 0, 7281, 7220, 7225, 7227, 7288, 7241, 7236, 7260, 7253, + 3224, 7254, 7265, 7258, 3168, 2033, 3124, 7258, 7266,14180, + 7023, 7258,14180, 7265, 7266, 7256, 7264, 7271, 7280, 7285, + + 7276, 7289, 7295, 7287, 7283, 7293, 7290, 7292,14180, 7296, + 7295, 7314, 7302, 7302, 7307, 7318, 7311, 7339, 7323, 7344, + 7321,14180, 7315, 7317, 7323,14180, 7322, 3020, 7336, 7345, + 7333,14180, 7337, 7351, 7354, 7342, 7355, 3037, 7339, 7340, + 7361,14180, 7340, 7369, 1445, 7417, 3005, 7396, 7391, 7380, + 7429, 7438, 7447, 7458, 3023, 7409, 7418, 2846, 7476, 7399, + 7477, 7495,14180, 2969, 7395, 7395, 7422, 2951, 7435, 2946, + 7436, 2871, 7445, 7446, 7462, 7450,14180, 7461, 7447, 7454, + 7475, 7466, 7459, 7460, 7464,14180, 7466, 7468, 7488, 7470, + 14180, 7492, 7475, 7493, 7483, 7480, 7437, 7501, 7498, 7493, + + 14180, 7503, 7512, 7504, 7514, 7511, 7560, 7530, 7446,14180, + 7533, 0, 7467, 0, 7552, 7520, 7519, 2865, 7531, 7539, + 7530, 7532, 7540, 7555, 7551, 7552, 7559, 7603, 7559, 7557, + 7576, 2862, 7570, 7573, 7563, 7597, 7568, 7574, 7579, 7580, + 14180, 7578, 7596, 7597, 2614, 7583, 7580,14180, 7605, 7596, + 7610,14180, 7603, 7614,14180, 7602, 7615, 7616, 7618, 7611, + 7616, 2614, 7622, 7622, 7621, 7620, 2559, 7625, 7617, 7629, + 7619,14180, 7631,14180, 7625,14180,14180, 7626,14180, 2473, + 7671, 7631,14180, 7645,14180, 7639, 7655, 7666, 7657, 7653, + 7670, 7660,14180, 7657, 7675, 7675, 7661, 7671, 7663, 7711, + + 7712, 5015, 7741, 7745, 7749, 7715, 7774, 7775, 5127, 7805, + 7806, 7659, 7710, 7717, 7729, 7719, 2460, 7728, 7724, 7734, + 14180, 7721, 7750, 7762, 7766, 7762, 7766,14180,14180, 7776, + 7781, 7766, 7766, 7717, 7784, 7788,14180, 7834, 7779, 7791, + 7796, 7785, 7788, 7801, 7803, 7801, 7856, 7806, 7867, 7824, + 2432, 7822, 7859, 0, 7828, 7836, 7861, 7858, 7861, 7868, + 7859, 7860, 7869, 7889, 7757, 7868, 7869,14180, 7872, 7883, + 7884, 0, 7847, 7871, 7877, 7888, 7921, 7877, 7934, 7888, + 7899, 7905, 7885, 7831, 7892, 7895, 7895, 7896, 2351, 7902, + 7917, 7919, 7913, 7921, 2329,14180, 2298, 7913, 7924, 7925, + + 7916,14180, 2289, 7912, 7932, 7933, 7925,14180, 7929,14180, + 7929, 7943, 7942, 7939, 7949, 7960, 7955, 7962, 2300, 7952, + 7965, 7954, 7966, 7976, 7971, 8008, 8000, 8037, 8002, 8038, + 8049, 7968, 7988, 7995, 7989, 7999, 2292,14180, 7979,14180, + 8010,14180, 8013, 8011, 8019, 8030, 8035,14180, 8026, 8088, + 8070, 8038, 8085, 8096, 8024, 8043, 8088, 8088, 8089, 8099, + 8104, 8100, 8100, 8134, 8101,14180, 8099, 8160, 8113, 0, + 8118, 8101, 8120, 8114, 8127, 8153, 8150, 8155,14180, 8077, + 8079, 8083, 8149, 8144, 8084, 8149, 8147, 8162, 8095, 8197, + 8208,14180, 8158,14180, 8174,14180, 8173,14180, 8075, 2234, + + 8170, 8179, 8170, 8221, 8180, 8175, 8206, 8192, 8201, 8198, + 8216, 8203, 8219, 8217, 8213, 8214, 8223, 8204, 8229, 8224, + 8224,14180, 8219, 8225, 8227, 8222, 8228, 8189, 8234, 8235, + 8238, 2234, 8239, 8242, 8295, 8266, 8269, 8275, 2216, 8253, + 14180, 8276,14180,14180,14180, 8280,14180, 8264, 8294, 8323, + 8199, 8325, 8274, 8287, 8288, 8291, 8319, 8329, 8327,14180, + 8323, 8329,14180, 8363, 8340, 8341, 8326, 8331, 8375, 8344, + 8342, 8342, 8343, 0, 8333, 8403, 8407, 8362, 8365, 8411, + 8376, 8369, 8378, 2189, 8421, 8427, 8436, 8381,14180,14180, + 14180, 8391, 8398, 8392, 8393,14180, 8392, 8425, 8436, 8442, + + 8423, 8440, 2019, 8428, 1998,14180, 8429,14180, 8443, 8444, + 8436, 8435, 8439,14180, 2050, 8446, 8440, 5073, 8448, 8442, + 8484, 8443, 8451, 8492, 0, 1830, 8479, 8481, 8496, 8498, + 1759, 8498, 8486, 8422, 8522, 8544, 8570,14180, 8500, 8503, + 8507, 8426, 8518, 8504, 8517, 8428, 8527, 8523, 8526,14180, + 8529, 8598, 8550, 8536, 8537, 8604, 8532, 1709, 8485, 0, + 1652, 8486, 0, 8533, 8543, 7718, 8566, 8573, 8568, 8623, + 8632, 8645,14180, 8561, 8594, 8589,14180, 8627, 1579, 8639, + 8643, 8627, 8631, 8634, 8635, 8634, 8648, 8633, 8633, 8634, + 8647, 8650, 8651,14180, 1374, 8650, 5423,14180, 5755, 8651, + + 8686, 8648, 8680, 8681, 0, 0, 8699,14180, 8684, 8698, + 14180,14180, 8732, 8743, 8672, 8712, 8492, 8700, 8771, 8533, + 0, 8696, 8733, 8701, 8703, 8713, 8698, 8780, 8704, 8713, + 14180, 8806, 8723, 8739, 1313, 1065, 8747, 8773, 8482, 1008, + 8632, 8737, 8756, 8774, 8833, 8774, 8781, 8786,14180, 8787, + 8795, 8801, 8786, 8789, 8802, 8803, 8795, 8800, 8801, 8305, + 8613, 8811,14180, 8816,14180, 989, 5769,14180, 6713, 8835, + 914, 8819, 0, 8817,14180, 8827, 8875, 8897, 0, 0, + 0,14180, 8828, 8879, 8834, 8894, 8890, 0, 0, 8903, + 0, 8863, 8858, 8864, 8880, 8884, 8885, 8919, 8875, 8892, + + 14180,14180, 8894, 8895, 8881, 8900, 879, 8925, 876, 8895, + 8886, 8898, 8898, 8899, 8911, 8909, 8921, 8931,14180, 8928, + 8935, 8920,14180, 8919, 8923,14180,14180, 8934, 8859,14180, + 7093,14180, 8925,14180, 8929, 8939,14180, 830, 8928, 0, + 8979, 0, 8947, 0, 743, 8931, 8946, 8943, 8951, 8947, + 8960, 8966, 9007, 8743, 8773, 8973, 8974, 9007, 8971, 8980, + 14180, 8986, 8987,14180, 8990, 8987, 8977, 8982, 8982, 8980, + 8986, 670,14180,14180, 8993, 8986, 9001, 9006,14180, 8991, + 602, 0, 9021, 447, 9029,14180, 8992, 8997,14180, 9000, + 9001, 9007, 9003, 8883, 9026, 9070, 9078, 9077, 9086, 9017, + + 9021, 9033, 9032, 9055,14180, 436, 9055, 9051, 9057, 9063, + 9055, 9068, 461, 367, 9063, 9099,14180, 330, 9095, 366, + 9064, 9061, 9067,14180, 9057, 9064, 0, 9108, 9069, 9110, + 0, 9135, 0, 9136, 9142,14180, 9078,14180, 9077, 9094, + 9094,14180, 9087, 9101, 9115, 9099, 9121, 9114, 0, 315, + 9154, 9107, 9110, 9114, 9112, 9161,14180, 9132, 262, 254, + 9170, 0, 9182, 0,14180, 9138, 9136, 9126, 9134, 9142, + 9132, 9148, 9144, 9139, 9143, 9149, 0, 0, 143, 9198, + 0, 9150, 9207, 9199, 9216, 9186,14180,14180, 138, 109, + 9190, 9189, 9183,14180,14180, 9189,14180, 9211, 9202, 9206, + + 9207, 0, 43,14180, 9235, 9261, 9270, 9202,14180,14180, + 9235, 9237, 9239,14180, 6, 9235, 9265,14180,14180, 9289, + 14180,14180,14180, 9263,14180,14180, 9259, 9260, 9272, 9269, + 9272,14180, 9284, 9284, 9286,14180,14180, 9348, 9366, 9384, + 9402, 9420, 9438, 9456, 9474, 9492, 9510, 9528, 9546, 9564, + 9582, 9600, 9618, 9636, 9654, 9672, 9690, 9708, 9726, 9744, + 9762, 9780, 9798, 9816, 9834, 9852, 9870, 9888, 9906, 9924, + 9942, 9960, 9978, 9996,10014,10032,10050,10068,10086,10104, + 10122,10140,10158,10176,10194,10212,10230,10248,10266,10284, + 10302,10320,10338,10356,10374,10392,10409,10427,10445,10463, + + 10481,10499,10516,10534,10552,10570,10588,10606,10624,10642, + 10660,10678,10696,10714,10732,10750,10768,10786,10804,10822, + 10840,10858,10876,10894,10912,10930,10947,10965,10983,11001, + 11019,11037,11055,11073,11090,11108,11126,11144,11162,11180, + 11198,11216,11234,11252,11270,11288,11306,11324,11342,11360, + 11378,11396,11414,11431,11449,11467,11485,11503,11521,11539, + 11556,11574,11592,11610,11628,11646,11664,11682,11700,11718, + 11736,11754,11772,11790,11808,11826,11844,11862,11879,11897, + 11915,11933,11951,11969,11987,12005,12023,12041,12059,12070, + 12084,12102,12110,12126,12143,12147,12163,12181,12191,12207, + + 12225,12243,12261,12278,12294,12312,12330,12348,12366,12384, + 12401,12417,12435,12444,12460,12478,12496,12514,12531,12539, + 12554,12570,12587,12605,12623,12641,12659,12677,12695,12713, + 12731,12749,12767,12777,12785,12800,12815,12826,12834,12842, + 12858,12874,12890,12907,12925,12943,12961,12979,12997,13015, + 13033,13051,13069,13087,13105,13123,13141,13159,13177,13190, + 13198,13206,13214,13225,13241,13257,13265,13273,13289,13307, + 13325,13343,13361,13379,13397,13415,13433,13451,13469,13487, + 13503,13519,13537,13555,13565,13581,13597,13610,13628,13645, + 13662,13679,13690,13706,13723,13740,13752,13768,13786,13803, + + 13821,13838,13856,13873,13889,13906,13916,13932,13949,13967, + 13984,14002,14020,14037,14054,14072,14084,14100,14117,14134, + 14145,14161 } ; -static const flex_int16_t yy_def[4212] = +static const flex_int16_t yy_def[4223] = { 0, - 3927, 3927, 3926, 3, 3928, 3928, 3, 3, 3929, 3929, - 3929, 3929, 3930, 3930, 3931, 3931, 3932, 3932, 3933, 3933, - 3934, 3934, 3928, 3928, 3928, 3928, 3935, 3935, 3936, 3936, - 3936, 3936, 3937, 3937, 3938, 3938, 3926, 37, 37, 37, - 3928, 3928, 3928, 3928, 3928, 3928, 3939, 3939, 3940, 3940, - 3941, 3941, 3942, 3942, 3943, 3943, 3944, 3944, 3945, 3945, - 3928, 3928, 3946, 3946, 3947, 3947, 3945, 3945, 3928, 3928, - 3948, 3948, 3949, 3949, 3926, 3926, 3926, 3926, 3926, 3926, - 3950, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 131, 3926, 3926, 3926, 3951, 3951, 3951, 3926, - 3926, 3951, 3952, 3952, 3952, 3926, 3953, 3952, 3954, 3954, - 3954, 3926, 3955, 3926, 3954, 3956, 3956, 3926, 3956, 3926, - 3926, 3957, 3926, 3926, 3926, 3957, 3958, 3957, 3959, 3959, - 3959, 3926, 3960, 3959, 3926, 3961, 3926, 3959, 3962, 3962, - 3962, 3926, 3963, 3962, 3964, 3964, 3964, 3926, 3926, 3964, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3965, 3965, 3926, 3926, - 3965, 3966, 3966, 3926, 3967, 3966, 3926, 3968, 3969, 3970, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3971, 3926, 3972, 3971, 3926, 3926, 3926, 3973, 3926, 3974, - 3926, 3973, 3926, 3926, 3926, 3975, 3975, 3975, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3976, 3926, 3976, 3976, 3976, - 3926, 3926, 3976, 3976, 3976, 3977, 3926, 3978, 3977, 3977, - 3977, 3926, 3977, 3977, 3977, 3979, 3926, 3980, 3979, 3979, - 3979, 3926, 3979, 3979, 3979, 3981, 3981, 3926, 3981, 3926, - 3981, 3982, 3926, 3982, 3926, 3983, 3984, 3985, 3984, 3982, - 3986, 3926, 3987, 3986, 3986, 3986, 3986, 3926, 3986, 3926, - - 3988, 3989, 3990, 3989, 3991, 3989, 3926, 3926, 3986, 3986, - 3992, 3926, 3993, 3992, 3992, 3992, 3926, 3992, 3992, 3992, - 3994, 3926, 3994, 3994, 3926, 3994, 3926, 3926, 3994, 3994, - 3994, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3995, 3926, 3995, 3926, 3926, 3995, - 3996, 3926, 3997, 3996, 3926, 3996, 3998, 3999, 4000, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4001, 3926, 4002, - 4001, 3926, 4001, 3926, 4003, 3926, 4004, 4003, 3926, 4003, - 4005, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4006, - 3926, 3926, 4006, 4006, 4007, 4008, 3926, 3926, 4008, 4008, - 4009, 4010, 3926, 3926, 4010, 4010, 3926, 3926, 4011, 4012, - 4011, 4013, 4014, 4015, 4015, 4015, 4014, 4016, 4017, 3926, - 3926, 4018, 4019, 4018, 4020, 4018, 4021, 4022, 4022, 4022, - 4023, 4023, 4023, 4024, 4022, 4017, 4017, 4025, 4026, 3926, - 3926, 4026, 4026, 3926, 4027, 3926, 3926, 4027, 3926, 4027, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4028, 3926, 3926, 4029, 4030, 3926, 3926, - 3926, 3926, 3926, 3926, 4031, 4032, 3926, 3926, 4033, 4034, - 3926, 3926, 4035, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4036, 3926, 4036, 4037, - 3926, 4037, 4038, 3926, 4038, 3926, 4039, 4040, 4040, 4040, - 4041, 4039, 4041, 4041, 3926, 4042, 3926, 3926, 4042, 3926, - 4017, 3926, 4043, 4043, 4043, 4044, 4045, 4044, 4044, 4046, - 4047, 4043, 4048, 4045, 4046, 4045, 4045, 4017, 4049, 4017, - - 3926, 4049, 3926, 4049, 4049, 4050, 4017, 4051, 3926, 4051, - 4052, 3926, 4052, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4053, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4054, 3926, 4055, 3926, 3926, - - 3926, 3926, 3926, 4056, 3926, 4057, 3926, 4058, 4058, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 4059, 3926, 4060, 3926, 4061, 4062, 4063, 4064, 3926, - 4043, 4065, 4065, 4065, 4046, 4043, 4045, 4046, 4045, 4066, - 4045, 4067, 4068, 4069, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4070, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4053, 4071, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4072, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 4073, 3926, 3926, 3926, 3926, 4074, 3926, - 4075, 3926, 4076, 4076, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4062, 4063, 4062, 4063, - 4065, 4045, 4065, 4046, 4065, 4046, 4077, 4046, 4046, 4045, - 4067, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4070, 4078, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4079, 3926, 3926, 4071, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4072, 3926, - 4072, 4080, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 4076, 4076, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 4065, 4046, 4066, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4078, 4081, - 4070, 4078, 3926, 3926, 3926, 3926, 3926, 3926, 4082, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4072, 3926, 4080, - 3926, 3926, 3926, 4076, 4083, 3926, 3926, 4084, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4046, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 4070, 4078, 3926, 4081, 4070, - 3926, 4085, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4072, 3926, 4076, 4086, 4087, 3926, 3926, 4088, 4084, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4089, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4078, - 3926, 4081, 4081, 3926, 4085, 4090, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4091, 4086, 4086, - 4087, 4087, 3926, 3926, 4088, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4092, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4093, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4089, 4094, 4089, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4095, - 3926, 4090, 4096, 4090, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 4097, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4098, 4099, 4086, 3926, 4086, 4087, 4087, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4100, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4092, - 4101, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4102, 3926, 3926, 3926, 3926, 4103, 4093, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4089, 4094, 3926, 4094, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4095, 4104, 4105, - 3926, 4090, 4096, 3926, 4096, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4097, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4098, 4106, - 4099, 4107, 3926, 3926, 3926, 3926, 3926, 4108, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4109, 4100, 4110, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4101, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 4102, 3926, 3926, 3926, 3926, 4103, 3926, 3926, 3926, 3926, - 3926, 4111, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4094, 3926, 4089, - 4094, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4112, 4104, 4113, 4095, 4114, 4115, 4104, 4116, 3926, 3926, - - 4117, 3926, 4118, 4117, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4119, - 4120, 3926, 4121, 4122, 3926, 3926, 3926, 3926, 3926, 4123, - 4124, 4125, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4126, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4127, - 4128, 4129, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4130, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4131, 3926, 3926, 4132, 4132, 4133, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4134, 4135, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4136, 4137, 4138, 4139, 3926, 4140, 4141, 4137, 4142, 4143, - 4144, 4145, 4136, 4138, 4145, 4146, 4147, 4148, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4149, 4150, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4151, 4152, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4153, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4154, 4154, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4155, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4156, 4157, 3926, 3926, 3926, 4158, 3926, 4158, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4159, 3926, 3926, 3926, 3926, 3926, 3926, 4138, 4160, 4136, - 4161, 4138, 4138, 4162, 3926, 3926, 4160, 4160, 4163, 4163, - 4164, 4165, 4146, 4165, 4165, 4166, 4166, 4136, 4167, 4167, - 4168, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4151, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4169, 4170, 3926, 3926, 3926, 3926, 4171, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4172, - 4155, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4156, - 3926, 3926, 3926, 3926, 4158, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4136, 4138, 3926, 4160, 4136, 4164, 4165, - 4161, 4167, 4138, 3926, 4163, 4160, 4146, 4165, 4146, 4173, - 4165, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 4169, 4169, 4174, 4170, 3926, 3926, 4171, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4172, 3926, 3926, 3926, 4175, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4158, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4138, 4160, - 4164, 4161, 4161, 4167, 4163, 4165, 4173, 4146, 4165, 4173, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4176, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4174, - 3926, 3926, 4177, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4175, 4175, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 4138, 4160, 4173, 4146, 4165, 4173, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4177, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4178, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4179, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4173, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4178, 4178, 4180, 4181, 3926, 3926, 3926, 3926, - 3926, 3926, 4179, 4179, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4182, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4180, 4180, 4183, 4181, - 4181, 4184, 3926, 3926, 4185, 3926, 3926, 3926, 4179, 4179, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4182, 4186, 3926, 3926, 3926, 3926, 3926, - - 3926, 4187, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4188, - 3926, 4189, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 4183, 4184, 3926, 3926, 4185, 3926, 4185, - 3926, 3926, 3926, 4179, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 4186, 3926, 3926, 3926, 4187, 4187, 4190, 4191, 4192, - 3926, 3926, 4193, 3926, 3926, 3926, 4188, 4194, 4189, 4195, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4185, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4191, 3926, 4196, 4193, - 4197, 4198, 4194, 4195, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 4185, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4196, - 4197, 4198, 3926, 4198, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 4199, 3926, 4200, 4201, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4198, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4199, 4199, 3926, 4200, 4202, - 4201, 4203, 4204, 4205, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4206, 3926, 4207, - 4198, 3926, 3926, 3926, 3926, 3926, 3926, 4202, 4203, 4204, - 4208, 4205, 4209, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 4206, 4210, 4207, 4207, 4211, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 4208, 4209, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 4210, 4211, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 0, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926 + 3938, 3938, 3937, 3, 3939, 3939, 3, 3, 3940, 3940, + 3940, 3940, 3941, 3941, 3942, 3942, 3943, 3943, 3944, 3944, + 3945, 3945, 3939, 3939, 3939, 3939, 3946, 3946, 3947, 3947, + 3947, 3947, 3948, 3948, 3949, 3949, 3937, 37, 37, 37, + 3939, 3939, 3939, 3939, 3939, 3939, 3950, 3950, 3951, 3951, + 3952, 3952, 3953, 3953, 3954, 3954, 3955, 3955, 3956, 3956, + 3939, 3939, 3957, 3957, 3958, 3958, 3956, 3956, 3939, 3939, + 3959, 3959, 3960, 3960, 3937, 3937, 3937, 3937, 3937, 3937, + 3961, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 131, 3937, 3937, 3937, 3962, 3962, 3962, 3937, + 3937, 3962, 3963, 3963, 3963, 3937, 3964, 3963, 3965, 3965, + 3965, 3937, 3966, 3937, 3965, 3967, 3967, 3937, 3967, 3937, + 3937, 3968, 3937, 3937, 3937, 3968, 3969, 3968, 3970, 3970, + 3970, 3937, 3971, 3970, 3937, 3972, 3937, 3970, 3973, 3973, + 3973, 3937, 3974, 3973, 3975, 3975, 3975, 3937, 3937, 3975, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3976, 3976, 3937, 3937, + 3976, 3977, 3977, 3937, 3978, 3977, 3937, 3979, 3980, 3981, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3982, 3937, 3983, 3982, 3937, 3937, 3937, 3984, 3937, 3985, + 3937, 3984, 3937, 3937, 3937, 3986, 3986, 3986, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3987, 3937, 3987, 3987, 3987, + 3937, 3937, 3987, 3987, 3987, 3988, 3937, 3989, 3988, 3988, + 3988, 3937, 3988, 3988, 3988, 3990, 3937, 3991, 3990, 3990, + 3990, 3937, 3990, 3990, 3990, 3992, 3992, 3937, 3992, 3937, + 3992, 3993, 3937, 3993, 3937, 3994, 3995, 3996, 3995, 3993, + 3997, 3937, 3998, 3997, 3997, 3997, 3997, 3937, 3997, 3937, + + 3999, 4000, 4001, 4000, 4002, 4000, 3937, 3937, 3997, 3997, + 4003, 3937, 4004, 4003, 4003, 4003, 3937, 4003, 4003, 4003, + 4005, 3937, 4005, 4005, 3937, 4005, 3937, 3937, 4005, 4005, + 4005, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 4006, 3937, 4006, 3937, 3937, 4006, + 4007, 3937, 4008, 4007, 3937, 4007, 4009, 4010, 4011, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4012, 3937, 4013, + 4012, 3937, 4012, 3937, 4014, 3937, 4015, 4014, 3937, 4014, + 4016, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4017, + 3937, 3937, 4017, 4017, 4018, 4019, 3937, 3937, 4019, 4019, + 4020, 4021, 3937, 3937, 4021, 4021, 3937, 3937, 4022, 4023, + 4022, 4024, 4025, 4026, 4026, 4026, 4025, 4027, 4028, 3937, + 3937, 4029, 4030, 4029, 4031, 4029, 4032, 4033, 4033, 4033, + 4034, 4034, 4034, 4035, 4033, 4028, 4028, 4036, 4037, 3937, + 3937, 4037, 4037, 3937, 4038, 3937, 3937, 4038, 3937, 4038, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4039, 3937, 3937, 4040, 4041, 3937, 3937, + 3937, 3937, 3937, 3937, 4042, 4043, 3937, 3937, 4044, 4045, + 3937, 3937, 4046, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4047, 3937, 4047, 4048, + 3937, 4048, 4049, 3937, 4049, 3937, 4050, 4051, 4051, 4051, + 4052, 4050, 4052, 4052, 3937, 4053, 3937, 3937, 4053, 3937, + 4028, 3937, 4054, 4054, 4054, 4055, 4056, 4055, 4055, 4057, + 4058, 4054, 4059, 4056, 4057, 4056, 4056, 4028, 4060, 4028, + + 3937, 4060, 3937, 4060, 4060, 4061, 4028, 4062, 3937, 4062, + 4063, 3937, 4063, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4064, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4065, 3937, 4066, 3937, + + 3937, 3937, 3937, 3937, 4067, 3937, 4068, 3937, 4069, 4069, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 4070, 3937, 4071, 3937, 4072, 4073, 4074, 4075, + 3937, 4054, 4076, 4076, 4076, 4057, 4054, 4056, 4057, 4056, + 4077, 4056, 4078, 4079, 4080, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4081, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4064, 4082, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4083, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 4084, 3937, 3937, 3937, 3937, + 4085, 3937, 4086, 3937, 4087, 4087, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4073, 4074, + 4073, 4074, 4076, 4056, 4076, 4057, 4076, 4057, 4088, 4057, + 4057, 4056, 4078, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4081, 4089, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4090, 3937, 3937, 4082, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4083, 3937, 4083, 4091, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 4087, 4087, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4076, 4057, 4077, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4089, 4092, 4081, 4089, 3937, 3937, 3937, 3937, 3937, + 3937, 4093, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4083, 3937, 4091, 3937, 3937, 3937, 4087, 4094, 3937, + 3937, 4095, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4057, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4081, + 4089, 3937, 4092, 4081, 3937, 4096, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4083, 3937, 4087, 4097, 4098, + 3937, 3937, 4099, 4095, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4100, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4089, 3937, 4092, 4092, 3937, 4096, + + 4101, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4102, 4097, 4097, 4098, 4098, 3937, 3937, + 4099, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4103, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4104, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 4100, 4105, 4100, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4106, 3937, 4101, 4107, 4101, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4108, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4109, 4110, 4097, 3937, 4097, 4098, 4098, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4111, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4103, 4112, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4113, 3937, + 3937, 3937, 3937, 4114, 4104, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4100, 4105, 3937, 4105, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4106, 4115, 4116, 3937, 4101, 4107, + + 3937, 4107, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4108, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4109, 4117, 4110, 4118, + 3937, 3937, 3937, 3937, 3937, 4119, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4120, 4111, 4121, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4112, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4113, 3937, + 3937, 3937, 3937, 4114, 3937, 3937, 3937, 3937, 3937, 4122, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4105, 3937, 4100, 4105, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4123, 4115, + + 4124, 4106, 4125, 4126, 4115, 4127, 3937, 3937, 4128, 3937, + 4129, 4128, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4130, 4131, + 3937, 4132, 4133, 3937, 3937, 3937, 3937, 3937, 4134, 4135, + 4136, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4137, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4138, 4139, + 4140, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4141, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4142, + 3937, 3937, 4143, 4143, 4144, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4145, + 4146, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4147, + 4148, 4149, 4150, 3937, 4151, 4152, 4148, 4153, 4154, 4155, + + 4156, 4147, 4149, 4156, 4157, 4158, 4159, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4160, 4161, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4162, 4163, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4164, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4165, 4165, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4166, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 4167, 4168, 3937, 3937, 3937, 4169, 3937, 4169, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4170, 3937, 3937, 3937, 3937, 3937, 3937, 4149, 4171, 4147, + 4172, 4149, 4149, 4173, 3937, 3937, 4171, 4171, 4174, 4174, + 4175, 4176, 4157, 4176, 4176, 4177, 4177, 4147, 4178, 4178, + 4179, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 4162, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4180, 4181, 3937, 3937, 3937, 3937, + 4182, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4183, 4166, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4167, 3937, 3937, 3937, 3937, 4169, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4147, 4149, 3937, 4171, 4147, 4175, + 4176, 4172, 4178, 4149, 3937, 4174, 4171, 4157, 4176, 4157, + 4184, 4176, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4180, 4180, 4185, 4181, 3937, 3937, 4182, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4183, 3937, 3937, 3937, 4186, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4169, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4149, + + 4171, 4175, 4172, 4172, 4178, 4174, 4176, 4184, 4157, 4176, + 4184, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4187, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4185, 3937, 3937, 4188, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 4186, 4186, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 4149, 4171, 4184, 4157, 4176, + 4184, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4188, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4189, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4190, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4184, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4189, 4189, 4191, 4192, 3937, 3937, 3937, + 3937, 3937, 3937, 4190, 4190, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4193, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4191, 4191, 4194, + 4192, 4192, 4195, 3937, 3937, 4196, 3937, 3937, 3937, 4190, + 4190, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 4193, 4197, 3937, 3937, 3937, 3937, + 3937, 3937, 4198, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4199, 3937, 4200, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 4194, 4195, 3937, 3937, 4196, 3937, + 4196, 3937, 3937, 3937, 4190, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 4197, 3937, 3937, 3937, 4198, 4198, 4201, 4202, + 4203, 3937, 3937, 4204, 3937, 3937, 3937, 4199, 4205, 4200, + 4206, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4196, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4202, 3937, 4207, + 4204, 4208, 4209, 4205, 4206, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4196, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 4207, 4208, 4209, 3937, 4209, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 4210, 3937, 4211, 4212, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4209, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4210, 4210, 3937, 4211, + 4213, 4212, 4214, 4215, 4216, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4217, 3937, + 4218, 4209, 3937, 3937, 3937, 3937, 3937, 3937, 4213, 4214, + 4215, 4219, 4216, 4220, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 4217, 4221, 4218, 4218, + 4222, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 4219, 4220, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 4221, 4222, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 0, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937 } ; -static const flex_int16_t yy_nxt[14258] = +static const flex_int16_t yy_nxt[14268] = { 0, - 3926, 77, 78, 79, 77, 118, 80, 81, 118, 118, - 283, 284, 118, 3926, 82, 119, 120, 121, 119, 122, - 123, 3926, 129, 98, 124, 129, 130, 98, 125, 1390, - 83, 135, 84, 85, 3914, 269, 136, 86, 87, 88, - 315, 316, 98, 89, 90, 91, 135, 92, 93, 3908, - 131, 136, 94, 1108, 138, 139, 95, 138, 83, 873, + 3937, 77, 78, 79, 77, 118, 80, 81, 118, 118, + 283, 284, 118, 3937, 82, 119, 120, 121, 119, 122, + 123, 3937, 129, 98, 124, 129, 130, 98, 125, 1393, + 83, 135, 84, 85, 3925, 269, 136, 86, 87, 88, + 315, 316, 98, 89, 90, 91, 135, 92, 93, 3919, + 131, 136, 94, 1109, 138, 139, 95, 138, 83, 873, 84, 85, 140, 269, 141, 86, 87, 88, 256, 270, - 126, 89, 90, 91, 1391, 92, 93, 132, 283, 284, + 126, 89, 90, 91, 1394, 92, 93, 132, 283, 284, 94, 77, 78, 79, 77, 257, 80, 81, 129, 98, 256, 129, 130, 271, 82, 157, 158, 270, 157, 127, 96, 272, 129, 98, 233, 129, 130, 257, 234, 142, - 83, 235, 84, 85, 273, 3899, 131, 86, 87, 88, - 274, 271, 1008, 89, 90, 91, 275, 92, 93, 272, - 133, 280, 94, 526, 318, 527, 95, 318, 83, 1009, - 84, 85, 273, 132, 3898, 86, 87, 88, 274, 3926, + 83, 235, 84, 85, 273, 3910, 131, 86, 87, 88, + 274, 271, 1009, 89, 90, 91, 275, 92, 93, 272, + 133, 280, 94, 526, 318, 527, 95, 318, 83, 1010, + 84, 85, 273, 132, 3909, 86, 87, 88, 274, 3937, 159, 89, 90, 91, 275, 92, 93, 132, 236, 280, 94, 96, 97, 98, 96, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, @@ -1889,8 +1892,8 @@ static const flex_int16_t yy_nxt[14258] = 96, 106, 96, 107, 108, 109, 110, 111, 112, 113, 96, 114, 115, 96, 96, 96, 96, 117, 119, 120, 121, 119, 122, 123, 281, 129, 98, 124, 129, 130, - 3877, 125, 138, 139, 2290, 138, 144, 145, 3876, 144, - 140, 146, 141, 228, 147, 229, 144, 145, 2491, 144, + 3888, 125, 138, 139, 2297, 138, 144, 145, 3887, 144, + 140, 146, 141, 228, 147, 229, 144, 145, 2499, 144, 230, 146, 281, 133, 147, 150, 151, 347, 150, 347, 152, 150, 151, 153, 150, 526, 152, 527, 154, 153, @@ -1898,12 +1901,12 @@ static const flex_int16_t yy_nxt[14258] = 132, 489, 267, 569, 276, 180, 181, 142, 180, 289, 182, 148, 277, 183, 569, 163, 164, 231, 163, 282, 165, 148, 127, 96, 348, 166, 186, 187, 163, 188, - 155, 167, 276, 3867, 189, 278, 155, 289, 163, 164, + 155, 167, 276, 3878, 189, 278, 155, 289, 163, 164, 277, 163, 163, 165, 231, 290, 268, 347, 166, 347, 159, 163, 279, 645, 167, 490, 170, 171, 295, 170, - 184, 172, 3774, 278, 173, 163, 174, 301, 357, 175, - 168, 358, 176, 290, 170, 171, 3809, 170, 302, 172, - 279, 190, 173, 177, 174, 3838, 295, 175, 186, 187, + 184, 172, 3785, 278, 173, 163, 174, 301, 357, 175, + 168, 358, 176, 290, 170, 171, 3820, 170, 302, 172, + 279, 190, 173, 177, 174, 3849, 295, 175, 186, 187, 176, 188, 646, 168, 348, 301, 189, 474, 475, 163, 163, 177, 497, 498, 170, 171, 302, 170, 303, 172, @@ -1913,10 +1916,10 @@ static const flex_int16_t yy_nxt[14258] = 181, 176, 180, 190, 182, 313, 252, 183, 214, 215, 216, 217, 177, 191, 314, 214, 215, 216, 217, 178, 191, 191, 296, 351, 297, 226, 441, 487, 191, 441, - 487, 226, 488, 313, 254, 438, 439, 440, 438, 3837, - 178, 502, 314, 3830, 502, 503, 504, 283, 284, 286, + 487, 226, 488, 313, 254, 438, 439, 440, 438, 3848, + 178, 502, 314, 3841, 502, 503, 504, 283, 284, 286, - 296, 352, 297, 3809, 184, 191, 192, 193, 194, 192, + 296, 352, 297, 3820, 184, 191, 192, 193, 194, 192, 191, 195, 191, 191, 191, 191, 191, 191, 191, 196, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 197, 198, 199, 200, 201, @@ -1927,58 +1930,58 @@ static const flex_int16_t yy_nxt[14258] = 208, 209, 210, 191, 211, 191, 212, 191, 191, 191, 191, 191, 218, 219, 220, 221, 359, 222, 218, 219, - 220, 221, 369, 222, 218, 219, 220, 221, 3806, 222, + 220, 221, 369, 222, 218, 219, 220, 221, 3817, 222, 218, 219, 220, 221, 233, 222, 291, 252, 234, 242, 253, 235, 315, 316, 352, 252, 259, 242, 292, 260, 352, 261, 327, 259, 259, 327, 260, 557, 261, 252, 557, 259, 590, 318, 291, 590, 318, 223, 259, 422, 243, 242, 244, 223, 422, 259, 292, 395, 243, 223, - 244, 245, 246, 247, 248, 223, 2290, 254, 236, 245, + 244, 245, 246, 247, 248, 223, 2297, 254, 236, 245, 246, 247, 248, 242, 263, 264, 262, 263, 243, 619, 244, 414, 243, 262, 244, 400, 243, 265, 244, 245, 246, 247, 248, 245, 246, 247, 248, 245, 246, 247, - 248, 423, 287, 489, 243, 288, 244, 293, 2878, 400, + 248, 423, 287, 489, 243, 288, 244, 293, 2888, 400, 243, 298, 244, 306, 294, 245, 246, 247, 248, 428, - 304, 245, 246, 247, 248, 299, 620, 3800, 307, 265, + 304, 245, 246, 247, 248, 299, 620, 3811, 307, 265, 287, 300, 243, 288, 244, 293, 305, 308, 407, 298, - 408, 306, 294, 245, 246, 247, 248, 400, 304, 3775, + 408, 306, 294, 245, 246, 247, 248, 400, 304, 3786, 310, 584, 309, 299, 311, 312, 307, 490, 357, 300, - 446, 358, 584, 2290, 305, 308, 319, 320, 321, 319, + 446, 358, 584, 2297, 305, 308, 319, 320, 321, 319, 452, 322, 323, 320, 321, 323, 412, 324, 310, 413, 309, 398, 311, 312, 325, 321, 321, 325, 446, 326, 323, 320, 321, 323, 447, 324, 455, 342, 452, 349, - 343, 448, 349, 353, 354, 3038, 422, 347, 359, 347, + 343, 448, 349, 353, 354, 3049, 422, 347, 359, 347, 347, 422, 347, 449, 344, 345, 364, 365, 474, 475, 357, 320, 447, 358, 455, 342, 414, 320, 343, 448, - 360, 377, 378, 360, 377, 357, 3768, 412, 358, 321, + 360, 377, 378, 360, 377, 357, 3779, 412, 358, 321, 413, 449, 344, 345, 459, 320, 328, 329, 330, 331, 332, 333, 465, 334, 350, 472, 335, 355, 423, 662, 336, 367, 337, 338, 368, 339, 340, 341, 285, 367, 363, 285, 459, 873, 328, 329, 330, 331, 332, 333, - 465, 334, 3630, 472, 335, 361, 379, 414, 336, 367, + 465, 334, 3641, 472, 335, 361, 379, 414, 336, 367, 337, 338, 368, 339, 340, 341, 370, 367, 663, 370, 741, 367, 377, 378, 368, 377, 374, 375, 450, 367, 367, 369, 874, 368, 377, 380, 381, 377, 367, 383, 383, 451, 383, 427, 383, 383, 383, 473, 383, 347, - 383, 347, 383, 645, 637, 3698, 450, 637, 383, 369, - 392, 386, 3723, 393, 470, 394, 383, 471, 392, 451, - 441, 371, 383, 441, 742, 473, 2290, 379, 383, 388, + 383, 347, 383, 645, 637, 3709, 450, 637, 383, 369, + 392, 386, 3734, 393, 470, 394, 383, 471, 392, 451, + 441, 371, 383, 441, 742, 473, 2297, 379, 383, 388, 373, 383, 392, 383, 869, 383, 383, 508, 383, 379, - 383, 388, 646, 453, 384, 471, 348, 1567, 383, 424, + 383, 388, 646, 453, 384, 471, 348, 1571, 383, 424, 384, 396, 425, 454, 396, 383, 392, 422, 460, 393, - 395, 394, 383, 3719, 392, 509, 461, 392, 3049, 514, + 395, 394, 383, 3730, 392, 509, 461, 392, 3060, 514, 393, 453, 394, 383, 383, 392, 662, 625, 392, 383, 383, 454, 499, 389, 668, 499, 460, 500, 392, 392, - 390, 393, 1568, 394, 461, 391, 392, 509, 391, 401, - 392, 520, 871, 403, 426, 404, 397, 748, 405, 2266, - 392, 2267, 383, 388, 409, 410, 569, 395, 392, 383, + 390, 393, 1572, 394, 461, 391, 392, 509, 391, 401, + 392, 520, 871, 403, 426, 404, 397, 748, 405, 2273, + 392, 2274, 383, 388, 409, 410, 569, 395, 392, 383, 383, 393, 392, 394, 626, 415, 392, 569, 415, 520, - 412, 669, 521, 413, 3698, 419, 420, 501, 395, 412, - 392, 3691, 413, 659, 429, 430, 422, 497, 498, 442, + 412, 669, 521, 413, 3709, 419, 420, 501, 395, 412, + 392, 3702, 413, 659, 429, 430, 422, 497, 498, 442, 406, 422, 432, 433, 434, 432, 456, 522, 443, 466, 521, 749, 444, 467, 462, 435, 523, 445, 399, 468, @@ -1989,7 +1992,7 @@ static const flex_int16_t yy_nxt[14258] = 476, 477, 478, 476, 480, 477, 478, 481, 482, 483, 484, 482, 507, 485, 482, 483, 484, 491, 524, 485, 492, 493, 494, 492, 512, 495, 525, 513, 529, 531, - 507, 530, 538, 2268, 529, 2269, 529, 530, 510, 542, + 507, 530, 538, 2275, 529, 2276, 529, 530, 510, 542, 514, 674, 529, 543, 536, 514, 524, 537, 267, 536, 529, 267, 536, 544, 525, 436, 529, 534, 545, 436, @@ -2005,57 +2008,57 @@ static const flex_int16_t yy_nxt[14258] = 573, 574, 588, 589, 323, 327, 575, 323, 327, 324, 576, 579, 753, 582, 577, 325, 578, 583, 325, 585, - 326, 580, 581, 593, 594, 586, 587, 595, 598, 3690, + 326, 580, 581, 593, 594, 586, 587, 595, 598, 3701, 588, 589, 319, 320, 321, 319, 888, 322, 323, 320, 321, 323, 604, 324, 325, 321, 321, 325, 599, 326, 596, 593, 594, 597, 606, 595, 598, 605, 607, 754, - 265, 610, 600, 601, 602, 1326, 603, 611, 612, 614, - 604, 1115, 613, 615, 617, 608, 599, 682, 596, 618, - 609, 597, 606, 613, 987, 605, 607, 320, 3654, 610, + 265, 610, 600, 601, 602, 1328, 603, 611, 612, 614, + 604, 1116, 613, 615, 617, 608, 599, 682, 596, 618, + 609, 597, 606, 613, 988, 605, 607, 320, 3665, 610, 600, 601, 602, 320, 603, 611, 612, 614, 616, 321, 613, 615, 617, 608, 890, 682, 349, 618, 609, 349, 631, 613, 600, 601, 347, 367, 347, 353, 354, 621, 623, 355, 624, 623, 619, 347, 616, 347, 347, 347, - 347, 347, 357, 363, 360, 358, 627, 360, 988, 357, + 347, 347, 357, 363, 360, 358, 627, 360, 989, 357, 600, 601, 358, 364, 365, 357, 629, 757, 358, 629, 625, 357, 630, 683, 358, 367, 357, 632, 368, 358, - 2471, 350, 2472, 367, 373, 370, 622, 633, 370, 2290, + 2479, 350, 2480, 367, 373, 370, 622, 633, 370, 2297, 367, 620, 355, 368, 441, 348, 348, 441, 367, 374, 375, 683, 359, 628, 367, 635, 631, 368, 635, 361, 367, 367, 367, 368, 758, 363, 636, 626, 367, 684, 367, 359, 584, 368, 412, 369, 359, 413, 367, 377, - 378, 3038, 377, 584, 634, 377, 378, 685, 377, 650, + 378, 3049, 377, 584, 634, 377, 378, 685, 377, 650, 371, 377, 380, 381, 377, 377, 638, 684, 377, 383, 383, 686, 383, 632, 373, 873, 383, 383, 399, 383, 369, 383, 383, 392, 733, 685, 648, 733, 394, 383, 369, 392, 383, 640, 414, 383, 383, 383, 687, 686, - 2799, 419, 420, 383, 379, 640, 651, 2974, 668, 688, + 2809, 419, 420, 383, 379, 640, 651, 2985, 668, 688, 379, 735, 383, 388, 735, 383, 379, 383, 487, 383, 379, 487, 422, 488, 390, 388, 687, 422, 643, 383, 388, 384, 383, 649, 382, 383, 383, 688, 383, 383, - 383, 392, 388, 1320, 393, 643, 394, 641, 383, 392, + 383, 392, 388, 1322, 393, 643, 394, 641, 383, 392, - 2800, 429, 430, 383, 383, 669, 383, 2975, 674, 431, + 2810, 429, 430, 383, 383, 669, 383, 2986, 674, 431, 383, 383, 383, 392, 676, 392, 399, 389, 393, 399, - 394, 399, 689, 392, 423, 396, 642, 640, 396, 2266, - 392, 2267, 660, 393, 647, 394, 3639, 392, 392, 418, + 394, 399, 689, 392, 423, 396, 642, 640, 396, 2273, + 392, 2274, 660, 393, 647, 394, 3650, 392, 392, 418, 390, 395, 670, 399, 409, 410, 383, 388, 392, 805, - 689, 648, 392, 394, 392, 675, 392, 393, 3926, 394, + 689, 648, 392, 394, 392, 675, 392, 393, 3937, 394, 805, 677, 392, 383, 388, 395, 315, 316, 431, 383, 383, 406, 285, 676, 391, 285, 392, 391, 391, 392, 397, 391, 653, 392, 654, 808, 403, 655, 404, 671, 412, 405, 487, 413, 658, 487, 808, 488, 649, 661, 399, 392, 693, 673, 399, 392, 869, 412, 391, 391, - 413, 391, 391, 392, 392, 3926, 403, 664, 404, 404, + 413, 391, 391, 392, 392, 3937, 403, 664, 404, 404, 677, 405, 405, 415, 658, 658, 415, 427, 412, 656, - 693, 413, 1100, 406, 666, 392, 391, 666, 422, 392, + 693, 413, 1101, 406, 666, 392, 391, 666, 422, 392, 418, 667, 393, 422, 394, 392, 672, 392, 393, 672, 394, 412, 424, 392, 413, 425, 743, 414, 657, 743, - 422, 392, 391, 406, 665, 678, 1115, 392, 679, 680, - 2515, 422, 697, 422, 871, 698, 422, 699, 416, 620, + 422, 392, 391, 406, 665, 678, 1116, 392, 679, 680, + 2523, 422, 697, 422, 871, 698, 422, 699, 416, 620, 694, 432, 433, 434, 432, 438, 439, 440, 438, 395, 431, 695, 391, 391, 435, 395, 690, 700, 691, 701, @@ -2064,7 +2067,7 @@ static const flex_int16_t yy_nxt[14258] = 423, 716, 709, 423, 690, 700, 691, 701, 730, 731, 692, 711, 702, 887, 704, 888, 436, 705, 707, 706, 708, 710, 712, 703, 713, 715, 714, 732, 736, 716, - 709, 736, 502, 737, 1115, 502, 730, 731, 3595, 711, + 709, 736, 502, 737, 1116, 502, 730, 731, 3606, 711, 717, 718, 739, 719, 506, 739, 720, 740, 721, 506, 722, 723, 724, 761, 725, 732, 726, 727, 728, 729, 476, 477, 478, 476, 480, 477, 478, 480, 717, 718, @@ -2072,24 +2075,24 @@ static const flex_int16_t yy_nxt[14258] = 724, 761, 725, 890, 726, 727, 728, 729, 480, 477, 478, 481, 482, 483, 484, 482, 507, 485, 492, 493, - 494, 492, 1324, 495, 482, 483, 484, 491, 2974, 485, + 494, 492, 1326, 495, 482, 483, 484, 491, 2985, 485, 762, 492, 493, 494, 492, 436, 495, 499, 502, 436, 499, 502, 500, 750, 756, 506, 750, 763, 751, 512, - 506, 516, 513, 512, 759, 764, 513, 767, 762, 2137, - 2137, 529, 529, 436, 765, 530, 774, 486, 557, 529, - 529, 557, 775, 496, 529, 763, 533, 530, 2800, 486, + 506, 516, 513, 512, 759, 764, 513, 767, 762, 2144, + 2144, 529, 529, 436, 765, 530, 774, 486, 557, 529, + 529, 557, 775, 496, 529, 763, 533, 530, 2810, 486, 776, 777, 529, 764, 529, 536, 496, 771, 537, 540, - 536, 1755, 501, 536, 774, 778, 529, 510, 779, 514, + 536, 1760, 501, 536, 774, 778, 529, 510, 779, 514, 775, 760, 536, 516, 768, 769, 540, 536, 776, 777, 536, 766, 531, 780, 536, 781, 782, 537, 783, 536, 784, 799, 536, 778, 533, 800, 779, 801, 802, 803, - 801, 804, 806, 807, 772, 538, 536, 590, 809, 3134, + 801, 804, 806, 807, 772, 538, 536, 590, 809, 3145, 590, 780, 810, 781, 782, 266, 783, 811, 784, 799, - 812, 813, 770, 800, 3583, 3576, 802, 803, 814, 804, + 812, 813, 770, 800, 3594, 3587, 802, 803, 814, 804, 806, 807, 815, 816, 540, 785, 809, 786, 787, 817, - 810, 788, 789, 790, 818, 811, 3574, 791, 812, 813, - 792, 823, 793, 794, 795, 796, 814, 797, 798, 2800, + 810, 788, 789, 790, 818, 811, 3585, 791, 812, 813, + 792, 823, 793, 794, 795, 796, 814, 797, 798, 2810, 815, 816, 824, 785, 825, 786, 787, 817, 819, 788, 789, 790, 818, 821, 822, 791, 826, 827, 792, 823, @@ -2099,802 +2102,803 @@ static const flex_int16_t yy_nxt[14258] = 842, 843, 828, 844, 845, 820, 829, 830, 846, 831, 847, 835, 848, 849, 850, 851, 836, 837, 838, 852, 853, 839, 854, 855, 856, 840, 841, 832, 842, 843, - 351, 844, 845, 347, 357, 347, 846, 358, 847, 1107, + 351, 844, 845, 347, 357, 347, 846, 358, 847, 1108, 848, 849, 850, 851, 390, 869, 623, 852, 853, 623, - 854, 855, 856, 3559, 347, 645, 347, 859, 355, 637, + 854, 855, 856, 3570, 347, 645, 347, 859, 355, 637, 859, 629, 637, 869, 629, 347, 357, 347, 862, 358, 888, 862, 866, 357, 367, 866, 358, 368, 635, 878, - 857, 635, 367, 367, 860, 865, 368, 2515, 865, 879, - 367, 367, 645, 368, 383, 640, 1102, 383, 367, 383, - 428, 348, 870, 392, 915, 1115, 393, 640, 394, 889, + 857, 635, 367, 367, 860, 865, 368, 2523, 865, 879, + 367, 367, 645, 368, 383, 640, 1103, 383, 367, 383, + 428, 348, 870, 392, 915, 1116, 393, 640, 394, 889, 867, 392, 348, 871, 383, 640, 359, 383, 916, 382, - 917, 383, 3514, 359, 863, 392, 412, 640, 431, 413, + 917, 383, 3525, 359, 863, 392, 412, 640, 431, 413, 867, 871, 915, 369, 383, 388, 662, 875, 890, 383, - 369, 383, 590, 626, 1118, 590, 916, 876, 917, 641, - 643, 3481, 901, 881, 383, 388, 1567, 383, 918, 383, + 369, 383, 590, 626, 1119, 590, 916, 876, 917, 641, + 643, 3492, 901, 881, 383, 388, 1571, 383, 918, 383, - 880, 383, 902, 2515, 904, 662, 919, 388, 399, 872, + 880, 383, 902, 2523, 904, 662, 919, 388, 399, 872, 643, 399, 662, 399, 920, 663, 908, 391, 642, 640, - 391, 383, 392, 399, 885, 653, 918, 654, 3417, 389, + 391, 383, 392, 399, 885, 653, 918, 654, 3428, 389, 655, 422, 921, 883, 919, 399, 422, 428, 642, 640, - 391, 1391, 920, 391, 392, 392, 3402, 923, 653, 647, - 654, 905, 924, 655, 925, 3397, 883, 926, 877, 388, + 391, 1394, 920, 391, 392, 392, 3413, 923, 653, 647, + 654, 905, 924, 655, 925, 3408, 883, 926, 877, 388, 921, 391, 927, 656, 391, 928, 392, 392, 931, 891, 932, 654, 656, 903, 655, 923, 506, 883, 383, 388, - 924, 506, 925, 911, 399, 926, 3396, 399, 391, 399, + 924, 506, 925, 911, 399, 926, 3407, 399, 391, 399, 927, 886, 887, 928, 391, 656, 931, 391, 932, 392, - 660, 657, 893, 733, 894, 933, 733, 895, 3390, 391, - 896, 399, 898, 935, 392, 2135, 892, 403, 936, 404, - 977, 392, 899, 977, 657, 658, 672, 391, 996, 672, - 391, 412, 392, 933, 413, 403, 392, 404, 3355, 406, - 405, 935, 2268, 658, 2269, 657, 936, 391, 910, 897, + 660, 657, 893, 733, 894, 933, 733, 895, 3401, 391, + 896, 399, 898, 935, 392, 2142, 892, 403, 936, 404, + 978, 392, 899, 978, 657, 658, 672, 391, 997, 672, + 391, 412, 392, 933, 413, 403, 392, 404, 3366, 406, + 405, 935, 2275, 658, 2276, 657, 936, 391, 910, 897, 898, 910, 392, 412, 392, 403, 413, 404, 678, 662, 899, 679, 391, 658, 406, 391, 422, 392, 399, 266, - 403, 2515, 404, 735, 392, 405, 735, 913, 658, 937, - 914, 414, 659, 978, 938, 422, 978, 666, 939, 392, - 666, 940, 392, 900, 941, 393, 907, 394, 1122, 907, + 403, 2523, 404, 735, 392, 405, 735, 913, 658, 937, + 914, 414, 659, 979, 938, 422, 979, 666, 939, 392, + 666, 940, 392, 900, 941, 393, 907, 394, 1123, 907, 392, 392, 659, 414, 393, 736, 394, 937, 736, 392, - 737, 391, 938, 423, 392, 942, 939, 906, 1067, 940, - 943, 945, 941, 392, 951, 952, 929, 953, 954, 1067, - 3296, 900, 423, 930, 930, 930, 930, 930, 930, 930, + 737, 391, 938, 423, 392, 942, 939, 906, 1068, 940, + 943, 945, 941, 392, 951, 952, 929, 953, 954, 1068, + 3307, 900, 423, 930, 930, 930, 930, 930, 930, 930, 930, 930, 395, 942, 946, 958, 391, 961, 943, 945, 959, 395, 951, 952, 964, 953, 954, 947, 948, 962, - 949, 950, 955, 965, 956, 960, 966, 967, 957, 963, - 968, 970, 946, 958, 2471, 961, 2472, 976, 959, 969, - 981, 743, 964, 981, 743, 947, 948, 962, 949, 950, - 955, 965, 956, 960, 966, 967, 957, 963, 968, 970, - - 971, 1115, 972, 979, 973, 976, 979, 969, 980, 739, - 982, 508, 739, 982, 740, 983, 985, 746, 1000, 985, - 746, 986, 747, 989, 990, 1001, 989, 990, 971, 991, - 972, 750, 973, 1002, 750, 993, 751, 994, 993, 510, - 994, 512, 995, 1003, 513, 2290, 1000, 529, 1010, 1011, - 530, 536, 1012, 1001, 537, 529, 536, 1013, 1014, 536, - 1015, 1002, 1016, 3288, 1017, 1018, 1019, 1034, 887, 529, - 1026, 1003, 3283, 536, 1027, 1023, 1010, 1011, 1028, 1035, - 1012, 1020, 1024, 1036, 1041, 1013, 1014, 3049, 1015, 1025, - 1016, 998, 1017, 1018, 1019, 1034, 1021, 1004, 1026, 1022, - - 1029, 1006, 1027, 1023, 1032, 1037, 1028, 1035, 1044, 1020, - 1024, 1036, 1041, 1045, 1030, 1039, 1031, 1025, 1042, 1046, - 1043, 1038, 801, 1033, 1021, 801, 1047, 1022, 1029, 1050, - 1040, 1051, 1032, 1037, 1053, 1054, 1044, 1047, 1055, 3257, - 1056, 1045, 1030, 1039, 1031, 1057, 1042, 1046, 1043, 1038, - 1058, 1033, 1059, 1061, 1062, 1063, 1064, 1050, 1040, 1051, - 1065, 1066, 1053, 1054, 1068, 1069, 1055, 1048, 1056, 1070, - 1072, 1073, 1076, 1057, 1074, 1077, 834, 1078, 1058, 834, - 1059, 1061, 1062, 1063, 1064, 1074, 1079, 1080, 1065, 1066, - 1081, 1082, 1068, 1069, 1083, 1084, 1075, 1070, 1072, 1073, - - 1076, 1085, 1086, 1077, 1087, 1078, 1088, 1089, 1090, 1092, - 1093, 1094, 1095, 1096, 1079, 1080, 1091, 1097, 1081, 1082, - 1098, 1099, 1083, 1084, 1075, 1101, 1124, 355, 363, 1085, - 1086, 1103, 1087, 3243, 1088, 1089, 1090, 1092, 1093, 1094, - 1095, 1096, 2290, 859, 1091, 1097, 859, 862, 1098, 1099, - 862, 347, 357, 347, 1104, 358, 390, 373, 865, 367, - 1105, 865, 866, 367, 390, 866, 368, 869, 1110, 1128, - 1126, 367, 622, 669, 2515, 873, 383, 640, 628, 383, - 392, 383, 1708, 1109, 3318, 394, 1106, 399, 392, 640, - 1129, 977, 867, 978, 977, 1130, 978, 1128, 348, 1112, - - 873, 632, 359, 383, 2515, 888, 2974, 634, 834, 383, - 640, 834, 383, 369, 383, 651, 391, 675, 1129, 391, - 2515, 392, 640, 1130, 653, 867, 1111, 1709, 431, 655, - 649, 641, 883, 1127, 418, 871, 383, 1125, 1131, 874, - 1113, 391, 391, 392, 391, 391, 392, 392, 888, 653, - 653, 654, 1111, 1132, 655, 655, 2975, 883, 883, 399, - 642, 640, 391, 428, 872, 391, 1131, 392, 392, 392, - 893, 656, 894, 890, 399, 895, 1202, 399, 896, 399, - 677, 1132, 1190, 1133, 671, 1190, 1134, 1114, 1899, 392, - 885, 1138, 3046, 642, 640, 913, 884, 884, 914, 1139, - - 657, 399, 1115, 422, 399, 391, 1141, 399, 391, 399, - 392, 1133, 3044, 653, 1134, 654, 890, 887, 655, 1138, - 1117, 883, 3586, 754, 3587, 657, 657, 1139, 1204, 656, - 391, 399, 392, 391, 1141, 392, 3182, 1143, 893, 391, - 894, 1506, 391, 895, 392, 888, 896, 893, 392, 1119, - 423, 393, 895, 394, 1144, 896, 392, 392, 887, 897, - 1116, 2137, 2138, 3173, 391, 1143, 392, 391, 392, 392, - 392, 393, 1120, 394, 894, 758, 392, 895, 910, 2800, - 896, 910, 1144, 412, 1325, 897, 413, 890, 1145, 657, - 392, 391, 981, 1146, 897, 981, 391, 907, 395, 391, - - 907, 392, 392, 1135, 1123, 393, 404, 394, 1136, 405, - 392, 1191, 658, 890, 1191, 1940, 1145, 2976, 395, 1121, - 1137, 1146, 1147, 391, 392, 979, 1194, 3130, 979, 1194, - 980, 1135, 3090, 414, 1148, 1149, 1136, 1142, 1142, 1142, - 1142, 1142, 1142, 1142, 1142, 1142, 1150, 1151, 1137, 1152, - 1147, 665, 395, 930, 930, 930, 930, 930, 930, 930, - 930, 930, 1148, 1149, 1153, 1156, 1157, 1158, 1159, 1160, - 1161, 1162, 1165, 1163, 1150, 1151, 1164, 1152, 1166, 1167, - 391, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1179, - 2515, 1182, 1153, 1156, 1157, 1158, 1159, 1160, 1161, 1162, - - 1165, 1177, 1183, 1184, 1164, 1178, 1166, 1167, 1185, 1168, - 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1179, 1180, 1182, - 1186, 1181, 1187, 1189, 989, 1198, 1206, 989, 1198, 1177, - 1183, 1184, 982, 1178, 3052, 982, 1185, 983, 1192, 985, - 510, 1192, 985, 1193, 986, 1203, 1180, 1207, 1186, 1181, - 1187, 1189, 1195, 990, 1206, 1195, 990, 1196, 991, 1199, - 993, 1208, 1199, 993, 1200, 994, 1201, 1074, 994, 1201, - 995, 516, 1210, 529, 1205, 1207, 1209, 536, 1074, 1212, - 1211, 529, 536, 1215, 1216, 536, 1217, 1218, 1219, 1208, - 1220, 533, 756, 3586, 1221, 3587, 1222, 1223, 540, 1899, - - 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, - 1235, 1215, 1216, 1234, 1217, 1218, 1219, 1236, 1220, 768, - 1237, 760, 1221, 766, 1222, 1223, 772, 770, 1224, 1225, - 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1235, 1238, - 1239, 1234, 1240, 1241, 1242, 1236, 1243, 1244, 1237, 1247, - 1248, 1245, 1250, 1246, 1249, 1252, 1253, 1254, 1255, 1256, - 1257, 3044, 1262, 1263, 1266, 1264, 1267, 1238, 1239, 1251, - 1240, 1241, 1242, 1268, 1243, 1244, 1264, 1247, 1248, 1245, - 1250, 1246, 1249, 1252, 1253, 1254, 1255, 1256, 1257, 1258, - 1262, 1263, 1266, 1259, 1267, 1269, 1270, 1251, 1271, 1272, - - 1260, 1268, 1261, 1273, 1274, 1276, 1265, 1277, 1278, 1279, - 1280, 1281, 1282, 1283, 2870, 1190, 1291, 1258, 1190, 1292, - 1293, 1259, 1294, 1269, 1270, 1295, 1271, 1272, 1260, 3031, - 1261, 1273, 1274, 1276, 1296, 1277, 1278, 1279, 1280, 1281, - 1282, 1283, 1284, 1285, 1291, 1297, 1286, 1292, 1293, 1298, - 1294, 1287, 1299, 1295, 1300, 1301, 1302, 1288, 1303, 1304, - 1305, 1289, 1296, 1290, 1306, 1307, 1308, 1309, 1310, 1311, - 1284, 1285, 1312, 1297, 1286, 1313, 1314, 1298, 1315, 1287, - 1299, 1316, 1300, 1301, 1302, 1288, 1303, 1304, 1305, 1289, - 351, 1290, 1306, 1307, 1308, 1309, 1310, 1311, 1319, 1323, - - 1312, 869, 888, 1313, 1314, 888, 1315, 383, 640, 1316, - 383, 391, 383, 2991, 391, 428, 392, 1328, 355, 653, - 1317, 654, 1751, 867, 1321, 1115, 1191, 883, 1332, 1191, - 1393, 1331, 391, 1393, 383, 391, 399, 392, 392, 662, - 1327, 391, 654, 431, 391, 655, 392, 1334, 883, 893, - 399, 1119, 1335, 1336, 895, 1337, 1332, 896, 399, 391, - 1338, 399, 641, 399, 1329, 1341, 656, 1391, 392, 1320, - 1324, 2990, 884, 890, 1117, 1334, 2981, 1342, 905, 1192, - 1335, 1336, 1192, 1337, 1193, 399, 1194, 892, 1338, 1194, - 2976, 1318, 640, 1341, 391, 1322, 887, 391, 391, 392, - - 2940, 391, 893, 392, 894, 1342, 893, 895, 894, 1345, - 896, 895, 399, 897, 896, 399, 657, 399, 1339, 1347, - 1348, 392, 1349, 1350, 1351, 392, 1353, 1354, 660, 1356, - 1357, 1358, 1359, 2923, 1340, 1360, 1361, 1345, 1362, 399, - 1195, 1394, 2290, 1195, 1394, 1196, 1339, 1347, 1348, 897, - 1349, 1350, 1351, 1330, 1353, 1354, 2865, 1356, 1357, 1358, - 1359, 1346, 1340, 1360, 1361, 1364, 1362, 406, 1142, 1142, - 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1365, 1322, 1363, - 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1366, 1367, - 1368, 1369, 1370, 1364, 1371, 1372, 399, 1373, 1374, 1375, - - 1376, 1377, 1378, 1379, 1380, 1365, 1381, 1383, 1384, 1385, - 1386, 1387, 1198, 2290, 508, 1198, 1366, 1367, 1368, 1369, - 1370, 1397, 1371, 1372, 1397, 1373, 1374, 1375, 1376, 1377, - 1378, 1379, 1380, 1398, 1381, 1383, 1384, 1385, 1386, 1387, - 1395, 1199, 510, 1395, 1199, 1396, 1200, 1201, 1399, 1400, - 1201, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, - 1412, 1398, 1413, 1414, 1415, 1416, 1418, 1419, 1420, 1421, - 1422, 1417, 1423, 1424, 1425, 1426, 1399, 1400, 1427, 1403, - 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1428, - 1413, 1414, 1415, 1416, 1418, 1419, 1420, 1421, 1422, 1417, - - 1423, 1424, 1425, 1426, 1429, 1430, 1427, 1431, 1432, 1433, - 1434, 1435, 1436, 1437, 1438, 1439, 1441, 1428, 1442, 1443, - 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1455, 2826, 2825, - 1440, 1457, 1429, 1430, 2802, 1431, 1432, 1433, 1434, 1435, - 1436, 1437, 1438, 1439, 1441, 1451, 1442, 1443, 1444, 1445, - 1446, 1447, 1448, 1449, 1450, 1455, 1452, 1456, 1440, 1457, - 1458, 1453, 1454, 1459, 1461, 1462, 1463, 1464, 1456, 1466, - 1467, 1468, 1469, 1451, 1471, 1473, 1474, 1475, 1478, 1476, - 1479, 1480, 1482, 1483, 1452, 1477, 1484, 1485, 1458, 1453, - 1454, 1459, 1461, 1462, 1463, 1464, 1486, 1466, 1467, 1468, - - 1469, 1487, 1471, 1473, 1474, 1475, 1478, 1476, 1479, 1480, - 1482, 1483, 1488, 1477, 1484, 1485, 1489, 1490, 1491, 1492, - 1493, 1494, 1495, 1496, 1486, 1497, 1498, 1499, 1500, 1487, - 1501, 1502, 1503, 1504, 869, 888, 1508, 2764, 1511, 1393, - 1488, 662, 1393, 2352, 1489, 1490, 1491, 1492, 1493, 1494, - 1495, 1496, 3926, 1497, 1498, 1499, 1500, 1456, 1501, 1502, - 1503, 1504, 391, 1505, 1508, 391, 1511, 392, 1456, 1512, - 893, 888, 894, 870, 889, 895, 1513, 1514, 896, 3656, - 399, 3657, 399, 399, 1515, 399, 3629, 1516, 1394, 392, - 1509, 1394, 1510, 1517, 2350, 1518, 885, 1512, 1523, 3656, - - 1524, 3657, 871, 890, 1513, 1514, 391, 399, 659, 391, - 1114, 392, 1515, 1525, 1507, 1516, 894, 897, 1509, 895, - 1510, 1517, 896, 1518, 1520, 1526, 1523, 1520, 1524, 1520, - 1527, 1528, 1529, 391, 1521, 656, 3630, 1520, 1533, 890, - 2732, 1525, 1534, 1536, 1542, 1543, 1546, 1547, 1548, 1549, - 1550, 1395, 1571, 1526, 1395, 1571, 1396, 1397, 1527, 1528, - 1397, 1121, 1531, 1551, 887, 1552, 1533, 1553, 1532, 1554, - 1534, 1536, 1542, 1543, 1546, 1547, 1548, 1549, 1550, 1522, - 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1555, - 1531, 1551, 1556, 1552, 1557, 1553, 1532, 1554, 1558, 1559, - - 1560, 1561, 1563, 1564, 1565, 1566, 1572, 1562, 1573, 1576, - 1577, 1578, 1579, 1580, 1578, 1581, 1582, 1555, 1583, 1584, - 1556, 1585, 1557, 1586, 1587, 1588, 1558, 1559, 1560, 1561, - 1563, 1564, 1565, 1566, 1572, 1562, 1573, 1576, 1577, 1592, - 1579, 1580, 1589, 1581, 1582, 1593, 1583, 1584, 1594, 1585, - 1595, 1586, 1587, 1588, 1596, 1590, 1597, 1598, 1599, 1600, - 1591, 1605, 1606, 1601, 1607, 1608, 1609, 1592, 1610, 1602, - 1589, 1603, 1611, 1593, 1604, 1618, 1594, 2730, 1595, 1619, - 1620, 1621, 1596, 1590, 1597, 1598, 1599, 1600, 1591, 1605, - 1606, 1601, 1607, 1608, 1609, 1622, 1610, 1602, 1623, 1603, - - 1611, 1612, 1604, 1618, 1624, 1613, 1625, 1619, 1620, 1621, - 1626, 1627, 1614, 1628, 1615, 1616, 1629, 1617, 1630, 1631, - 1632, 1633, 1634, 1622, 1635, 1636, 1623, 1637, 1638, 1612, - 1642, 1643, 1624, 1613, 1625, 1644, 1645, 1646, 1626, 1627, - 1614, 1628, 1615, 1616, 1629, 1617, 1630, 1631, 1632, 1633, - 1634, 1653, 1635, 1636, 1647, 1637, 1638, 1654, 1642, 1643, - 1655, 1648, 1660, 1644, 1645, 1646, 1661, 1662, 1663, 1649, - 1658, 1664, 1665, 1656, 1650, 1657, 1666, 1667, 1668, 1653, - 1669, 1658, 1647, 1670, 1671, 1654, 1672, 1673, 1655, 1648, - 1660, 1674, 1659, 1675, 1661, 1662, 1663, 1649, 1676, 1664, - - 1665, 1656, 1650, 1657, 1666, 1667, 1668, 1677, 1669, 1678, - 1679, 1670, 1671, 1680, 1672, 1673, 1681, 1682, 1683, 1674, - 1659, 1675, 1684, 1685, 1686, 1687, 1676, 1688, 1690, 1692, - 1693, 1694, 888, 1691, 2673, 1677, 1696, 1678, 1679, 1697, - 1698, 1680, 1699, 1689, 1681, 1682, 1683, 1700, 2504, 1701, - 1684, 1685, 1686, 1687, 1695, 1688, 1690, 1692, 1693, 1694, - 399, 1691, 1115, 399, 1696, 399, 1702, 1697, 1698, 1703, - 1699, 1689, 2502, 399, 1704, 1700, 1117, 1701, 1705, 1520, - 1520, 1711, 1520, 1520, 1520, 1520, 1714, 399, 1715, 1706, - 1706, 1716, 1520, 1520, 1702, 1571, 1658, 1703, 1571, 884, - - 890, 1329, 1704, 1721, 1718, 1722, 1705, 1658, 1719, 1711, - 1720, 1723, 1724, 1726, 1714, 897, 1715, 1727, 2084, 1716, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1730, - 1731, 1721, 1718, 1722, 1707, 1522, 1719, 1732, 1720, 1723, - 1724, 1726, 1733, 1734, 1735, 1727, 1728, 1728, 1728, 1728, - 1728, 1728, 1728, 1728, 1728, 1736, 1737, 1730, 1731, 1738, - 1739, 1740, 1741, 1742, 1743, 1732, 1744, 1745, 1746, 1747, - 1733, 1734, 1735, 1748, 1749, 1750, 1752, 1756, 1757, 1974, - 1760, 1761, 1974, 1736, 1737, 1762, 1763, 1738, 1739, 1740, - 1741, 1742, 1743, 1764, 1744, 1745, 1746, 1747, 1766, 1767, - - 1765, 1748, 1749, 1750, 1752, 1756, 1757, 1578, 1760, 1761, - 1578, 1768, 1758, 1762, 1763, 1769, 1770, 1771, 1772, 1773, - 1774, 1764, 1775, 1776, 1777, 1778, 1766, 1767, 1765, 1779, - 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1768, - 1789, 1790, 1791, 1769, 1770, 1771, 1772, 1773, 1774, 1792, - 1775, 1776, 1777, 1778, 1793, 1794, 1795, 1779, 1780, 1781, - 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1796, 1789, 1790, - 1791, 1797, 1798, 1799, 1800, 1801, 1802, 1792, 1803, 1804, - 1805, 1806, 1793, 1794, 1795, 1807, 1808, 1809, 1812, 1813, - 1814, 1815, 1816, 1817, 1810, 1796, 1818, 1819, 1820, 1797, - - 1798, 1799, 1800, 1801, 1802, 1810, 1803, 1804, 1805, 1806, - 1821, 1822, 1823, 1807, 1808, 1809, 1812, 1813, 1814, 1815, - 1816, 1817, 1824, 1826, 1818, 1819, 1820, 1827, 1828, 1829, - 1830, 1831, 1832, 1842, 1844, 1811, 1845, 1846, 1821, 1822, - 1823, 1847, 1848, 1833, 1842, 1990, 1849, 1850, 1990, 1851, - 1824, 1826, 1852, 1853, 2290, 1827, 1828, 1829, 1830, 1831, - 1832, 1854, 1844, 2290, 1845, 1846, 1855, 1856, 1857, 1847, - 1848, 1833, 1834, 1835, 1849, 1850, 1836, 1851, 1837, 1858, - 1852, 1853, 1838, 1839, 1859, 1860, 1840, 1861, 1862, 1854, - 1863, 1841, 1864, 1865, 1855, 1856, 1857, 1866, 1867, 1868, - - 1834, 1835, 1869, 1870, 1836, 1873, 1837, 1858, 1874, 1871, - 1838, 1839, 1859, 1860, 1840, 1861, 1862, 1875, 1863, 1841, - 1864, 1865, 1872, 1876, 1877, 1866, 1867, 1868, 1878, 1879, - 1869, 1870, 1881, 1873, 1882, 1883, 1874, 1871, 1884, 1885, - 1886, 1888, 1889, 1892, 3926, 1875, 1894, 3926, 1897, 3926, - 1872, 1876, 1877, 1887, 1842, 1898, 1878, 1879, 1900, 1901, - 1881, 1902, 1882, 1883, 2481, 1842, 1884, 1885, 1886, 1888, - 1889, 2479, 1520, 1903, 1894, 1520, 1897, 1520, 1904, 2069, - 1905, 1887, 1890, 1898, 1899, 1520, 1900, 1901, 1893, 1902, - 1907, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - - 1911, 1903, 1908, 1912, 1913, 1914, 1904, 1909, 1905, 1728, - 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1907, 1915, - 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1522, 1911, 1923, - 1908, 1912, 1913, 1914, 1924, 1909, 1930, 1567, 1931, 1932, - 1933, 1934, 1935, 1936, 1925, 1927, 1937, 1915, 1916, 1917, - 1918, 1919, 1920, 1921, 1922, 1926, 1928, 1923, 1943, 1944, - 1946, 1947, 1924, 1948, 1930, 1929, 1931, 1932, 1933, 1934, - 1935, 1936, 1925, 1927, 1937, 1949, 1950, 1951, 1952, 1953, - 1954, 1955, 1568, 1926, 1928, 1956, 1943, 1944, 1946, 1947, - 1957, 1948, 1958, 1929, 1959, 1961, 1962, 1963, 1964, 1965, - - 1966, 1967, 1968, 1949, 1950, 1951, 1952, 1953, 1954, 1955, - 1960, 1969, 1970, 1956, 1971, 1972, 1973, 1975, 1957, 1976, - 1958, 1977, 1959, 1961, 1962, 1963, 1964, 1965, 1966, 1967, - 1968, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1960, 1969, - 1970, 1985, 1971, 1972, 1973, 1975, 1986, 1976, 1987, 1977, - 1988, 1991, 1992, 1996, 1997, 1998, 1989, 1999, 2000, 1978, - 1979, 1980, 1981, 1982, 1983, 1984, 1993, 2003, 1994, 1985, - 2004, 2005, 2008, 1995, 1986, 2006, 1987, 2001, 1988, 1991, - 1992, 1996, 1997, 1998, 1989, 1999, 2000, 2009, 2001, 2007, - 2670, 2010, 2011, 2012, 1993, 2003, 1994, 2014, 2004, 2005, - - 2008, 1995, 2015, 2006, 2016, 2017, 2018, 2019, 2020, 2021, - 2022, 2024, 2025, 2026, 2027, 2009, 2028, 2029, 2002, 2010, - 2011, 2012, 2030, 2036, 2023, 2014, 2037, 2038, 2039, 2040, - 2015, 2041, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2024, - 2025, 2026, 2027, 2043, 2028, 2029, 2044, 2031, 2032, 2045, - 2030, 2036, 2023, 2033, 2037, 2038, 2039, 2040, 2046, 2041, - 2047, 2034, 2048, 2049, 2035, 2050, 2051, 2052, 2053, 2667, - 2059, 2043, 2060, 2061, 2044, 2031, 2032, 2045, 2062, 2063, - 2064, 2033, 2065, 2646, 2068, 2070, 2046, 2636, 2047, 2034, - 2048, 2049, 2035, 2050, 2051, 2052, 2053, 2054, 2059, 2055, - - 2060, 2061, 2071, 2056, 2074, 2072, 2062, 2063, 2064, 2054, - 2065, 2055, 2073, 2070, 2057, 2056, 2058, 2075, 2076, 2077, - 2078, 2079, 1708, 1708, 2083, 2054, 2057, 2055, 2066, 2069, - 2071, 2056, 2074, 2072, 2085, 2626, 2086, 2054, 2087, 2055, - 2073, 2624, 2057, 2056, 2058, 2075, 2076, 2077, 2078, 2079, - 1520, 2088, 2091, 1520, 2057, 1520, 2066, 2089, 2092, 2090, - 1706, 2093, 2085, 1520, 2086, 2094, 2087, 1709, 1893, 2084, - 2095, 2096, 2107, 2108, 2109, 2110, 2111, 2608, 2593, 2088, - 2091, 2112, 2113, 2114, 2115, 2089, 2092, 2090, 2158, 2093, - 2352, 2158, 1974, 2094, 2116, 1974, 2119, 2171, 2095, 2096, - - 2107, 2108, 2109, 2110, 2111, 1707, 2097, 2120, 2121, 2112, - 2113, 2114, 2115, 2098, 2098, 2098, 2098, 2098, 2098, 2098, - 2098, 2098, 2116, 2117, 2119, 2099, 2122, 2100, 2101, 2102, - 2118, 2123, 2124, 2103, 2125, 2120, 2121, 2127, 2104, 2128, - 2129, 2130, 2131, 2132, 2133, 2126, 2141, 2105, 3720, 2289, - 3721, 2117, 2290, 2099, 2122, 2100, 2101, 2102, 2118, 2123, - 2124, 2103, 2125, 2143, 2144, 2127, 2104, 2128, 2129, 2130, - 2131, 2132, 2133, 2126, 2141, 2105, 2136, 2137, 2138, 2136, - 2139, 2137, 2140, 2139, 2145, 2146, 2147, 2148, 2149, 2150, - 2151, 2143, 2144, 2152, 2153, 2154, 2155, 2156, 2159, 2160, - - 2161, 2162, 2163, 2350, 2164, 2165, 2166, 2540, 2167, 2168, - 2169, 2172, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2173, - 2174, 2152, 2153, 2154, 2155, 2156, 2159, 2160, 2161, 2162, - 2163, 1940, 2164, 2165, 2166, 1942, 2167, 2168, 2169, 2172, - 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2173, 2174, 2182, - 2183, 2184, 2185, 2186, 1990, 2189, 2190, 1990, 2191, 2187, - 2192, 2193, 2194, 2195, 2196, 2197, 2199, 2200, 2175, 2176, - 2177, 2178, 2179, 2180, 2181, 2201, 2198, 2182, 2183, 2184, - 2185, 2186, 2202, 2189, 2190, 2203, 2191, 2198, 2192, 2193, - 2194, 2195, 2196, 2197, 2199, 2200, 2204, 2205, 2206, 2207, - - 2208, 2209, 2502, 2201, 2877, 2221, 2084, 2222, 2418, 2158, - 2202, 2223, 2158, 2203, 2376, 2224, 2225, 2226, 2227, 2418, - 2228, 2498, 2229, 2230, 2204, 2205, 2206, 2207, 2208, 2209, - 2210, 2211, 2212, 2221, 2213, 2222, 2214, 2215, 2231, 2223, - 2216, 2217, 2218, 2224, 2225, 2226, 2227, 2219, 2228, 2220, - 2229, 2230, 2232, 2233, 2234, 2235, 2236, 2237, 2210, 2211, - 2212, 2238, 2213, 2239, 2214, 2215, 2231, 2240, 2216, 2217, - 2218, 2241, 2242, 2243, 2244, 2219, 2245, 2220, 2246, 2248, - 2232, 2233, 2234, 2235, 2236, 2237, 2249, 2250, 2251, 2238, - 2254, 2239, 2255, 2256, 2257, 2240, 2258, 2259, 2260, 2241, - - 2242, 2243, 2244, 2261, 2245, 2264, 2246, 2248, 2262, 2265, - 2263, 2270, 2273, 2276, 2249, 2250, 2251, 2271, 2254, 2272, - 2255, 2256, 2257, 2273, 2258, 2259, 2260, 2278, 2279, 2499, - 2291, 2261, 2280, 2264, 2281, 2282, 2262, 2265, 2263, 2270, - 2294, 2283, 2284, 2285, 2286, 2271, 2287, 2272, 2291, 2296, - 2297, 2298, 2299, 2300, 2301, 2278, 2279, 2274, 2277, 2302, - 2280, 2303, 2281, 2282, 2304, 3720, 2498, 3721, 2069, 2283, - 2284, 2285, 2286, 3193, 2287, 2292, 2315, 2296, 2297, 2298, - 2299, 2300, 2301, 2316, 2305, 2295, 2306, 2302, 2412, 2303, - 2498, 2412, 2304, 2084, 2098, 2098, 2098, 2098, 2098, 2098, - - 2098, 2098, 2098, 2479, 2315, 2317, 2320, 2069, 2318, 2321, - 2322, 2316, 2305, 2319, 2306, 2307, 2307, 2307, 2307, 2307, - 2307, 2307, 2307, 2307, 2324, 2325, 2326, 2308, 2327, 2309, - 2310, 2311, 2328, 2317, 2320, 2312, 2318, 2321, 2322, 2329, - 2313, 2319, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2314, - 2337, 2338, 2324, 2325, 2326, 2308, 2327, 2309, 2310, 2311, - 2328, 2339, 2340, 2312, 2341, 2342, 2343, 2329, 2313, 2344, - 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2314, 2337, 2338, - 2345, 2346, 2347, 2348, 2136, 2137, 2138, 2136, 2353, 2339, - 2340, 2354, 2341, 2342, 2343, 2137, 2140, 2344, 2139, 2137, - - 2140, 2139, 2355, 2356, 2357, 2366, 2367, 2368, 2345, 2346, - 2347, 2348, 2369, 2370, 2371, 2372, 2353, 2373, 2374, 2354, - 2375, 2378, 2380, 2381, 2378, 2477, 2562, 2382, 2383, 2562, - 2355, 2356, 2357, 2366, 2367, 2368, 2384, 2385, 2386, 1940, - 2369, 2370, 2371, 2372, 2387, 2373, 2374, 2388, 2375, 1942, - 2380, 2381, 2389, 1942, 2358, 2382, 2383, 2358, 2476, 2391, - 2461, 2379, 2392, 2393, 2384, 2385, 2386, 2394, 2395, 2396, - 2478, 3926, 2387, 2359, 3926, 2388, 3926, 2397, 2398, 2399, - 2389, 2400, 2402, 2403, 2404, 2405, 2360, 2391, 2361, 2379, - 2392, 2393, 2452, 2407, 2408, 2394, 2395, 2396, 2362, 2409, - - 2363, 2364, 2365, 2410, 2411, 2397, 2398, 2399, 2413, 2400, - 2402, 2403, 2404, 2405, 2360, 3926, 2361, 2414, 3926, 2415, - 3926, 2407, 2408, 2416, 2417, 2420, 2362, 2409, 2363, 2364, - 2365, 2410, 2411, 2419, 2421, 2422, 2413, 2423, 2424, 2425, - 2427, 2428, 2429, 2430, 2419, 2414, 2431, 2415, 2426, 2432, - 2433, 2416, 2417, 2420, 2434, 2435, 2436, 2437, 2439, 2440, - 2441, 2442, 2421, 2422, 2443, 2423, 2424, 2425, 2427, 2428, - 2429, 2430, 2438, 2444, 2431, 2445, 2446, 2432, 2433, 2447, - 2448, 2449, 2434, 2435, 2436, 2437, 2439, 2440, 2441, 2442, - 2450, 2451, 2443, 2453, 2454, 2455, 2456, 2457, 2458, 2459, - - 2438, 2444, 2460, 2445, 2446, 2462, 2463, 2447, 2448, 2449, - 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2473, 2450, 2451, - 2474, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2475, 2480, - 2460, 2482, 2483, 2462, 2463, 2484, 2485, 2486, 2464, 2465, - 2466, 2467, 2468, 2469, 2470, 2473, 2500, 2487, 2474, 2488, - 2489, 2490, 2503, 2505, 2506, 2352, 2475, 2350, 2507, 2482, - 2483, 2508, 2979, 2484, 2485, 2486, 2509, 2510, 2511, 2253, - 2512, 2513, 2514, 2979, 2481, 2487, 2516, 2488, 2489, 2490, - 2493, 2505, 2506, 2493, 2571, 2493, 2507, 2571, 2252, 2508, - 2494, 2501, 2517, 2495, 2509, 2510, 2511, 2504, 2512, 2513, - - 2514, 2515, 2518, 2521, 2516, 2522, 2523, 2496, 2307, 2307, - 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2519, 2524, 2525, - 2517, 2526, 2520, 2527, 2528, 2529, 2530, 2531, 2532, 2533, - 2518, 2521, 2534, 2522, 2523, 2497, 2535, 2536, 2537, 2538, - 2539, 2541, 2542, 2543, 2544, 2519, 2524, 2525, 2545, 2526, - 2520, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2546, 2547, - 2534, 2548, 2549, 2555, 2535, 2536, 2537, 2538, 2539, 2541, - 2542, 2543, 2544, 2556, 2551, 2552, 2545, 2551, 2554, 2552, - 2559, 2554, 2563, 2566, 2567, 2557, 2546, 2547, 2564, 2548, - 2549, 2555, 2558, 2358, 2565, 2568, 2358, 2569, 2560, 2570, - - 2572, 2556, 2573, 2574, 2575, 2247, 2576, 2577, 2559, 2578, - 2563, 2566, 2567, 2557, 2579, 2583, 2564, 2584, 2585, 2586, - 2558, 3926, 2565, 2568, 3926, 2569, 3926, 2570, 2572, 2350, - 2573, 2574, 2575, 2352, 2576, 2577, 2378, 2578, 2587, 2378, - 2588, 2581, 2579, 2583, 2349, 2584, 2585, 2586, 2351, 2589, - 2590, 2591, 2592, 2594, 2591, 2595, 2596, 2597, 2598, 2599, - 2600, 2601, 2602, 2603, 2604, 2605, 2587, 2606, 2588, 2607, - 2609, 2610, 2611, 2612, 2613, 2611, 2617, 2589, 2590, 2618, - 2592, 2594, 2619, 2595, 2596, 2597, 2598, 2599, 2600, 2601, - 2602, 2603, 2604, 2605, 2620, 2606, 2621, 2607, 2609, 2610, - - 2615, 2612, 2613, 2615, 2617, 2616, 2622, 2618, 2623, 2625, - 2619, 2629, 2627, 2630, 2631, 2632, 2633, 2634, 2635, 2637, - 2638, 2639, 2620, 2627, 2621, 2157, 2640, 2641, 2642, 2643, - 2644, 2645, 2647, 2648, 2622, 2649, 2623, 2625, 2650, 2629, - 2651, 2630, 2631, 2632, 2633, 2634, 2635, 2637, 2638, 2639, - 2652, 2653, 2654, 2628, 2640, 2641, 2642, 2643, 2644, 2645, - 2647, 2648, 2655, 2649, 2656, 2657, 2650, 2658, 2651, 2659, - 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2668, 2652, 2653, - 2654, 2669, 2671, 2273, 2477, 2673, 2674, 2675, 2676, 2677, - 2655, 2678, 2656, 2657, 2679, 2658, 2680, 2659, 2660, 2661, - - 2662, 2663, 2664, 2665, 2666, 2668, 2142, 2290, 1942, 2669, - 2697, 2699, 2291, 2673, 2674, 2675, 2676, 2677, 2685, 2678, - 2493, 2491, 2679, 2493, 2680, 2493, 2500, 2481, 2672, 2481, - 2682, 2493, 2700, 2495, 2493, 2686, 2493, 2701, 2702, 2699, - 2493, 2689, 1899, 2493, 2703, 2493, 2704, 2683, 2705, 2688, - 2693, 2493, 2706, 2495, 2493, 2504, 2493, 2698, 2690, 2707, - 2700, 2682, 2708, 2687, 2495, 2701, 2702, 2694, 2709, 2710, - 1899, 2504, 2703, 2711, 2704, 2684, 2705, 2712, 2683, 2713, - 2706, 2714, 2715, 2716, 2717, 2718, 2691, 2707, 2719, 2720, - 2708, 2721, 2722, 2723, 2724, 2695, 2709, 2710, 2725, 2726, - - 2727, 2711, 2728, 2729, 2731, 2712, 2497, 2713, 2733, 2714, - 2715, 2716, 2717, 2718, 2734, 2735, 2719, 2720, 2736, 2721, - 2722, 2723, 2724, 2737, 2738, 2739, 2725, 2726, 2727, 2740, - 2728, 2729, 2731, 2741, 2551, 2552, 2733, 2551, 2554, 2552, - 2742, 2554, 2734, 2735, 2743, 2744, 2736, 2562, 2747, 2748, - 2562, 2737, 2738, 2739, 2749, 2750, 2751, 2740, 2752, 2753, - 2754, 2741, 2571, 2757, 2758, 2571, 2759, 2755, 2742, 2760, - 2761, 2762, 2743, 2744, 2763, 2766, 2747, 2748, 2767, 2768, - 1940, 2769, 2749, 2750, 2751, 2770, 2752, 2753, 2754, 2350, - 2771, 2757, 2758, 2352, 2759, 2776, 2777, 2760, 2761, 2762, - - 2778, 2779, 2763, 2766, 2349, 2780, 2767, 2768, 2351, 2769, - 2772, 2775, 2773, 2770, 2775, 2781, 2782, 2783, 2771, 2784, - 2785, 2787, 2784, 2776, 2777, 2788, 2789, 2790, 2778, 2779, - 2791, 2792, 2611, 2780, 2797, 2611, 2801, 2793, 2772, 2786, - 2773, 2795, 2796, 2781, 2782, 2783, 2803, 2615, 2785, 2787, - 2615, 2804, 2616, 2788, 2789, 2790, 2805, 2806, 2791, 2792, - 2807, 2808, 2797, 2809, 2801, 2810, 2811, 2786, 2812, 2795, - 2796, 2813, 2814, 2815, 2803, 2816, 2817, 2818, 2819, 2804, - 2820, 2821, 2822, 2823, 2805, 2806, 2824, 2827, 2807, 2808, - 2828, 2809, 2829, 2810, 2811, 2830, 2812, 2831, 2832, 2813, - - 2814, 2815, 2833, 2816, 2817, 2818, 2819, 2834, 2820, 2821, - 2822, 2823, 2835, 2836, 2824, 2827, 2837, 2838, 2828, 2839, - 2829, 2840, 2841, 2830, 2842, 2831, 2832, 2843, 2844, 2845, - 2833, 2846, 2847, 2848, 2849, 2834, 2850, 2477, 2851, 2852, - 2835, 2836, 2853, 2854, 2837, 2838, 2855, 2839, 2856, 2840, - 2841, 2857, 2842, 2500, 2290, 2843, 2844, 2845, 2106, 2846, - 2847, 2848, 2849, 2944, 2850, 2498, 2944, 2852, 2491, 2881, - 2853, 2854, 2866, 2869, 2855, 2859, 2856, 2081, 2859, 2857, - 2859, 2493, 2478, 2069, 2493, 2860, 2493, 2882, 2861, 2867, - 2686, 2864, 2497, 2871, 2495, 2290, 2688, 2883, 2501, 2080, - - 2859, 2493, 2862, 2859, 2493, 2859, 2493, 1893, 2683, 2491, - 2873, 2876, 2884, 2861, 2084, 2882, 2493, 2868, 2870, 2493, - 2885, 2493, 2886, 2042, 2887, 2883, 2693, 2874, 2690, 2495, - 2863, 2013, 2859, 2888, 2889, 2859, 2497, 2859, 2890, 2891, - 2884, 2493, 2860, 2694, 2493, 2861, 2493, 2892, 2885, 2893, - 2886, 2879, 2887, 2894, 2495, 2875, 2877, 2895, 2896, 2862, - 2897, 2888, 2889, 2898, 2899, 2900, 2890, 2891, 2694, 2901, - 2902, 2695, 2903, 2904, 2905, 2892, 2906, 2893, 2907, 2908, - 2909, 2894, 2910, 2911, 2912, 2895, 2896, 2863, 2897, 2913, - 2914, 2898, 2899, 2900, 2915, 2916, 2880, 2901, 2902, 2917, - - 2903, 2904, 2905, 2918, 2906, 2919, 2907, 2908, 2909, 2920, - 2910, 2911, 2912, 2921, 2922, 2924, 2925, 2913, 2914, 2926, - 2927, 2928, 2915, 2916, 2929, 2930, 2931, 2917, 2933, 2934, - 2935, 2918, 2936, 2919, 2937, 2938, 2939, 2920, 2941, 2942, - 2943, 2921, 2922, 2924, 2925, 2946, 2947, 2926, 2927, 2928, - 2950, 2948, 2929, 2930, 2931, 2949, 2933, 2934, 2935, 1942, - 2936, 1940, 2937, 2938, 2939, 2956, 2941, 2942, 2943, 2945, - 2957, 2958, 2945, 2946, 2947, 2775, 2952, 2959, 2775, 2948, - 2962, 2951, 2963, 2949, 2953, 2784, 2964, 2954, 2784, 2955, - 2960, 2965, 2966, 2956, 2967, 2968, 2969, 2971, 2957, 2958, - - 2972, 2973, 2977, 2978, 2952, 2959, 2980, 2982, 2962, 2951, - 2963, 2983, 2953, 2984, 2964, 2954, 2985, 2955, 2982, 2965, - 2966, 2986, 2967, 2968, 2969, 2971, 2987, 2988, 2972, 2973, - 2977, 2978, 2989, 2992, 2980, 2994, 2995, 2996, 2997, 2983, - 2998, 2984, 2999, 3000, 2985, 3001, 3002, 2993, 3003, 2986, - 3004, 2998, 3005, 3006, 2987, 2988, 3007, 3008, 3009, 3010, - 2989, 2992, 3011, 2994, 2995, 2996, 2997, 3012, 3013, 3014, - 2999, 3000, 3015, 3001, 3002, 3016, 3003, 3017, 3004, 3018, - 3005, 3006, 3019, 3020, 3007, 3008, 3009, 3010, 3021, 3022, - 3011, 3023, 3024, 3025, 3026, 3012, 3013, 3014, 2477, 3027, - - 3015, 3028, 3029, 3016, 3030, 3017, 3032, 3018, 3036, 2880, - 3019, 3020, 2290, 2500, 3053, 3096, 3021, 3022, 3096, 3023, - 3024, 3025, 3026, 2859, 3033, 2867, 2859, 3027, 2859, 3028, - 3029, 3036, 3030, 3034, 3032, 2859, 2861, 1938, 2859, 3054, - 2859, 2859, 3053, 2277, 2859, 3039, 2859, 3045, 2867, 3055, - 2862, 3034, 3033, 3037, 2861, 2685, 2859, 2685, 2295, 2859, - 2493, 2859, 3040, 2493, 2867, 2493, 3042, 3054, 2862, 2861, - 2682, 3056, 2686, 2495, 2686, 3057, 3037, 3055, 3035, 1910, - 1906, 2859, 3058, 2862, 2859, 3102, 2859, 2683, 3102, 1896, - 3041, 3047, 3046, 3059, 2861, 3117, 3035, 1522, 3117, 3056, - - 2687, 3137, 2870, 3057, 2859, 3060, 1891, 2859, 2874, 2859, - 3058, 3043, 3137, 2859, 3047, 2684, 2859, 2861, 2859, 2493, - 1710, 3059, 2493, 3050, 2493, 2493, 2861, 3061, 2493, 2689, - 2493, 2874, 3062, 3060, 2493, 2689, 3048, 2493, 2493, 2493, - 2874, 2493, 3063, 2493, 2693, 3064, 2690, 2495, 2693, 3065, - 3066, 2495, 2690, 3067, 3068, 3061, 3069, 3070, 3071, 3048, - 3062, 2694, 3072, 3073, 3074, 2694, 3075, 3076, 3051, 3077, - 3063, 3078, 3079, 3064, 2691, 3080, 3081, 3065, 3066, 3082, - 2877, 3067, 3068, 3083, 3069, 3070, 3071, 3084, 3085, 2695, - 3072, 3073, 3074, 2880, 3075, 3076, 3086, 3077, 3087, 3078, - - 3079, 3088, 3089, 3080, 3081, 3091, 3092, 3082, 3093, 3094, - 3095, 3083, 3097, 3098, 3099, 3084, 3085, 3100, 2945, 3105, - 3106, 2945, 3108, 3103, 3086, 3109, 3087, 3110, 3111, 3088, - 3089, 3112, 3113, 3091, 3092, 3116, 3093, 3094, 3095, 3122, - 3097, 3098, 3099, 3114, 3115, 3100, 3926, 3105, 3106, 3926, - 3108, 3926, 3123, 3109, 3118, 3110, 3111, 3124, 3119, 3112, - 3113, 3125, 3126, 3116, 3125, 3120, 3127, 3122, 3128, 3129, - 3131, 3114, 3115, 3132, 3133, 3135, 3136, 3138, 3139, 3140, - 3123, 3141, 3118, 3142, 3143, 3124, 3119, 3144, 3145, 3146, - 3126, 3147, 3148, 3120, 3127, 3149, 3128, 3129, 3131, 3150, - - 3151, 3132, 3133, 3135, 3136, 3138, 3139, 3140, 3152, 3141, - 3153, 3142, 3143, 3154, 3155, 3144, 3145, 3146, 3156, 3147, - 3148, 3157, 3158, 3149, 3159, 3160, 3161, 3150, 3151, 3162, - 3165, 3168, 3163, 3166, 3169, 3170, 3152, 3171, 3153, 3172, - 3174, 3154, 3155, 3163, 3166, 1880, 3156, 3175, 3176, 3157, - 3158, 3177, 3159, 3160, 3161, 3178, 3179, 3162, 3165, 3168, - 3180, 3181, 3169, 3170, 3183, 3171, 3184, 3172, 3174, 3187, - 3185, 3188, 2498, 3164, 3167, 3175, 3176, 2859, 3190, 3177, - 2859, 1843, 2859, 3178, 3179, 3186, 2685, 3189, 3180, 3181, - 2861, 3036, 3183, 3043, 3184, 2867, 2290, 3187, 3185, 3188, - - 3191, 1825, 2859, 2686, 2862, 2859, 2859, 2859, 2867, 2859, - 1753, 2859, 3047, 3186, 2493, 2861, 3192, 2493, 3051, 2493, - 1391, 2290, 1569, 3046, 2693, 2859, 3201, 2495, 2859, 2874, - 2859, 3195, 3043, 3040, 3202, 3034, 3046, 2859, 2861, 3203, - 2859, 2694, 2859, 2493, 3204, 3205, 2493, 3196, 2493, 3206, - 2861, 3207, 2862, 3198, 3201, 2859, 2495, 3048, 2859, 3208, - 2859, 3193, 3202, 3209, 2874, 3047, 3210, 3203, 2861, 3194, - 3199, 3211, 3204, 3205, 3212, 3213, 3214, 3206, 3215, 3207, - 3043, 3216, 2874, 3217, 3218, 3219, 3220, 3208, 3221, 3222, - 3223, 3209, 3051, 3224, 3210, 3225, 3226, 3227, 3200, 3211, - - 3227, 3228, 3212, 3213, 3214, 3229, 3215, 3230, 3231, 3216, - 3051, 3217, 3218, 3219, 3220, 3232, 3221, 3222, 3223, 3233, - 3234, 3224, 3235, 3225, 3226, 3238, 3696, 3102, 3238, 3228, - 3102, 1729, 3237, 3229, 3096, 3230, 3231, 3096, 3239, 3926, - 3241, 3242, 3926, 3232, 3926, 3244, 3245, 3233, 3234, 3246, - 3235, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, - 3237, 3247, 3248, 3249, 3250, 3251, 3239, 3252, 3241, 3242, - 1725, 1713, 3262, 3244, 3245, 3262, 3697, 3246, 3254, 3117, - 3255, 3256, 3117, 3258, 3259, 3260, 3263, 3264, 3265, 3247, - 3248, 3249, 3250, 3251, 3266, 3252, 3253, 3253, 3253, 3253, - - 3253, 3253, 3253, 3253, 3253, 3267, 3254, 3268, 3255, 3256, - 3269, 3258, 3259, 3260, 3263, 3264, 3265, 3270, 3271, 3272, - 3273, 3274, 3266, 3275, 3276, 3277, 3278, 3279, 3280, 3281, - 3282, 3284, 3285, 3267, 3286, 3268, 3287, 3289, 3269, 3290, - 3291, 3292, 3293, 3294, 3295, 3270, 3271, 3272, 3273, 3274, - 3297, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3284, - 3285, 3297, 3286, 1712, 3287, 3289, 3299, 3290, 3291, 3292, - 3293, 3294, 3295, 3300, 3301, 3302, 3303, 3304, 3305, 3306, - 3307, 3308, 3309, 3310, 3311, 3312, 3314, 3385, 1710, 3339, - 2859, 3298, 3339, 2859, 3299, 2859, 3313, 1652, 3385, 3036, - - 3039, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, - 3309, 3310, 3311, 3312, 3314, 2859, 2867, 3040, 2859, 3369, - 2859, 3316, 3369, 3480, 3313, 3034, 2859, 2493, 2861, 2859, - 2493, 2859, 2493, 1651, 3480, 1641, 3039, 3315, 2686, 1640, - 2495, 3321, 2862, 1639, 3037, 3041, 2859, 2493, 3322, 2859, - 2493, 2859, 2493, 3040, 2694, 3323, 3047, 3198, 2859, 2861, - 2495, 2859, 2493, 2859, 3324, 2493, 2870, 2493, 2873, 3321, - 3035, 2861, 3319, 2874, 3199, 2495, 3322, 3325, 3326, 3327, - 3328, 3193, 2880, 3323, 3329, 2874, 3330, 3331, 3332, 3199, - 3333, 3334, 3324, 3335, 3336, 3337, 3338, 3340, 3341, 1575, - - 3344, 3048, 3317, 3345, 1574, 3325, 3326, 3327, 3328, 3346, - 3347, 3348, 3329, 2875, 3330, 3331, 3332, 3320, 3333, 3334, - 3349, 3335, 3336, 3337, 3338, 3340, 3341, 3227, 3344, 3350, - 3227, 3345, 3342, 3351, 1569, 1545, 1544, 3346, 3347, 3348, - 3485, 3357, 3262, 3352, 3357, 3262, 3378, 3380, 3349, 3378, - 3380, 3485, 1541, 3354, 3356, 3238, 3360, 3350, 3238, 1540, - 3361, 3351, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, - 3236, 3352, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, - 3353, 3354, 3356, 3362, 3360, 3363, 3364, 3358, 3361, 3365, - 3366, 3367, 3368, 3253, 3253, 3253, 3253, 3253, 3253, 3253, - - 3253, 3253, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, - 3379, 3362, 3381, 3363, 3364, 3358, 3382, 3365, 3366, 3367, - 3368, 3383, 3384, 3386, 3387, 3388, 3389, 3391, 3392, 3393, - 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3379, 3394, - 3381, 3395, 3398, 3399, 3382, 3400, 3401, 3403, 3404, 3383, - 3384, 3386, 3387, 3388, 3389, 3391, 3392, 3393, 3405, 3408, - 3406, 3409, 3410, 3411, 3412, 3413, 3414, 3394, 3407, 3395, - 3398, 3399, 3415, 3400, 3401, 3403, 3404, 3416, 3418, 3419, - 3420, 3421, 3422, 3423, 3036, 1539, 3405, 3408, 3406, 3409, - 3410, 3411, 3412, 3413, 3414, 3320, 3407, 1538, 2290, 3425, - - 3415, 2867, 3426, 3715, 1537, 3416, 3418, 3419, 3420, 3421, - 3422, 3423, 2859, 2493, 3715, 2859, 2493, 2859, 2493, 3427, - 3428, 3429, 3034, 3424, 3430, 2861, 2495, 3425, 2859, 2868, - 3426, 2859, 2493, 2859, 3431, 2493, 3432, 2493, 3047, 2862, - 3199, 2861, 3198, 3433, 3434, 2495, 3435, 3427, 3428, 3429, - 3436, 3437, 3430, 3439, 3440, 2874, 3439, 3442, 3443, 3199, - 3444, 3445, 3431, 3464, 3432, 1535, 3464, 2863, 3320, 1115, - 873, 3433, 3434, 3339, 3435, 1481, 3339, 3465, 3436, 3437, - 3465, 3466, 3440, 2875, 3466, 3442, 3443, 3320, 3444, 3445, - 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3441, - - 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, - 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, - 3343, 3446, 3447, 3448, 3441, 3449, 3450, 3451, 3452, 3454, - 3455, 3456, 3457, 3458, 3696, 3343, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3357, 3459, 3460, 3357, 3446, - 3447, 3448, 3461, 3449, 3450, 3451, 3452, 3454, 3455, 3456, - 3457, 3458, 3453, 3453, 3453, 3453, 3453, 3453, 3453, 3453, - 3453, 3462, 3467, 3468, 3459, 3460, 3469, 3470, 3471, 3469, - 3461, 3472, 3474, 3475, 3630, 3474, 3475, 3510, 1472, 3510, - 1470, 3477, 3478, 3380, 3479, 3482, 3380, 3483, 3484, 3462, - - 3467, 3468, 3486, 3487, 1465, 3470, 3471, 3491, 3492, 3472, - 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3477, - 3478, 3493, 3479, 3482, 3488, 3483, 3484, 3494, 3495, 3496, - 3486, 3487, 3489, 3490, 3497, 3491, 3492, 3498, 3499, 3500, - 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3493, - 3511, 3512, 3488, 3513, 3515, 3494, 3495, 3496, 3516, 3510, - 3489, 3490, 3497, 3517, 3518, 3498, 3499, 3500, 3501, 3502, - 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3519, 3511, 3512, - 2493, 3513, 3515, 2493, 3520, 2493, 3516, 3521, 3522, 3523, - 3198, 3517, 3518, 2495, 3438, 3438, 3438, 3438, 3438, 3438, - - 3438, 3438, 3438, 3439, 3528, 3519, 3439, 3199, 3524, 3529, - 3526, 1460, 3520, 3526, 3527, 3521, 3522, 3523, 1402, 1401, - 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3530, - 3531, 3532, 3528, 3533, 3534, 3317, 3535, 3529, 3441, 3441, - 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3536, - 3537, 3538, 3539, 3540, 540, 3543, 3544, 3530, 3531, 3532, - 3545, 3533, 3534, 3441, 3535, 3453, 3453, 3453, 3453, 3453, - 3453, 3453, 3453, 3453, 3546, 3553, 3554, 3536, 3537, 3538, - 3539, 3540, 3541, 3543, 3544, 3541, 3464, 3548, 3545, 3464, - 3548, 3551, 3549, 3556, 3551, 3469, 3552, 3557, 3469, 3558, - - 3555, 538, 3546, 3553, 3554, 3474, 3602, 3716, 3560, 3602, - 3562, 3542, 3475, 3608, 3612, 3475, 3608, 3612, 3716, 533, - 531, 3556, 3563, 3565, 3566, 3557, 3567, 3558, 3564, 3561, - 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3562, 3542, - 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3568, - 3563, 3565, 3566, 3569, 3567, 3570, 3564, 3571, 3572, 3573, - 3575, 3577, 3578, 3579, 3580, 3581, 3582, 3584, 3585, 3588, - 3589, 3548, 516, 514, 3548, 3551, 3549, 3568, 3551, 510, - 3552, 3569, 3591, 3570, 3592, 3571, 3572, 3573, 3575, 3577, - 3578, 3579, 3580, 3581, 3582, 3584, 3585, 3588, 3589, 3590, - - 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, - 3591, 3593, 3592, 3596, 3597, 3598, 3599, 3600, 3601, 3673, - 3676, 1392, 3673, 3676, 3590, 3603, 3603, 3603, 3603, 3603, - 3603, 3603, 3603, 3603, 3605, 3606, 3607, 3609, 3610, 3593, - 3611, 3596, 3597, 3598, 3599, 3600, 3601, 3525, 3525, 3525, - 3525, 3525, 3525, 3525, 3525, 3525, 3526, 3613, 3614, 3526, - 3615, 3616, 3605, 3606, 3607, 3609, 3610, 3618, 3611, 3619, - 3620, 3623, 3626, 3604, 3604, 3604, 3604, 3604, 3604, 3604, - 3604, 3604, 3627, 3631, 3541, 3613, 3614, 3541, 3615, 3616, - 3621, 1388, 3632, 3621, 3633, 3618, 3635, 3619, 3620, 3623, - - 3626, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, - 3627, 3631, 3559, 1382, 3763, 3926, 3636, 3637, 3474, 3622, - 3632, 3560, 3633, 3747, 3635, 3763, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3636, 3637, 3638, 3622, 3561, 3561, - 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3640, 3641, 3642, - 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, - 3653, 3655, 3658, 3630, 3638, 3604, 3604, 3604, 3604, 3604, - 3604, 3604, 3604, 3604, 3659, 3640, 3641, 3642, 3643, 3644, - 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3655, - - 3658, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, - 3590, 3590, 3659, 3660, 3661, 3663, 3664, 3665, 3667, 3612, - 3668, 3667, 3612, 3669, 3680, 1352, 3590, 3672, 3674, 3785, - 3678, 3668, 3785, 3681, 3671, 3682, 3683, 3684, 3685, 3686, - 3688, 3660, 3661, 3663, 3664, 3665, 3603, 3603, 3603, 3603, - 3603, 3603, 3603, 3603, 3603, 3672, 3674, 3608, 3678, 3786, - 3608, 3681, 3786, 3682, 3683, 3684, 3685, 3686, 3688, 3689, - 3692, 3699, 1344, 3700, 3675, 3675, 3675, 3675, 3675, 3675, - 3675, 3675, 3675, 3617, 3617, 3617, 3617, 3617, 3617, 3617, - 3617, 3617, 3621, 3701, 1333, 3621, 3693, 3689, 3692, 3699, - - 3694, 3700, 3670, 3702, 3703, 3704, 3705, 3695, 431, 3687, - 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3706, 3707, - 3708, 3701, 3559, 3709, 3693, 3710, 3711, 3712, 3694, 3713, - 3714, 3702, 3703, 3704, 3705, 3695, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3634, 3717, 3706, 3707, 3708, 3718, - 3722, 3709, 3724, 3710, 3711, 3712, 3725, 3713, 3714, 3726, - 418, 3668, 3728, 3668, 3668, 3673, 3926, 3731, 3673, 3817, - 3729, 414, 3817, 3717, 3668, 399, 3676, 3718, 3722, 3676, - 3724, 3732, 3735, 3667, 3725, 3668, 3667, 3726, 3669, 3926, - 3728, 3736, 3926, 3737, 3926, 3731, 3668, 3675, 3675, 3675, - - 3675, 3675, 3675, 3675, 3675, 3675, 3738, 3739, 3740, 3741, - 3735, 3742, 3743, 3744, 3745, 3746, 3748, 395, 3749, 3736, - 3750, 3737, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, - 3687, 3751, 3752, 3753, 3738, 3739, 3740, 3741, 3754, 3742, - 3743, 3744, 3745, 3746, 3748, 3670, 3749, 3755, 3750, 3756, - 3757, 3758, 3759, 3760, 3761, 3762, 3764, 3765, 3766, 3751, - 3752, 3753, 3769, 3773, 3776, 3926, 3754, 3670, 3926, 3767, - 3926, 3777, 3778, 3779, 3780, 3755, 3781, 3756, 3757, 3758, - 3759, 3760, 3761, 3762, 3764, 3765, 3766, 3782, 3783, 3787, - 3769, 3783, 3776, 3788, 3696, 3789, 3790, 3767, 3791, 3777, - - 3778, 3779, 3780, 3792, 3781, 3793, 3794, 3807, 3795, 3796, - 3797, 3798, 3799, 3774, 3801, 3782, 3807, 3787, 3802, 3803, - 3804, 3788, 3805, 3789, 3790, 3810, 3791, 3811, 3812, 373, - 3813, 3792, 3814, 3793, 3794, 3784, 3795, 3796, 3797, 3798, - 3799, 3815, 3801, 3818, 3697, 3825, 3802, 3803, 3804, 3785, - 3805, 3826, 3785, 3810, 3820, 3811, 3812, 3808, 3813, 3786, - 3814, 3827, 3786, 3784, 3822, 3823, 3774, 3824, 3823, 3815, - 3824, 3818, 3828, 3825, 3829, 3831, 3832, 3833, 3834, 3826, - 3835, 3836, 3839, 3840, 3841, 3842, 3840, 3843, 3844, 3827, - 3845, 3846, 3817, 3847, 3926, 3817, 3807, 3926, 3872, 3926, - - 3828, 3872, 3829, 3831, 3832, 3833, 3834, 3854, 3835, 3836, - 3839, 3855, 3856, 3842, 3857, 3843, 3844, 3926, 3845, 3846, - 3926, 3847, 3926, 3823, 3824, 3858, 3823, 3824, 3851, 3853, - 3859, 3860, 3861, 3862, 3774, 3854, 3863, 3871, 3869, 3855, - 3856, 3869, 3857, 3870, 3873, 3874, 3808, 3864, 3874, 3875, - 3865, 3926, 3926, 3858, 3926, 3926, 3926, 3926, 3859, 3860, - 3861, 3862, 3880, 3881, 3863, 3871, 3882, 3883, 3884, 3885, - 3886, 3887, 3873, 3888, 3889, 3864, 3890, 3875, 3865, 3869, - 3893, 369, 3869, 3895, 3870, 3897, 3895, 3900, 3901, 363, - 3880, 3881, 359, 355, 3882, 3883, 3884, 3885, 3886, 3887, - - 3872, 3888, 3889, 3872, 3890, 1275, 1214, 3902, 3893, 3874, - 3903, 3904, 3874, 3897, 3905, 3900, 3901, 3894, 3894, 3894, - 3894, 3894, 3894, 3894, 3894, 3894, 3896, 3896, 3896, 3896, - 3896, 3896, 3896, 3896, 3896, 3902, 3906, 3907, 3903, 3904, - 3910, 1213, 3905, 3894, 3894, 3894, 3894, 3894, 3894, 3894, - 3894, 3894, 3895, 1197, 1188, 3895, 1176, 1155, 1140, 3911, - 3912, 3913, 3915, 3916, 3906, 3907, 662, 1115, 3910, 3909, - 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3896, 3896, - 3896, 3896, 3896, 3896, 3896, 3896, 3896, 3911, 3912, 3913, - 3915, 3916, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, - - 3909, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, - 645, 385, 385, 873, 1071, 1060, 1052, 1049, 1007, 540, - 538, 1005, 533, 531, 999, 516, 514, 997, 510, 3917, - 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 76, 76, + 949, 950, 955, 965, 956, 960, 968, 966, 957, 963, + 969, 971, 946, 958, 967, 961, 977, 982, 959, 970, + 982, 743, 964, 1125, 743, 947, 948, 962, 949, 950, + 955, 965, 956, 960, 968, 966, 957, 963, 969, 971, + + 508, 972, 967, 973, 977, 974, 980, 970, 1001, 980, + 739, 981, 1002, 739, 983, 740, 3299, 983, 986, 984, + 2985, 986, 746, 987, 1003, 746, 1004, 747, 510, 972, + 669, 973, 990, 974, 991, 990, 1001, 991, 750, 992, + 1002, 750, 994, 751, 995, 994, 1011, 995, 512, 996, + 529, 513, 1003, 530, 1004, 1012, 536, 1013, 529, 537, + 1014, 536, 1015, 1016, 536, 1017, 1018, 1019, 1020, 1021, + 2986, 3294, 529, 1027, 1011, 1024, 1035, 1028, 536, 1036, + 1033, 1029, 1025, 1012, 1022, 1013, 1037, 1023, 1014, 1026, + 1015, 1016, 1042, 1017, 1018, 1019, 1020, 1021, 999, 1034, + + 1005, 1027, 1030, 1024, 1035, 1028, 1007, 1036, 1033, 1029, + 1025, 1040, 1022, 1038, 1037, 1023, 1031, 1026, 1032, 1043, + 1042, 1044, 1045, 1046, 1047, 801, 1041, 1034, 801, 1039, + 1030, 1048, 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1040, + 1059, 1038, 1048, 1060, 1031, 1062, 1032, 1043, 1063, 1044, + 1045, 1046, 1047, 1064, 1041, 1065, 1066, 1039, 1067, 1069, + 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1070, 1059, 1071, + 1073, 1060, 1049, 1062, 1074, 1077, 1063, 1075, 1078, 834, + 1079, 1064, 834, 1065, 1066, 1080, 1067, 1069, 1075, 1081, + 1082, 1083, 1084, 1085, 1086, 1070, 1087, 1071, 1073, 1076, + + 1088, 1089, 1074, 1077, 1090, 1093, 1078, 1091, 1079, 1094, + 1095, 1096, 1097, 1080, 1098, 1092, 1099, 1081, 1082, 1083, + 1084, 1085, 1086, 1100, 1087, 1105, 1127, 1076, 1088, 1089, + 367, 1204, 1090, 1093, 1102, 1091, 355, 1094, 1095, 1096, + 1097, 390, 1098, 1092, 1099, 859, 363, 373, 859, 1104, + 1106, 1100, 869, 347, 862, 347, 1206, 862, 865, 357, + 2297, 865, 358, 367, 866, 390, 368, 866, 3268, 3254, + 1111, 367, 632, 675, 383, 640, 873, 383, 754, 383, + 392, 622, 2523, 1110, 1107, 394, 1129, 640, 392, 399, + 867, 1130, 1712, 1113, 1131, 418, 628, 634, 1126, 888, + + 348, 383, 3060, 758, 1075, 383, 640, 1132, 383, 359, + 383, 431, 1133, 369, 1129, 1075, 1128, 651, 640, 1130, + 871, 867, 1131, 391, 834, 1756, 391, 834, 392, 641, + 649, 653, 383, 1112, 1114, 1132, 655, 1713, 391, 883, + 1133, 391, 888, 392, 910, 671, 653, 910, 654, 412, + 392, 655, 413, 399, 883, 1134, 1135, 2523, 642, 640, + 872, 391, 2523, 677, 391, 392, 392, 890, 1139, 653, + 1394, 1112, 978, 1140, 655, 978, 1142, 883, 656, 428, + 1904, 1115, 399, 1134, 1135, 399, 1144, 399, 392, 642, + 640, 979, 391, 884, 979, 391, 1139, 392, 885, 414, + + 893, 1140, 894, 913, 1142, 895, 914, 657, 896, 399, + 890, 422, 1897, 2887, 1144, 391, 884, 873, 391, 392, + 392, 1459, 657, 653, 399, 654, 1145, 399, 655, 399, + 2506, 883, 1459, 391, 3057, 1146, 391, 656, 392, 510, + 1118, 893, 392, 894, 1205, 657, 895, 887, 1116, 896, + 1192, 399, 1147, 1192, 1145, 1148, 874, 1898, 423, 391, + 392, 3055, 391, 1146, 392, 3193, 887, 893, 391, 1120, + 1117, 391, 895, 392, 1149, 896, 1121, 3184, 894, 897, + 1147, 895, 392, 1148, 896, 393, 392, 394, 897, 392, + 392, 756, 393, 391, 394, 391, 391, 392, 392, 657, + + 1136, 1124, 1149, 404, 392, 1137, 405, 890, 1150, 658, + 1151, 392, 1152, 1153, 897, 887, 907, 1138, 1154, 907, + 391, 392, 980, 1122, 393, 980, 394, 981, 1136, 392, + 2810, 982, 395, 1137, 982, 2479, 1150, 2480, 1151, 395, + 1152, 1153, 1157, 392, 1158, 1138, 1154, 1159, 665, 1143, + 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 930, 930, + 930, 930, 930, 930, 930, 930, 930, 1160, 1161, 1162, + 1157, 395, 1158, 1163, 1166, 1159, 1164, 391, 1167, 1165, + 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1178, + 1180, 1181, 1184, 1179, 1185, 1160, 1161, 1162, 1186, 1187, + + 1182, 1163, 1166, 1183, 1188, 1189, 1167, 1165, 1168, 1169, + 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1178, 1180, 1181, + 1184, 1179, 1185, 1191, 2987, 1459, 1186, 1187, 1182, 1208, + 3141, 1183, 1188, 1189, 983, 1193, 1459, 983, 1193, 984, + 1194, 986, 3101, 1194, 986, 1195, 987, 1196, 2523, 1197, + 1196, 1191, 1197, 990, 1198, 991, 990, 1208, 991, 1200, + 992, 1201, 1200, 1209, 1201, 994, 1202, 995, 994, 1210, + 995, 1203, 996, 516, 1203, 529, 1207, 1212, 1211, 536, + 1214, 1217, 1213, 529, 536, 1218, 1219, 536, 1220, 1221, + 1222, 1209, 1223, 1224, 1225, 3063, 533, 1210, 1226, 540, + + 1227, 1904, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1217, + 1237, 1235, 1238, 1218, 1219, 1236, 1220, 1221, 1222, 1239, + 1223, 1224, 1225, 760, 768, 766, 1226, 772, 1227, 770, + 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1240, 1237, 1235, + 1238, 1241, 1242, 1236, 1243, 1244, 1245, 1239, 1246, 1249, + 1252, 1250, 1247, 1254, 1248, 1251, 1255, 1256, 1257, 1258, + 1259, 3055, 1264, 1265, 1266, 1240, 1268, 1253, 1269, 1241, + 1242, 1270, 1243, 1244, 1245, 1266, 1246, 1249, 1252, 1250, + 1247, 1254, 1248, 1251, 1255, 1256, 1257, 1258, 1259, 1260, + 1264, 1265, 1271, 1261, 1268, 1253, 1269, 1272, 1273, 1270, + + 1262, 1274, 1263, 1275, 1276, 1267, 1278, 1279, 1280, 1281, + 1282, 1283, 1284, 1285, 2880, 1192, 1293, 1260, 1192, 1294, + 1271, 1261, 1295, 3042, 1296, 1272, 1273, 1297, 1262, 1274, + 1263, 1275, 1276, 3002, 1278, 1279, 1280, 1281, 1282, 1283, + 1284, 1285, 1286, 1287, 1293, 1298, 1288, 1294, 1299, 1300, + 1295, 1289, 1296, 1301, 1302, 1297, 1303, 1290, 1304, 1305, + 1306, 1291, 1307, 1292, 1308, 1309, 1310, 1311, 1312, 1313, + 1286, 1287, 1314, 1298, 1288, 1315, 1299, 1300, 1316, 1289, + 1317, 1301, 1302, 1318, 1303, 1290, 1304, 1305, 1306, 1291, + 1307, 1292, 1308, 1309, 1310, 1311, 1312, 1313, 351, 1321, + + 1314, 888, 869, 1315, 383, 640, 1316, 383, 1317, 383, + 1325, 1318, 888, 888, 3001, 1330, 1571, 1319, 2992, 391, + 867, 428, 391, 1116, 392, 1333, 355, 653, 1334, 654, + 2987, 383, 1323, 662, 399, 883, 2951, 391, 399, 1336, + 391, 399, 392, 399, 399, 1329, 392, 654, 1337, 431, + 655, 1327, 2934, 883, 1118, 399, 1334, 1338, 399, 641, + 399, 1572, 1331, 1193, 391, 399, 1193, 1336, 884, 890, + 1322, 660, 905, 2297, 656, 1396, 1337, 1339, 1396, 1662, + 890, 1326, 399, 1196, 1340, 1338, 1196, 1343, 1320, 640, + 1662, 391, 892, 897, 391, 1344, 392, 1341, 1347, 893, + + 1349, 1120, 1350, 1324, 895, 1339, 391, 896, 1351, 391, + 406, 392, 1340, 1342, 893, 1343, 894, 2074, 392, 895, + 1352, 657, 896, 1344, 391, 1341, 1347, 391, 1349, 392, + 1350, 2875, 893, 392, 894, 1353, 1351, 895, 1355, 399, + 896, 1342, 1356, 1358, 1359, 1348, 887, 1360, 1352, 1361, + 1362, 392, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 897, 2075, 1353, 1363, 1364, 1355, 1366, 1367, 1368, + 1356, 1358, 1359, 1369, 1370, 1360, 1371, 1361, 1362, 1332, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1372, + 1324, 1375, 1363, 1364, 1376, 1366, 1367, 1368, 1373, 1374, + + 1377, 1369, 1370, 1378, 1371, 1379, 1380, 1381, 1382, 1383, + 1384, 1386, 1387, 1388, 1389, 1390, 2297, 1372, 1194, 1375, + 2836, 1194, 1376, 1195, 2835, 2812, 1373, 1374, 1377, 1397, + 2774, 1378, 1397, 1379, 1380, 1381, 1382, 1383, 1384, 1386, + 1387, 1388, 1389, 1390, 1197, 1398, 508, 1197, 1398, 1198, + 1399, 1200, 1201, 1400, 1200, 1201, 1400, 1202, 1203, 1401, + 1402, 1203, 1403, 1406, 1407, 1408, 1409, 1410, 1411, 1412, + 1413, 1414, 1415, 1416, 510, 1417, 1418, 1419, 1421, 1422, + 1423, 1424, 1425, 1420, 1426, 1427, 1428, 1401, 1402, 1429, + 1403, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, + + 1415, 1416, 1430, 1417, 1418, 1419, 1421, 1422, 1423, 1424, + 1425, 1420, 1426, 1427, 1428, 1431, 1432, 1429, 1433, 1434, + 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1444, 1445, + 1430, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1458, + 1460, 2360, 1443, 1431, 1432, 1461, 1433, 1434, 1435, 1436, + 1437, 1438, 1439, 1440, 1441, 1442, 1444, 1445, 1454, 1446, + 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1458, 1460, 1455, + 1443, 1462, 1464, 1461, 1456, 1457, 1465, 1466, 1467, 1469, + 1470, 1471, 1472, 1474, 1476, 1477, 1454, 1478, 1479, 1481, + 1482, 1483, 1485, 1486, 1480, 1487, 1488, 1455, 1489, 1462, + + 1464, 1490, 1456, 1457, 1465, 1466, 1467, 1469, 1470, 1471, + 1472, 1474, 1476, 1477, 1491, 1478, 1479, 1481, 1482, 1483, + 1485, 1486, 1480, 1487, 1488, 1492, 1489, 1493, 1494, 1490, + 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, + 1505, 1506, 1491, 1507, 869, 888, 1511, 1116, 1396, 1397, + 2358, 1396, 1397, 1492, 1575, 1493, 1494, 1575, 1495, 1496, + 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, + 1508, 1507, 391, 1514, 1511, 391, 399, 392, 888, 399, + 893, 399, 894, 870, 889, 895, 1509, 662, 896, 399, + 1515, 1400, 885, 1512, 1400, 1513, 1516, 1517, 3937, 392, + + 1518, 1514, 1519, 399, 1520, 2741, 391, 1521, 1526, 391, + 1527, 392, 871, 890, 1510, 1528, 894, 1115, 1515, 895, + 1529, 1512, 896, 1513, 1516, 1517, 1532, 897, 1518, 1530, + 1519, 656, 1520, 391, 1523, 1521, 1526, 1523, 1527, 1523, + 1531, 1536, 1537, 1528, 1524, 1539, 890, 1523, 1529, 1545, + 1546, 1549, 1550, 1551, 659, 1552, 1534, 1530, 1553, 1554, + 887, 1122, 1535, 1582, 1575, 2739, 1582, 1575, 1531, 1536, + 1537, 2682, 1555, 1539, 1556, 1557, 1558, 1545, 1546, 1549, + 1550, 1551, 1559, 1552, 1534, 1560, 1553, 1554, 1561, 1525, + 1535, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + + 1555, 1562, 1556, 1557, 1558, 1563, 1564, 1567, 1565, 1568, + 1559, 1569, 1570, 1560, 1566, 1398, 1561, 1576, 1398, 1577, + 1399, 1580, 1581, 1583, 1584, 1585, 1586, 1587, 1588, 1562, + 1589, 1590, 1591, 1563, 1564, 1567, 1565, 1568, 1592, 1569, + 1570, 1596, 1566, 1597, 1593, 1576, 1598, 1577, 1599, 1580, + 1581, 1583, 1584, 1585, 1586, 1587, 1588, 1594, 1589, 1590, + 1591, 1600, 1595, 1601, 1602, 1603, 1592, 1604, 1609, 1596, + 1610, 1597, 1593, 1605, 1598, 1611, 1599, 1612, 1613, 1606, + 1614, 1607, 1615, 1582, 1608, 1594, 1582, 1622, 1763, 1600, + 1595, 1601, 1602, 1603, 1623, 1604, 1609, 1624, 1610, 1625, + + 1616, 1605, 1626, 1611, 1617, 1612, 1613, 1606, 1614, 1607, + 1615, 1618, 1608, 1619, 1620, 1622, 1621, 1627, 1628, 1629, + 1630, 1631, 1623, 1632, 1633, 1624, 1634, 1625, 1616, 1635, + 1626, 1636, 1617, 1637, 1638, 1639, 1640, 1641, 1642, 1618, + 1646, 1619, 1620, 1647, 1621, 1627, 1628, 1629, 1630, 1631, + 1648, 1632, 1633, 1649, 1634, 1650, 1657, 1635, 1658, 1636, + 1651, 1637, 1638, 1639, 1640, 1641, 1642, 1652, 1646, 1664, + 1665, 1647, 1659, 2512, 1666, 1653, 1667, 1668, 1648, 1662, + 1654, 1649, 1669, 1650, 1657, 1660, 1658, 1661, 1651, 1670, + 1662, 1671, 1672, 1673, 1674, 1652, 1675, 1664, 1665, 1676, + + 1659, 1663, 1666, 1653, 1667, 1668, 1677, 1678, 1654, 1679, + 1669, 1681, 1682, 1660, 1680, 1661, 1683, 1670, 1684, 1671, + 1672, 1673, 1674, 1685, 1675, 1686, 1687, 1676, 1688, 1663, + 1689, 1690, 1691, 1692, 1677, 1678, 1694, 1679, 1696, 1681, + 1682, 1695, 1680, 1697, 1683, 1698, 1684, 888, 1700, 1693, + 2510, 1685, 1701, 1686, 1687, 1699, 1688, 1702, 1689, 1690, + 1691, 1692, 399, 1116, 1694, 399, 1696, 399, 1703, 1695, + 1704, 1697, 1705, 1698, 399, 1706, 1700, 1693, 1118, 1707, + 1701, 1708, 1709, 1847, 1715, 1702, 2090, 2297, 1718, 399, + 1847, 2297, 1719, 2205, 1847, 1720, 1703, 1725, 1704, 2489, + + 1705, 1847, 1331, 1706, 2205, 2487, 2075, 1707, 1523, 1708, + 1709, 1523, 1715, 1523, 884, 890, 1718, 897, 1710, 1523, + 1719, 1523, 1523, 1720, 1523, 1725, 1726, 1722, 1727, 1710, + 1728, 1723, 1523, 1724, 1533, 1533, 1533, 1533, 1533, 1533, + 1533, 1533, 1533, 1730, 1731, 1732, 1732, 1732, 1732, 1732, + 1732, 1732, 1732, 1732, 1726, 1722, 1727, 1734, 1728, 1723, + 1735, 1724, 1736, 1711, 1737, 1738, 1739, 1740, 1741, 1742, + 1743, 1730, 1731, 1744, 1525, 1745, 1746, 1747, 1748, 1749, + 1750, 1751, 1752, 1753, 1754, 1734, 1755, 1757, 1735, 1761, + 1736, 1762, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1765, + + 1766, 1744, 1767, 1745, 1746, 1747, 1748, 1749, 1750, 1751, + 1752, 1753, 1754, 1768, 1755, 1757, 1769, 1761, 1771, 1762, + 1772, 1773, 1774, 1770, 1775, 1776, 1777, 1765, 1766, 1778, + 1767, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, + 1788, 1768, 1789, 1790, 1769, 1791, 1771, 1792, 1772, 1773, + 1774, 1770, 1775, 1776, 1777, 1793, 1794, 1778, 1795, 1779, + 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1796, + 1789, 1790, 1797, 1791, 1798, 1792, 1799, 1800, 1801, 1802, + 1803, 1804, 1805, 1793, 1794, 1806, 1795, 1807, 1808, 1809, + 1810, 1811, 1812, 1813, 1814, 1817, 1818, 1796, 1819, 1820, + + 1797, 1815, 1798, 1821, 1799, 1800, 1801, 1802, 1803, 1804, + 1805, 1822, 1815, 1806, 1712, 1807, 1808, 1809, 1810, 1811, + 1812, 1813, 1814, 1817, 1818, 1823, 1819, 1820, 1824, 1825, + 1826, 1821, 1827, 1828, 1829, 1831, 1832, 1833, 1834, 1822, + 1835, 1836, 1816, 1837, 1849, 1850, 1851, 1852, 1853, 1854, + 1855, 1856, 1857, 1823, 1838, 2679, 1824, 1825, 1826, 1713, + 1827, 1828, 1829, 1831, 1832, 1833, 1834, 1858, 1835, 1836, + 1859, 1837, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, + 1857, 1860, 1838, 1839, 1840, 1861, 1862, 1841, 1863, 1842, + 1864, 1865, 1866, 1843, 1844, 1858, 1867, 1845, 1859, 1868, + + 1869, 1870, 1846, 1871, 1872, 1873, 1874, 1875, 2676, 1860, + 1876, 1839, 1840, 1861, 1862, 1841, 1863, 1842, 1864, 1865, + 1866, 1843, 1844, 1877, 1867, 1845, 1880, 1868, 1869, 1870, + 1846, 1871, 1872, 1873, 1874, 1875, 1878, 1881, 1876, 1879, + 1882, 1883, 1884, 1886, 1887, 1888, 1889, 1890, 1891, 1893, + 1894, 1877, 1899, 1523, 1880, 1902, 1523, 1903, 1523, 1905, + 1906, 1892, 1907, 1895, 1878, 1881, 1523, 1879, 1882, 1883, + 1884, 1886, 1887, 1888, 1889, 1890, 1891, 1893, 1894, 1908, + 1899, 1916, 1919, 1902, 1904, 1903, 1920, 1905, 1906, 1892, + 1907, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, + + 1909, 1912, 1910, 1917, 1918, 1921, 1922, 1908, 1525, 1916, + 1919, 1923, 1924, 1913, 1920, 1925, 1926, 1927, 1914, 1732, + 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1909, 1912, + 1910, 1917, 1918, 1921, 1922, 1928, 1932, 1929, 1936, 1923, + 1924, 1913, 1933, 1925, 1926, 1927, 1914, 1930, 1937, 1938, + 1939, 1940, 1941, 1934, 1942, 1943, 1949, 1950, 1931, 1952, + 1953, 1954, 1935, 1928, 1932, 1929, 1936, 1955, 3937, 1956, + 1933, 3937, 1957, 3937, 1958, 1930, 1937, 1938, 1939, 1940, + 1941, 1934, 1942, 1943, 1949, 1950, 1931, 1952, 1953, 1954, + 1935, 1959, 1960, 1961, 1962, 1955, 1963, 1956, 1964, 1965, + + 1957, 1967, 1958, 1968, 1969, 1970, 1971, 1972, 1973, 1974, + 1975, 1976, 1977, 1978, 1979, 1966, 1981, 1982, 1983, 1959, + 1960, 1961, 1962, 1984, 1963, 1980, 1964, 1965, 1980, 1967, + 1985, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, + 1977, 1978, 1979, 1966, 1981, 1982, 1983, 1986, 1987, 1988, + 1989, 1984, 1990, 1991, 1992, 1993, 1994, 1996, 1985, 1997, + 1996, 1998, 1995, 1999, 2002, 2000, 2003, 2004, 2005, 2006, + 2001, 2009, 2010, 2011, 2007, 1986, 1987, 1988, 1989, 2014, + 1990, 1991, 1992, 1993, 1994, 2007, 2015, 1997, 2012, 1998, + 1995, 1999, 2002, 2000, 2003, 2004, 2005, 2006, 2001, 2009, + + 2010, 2011, 2013, 2016, 2017, 2018, 2020, 2014, 2021, 2022, + 2023, 2024, 2025, 2026, 2015, 2008, 2012, 2027, 2030, 2031, + 2032, 2028, 2033, 2034, 2035, 2036, 3204, 2655, 2042, 2043, + 2044, 2016, 2017, 2018, 2020, 2029, 2021, 2022, 2023, 2024, + 2025, 2026, 2045, 2506, 2046, 2027, 2030, 2031, 2032, 2028, + 2033, 2034, 2035, 2036, 2037, 2038, 2042, 2043, 2044, 2047, + 2039, 2049, 2050, 2029, 2051, 2052, 2053, 2054, 2040, 2055, + 2045, 2041, 2046, 2056, 2057, 2058, 2059, 3597, 2065, 3598, + 2066, 2067, 2037, 2038, 2068, 2069, 2070, 2047, 2039, 2049, + 2050, 2071, 2051, 2052, 2053, 2054, 2040, 2055, 2076, 2041, + + 2077, 2056, 2057, 2058, 2059, 2060, 2065, 2061, 2066, 2067, + 2080, 2062, 2068, 2069, 2070, 2060, 2078, 2061, 2081, 2071, + 2082, 2062, 2063, 2079, 2064, 2083, 2076, 2084, 2077, 2085, + 1712, 2089, 2063, 2060, 2072, 2061, 2091, 2092, 2080, 2062, + 2093, 2297, 2094, 2060, 2078, 2061, 2081, 2280, 2082, 2062, + 2063, 2079, 2064, 2083, 2097, 2084, 1523, 2085, 2098, 1523, + 2063, 1523, 2072, 2099, 2091, 2092, 1710, 2100, 2093, 1523, + 2094, 2095, 2101, 2096, 2102, 1898, 2090, 2113, 2114, 2115, + 2116, 2117, 2097, 3329, 2645, 2118, 2098, 2119, 2120, 2121, + 2122, 2099, 2281, 2165, 2296, 2100, 2165, 2297, 2635, 2095, + + 2101, 2096, 2102, 2633, 2125, 2113, 2114, 2115, 2116, 2117, + 2126, 1711, 2103, 2118, 2127, 2119, 2120, 2121, 2122, 2104, + 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2128, 2123, + 2129, 2105, 2125, 2106, 2107, 2108, 2124, 2130, 2126, 2109, + 2131, 2132, 2127, 2134, 2110, 2135, 2136, 2137, 2138, 2139, + 2140, 2148, 2133, 2111, 2617, 2602, 2128, 2123, 2129, 2105, + 2360, 2106, 2107, 2108, 2124, 2130, 2150, 2109, 2131, 2132, + 2151, 2134, 2110, 2135, 2136, 2137, 2138, 2139, 2140, 2148, + 2133, 2111, 2143, 2144, 2145, 2143, 2146, 2144, 2147, 2146, + 2152, 2153, 2154, 2155, 2150, 2156, 2157, 2158, 2151, 2159, + + 2160, 2161, 2162, 2163, 2166, 2167, 2168, 2169, 2170, 2358, + 2171, 2172, 2173, 2548, 2174, 2175, 2176, 2510, 2152, 2153, + 2154, 2155, 2090, 2156, 2157, 2158, 2179, 2159, 2160, 2161, + 2162, 2163, 2166, 2167, 2168, 2169, 2170, 1946, 2171, 2172, + 2173, 1948, 2174, 2175, 2176, 1980, 2180, 2181, 1980, 2182, + 2178, 2183, 2184, 2185, 2179, 2186, 2187, 2188, 2189, 2190, + 2191, 2192, 2193, 1996, 2196, 2197, 1996, 2198, 2194, 2199, + 2200, 2201, 2202, 2203, 2180, 2181, 2204, 2182, 2206, 2183, + 2184, 2185, 2207, 2186, 2187, 2188, 2189, 2190, 2191, 2192, + 2193, 2208, 2196, 2197, 2209, 2198, 2210, 2199, 2200, 2201, + + 2202, 2203, 2211, 2212, 2204, 2213, 2206, 2214, 2215, 2216, + 2207, 2165, 2507, 2228, 2165, 2229, 2384, 2420, 2230, 2208, + 2420, 2506, 2209, 2231, 2210, 2232, 2233, 3597, 2234, 3598, + 2211, 2212, 2235, 2213, 2236, 2214, 2215, 2216, 2217, 2218, + 2219, 2228, 2220, 2229, 2221, 2222, 2230, 2237, 2223, 2224, + 2225, 2231, 2238, 2232, 2233, 2226, 2234, 2227, 2239, 2240, + 2235, 2241, 2236, 2242, 2243, 2244, 2217, 2218, 2219, 2245, + 2220, 2246, 2221, 2222, 2247, 2237, 2223, 2224, 2225, 2248, + 2238, 2249, 2250, 2226, 2251, 2227, 2239, 2240, 2252, 2241, + 2253, 2242, 2243, 2244, 2255, 2256, 2257, 2245, 2258, 2246, + + 2261, 2262, 2247, 2263, 2264, 2265, 2266, 2248, 2267, 2249, + 2250, 2268, 2251, 2269, 2271, 2270, 2252, 2272, 2253, 2277, + 2283, 2280, 2255, 2256, 2257, 2278, 2258, 2279, 2261, 2262, + 2285, 2263, 2264, 2265, 2266, 2286, 2267, 2298, 2301, 2268, + 2287, 2269, 2271, 2270, 2288, 2272, 2289, 2277, 2290, 2291, + 2292, 2293, 2294, 2278, 2298, 2279, 2303, 2304, 2285, 2305, + 2306, 2307, 2308, 2286, 2309, 2284, 2075, 2310, 2287, 2311, + 2322, 2487, 2288, 2312, 2289, 2313, 2290, 2291, 2292, 2293, + 2294, 2075, 2299, 2302, 2303, 2304, 2323, 2305, 2306, 2307, + 2308, 3937, 2309, 2324, 3937, 2310, 3937, 2311, 2322, 2090, + + 2327, 2312, 2328, 2313, 2314, 2314, 2314, 2314, 2314, 2314, + 2314, 2314, 2314, 2329, 2323, 2331, 2315, 2325, 2316, 2317, + 2318, 2324, 2326, 2332, 2319, 2333, 2334, 2335, 2327, 2320, + 2328, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2321, 2571, + 2484, 2329, 2571, 2331, 2315, 2325, 2316, 2317, 2318, 2343, + 2326, 2332, 2319, 2333, 2334, 2335, 2344, 2320, 2345, 2336, + 2337, 2338, 2339, 2340, 2341, 2342, 2321, 2104, 2104, 2104, + 2104, 2104, 2104, 2104, 2104, 2104, 2346, 2343, 2347, 2348, + 2349, 2350, 2351, 2352, 2344, 2353, 2345, 2354, 2355, 2356, + 2143, 2144, 2145, 2143, 2144, 2145, 2146, 2144, 2147, 2146, + + 2144, 2147, 2361, 2362, 2346, 2363, 2347, 2348, 2349, 2350, + 2351, 2352, 2364, 2353, 2365, 2354, 2355, 2356, 2374, 2375, + 2469, 2376, 2377, 2386, 2378, 2379, 2386, 2460, 2380, 2381, + 2361, 2362, 2382, 2363, 2383, 2360, 2388, 2389, 2390, 2391, + 2364, 2392, 2365, 2393, 2394, 1946, 2374, 2375, 1946, 2376, + 2377, 1948, 2378, 2379, 1948, 2366, 2380, 2381, 2366, 3667, + 2382, 3668, 2383, 2387, 2388, 2389, 2390, 2391, 2395, 2392, + 2396, 2393, 2394, 3667, 2367, 3668, 2397, 2399, 2400, 2401, + 2402, 2403, 2404, 2405, 2406, 2407, 2408, 2368, 2410, 2369, + 2411, 2387, 2412, 2413, 2358, 2415, 2395, 2416, 2396, 2370, + + 2417, 2371, 2372, 2373, 2397, 2399, 2400, 2401, 2402, 2403, + 2404, 2405, 2406, 2407, 2408, 2368, 2410, 2369, 2411, 3937, + 2412, 2413, 3937, 2415, 3937, 2416, 2418, 2370, 2417, 2371, + 2372, 2373, 2419, 2421, 2422, 2423, 2424, 2425, 2426, 2427, + 2428, 2429, 2430, 2431, 2432, 2435, 2433, 2436, 2437, 2426, + 2427, 2438, 2439, 2440, 2418, 2434, 2441, 2442, 2443, 2444, + 2419, 2421, 2422, 2423, 2424, 2425, 2447, 2445, 2428, 2429, + 2430, 2431, 2432, 2435, 2433, 2436, 2437, 2448, 2449, 2438, + 2439, 2440, 2446, 2450, 2441, 2442, 2443, 2444, 2451, 2452, + 2453, 2454, 2455, 2456, 2447, 2445, 2457, 2458, 2459, 2461, + + 2462, 2463, 2464, 2465, 2466, 2448, 2449, 2467, 2468, 2470, + 2446, 2450, 2471, 2472, 2473, 2474, 2451, 2452, 2453, 2454, + 2455, 2456, 2475, 2476, 2457, 2458, 2459, 2461, 2462, 2463, + 2464, 2465, 2466, 2477, 2478, 2467, 2468, 2470, 2481, 2482, + 2471, 2472, 2473, 2474, 2483, 2485, 2488, 2490, 2491, 2492, + 2475, 2476, 2493, 2494, 2495, 2496, 2497, 2498, 2508, 2511, + 2501, 2477, 2478, 2501, 2513, 2501, 2481, 2482, 2514, 2515, + 2502, 2516, 2483, 2503, 2517, 2490, 2491, 2492, 2518, 2519, + 2493, 2494, 2495, 2496, 2497, 2498, 2520, 2504, 2521, 2522, + 2486, 2489, 2513, 2260, 2259, 2580, 2514, 2515, 2580, 2516, + + 2524, 2525, 2517, 2509, 2512, 2526, 2518, 2519, 2527, 2529, + 2530, 2523, 2531, 2528, 2520, 2505, 2521, 2522, 2314, 2314, + 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2532, 2524, 2525, + 2533, 2534, 2535, 2526, 2536, 2537, 2527, 2529, 2530, 2538, + 2531, 2528, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, + 2547, 2549, 2550, 2551, 2552, 2532, 2553, 2554, 2533, 2534, + 2535, 2555, 2536, 2537, 2556, 2557, 2558, 2538, 2254, 2564, + 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2549, + 2550, 2551, 2552, 2565, 2553, 2554, 2568, 2560, 2561, 2555, + 2560, 2572, 2556, 2557, 2558, 2563, 2561, 2564, 2563, 2566, + + 2366, 2573, 2575, 2366, 2576, 2569, 2567, 2574, 2577, 2578, + 2579, 2565, 2581, 2582, 2568, 2583, 2584, 2585, 2586, 2572, + 2587, 2588, 2164, 3937, 2592, 2593, 3937, 2566, 3937, 2573, + 2575, 2594, 2576, 2595, 2567, 2574, 2577, 2578, 2579, 2596, + 2581, 2582, 2358, 2583, 2584, 2585, 2586, 2597, 2587, 2588, + 2360, 2386, 2592, 2593, 2386, 2598, 2590, 2357, 2599, 2594, + 2600, 2595, 2601, 2600, 2603, 2359, 2604, 2596, 2605, 2606, + 2607, 2608, 2609, 2610, 2611, 2597, 2612, 2613, 2614, 2615, + 2616, 2618, 2619, 2598, 2620, 2621, 2599, 2620, 2622, 2149, + 2601, 2626, 2603, 2627, 2604, 2628, 2605, 2606, 2607, 2608, + + 2609, 2610, 2611, 2629, 2612, 2613, 2614, 2615, 2616, 2618, + 2619, 2630, 2624, 2621, 2631, 2624, 2622, 2625, 2632, 2626, + 2634, 2627, 2636, 2628, 2638, 2639, 2640, 2641, 2642, 2643, + 2644, 2629, 2646, 2636, 2647, 1948, 2648, 2649, 2650, 2630, + 2651, 2652, 2631, 2653, 2654, 2656, 2632, 2657, 2634, 2658, + 2659, 2660, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2661, + 2646, 2662, 2647, 2637, 2648, 2649, 2650, 2663, 2651, 2652, + 2664, 2653, 2654, 2656, 2665, 2657, 2666, 2658, 2659, 2660, + 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2661, 2674, 2662, + 2675, 2677, 2678, 2680, 2280, 2663, 2485, 2682, 2664, 2683, + + 2684, 2685, 2665, 2686, 2666, 2687, 2688, 2689, 2667, 2668, + 2669, 2670, 2671, 2672, 2673, 2694, 2674, 2708, 2675, 2677, + 2678, 2706, 2298, 2709, 2508, 2682, 1946, 2683, 2684, 2685, + 2297, 2686, 2695, 2687, 2688, 2689, 2112, 2501, 2489, 2681, + 2501, 2489, 2501, 2501, 2499, 2708, 2501, 2691, 2501, 2501, + 2503, 2709, 2501, 2698, 2501, 2710, 2711, 2087, 2501, 2702, + 2696, 2501, 2503, 2501, 2692, 1904, 2512, 2707, 2691, 2512, + 2699, 2503, 2697, 2712, 2713, 2714, 2703, 2715, 2716, 2717, + 2718, 2719, 2720, 2710, 2711, 2692, 2721, 2722, 2723, 2724, + 2725, 2726, 2693, 1904, 2727, 2728, 2729, 2730, 2700, 2731, + + 2732, 2712, 2713, 2714, 2704, 2715, 2716, 2717, 2718, 2719, + 2720, 2733, 2734, 2505, 2721, 2722, 2723, 2724, 2725, 2726, + 2735, 2736, 2727, 2728, 2729, 2730, 2737, 2731, 2732, 2738, + 2740, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2733, + 2734, 2750, 2560, 2561, 2751, 2560, 2752, 2753, 2735, 2736, + 2563, 2561, 2754, 2563, 2737, 2757, 2758, 2738, 2740, 2742, + 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2571, 2759, 2750, + 2571, 2760, 2751, 2761, 2752, 2753, 2762, 2086, 2763, 2764, + 2754, 2767, 2580, 2757, 2758, 2580, 2768, 2765, 2769, 2770, + 2771, 2772, 1898, 2773, 2776, 2777, 2759, 2358, 2778, 2760, + + 2779, 2761, 2780, 2781, 2762, 2360, 2763, 2764, 2782, 2767, + 2783, 2786, 2357, 2787, 2768, 2788, 2769, 2770, 2771, 2772, + 2359, 2773, 2776, 2777, 2785, 2789, 2778, 2785, 2779, 2790, + 2780, 2781, 2791, 2792, 2793, 2795, 2782, 2794, 2783, 2786, + 2794, 2787, 2797, 2788, 2798, 2799, 2800, 2801, 2802, 2805, + 2806, 2807, 2955, 2789, 2796, 2955, 2811, 2790, 2813, 2814, + 2791, 2792, 2793, 2795, 2620, 2815, 2816, 2620, 2817, 2803, + 2797, 2818, 2798, 2799, 2800, 2801, 2802, 2805, 2806, 2807, + 2624, 2819, 2796, 2624, 2811, 2625, 2813, 2814, 2820, 2821, + 2822, 2823, 2824, 2815, 2816, 2825, 2817, 2826, 2827, 2818, + + 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2837, 2838, 2819, + 2839, 2840, 2841, 2842, 2843, 2844, 2820, 2821, 2822, 2823, + 2824, 2845, 2846, 2825, 2847, 2826, 2827, 2848, 2828, 2829, + 2830, 2831, 2832, 2833, 2834, 2837, 2838, 2849, 2839, 2840, + 2841, 2842, 2843, 2844, 2850, 2851, 2852, 2853, 2854, 2845, + 2846, 2855, 2847, 2856, 2857, 2848, 2858, 2859, 2860, 2485, + 2861, 2862, 2863, 2864, 2865, 2849, 2866, 2867, 2508, 2297, + 2876, 2879, 2850, 2851, 2852, 2853, 2854, 2048, 2019, 2855, + 2506, 2856, 2857, 2499, 2858, 2859, 2860, 2877, 2695, 2862, + 2863, 2864, 2865, 2869, 2866, 2867, 2869, 2501, 2869, 1948, + + 2501, 2891, 2501, 2870, 2486, 2075, 2871, 2874, 2881, 2505, + 2503, 2697, 2297, 2509, 2892, 2878, 2880, 3731, 2869, 3732, + 2872, 2869, 2501, 2869, 2692, 2501, 2499, 2501, 2883, 1946, + 2501, 2871, 2886, 2501, 2869, 2501, 2893, 2869, 1944, 2869, + 2702, 2894, 2892, 2503, 2870, 2884, 2090, 2871, 2873, 2699, + 2895, 2896, 2505, 2501, 2897, 2898, 2501, 2703, 2501, 2899, + 2900, 2872, 2901, 2889, 2893, 2902, 2503, 2903, 2904, 2894, + 2905, 2906, 2907, 2885, 2908, 2909, 2910, 2887, 2895, 2896, + 2703, 2911, 2897, 2898, 2912, 2704, 2913, 2899, 2900, 2873, + 2901, 2914, 2915, 2902, 2916, 2903, 2904, 2917, 2905, 2906, + + 2907, 2918, 2908, 2909, 2910, 2919, 2920, 2921, 2890, 2911, + 2922, 2923, 2912, 2924, 2913, 2925, 2926, 2927, 2928, 2914, + 2915, 2929, 2916, 2930, 2931, 2917, 2932, 2933, 2935, 2918, + 2936, 2937, 2938, 2919, 2920, 2921, 2939, 2940, 2922, 2923, + 2941, 2924, 2942, 2925, 2926, 2927, 2928, 2944, 2945, 2929, + 2946, 2930, 2931, 2947, 2932, 2933, 2935, 2948, 2936, 2937, + 2938, 2949, 2950, 2952, 2939, 2940, 2953, 2954, 2941, 2956, + 2942, 2957, 2956, 2958, 2785, 2944, 2945, 2785, 2946, 2959, + 2960, 2947, 2961, 2967, 2968, 2948, 2969, 2970, 2973, 2949, + 2950, 2952, 2963, 2794, 2953, 2954, 2794, 2974, 2971, 2957, + + 2964, 2958, 2975, 2965, 2976, 2966, 2977, 2959, 2960, 2978, + 2979, 2967, 2968, 2962, 2969, 2970, 2973, 2980, 2982, 2983, + 2963, 2984, 2988, 2989, 2990, 2974, 2991, 2994, 2964, 2993, + 2975, 2965, 2976, 2966, 2977, 2990, 2995, 2978, 2979, 2996, + 2993, 2962, 2997, 2998, 2999, 2980, 2982, 2983, 3000, 2984, + 2988, 2989, 3003, 3005, 2991, 2994, 3006, 3007, 3008, 3010, + 3011, 3012, 3009, 3013, 2995, 3014, 3004, 2996, 3015, 3016, + 2997, 2998, 2999, 3009, 3017, 3018, 3000, 3019, 3020, 3021, + 3003, 3005, 3022, 3023, 3006, 3007, 3008, 3010, 3011, 3012, + 3024, 3013, 3025, 3014, 3026, 3027, 3015, 3016, 3028, 3029, + + 3030, 3031, 3017, 3018, 3032, 3019, 3020, 3021, 3033, 3034, + 3022, 3023, 3035, 3036, 3037, 2485, 3038, 3039, 3024, 3040, + 3025, 3041, 3026, 3027, 2508, 3043, 3028, 3029, 3030, 3031, + 2890, 3047, 3032, 2297, 1915, 1911, 3033, 3034, 3064, 3148, + 3035, 3036, 3037, 3044, 3038, 3039, 3047, 3040, 2877, 3041, + 3148, 2869, 2869, 3043, 2869, 2869, 2869, 2869, 3056, 1901, + 2284, 3045, 3050, 2877, 2871, 3107, 3064, 2869, 3107, 2302, + 2869, 3044, 2869, 2694, 3065, 2877, 3048, 3045, 2872, 3051, + 2871, 2694, 2869, 2501, 3066, 2869, 2501, 2869, 2501, 1525, + 2695, 3048, 3053, 2691, 2872, 2871, 2503, 3731, 2695, 3732, + + 3067, 3113, 3065, 3057, 3113, 1896, 3046, 3052, 3068, 2872, + 2692, 1714, 3066, 1885, 2869, 1848, 3069, 2869, 2696, 2869, + 2869, 1830, 3046, 2869, 3058, 2869, 2880, 2871, 3067, 2869, + 3058, 1758, 2869, 2871, 2869, 3070, 3068, 3054, 2693, 3061, + 2501, 2884, 2871, 2501, 3069, 2501, 1394, 2884, 1573, 2501, + 2698, 3071, 2501, 3072, 2501, 2501, 2884, 3073, 2501, 2698, + 2501, 2501, 3074, 3070, 2501, 2702, 2501, 2699, 2503, 3059, + 3075, 2702, 3076, 3077, 2503, 3059, 2699, 3078, 3079, 3071, + 3080, 3072, 2703, 3081, 3062, 3073, 3082, 3083, 2703, 3084, + 3074, 3085, 3086, 3087, 3088, 2700, 3089, 3090, 3075, 3091, + + 3076, 3077, 3092, 3093, 2887, 3078, 3079, 3094, 3080, 3095, + 2704, 3081, 3096, 3097, 3082, 3083, 2890, 3084, 3098, 3085, + 3086, 3087, 3088, 3099, 3089, 3090, 3100, 3091, 3102, 3103, + 3092, 3093, 3104, 3105, 3106, 3094, 3108, 3095, 3109, 3110, + 3096, 3097, 3111, 3116, 2956, 3117, 3098, 2956, 3119, 3114, + 3120, 3099, 3121, 3122, 3100, 3123, 3102, 3103, 3127, 1733, + 3104, 3105, 3106, 3124, 3108, 3128, 3109, 3110, 3128, 3133, + 3111, 3116, 3134, 3117, 3125, 3126, 3119, 3135, 3120, 3137, + 3121, 3122, 3937, 3123, 3129, 3937, 3127, 3937, 3130, 3136, + 3138, 3124, 3136, 3139, 3140, 3131, 3142, 3133, 3143, 3144, + + 3134, 3146, 3125, 3126, 3147, 3135, 3149, 3137, 3150, 3151, + 3152, 3153, 3129, 3154, 3155, 3156, 3130, 3157, 3138, 3158, + 3159, 3139, 3140, 3131, 3142, 3160, 3143, 3144, 3161, 3146, + 3162, 3163, 3147, 3164, 3149, 3165, 3150, 3151, 3152, 3153, + 3166, 3154, 3155, 3156, 3167, 3157, 3168, 3158, 3159, 3169, + 3170, 3171, 3172, 3160, 3173, 3174, 3161, 3176, 3162, 3163, + 3177, 3164, 3179, 3165, 3180, 3181, 3174, 3182, 3166, 3183, + 3185, 3177, 3167, 1729, 3168, 3186, 3187, 3169, 3170, 3171, + 3172, 3188, 3173, 3189, 3190, 3176, 3191, 3192, 3194, 3195, + 3179, 3196, 3180, 3181, 3198, 3182, 3175, 3183, 3185, 3199, + + 1717, 3178, 3054, 3186, 3187, 2297, 3197, 3201, 2506, 3188, + 3062, 3189, 3190, 2297, 3191, 3192, 3194, 3195, 2869, 3196, + 2694, 2869, 3198, 2869, 2877, 1716, 3212, 3199, 3200, 3047, + 2869, 2871, 3213, 2869, 3197, 2869, 3202, 2695, 3238, 2869, + 3058, 3238, 2869, 2871, 2869, 2872, 2877, 3249, 2501, 3203, + 3249, 2501, 3057, 2501, 3212, 1714, 3214, 2884, 2702, 2869, + 3213, 2503, 2869, 1656, 2869, 3206, 3051, 3215, 3113, 3045, + 3216, 3113, 2871, 3054, 3057, 2703, 1655, 2869, 2501, 3217, + 2869, 2501, 2869, 2501, 3214, 3059, 2872, 3207, 3209, 3218, + 2871, 2503, 3219, 3220, 3204, 3215, 2869, 3221, 3216, 2869, + + 3222, 2869, 3223, 3205, 2884, 3210, 3058, 3217, 3224, 2871, + 3225, 3226, 3227, 3228, 3054, 3229, 3230, 3218, 3231, 3232, + 3219, 3220, 3233, 2884, 3234, 3221, 3235, 3236, 3222, 3237, + 3223, 3239, 3062, 3211, 3240, 3241, 3224, 3242, 3225, 3226, + 3227, 3228, 3243, 3229, 3230, 3244, 3231, 3232, 3245, 3246, + 3233, 3062, 3234, 3937, 3235, 3236, 3937, 3237, 3937, 3239, + 3248, 3107, 3240, 3241, 3107, 3242, 3250, 3252, 3253, 3255, + 3243, 3256, 3257, 3244, 3258, 3259, 3245, 3246, 3247, 3247, + 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3260, 3248, 3261, + 3262, 3263, 3265, 1645, 3250, 3252, 3253, 3255, 3273, 3256, + + 3257, 3273, 3258, 3259, 3128, 3266, 3267, 3128, 3269, 3270, + 3271, 3274, 3275, 3276, 3277, 3260, 3278, 3261, 3262, 3263, + 3265, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3279, 3280, 3281, 3266, 3267, 3282, 3269, 3270, 3271, 3274, + 3275, 3276, 3277, 3283, 3278, 3284, 3285, 3286, 3287, 3288, + 3289, 3290, 3291, 3292, 3293, 3295, 3296, 3297, 3279, 3280, + 3281, 3298, 3300, 3282, 3301, 3302, 3303, 3304, 3305, 3306, + 1644, 3283, 3310, 3284, 3285, 3286, 3287, 3288, 3289, 3290, + 3291, 3292, 3293, 3295, 3296, 3297, 3311, 3308, 3312, 3298, + 3300, 3313, 3301, 3302, 3303, 3304, 3305, 3306, 3308, 3314, + + 3310, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, + 3325, 1643, 2869, 3332, 3311, 2869, 3312, 2869, 3350, 3313, + 3324, 3350, 3045, 3047, 3640, 2871, 3327, 3314, 3309, 3315, + 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3325, 2872, + 2877, 3332, 2869, 2695, 3333, 2869, 2869, 2869, 3324, 2869, + 2501, 2869, 3050, 2501, 3334, 2501, 3050, 1579, 3380, 3335, + 3326, 3380, 3336, 2503, 3337, 3338, 3339, 3046, 3048, 3051, + 3340, 2880, 3333, 3051, 3641, 2869, 2501, 2703, 2869, 2501, + 2869, 2501, 3334, 1578, 1573, 3058, 3209, 3335, 2871, 2503, + 3336, 1548, 3337, 3338, 3339, 3341, 3342, 3052, 3340, 3343, + + 3344, 3204, 2884, 3210, 3345, 2890, 2869, 2501, 3346, 2869, + 2501, 2869, 2501, 3347, 3348, 3349, 2883, 3330, 3351, 2871, + 2503, 3352, 3355, 3341, 3342, 3356, 3357, 3343, 3344, 3358, + 3059, 3328, 3345, 2884, 3210, 3238, 3346, 3359, 3238, 3360, + 3353, 3347, 3348, 3349, 3361, 3362, 3351, 3396, 3273, 3352, + 3355, 3273, 1547, 3356, 3357, 3363, 3365, 3358, 3396, 1544, + 3368, 2885, 3331, 3368, 1543, 3359, 3367, 3360, 3249, 3371, + 3372, 3249, 3361, 3362, 3247, 3247, 3247, 3247, 3247, 3247, + 3247, 3247, 3247, 3363, 3365, 3364, 3364, 3364, 3364, 3364, + 3364, 3364, 3364, 3364, 3367, 3373, 3374, 3371, 3372, 3375, + + 3376, 3377, 3378, 3379, 3381, 3382, 3369, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3383, 3384, 3385, 3386, + 3387, 3388, 3389, 3373, 3374, 3389, 3390, 3375, 3376, 3377, + 3378, 3379, 3381, 3382, 3369, 3391, 3392, 3393, 3391, 3394, + 3395, 3397, 3398, 3399, 3383, 3384, 3385, 3386, 3387, 3388, + 3400, 3402, 3403, 3404, 3390, 3405, 3406, 3409, 3410, 3411, + 3412, 3414, 3415, 3416, 3392, 3393, 3417, 3394, 3395, 3397, + 3398, 3399, 3419, 3420, 3418, 3421, 3422, 3423, 3400, 3402, + 3403, 3404, 3424, 3405, 3406, 3409, 3410, 3411, 3412, 3414, + 3415, 3416, 3425, 3426, 3417, 3427, 3429, 3430, 3431, 3432, + + 3419, 3420, 3418, 3421, 3422, 3423, 3433, 3434, 1542, 2869, + 3424, 3047, 2869, 3331, 2869, 1541, 2297, 3436, 3437, 3045, + 3425, 3426, 2871, 3427, 3429, 3430, 3431, 3432, 2877, 3438, + 3439, 3440, 1540, 3441, 3433, 3434, 2872, 1538, 2501, 2869, + 3442, 2501, 2869, 2501, 2869, 3436, 3437, 3443, 3435, 3058, + 2501, 2503, 2871, 2501, 3444, 2501, 2878, 3438, 3439, 3440, + 3209, 3441, 3445, 2503, 2873, 3210, 2884, 3446, 3442, 3447, + 3448, 3450, 3451, 3453, 3450, 3443, 3454, 3210, 3475, 1116, + 3476, 3475, 3444, 3476, 3477, 3480, 873, 3477, 3480, 3350, + 3445, 3491, 3350, 3331, 2885, 3446, 3485, 3447, 3448, 3485, + + 3451, 3453, 3491, 1484, 3454, 3331, 3449, 3449, 3449, 3449, + 3449, 3449, 3449, 3449, 3449, 3452, 3452, 3452, 3452, 3452, + 3452, 3452, 3452, 3452, 3452, 3452, 3354, 3354, 3354, 3354, + 3354, 3354, 3354, 3354, 3354, 3354, 3354, 3455, 3456, 3457, + 3452, 3458, 3459, 3460, 3461, 3462, 3463, 3465, 3466, 3467, + 1475, 3354, 3364, 3364, 3364, 3364, 3364, 3364, 3364, 3364, + 3364, 3368, 3468, 3469, 3368, 3455, 3456, 3457, 3470, 3458, + 3459, 3460, 3461, 3462, 3463, 3465, 3466, 3467, 3464, 3464, + 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3471, 3472, 3473, + 3468, 3469, 3478, 3479, 3481, 3482, 3470, 3483, 3486, 1473, + + 3537, 3486, 3521, 3537, 3521, 1468, 1463, 3488, 3489, 3391, + 3490, 3493, 3391, 3494, 3495, 3471, 3472, 3473, 3497, 3498, + 3478, 3479, 3481, 3482, 1405, 3483, 3487, 3487, 3487, 3487, + 3487, 3487, 3487, 3487, 3487, 3488, 3489, 3496, 3490, 3493, + 3502, 3494, 3495, 3499, 3503, 3504, 3497, 3498, 3496, 3505, + 3506, 3500, 3501, 3507, 3508, 3509, 3510, 3511, 3512, 3513, + 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3522, 3502, 3523, + 3524, 3499, 3503, 3504, 3521, 3526, 3527, 3505, 3506, 3500, + 3501, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, + 3516, 3517, 3518, 3519, 3520, 3522, 2501, 3523, 3524, 2501, + + 3528, 2501, 3529, 3526, 3527, 3530, 3209, 3531, 3532, 2503, + 3533, 3534, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, + 3449, 3726, 3539, 3210, 3450, 3540, 3541, 3450, 3528, 3535, + 3529, 3538, 3726, 3530, 3475, 3531, 3532, 3475, 3533, 3534, + 3542, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, + 3539, 3328, 1404, 3540, 3541, 3452, 3452, 3452, 3452, 3452, + 3452, 3452, 3452, 3452, 3452, 3452, 3543, 3544, 3542, 3545, + 3546, 3547, 3548, 3549, 3550, 3551, 3552, 540, 3554, 3552, + 3452, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, + 3555, 3556, 3557, 3564, 3543, 3544, 3565, 3545, 3546, 3547, + + 3548, 3549, 3550, 3551, 3559, 3553, 3554, 3559, 3562, 3560, + 3567, 3562, 3480, 3563, 3568, 3480, 3569, 3566, 3555, 3556, + 3557, 3564, 3485, 3613, 3565, 3571, 3613, 3619, 3486, 3623, + 3619, 3486, 3623, 3553, 538, 3573, 3576, 3574, 3567, 3577, + 3578, 3579, 3568, 3575, 3569, 3572, 3572, 3572, 3572, 3572, + 3572, 3572, 3572, 3572, 3487, 3487, 3487, 3487, 3487, 3487, + 3487, 3487, 3487, 3573, 3576, 3574, 3580, 3577, 3578, 3579, + 3581, 3575, 3582, 3583, 3584, 3586, 3588, 3589, 3590, 3591, + 3592, 3593, 3595, 3596, 3599, 3600, 3559, 3562, 3707, 3559, + 3562, 3560, 3563, 3684, 3580, 533, 3684, 3602, 3581, 3603, + + 3582, 3583, 3584, 3586, 3588, 3589, 3590, 3591, 3592, 3593, + 3595, 3596, 3599, 3600, 3601, 3601, 3601, 3601, 3601, 3601, + 3601, 3601, 3601, 3601, 3601, 3602, 3604, 3603, 3607, 3608, + 3609, 3610, 3611, 3612, 3687, 531, 516, 3687, 3708, 3601, + 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3616, + 3617, 3618, 3620, 3621, 3604, 3622, 3607, 3608, 3609, 3610, + 3611, 3612, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, + 3536, 3537, 3624, 3625, 3537, 3626, 3627, 3616, 3617, 3618, + 3620, 3621, 3629, 3622, 3630, 3631, 3634, 3637, 3615, 3615, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3638, 3642, 3552, + + 3624, 3625, 3552, 3626, 3627, 3632, 514, 3643, 3632, 3644, + 3629, 3646, 3630, 3631, 3634, 3637, 3628, 3628, 3628, 3628, + 3628, 3628, 3628, 3628, 3628, 3638, 3642, 3570, 510, 3727, + 1395, 3647, 3648, 3485, 3633, 3643, 3571, 3644, 3707, 3646, + 3727, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3647, + 3648, 3649, 3633, 3572, 3572, 3572, 3572, 3572, 3572, 3572, + 3572, 3572, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, + 3659, 3660, 3661, 3662, 3663, 3664, 3666, 3669, 3641, 3649, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3670, + + 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, + 3661, 3662, 3663, 3664, 3666, 3669, 3601, 3601, 3601, 3601, + 3601, 3601, 3601, 3601, 3601, 3601, 3601, 3670, 3671, 3672, + 3674, 3675, 3676, 3678, 3623, 3679, 3678, 3623, 3680, 3691, + 1391, 3601, 3683, 3685, 3796, 3689, 3679, 3796, 3692, 3682, + 3693, 3694, 3695, 3696, 3697, 3699, 3671, 3672, 3674, 3675, + 3676, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, + 3683, 3685, 3619, 3689, 3797, 3619, 3692, 3797, 3693, 3694, + 3695, 3696, 3697, 3699, 3700, 3703, 3710, 1385, 3711, 3686, + 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3628, 3628, + + 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3632, 3712, 3937, + 3632, 3704, 3700, 3703, 3710, 3705, 3711, 3681, 3713, 3714, + 3715, 3716, 3706, 1354, 3698, 3698, 3698, 3698, 3698, 3698, + 3698, 3698, 3698, 3717, 3718, 3719, 3712, 3570, 3720, 3704, + 3721, 3722, 3723, 3705, 3724, 3725, 3713, 3714, 3715, 3716, + 3706, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3728, 3717, 3718, 3719, 3729, 3733, 3720, 3735, 3721, 3722, + 3723, 3736, 3724, 3725, 3737, 3774, 3679, 3739, 3679, 3679, + 3684, 3937, 3742, 3684, 3828, 3740, 3774, 3828, 3728, 3679, + 1346, 3687, 3729, 3733, 3687, 3735, 3743, 3746, 3678, 3736, + + 3679, 3678, 3737, 3680, 3937, 3739, 3747, 3937, 3748, 3937, + 3742, 3679, 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3686, + 3686, 3749, 3750, 3751, 3752, 3746, 3753, 3754, 3755, 3756, + 3757, 3758, 1335, 3759, 3747, 3760, 3748, 3698, 3698, 3698, + 3698, 3698, 3698, 3698, 3698, 3698, 3761, 3762, 3763, 3749, + 3750, 3751, 3752, 3784, 3753, 3754, 3755, 3756, 3757, 3764, + 3681, 3759, 3765, 3760, 3766, 3767, 3768, 3769, 3770, 3771, + 3772, 3773, 3775, 3776, 3761, 3762, 3763, 3777, 3780, 3787, + 3937, 3641, 3681, 3937, 3788, 3937, 3789, 3764, 3778, 3790, + 3765, 3791, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, + + 3775, 3776, 3792, 3785, 3793, 3777, 3780, 3787, 3794, 3798, + 3799, 3794, 3788, 3707, 3789, 3800, 3778, 3790, 3801, 3791, + 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3818, 3809, 3810, + 3792, 3812, 3793, 3813, 3814, 3818, 3815, 3798, 3799, 3816, + 3821, 3822, 3823, 3800, 3824, 3825, 3801, 3826, 3802, 3803, + 3804, 3805, 3806, 3807, 3808, 3795, 3809, 3810, 3829, 3812, + 3836, 3813, 3814, 3708, 3815, 3837, 3838, 3816, 3821, 3822, + 3823, 3796, 3824, 3825, 3796, 3826, 3831, 3819, 3834, 3797, + 3839, 3834, 3797, 3795, 3833, 3785, 3829, 3835, 3836, 3840, + 3835, 3842, 3843, 3837, 3838, 3844, 3845, 3846, 3847, 3850, + + 3851, 3852, 3853, 3851, 3854, 3855, 3856, 3857, 3839, 3828, + 3858, 3937, 3828, 3818, 3937, 3883, 3937, 3840, 3883, 3842, + 3843, 3865, 3866, 3844, 3845, 3846, 3847, 3850, 3867, 3868, + 3853, 3869, 3854, 3855, 3856, 3857, 3937, 3834, 3858, 3937, + 3834, 3937, 3862, 3835, 3870, 3871, 3835, 3872, 3864, 3865, + 3866, 3785, 3873, 3874, 3882, 3880, 3867, 3868, 3880, 3869, + 3881, 3884, 3885, 3819, 3875, 3885, 3886, 3876, 3891, 3892, + 3893, 3937, 3870, 3871, 3937, 3872, 3937, 3894, 3895, 3896, + 3873, 3874, 3882, 3937, 3897, 3898, 3937, 3899, 3937, 3884, + 3900, 3901, 3875, 3904, 3886, 3876, 3891, 3892, 3893, 3880, + + 3906, 431, 3880, 3906, 3881, 3894, 3895, 3896, 3883, 418, + 414, 3883, 3897, 3898, 399, 3899, 3908, 3885, 3900, 3901, + 3885, 3904, 3911, 3912, 3913, 3905, 3905, 3905, 3905, 3905, + 3905, 3905, 3905, 3905, 3907, 3907, 3907, 3907, 3907, 3907, + 3907, 3907, 3907, 3914, 3908, 3915, 3916, 3917, 3918, 3921, + 3911, 3912, 3913, 3905, 3905, 3905, 3905, 3905, 3905, 3905, + 3905, 3905, 3906, 395, 373, 3906, 369, 363, 359, 3922, + 3923, 3914, 3924, 3915, 3916, 3917, 3918, 3921, 3926, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3907, 3907, + 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3922, 3923, 3927, + + 3924, 3928, 3929, 3930, 3931, 3932, 3926, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3933, 3934, 3935, 3936, + 355, 1277, 1216, 1215, 1199, 1190, 1177, 3927, 1156, 3928, + 3929, 3930, 3931, 3932, 1141, 662, 1116, 645, 385, 385, + 873, 1072, 1061, 1053, 3933, 3934, 3935, 3936, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 134, 134, 134, 134, 134, 134, 134, 134, + 128, 128, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 143, 143, @@ -2904,8 +2908,8 @@ static const flex_int16_t yy_nxt[14258] = 149, 149, 149, 149, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, @@ -2915,8 +2919,8 @@ static const flex_int16_t yy_nxt[14258] = 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, @@ -2926,19 +2930,19 @@ static const flex_int16_t yy_nxt[14258] = 240, 240, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 251, 251, + 249, 249, 249, 249, 249, 249, 249, 249, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 266, 266, 992, 266, 266, 266, 266, 266, + 258, 258, 266, 266, 1050, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 366, 366, 366, 366, 366, 366, @@ -2948,8 +2952,8 @@ static const flex_int16_t yy_nxt[14258] = 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, - 382, 382, 382, 382, 382, 382, 387, 387, 387, 387, + 382, 382, 382, 382, 382, 382, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, @@ -2959,8 +2963,8 @@ static const flex_int16_t yy_nxt[14258] = 402, 402, 402, 402, 402, 402, 402, 402, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 418, 418, 418, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 505, 505, 505, 505, 505, 505, 505, 505, @@ -2968,12 +2972,12 @@ static const flex_int16_t yy_nxt[14258] = 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 517, 517, 984, 517, + 516, 516, 516, 516, 516, 516, 517, 517, 1008, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 518, 518, 975, 518, 518, 518, + 517, 517, 517, 517, 518, 518, 540, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, - 518, 518, 519, 519, 974, 519, 519, 519, 519, 519, + 518, 518, 519, 519, 538, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 533, 533, @@ -2981,20 +2985,20 @@ static const flex_int16_t yy_nxt[14258] = 533, 533, 533, 533, 533, 533, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 266, 266, 944, 266, 266, 266, 266, 266, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 266, 266, 1006, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, - 363, 363, 934, 363, 366, 366, 366, 366, 366, 366, + 363, 363, 533, 363, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 922, 373, + 366, 366, 373, 373, 373, 373, 373, 373, 373, 373, + 373, 373, 373, 373, 373, 373, 373, 373, 531, 373, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, @@ -3002,86 +3006,86 @@ static const flex_int16_t yy_nxt[14258] = 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, - 387, 387, 644, 912, 644, 644, 431, 909, 644, 644, - 644, 644, 644, 418, 644, 644, 644, 644, 644, 391, + 387, 387, 644, 1000, 644, 644, 516, 514, 644, 644, + 644, 644, 644, 998, 644, 644, 644, 644, 644, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, - 399, 399, 399, 414, 399, 652, 652, 652, 652, 652, + 399, 399, 399, 510, 399, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 661, - 662, 661, 661, 882, 399, 661, 661, 661, 661, 661, - 395, 661, 661, 661, 661, 661, 411, 411, 411, 411, + 993, 661, 661, 985, 976, 661, 661, 661, 661, 661, + 975, 661, 661, 661, 661, 661, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - 645, 418, 421, 421, 421, 421, 421, 421, 421, 421, + 944, 418, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, - 511, 511, 511, 511, 511, 511, 516, 516, 516, 516, + 511, 511, 511, 511, 511, 511, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 864, 516, 517, 517, 373, 517, 517, 517, + 516, 516, 934, 516, 517, 517, 922, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 518, 518, 369, 518, 518, 518, 518, 518, + 517, 517, 518, 518, 912, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, - 519, 519, 861, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 431, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 533, 363, 533, 535, 535, 535, 535, 535, 535, + 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 909, 533, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 359, 540, - 266, 266, 858, 266, 266, 266, 266, 266, 266, 266, + 540, 540, 540, 540, 540, 540, 540, 540, 418, 540, + 266, 266, 414, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, - 363, 363, 363, 363, 356, 356, 356, 356, 356, 356, + 363, 363, 363, 363, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 868, 355, 868, 868, - 773, 538, 868, 868, 868, 868, 868, 539, 868, 868, - 868, 868, 868, 868, 871, 531, 871, 871, 532, 514, - 871, 871, 871, 871, 871, 515, 871, 871, 871, 871, + 639, 639, 639, 639, 639, 639, 868, 662, 868, 868, + 882, 399, 868, 868, 868, 868, 868, 395, 868, 868, + 868, 868, 868, 868, 871, 645, 871, 871, 864, 373, + 871, 871, 871, 871, 871, 369, 871, 871, 871, 871, 871, 871, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, - 644, 508, 644, 644, 752, 738, 644, 644, 644, 644, - 644, 479, 644, 644, 644, 644, 644, 399, 399, 399, + 644, 861, 644, 644, 363, 359, 644, 644, 644, 644, + 644, 858, 644, 644, 644, 644, 644, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, - 652, 884, 884, 884, 884, 884, 884, 884, 884, 884, + 652, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 886, - 734, 886, 886, 696, 681, 886, 886, 886, 886, 886, - 437, 886, 886, 886, 886, 886, 886, 657, 657, 657, + 355, 886, 886, 773, 538, 886, 886, 886, 886, 886, + 539, 886, 886, 886, 886, 886, 886, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 661, 428, 661, 661, 414, 417, 661, - 661, 661, 661, 661, 395, 661, 661, 661, 661, 661, + 402, 402, 402, 661, 531, 661, 661, 532, 514, 661, + 661, 661, 661, 661, 515, 661, 661, 661, 661, 661, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, - 659, 659, 659, 659, 659, 659, 659, 659, 418, 418, + 659, 659, 659, 659, 659, 659, 659, 659, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, @@ -3091,8 +3095,8 @@ static const flex_int16_t yy_nxt[14258] = 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 511, 511, - 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, + 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 528, 528, 528, 528, 528, 528, @@ -3101,44 +3105,44 @@ static const flex_int16_t yy_nxt[14258] = 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 266, 266, - 398, 266, 266, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, + 508, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, 868, 390, - 868, 868, 385, 369, 868, 868, 868, 868, 868, 372, - 868, 868, 868, 868, 868, 868, 871, 359, 871, 871, - 362, 351, 871, 871, 871, 871, 871, 592, 871, 871, + 639, 639, 639, 639, 639, 639, 639, 639, 868, 752, + 868, 868, 738, 479, 868, 868, 868, 868, 868, 734, + 868, 868, 868, 868, 868, 868, 871, 696, 871, 871, - 871, 871, 871, 871, 644, 591, 644, 644, 558, 541, - 644, 644, 644, 644, 644, 539, 644, 644, 644, 644, + 681, 437, 871, 871, 871, 871, 871, 428, 871, 871, + 871, 871, 871, 871, 644, 414, 644, 644, 417, 395, + 644, 644, 644, 644, 644, 398, 644, 644, 644, 644, 644, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 886, - 539, 886, 886, 532, 515, 886, 886, 886, 886, 886, - 508, 886, 886, 886, 886, 886, 886, 657, 657, 657, + 390, 886, 886, 385, 369, 886, 886, 886, 886, 886, + 372, 886, 886, 886, 886, 886, 886, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, - 657, 657, 657, 657, 657, 890, 479, 890, 890, 437, - 417, 890, 890, 890, 890, 890, 398, 890, 890, 890, - 890, 890, 890, 884, 884, 884, 884, 884, 884, 884, + 657, 657, 657, 657, 657, 890, 359, 890, 890, 362, + 351, 890, 890, 890, 890, 890, 592, 890, 890, 890, + 890, 890, 890, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 661, - 398, 661, 661, 385, 385, 661, 661, 661, 661, 661, - 385, 661, 661, 661, 661, 661, 402, 402, 402, 402, + 591, 661, 661, 558, 541, 661, 661, 661, 661, 661, + 539, 661, 661, 661, 661, 661, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 421, 421, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, - 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 372, - 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 505, 505, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 539, + 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, @@ -3146,309 +3150,309 @@ static const flex_int16_t yy_nxt[14258] = 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, - 266, 266, 372, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 532, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 363, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 868, 362, 868, 868, 351, 317, 868, 868, - 868, 868, 868, 3926, 868, 868, 868, 868, 868, 868, - 871, 250, 871, 871, 250, 98, 871, 871, 871, 871, - 871, 98, 871, 871, 871, 871, 871, 871, 399, 399, + 639, 639, 868, 515, 868, 868, 508, 479, 868, 868, + 868, 868, 868, 437, 868, 868, 868, 868, 868, 868, + 871, 417, 871, 871, 398, 398, 871, 871, 871, 871, + 871, 385, 871, 871, 871, 871, 871, 871, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, - 399, 399, 399, 399, 399, 399, 886, 98, 886, 886, - 98, 98, 886, 886, 886, 886, 886, 98, 886, 886, + 399, 399, 399, 399, 399, 399, 886, 385, 886, 886, + 385, 372, 886, 886, 886, 886, 886, 372, 886, 886, 886, 886, 886, 886, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, - 887, 887, 661, 98, 661, 661, 98, 161, 661, 661, + 887, 887, 661, 362, 661, 661, 351, 317, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 418, 418, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - 418, 418, 418, 418, 418, 1343, 161, 1343, 1343, 160, - 160, 1343, 1343, 1343, 3926, 1343, 1343, 1343, 1343, 1343, - 1343, 1343, 1343, 1355, 1355, 1355, 1355, 1355, 1355, 1355, - 3926, 1355, 3926, 1355, 1355, 1355, 1355, 1355, 1355, 1355, - 1355, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, - 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 516, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 1345, 3937, 1345, 1345, 250, + 250, 1345, 1345, 1345, 98, 1345, 1345, 1345, 1345, 1345, + 1345, 1345, 1345, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 98, 1357, 98, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + 1357, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, + 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 540, 540, 540, 540, 540, + 533, 533, 533, 533, 533, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 266, 266, 3926, 266, 266, 266, 266, + 540, 540, 540, 266, 266, 98, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 884, 884, 884, 884, 884, 884, 884, 884, 884, - 884, 884, 884, 884, 884, 884, 884, 884, 884, 1519, - 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, - 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1530, 3926, 3926, - 1530, 3926, 3926, 1530, 1570, 3926, 3926, 3926, 3926, 3926, - 1570, 1570, 1570, 3926, 1570, 1570, 1570, 1570, 1570, 1570, - 1570, 1570, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - - 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, - 1717, 3926, 3926, 1717, 3926, 1717, 1754, 1754, 1754, 1754, - 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, - 1754, 1754, 1754, 1754, 1759, 3926, 3926, 1759, 1759, 3926, - 3926, 1759, 3926, 1759, 3926, 1759, 1759, 1759, 1759, 1895, - 1895, 1895, 1895, 1939, 1939, 3926, 1939, 1939, 1939, 1939, - 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, - 1939, 1941, 1941, 3926, 1941, 1941, 1941, 1941, 1941, 1941, - 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1945, - 3926, 1945, 3926, 1945, 1945, 1945, 1945, 2067, 2067, 2067, - - 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, - 2067, 2067, 2067, 2067, 2067, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2170, 2170, 3926, 3926, 2170, 2170, 2170, 2170, 2170, - 3926, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2188, - 3926, 3926, 2188, 2188, 3926, 3926, 2188, 3926, 2188, 3926, - 2188, 2188, 2188, 2188, 2275, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, - - 2275, 2275, 2288, 3926, 2288, 2288, 3926, 3926, 2288, 2288, - 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2323, 3926, - 3926, 3926, 3926, 3926, 2323, 2323, 2323, 3926, 2323, 2323, - 2323, 2323, 2323, 2323, 2323, 2323, 2349, 2349, 3926, 2349, - 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, - 2349, 2349, 2349, 2349, 2351, 2351, 3926, 2351, 2351, 2351, - 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, - 2351, 2351, 2377, 3926, 3926, 2377, 2377, 3926, 3926, 2377, - - 3926, 2377, 3926, 2377, 2377, 2377, 2377, 2390, 3926, 3926, - 3926, 3926, 3926, 2390, 2390, 2390, 3926, 2390, 2390, 2390, - 2390, 2390, 2390, 2390, 2390, 2401, 2401, 3926, 2401, 2401, - 3926, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, - 2401, 2401, 2406, 3926, 2406, 3926, 2406, 2406, 2406, 2406, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2290, 3926, - 2290, 2290, 3926, 3926, 2290, 2290, 2290, 2290, 2290, 2290, - 2290, 2290, 2290, 2290, 2290, 2290, 2550, 2550, 2550, 2550, - 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, - - 2550, 2550, 2550, 2550, 2553, 2553, 2553, 2553, 2553, 2553, - 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, - 2553, 2553, 2561, 3926, 3926, 2561, 2561, 3926, 3926, 2561, - 3926, 2561, 3926, 2561, 2561, 2561, 2561, 2580, 3926, 2580, - 3926, 2580, 2580, 2580, 2580, 2582, 3926, 3926, 2582, 2582, - 3926, 3926, 2582, 3926, 2582, 3926, 2582, 2582, 2582, 2582, - 2614, 2614, 3926, 2614, 2614, 2614, 2614, 2614, 2614, 2614, - 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2681, 3926, 2681, - 2681, 3926, 3926, 2681, 2681, 2681, 2681, 2681, 2681, 2681, - 2681, 2681, 2681, 2681, 2681, 2493, 2493, 2493, 2493, 2493, - - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, - 2493, 2493, 2493, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2696, - 3926, 2696, 2696, 3926, 3926, 2696, 2696, 2696, 2696, 2696, - 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, - - 2082, 2082, 2082, 2349, 2349, 3926, 2349, 2349, 2349, 2349, - 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, - 2349, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, - 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2351, - 2351, 3926, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, - 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2553, 2553, 2553, - 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, - 2553, 2553, 2553, 2553, 2553, 2745, 3926, 2745, 3926, 2745, - 2745, 2745, 2745, 2561, 3926, 2561, 3926, 2561, 2561, 2561, - 2561, 2746, 3926, 3926, 2746, 3926, 3926, 3926, 2746, 3926, - - 2746, 3926, 2746, 2746, 2746, 2746, 2756, 3926, 3926, 2756, - 2756, 3926, 3926, 2756, 3926, 2756, 3926, 2756, 2756, 2756, - 2756, 2580, 3926, 3926, 2580, 3926, 2580, 3926, 2580, 2580, - 2580, 2580, 2765, 3926, 2765, 3926, 2765, 2765, 2765, 2765, - 2582, 3926, 2582, 3926, 2582, 2582, 2582, 2582, 2774, 2774, - 3926, 2774, 2774, 3926, 2774, 2774, 2774, 2774, 2774, 2774, - 2774, 2774, 2774, 2774, 2774, 2794, 3926, 3926, 2794, 2794, - 3926, 3926, 2794, 3926, 2794, 3926, 2794, 2794, 2794, 2794, - 2614, 2614, 3926, 2614, 2614, 3926, 2614, 2614, 2614, 2614, - 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2798, 2798, 2798, - - 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, - 2798, 2798, 2798, 2798, 2798, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2067, 2067, 2067, 2067, 2067, 2067, 2067, - 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, - 2067, 2681, 3926, 2681, 2681, 3926, 3926, 2681, 2681, 2681, - 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2288, - 3926, 2288, 2288, 3926, 3926, 2288, 2288, 2288, 2288, 2288, - 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2858, 2858, 2858, - 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, - - 2858, 2858, 2858, 2858, 2858, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2859, 2859, 2859, 2859, 2859, 2859, 2859, - 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, - 2859, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2290, - 3926, 2290, 2290, 3926, 3926, 2290, 2290, 2290, 2290, 2290, - 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2872, 2872, 2872, - 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, - 2872, 2872, 2872, 2872, 2872, 2495, 2495, 2495, 2495, 2495, - - 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2495, 2495, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2696, 3926, 2696, 2696, 3926, 3926, 2696, 2696, 2696, - 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, - 2082, 2082, 2082, 2082, 2082, 2745, 3926, 3926, 2745, 3926, - 2745, 3926, 2745, 2745, 2745, 2745, 2746, 3926, 2746, 3926, - - 2746, 2746, 2746, 2746, 2932, 3926, 2932, 3926, 2932, 2932, - 2932, 2932, 2756, 3926, 2756, 3926, 2756, 2756, 2756, 2756, - 2765, 3926, 3926, 2765, 3926, 2765, 3926, 2765, 2765, 2765, - 2765, 2774, 2774, 3926, 2774, 2774, 3926, 2774, 2774, 2774, - 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2961, 3926, - 3926, 2961, 2961, 3926, 3926, 2961, 3926, 2961, 3926, 2961, - 2961, 2961, 2961, 2970, 3926, 2970, 3926, 2970, 2970, 2970, - 2970, 2794, 3926, 2794, 3926, 2794, 2794, 2794, 2794, 2798, - 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2798, - 2798, 2798, 2798, 2798, 2798, 2798, 2798, 2275, 2275, 2275, - - 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, - 2275, 2275, 2275, 2275, 2275, 2859, 2859, 2859, 2859, 2859, - 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, - 2859, 2859, 2859, 2861, 2861, 2861, 2861, 2861, 2861, 2861, - 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861, - 2861, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, - 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2493, - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, - 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2290, 3926, 2290, - 2290, 3926, 3926, 2290, 2290, 2290, 2290, 2290, 2290, 2290, - - 2290, 2290, 2290, 2290, 2290, 2872, 2872, 2872, 2872, 2872, - 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, - 2872, 2872, 2872, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, - 2495, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, - 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2293, 2293, 2293, 2293, 2293, 2293, 2293, 3101, 3101, 3926, - 3101, 3101, 3926, 3101, 3101, 3101, 3101, 3101, 3101, 3101, - 3101, 3101, 3101, 3101, 3104, 3926, 3926, 3104, 3104, 3926, - - 3926, 3104, 3926, 3104, 3926, 3104, 3104, 3104, 3104, 3107, - 3107, 3107, 3107, 3926, 3107, 3107, 3107, 3107, 3107, 3107, - 3107, 3107, 3107, 3107, 3107, 3107, 3107, 3121, 3926, 3926, - 3926, 3926, 3926, 3121, 3121, 3121, 3926, 3121, 3121, 3121, - 3121, 3121, 3121, 3121, 3121, 3197, 3197, 3197, 3197, 3197, - 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, - 3197, 3197, 3197, 3240, 3926, 3240, 3926, 3240, 3240, 3240, - 3240, 3261, 3261, 3926, 3261, 3261, 3926, 3261, 3261, 3261, - 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3343, 3926, - 3926, 3343, 3343, 3926, 3926, 3926, 3926, 3926, 3926, 3343, - - 3359, 3359, 3926, 3926, 3926, 3359, 3359, 3359, 3359, 3359, - 3359, 3359, 3359, 3359, 3359, 3359, 3359, 3359, 3463, 3463, - 3926, 3463, 3463, 3926, 3463, 3463, 3463, 3463, 3463, 3463, - 3463, 3463, 3463, 3463, 3463, 3473, 3473, 3926, 3473, 3473, - 3926, 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3473, - 3473, 3473, 3547, 3547, 3926, 3547, 3547, 3547, 3547, 3547, - 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3550, - 3550, 3926, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, - 3550, 3550, 3550, 3550, 3550, 3550, 3594, 3926, 3594, 3926, - 3594, 3926, 3594, 3594, 3594, 3594, 3624, 3624, 3926, 3624, - - 3624, 3926, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, - 3624, 3624, 3624, 3625, 3625, 3926, 3625, 3625, 3926, 3625, - 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, - 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, - 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3662, 3926, - 3662, 3926, 3662, 3926, 3662, 3662, 3662, 3662, 3666, 3666, - 3926, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, - 3666, 3666, 3666, 3666, 3666, 3666, 3677, 3677, 3926, 3677, - 3677, 3926, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, - 3677, 3677, 3677, 3679, 3679, 3926, 3926, 3679, 3679, 3679, - - 3679, 3679, 3926, 3679, 3679, 3679, 3679, 3679, 3679, 3679, - 3679, 3668, 3668, 3926, 3668, 3668, 3926, 3668, 3668, 3668, - 3668, 3668, 3668, 3668, 3668, 3668, 3668, 3668, 3727, 3926, - 3926, 3926, 3926, 3926, 3727, 3727, 3727, 3926, 3727, 3727, - 3727, 3727, 3727, 3727, 3727, 3727, 3670, 3926, 3926, 3926, - 3926, 3926, 3670, 3670, 3670, 3926, 3670, 3670, 3670, 3670, - 3670, 3670, 3670, 3670, 3730, 3926, 3926, 3730, 3730, 3926, - 3926, 3730, 3926, 3730, 3926, 3730, 3730, 3730, 3730, 3733, - 3733, 3926, 3733, 3733, 3926, 3733, 3733, 3733, 3733, 3733, - 3733, 3733, 3733, 3733, 3733, 3733, 3734, 3926, 3926, 3926, - - 3926, 3926, 3734, 3734, 3734, 3926, 3734, 3734, 3734, 3734, - 3734, 3734, 3734, 3734, 3770, 3926, 3770, 3926, 3770, 3770, - 3770, 3770, 3771, 3771, 3926, 3771, 3771, 3926, 3771, 3771, - 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3772, - 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, - 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3816, 3816, 3926, - 3816, 3816, 3926, 3816, 3816, 3816, 3816, 3816, 3816, 3816, - 3816, 3816, 3816, 3816, 3819, 3819, 3926, 3926, 3819, 3819, - 3819, 3819, 3819, 3926, 3819, 3819, 3819, 3819, 3819, 3819, - 3819, 3819, 3821, 3821, 3926, 3926, 3821, 3821, 3821, 3821, - - 3821, 3926, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, - 3848, 3848, 3926, 3848, 3848, 3926, 3848, 3848, 3848, 3848, - 3848, 3848, 3848, 3848, 3848, 3848, 3848, 3849, 3849, 3926, - 3849, 3849, 3926, 3849, 3849, 3849, 3849, 3849, 3849, 3849, - 3849, 3849, 3849, 3849, 3850, 3850, 3926, 3926, 3850, 3850, - 3850, 3850, 3850, 3926, 3850, 3850, 3850, 3850, 3850, 3850, - 3850, 3850, 3852, 3852, 3926, 3926, 3852, 3852, 3852, 3852, - 3852, 3926, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, - 3866, 3926, 3866, 3926, 3866, 3926, 3866, 3866, 3866, 3866, - 3868, 3868, 3926, 3868, 3868, 3868, 3868, 3868, 3868, 3868, - - 3868, 3868, 3868, 3868, 3868, 3868, 3868, 3878, 3878, 3926, - 3878, 3878, 3926, 3878, 3878, 3878, 3878, 3878, 3878, 3878, - 3878, 3878, 3878, 3878, 3879, 3879, 3926, 3879, 3879, 3926, - 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3879, - 3879, 3891, 3926, 3891, 3926, 3891, 3926, 3891, 3891, 3891, - 3891, 3892, 3926, 3926, 3926, 3926, 3926, 3892, 3892, 3892, - 3926, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 75, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926 + 884, 884, 884, 884, 884, 884, 884, 884, 884, 1522, + 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, + 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1533, 98, 98, + 1533, 98, 98, 1533, 1574, 161, 161, 160, 160, 3937, + 1574, 1574, 1574, 3937, 1574, 1574, 1574, 1574, 1574, 1574, + + 1574, 1574, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, + 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523, + 1721, 3937, 3937, 1721, 3937, 1721, 1759, 1759, 1759, 1759, + 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, + 1759, 1759, 1759, 1759, 1764, 3937, 3937, 1764, 1764, 3937, + 3937, 1764, 3937, 1764, 3937, 1764, 1764, 1764, 1764, 1900, + 1900, 1900, 1900, 1945, 1945, 3937, 1945, 1945, 1945, 1945, + 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, + 1945, 1947, 1947, 3937, 1947, 1947, 1947, 1947, 1947, 1947, + 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1951, + + 3937, 1951, 3937, 1951, 1951, 1951, 1951, 2073, 2073, 2073, + 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, + 2073, 2073, 2073, 2073, 2073, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2141, 2141, 2141, 2141, 2141, 2141, 2141, + 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, + 2141, 2177, 2177, 3937, 3937, 2177, 2177, 2177, 2177, 2177, + 3937, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2195, + 3937, 3937, 2195, 2195, 3937, 3937, 2195, 3937, 2195, 3937, + 2195, 2195, 2195, 2195, 2282, 2282, 2282, 2282, 2282, 2282, + + 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2295, 3937, 2295, 2295, 3937, 3937, 2295, 2295, + 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2330, 3937, + 3937, 3937, 3937, 3937, 2330, 2330, 2330, 3937, 2330, 2330, + 2330, 2330, 2330, 2330, 2330, 2330, 2357, 2357, 3937, 2357, + 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, + 2357, 2357, 2357, 2357, 2359, 2359, 3937, 2359, 2359, 2359, + 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, + + 2359, 2359, 2385, 3937, 3937, 2385, 2385, 3937, 3937, 2385, + 3937, 2385, 3937, 2385, 2385, 2385, 2385, 2398, 3937, 3937, + 3937, 3937, 3937, 2398, 2398, 2398, 3937, 2398, 2398, 2398, + 2398, 2398, 2398, 2398, 2398, 2409, 2409, 3937, 2409, 2409, + 3937, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, + 2409, 2409, 2414, 3937, 2414, 3937, 2414, 2414, 2414, 2414, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2297, 3937, + 2297, 2297, 3937, 3937, 2297, 2297, 2297, 2297, 2297, 2297, + 2297, 2297, 2297, 2297, 2297, 2297, 2559, 2559, 2559, 2559, + + 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, + 2559, 2559, 2559, 2559, 2562, 2562, 2562, 2562, 2562, 2562, + 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, + 2562, 2562, 2570, 3937, 3937, 2570, 2570, 3937, 3937, 2570, + 3937, 2570, 3937, 2570, 2570, 2570, 2570, 2589, 3937, 2589, + 3937, 2589, 2589, 2589, 2589, 2591, 3937, 3937, 2591, 2591, + 3937, 3937, 2591, 3937, 2591, 3937, 2591, 2591, 2591, 2591, + 2623, 2623, 3937, 2623, 2623, 2623, 2623, 2623, 2623, 2623, + 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2690, 3937, 2690, + 2690, 3937, 3937, 2690, 2690, 2690, 2690, 2690, 2690, 2690, + + 2690, 2690, 2690, 2690, 2690, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2705, + 3937, 2705, 2705, 3937, 3937, 2705, 2705, 2705, 2705, 2705, + 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2088, 2088, 2088, 2088, 2088, + + 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2357, 2357, 3937, 2357, 2357, 2357, 2357, + 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, + 2357, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, + 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2359, + 2359, 3937, 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2359, + 2359, 2359, 2359, 2359, 2359, 2359, 2359, 2562, 2562, 2562, + 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, + 2562, 2562, 2562, 2562, 2562, 2755, 3937, 2755, 3937, 2755, + 2755, 2755, 2755, 2570, 3937, 2570, 3937, 2570, 2570, 2570, + + 2570, 2756, 3937, 3937, 2756, 3937, 3937, 3937, 2756, 3937, + 2756, 3937, 2756, 2756, 2756, 2756, 2766, 3937, 3937, 2766, + 2766, 3937, 3937, 2766, 3937, 2766, 3937, 2766, 2766, 2766, + 2766, 2589, 3937, 3937, 2589, 3937, 2589, 3937, 2589, 2589, + 2589, 2589, 2775, 3937, 2775, 3937, 2775, 2775, 2775, 2775, + 2591, 3937, 2591, 3937, 2591, 2591, 2591, 2591, 2784, 2784, + 3937, 2784, 2784, 3937, 2784, 2784, 2784, 2784, 2784, 2784, + 2784, 2784, 2784, 2784, 2784, 2804, 3937, 3937, 2804, 2804, + 3937, 3937, 2804, 3937, 2804, 3937, 2804, 2804, 2804, 2804, + 2623, 2623, 3937, 2623, 2623, 3937, 2623, 2623, 2623, 2623, + + 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2808, 2808, 2808, + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, + 2808, 2808, 2808, 2808, 2808, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2282, 2073, 2073, 2073, 2073, 2073, 2073, 2073, + 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, + 2073, 2690, 3937, 2690, 2690, 3937, 3937, 2690, 2690, 2690, + 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2690, 2295, + 3937, 2295, 2295, 3937, 3937, 2295, 2295, 2295, 2295, 2295, + 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2868, 2868, 2868, + + 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868, + 2868, 2868, 2868, 2868, 2868, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2869, 2869, 2869, 2869, 2869, 2869, 2869, + 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, + 2869, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2297, + 3937, 2297, 2297, 3937, 3937, 2297, 2297, 2297, 2297, 2297, + 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2882, 2882, 2882, + 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, + + 2882, 2882, 2882, 2882, 2882, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2705, 3937, 2705, 2705, 3937, 3937, 2705, 2705, 2705, + 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2705, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2088, 2088, 2088, + 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, + 2088, 2088, 2088, 2088, 2088, 2755, 3937, 3937, 2755, 3937, + + 2755, 3937, 2755, 2755, 2755, 2755, 2756, 3937, 2756, 3937, + 2756, 2756, 2756, 2756, 2943, 3937, 2943, 3937, 2943, 2943, + 2943, 2943, 2766, 3937, 2766, 3937, 2766, 2766, 2766, 2766, + 2775, 3937, 3937, 2775, 3937, 2775, 3937, 2775, 2775, 2775, + 2775, 2784, 2784, 3937, 2784, 2784, 3937, 2784, 2784, 2784, + 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2972, 3937, + 3937, 2972, 2972, 3937, 3937, 2972, 3937, 2972, 3937, 2972, + 2972, 2972, 2972, 2981, 3937, 2981, 3937, 2981, 2981, 2981, + 2981, 2804, 3937, 2804, 3937, 2804, 2804, 2804, 2804, 2808, + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, + + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2282, 2282, 2282, + 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, + 2282, 2282, 2282, 2282, 2282, 2869, 2869, 2869, 2869, 2869, + 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, + 2869, 2869, 2869, 2871, 2871, 2871, 2871, 2871, 2871, 2871, + 2871, 2871, 2871, 2871, 2871, 2871, 2871, 2871, 2871, 2871, + 2871, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, + 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, + 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2297, 3937, 2297, + + 2297, 3937, 3937, 2297, 2297, 2297, 2297, 2297, 2297, 2297, + 2297, 2297, 2297, 2297, 2297, 2882, 2882, 2882, 2882, 2882, + 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, 2882, + 2882, 2882, 2882, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, + 2503, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, + 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, + 2300, 2300, 2300, 2300, 2300, 2300, 2300, 3112, 3112, 3937, + 3112, 3112, 3937, 3112, 3112, 3112, 3112, 3112, 3112, 3112, + + 3112, 3112, 3112, 3112, 3115, 3937, 3937, 3115, 3115, 3937, + 3937, 3115, 3937, 3115, 3937, 3115, 3115, 3115, 3115, 3118, + 3118, 3118, 3118, 3937, 3118, 3118, 3118, 3118, 3118, 3118, + 3118, 3118, 3118, 3118, 3118, 3118, 3118, 3132, 3937, 3937, + 3937, 3937, 3937, 3132, 3132, 3132, 3937, 3132, 3132, 3132, + 3132, 3132, 3132, 3132, 3132, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3251, 3937, 3251, 3937, 3251, 3251, 3251, + 3251, 3272, 3272, 3937, 3272, 3272, 3937, 3272, 3272, 3272, + 3272, 3272, 3272, 3272, 3272, 3272, 3272, 3272, 3354, 3937, + + 3937, 3354, 3354, 3937, 3937, 3937, 3937, 3937, 3937, 3354, + 3370, 3370, 3937, 3937, 3937, 3370, 3370, 3370, 3370, 3370, + 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3474, 3474, + 3937, 3474, 3474, 3937, 3474, 3474, 3474, 3474, 3474, 3474, + 3474, 3474, 3474, 3474, 3474, 3484, 3484, 3937, 3484, 3484, + 3937, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, + 3484, 3484, 3558, 3558, 3937, 3558, 3558, 3558, 3558, 3558, + 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3561, + 3561, 3937, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, + 3561, 3561, 3561, 3561, 3561, 3561, 3605, 3937, 3605, 3937, + + 3605, 3937, 3605, 3605, 3605, 3605, 3635, 3635, 3937, 3635, + 3635, 3937, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3636, 3636, 3937, 3636, 3636, 3937, 3636, + 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, + 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, + 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3673, 3937, + 3673, 3937, 3673, 3937, 3673, 3673, 3673, 3673, 3677, 3677, + 3937, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, + 3677, 3677, 3677, 3677, 3677, 3677, 3688, 3688, 3937, 3688, + 3688, 3937, 3688, 3688, 3688, 3688, 3688, 3688, 3688, 3688, + + 3688, 3688, 3688, 3690, 3690, 3937, 3937, 3690, 3690, 3690, + 3690, 3690, 3937, 3690, 3690, 3690, 3690, 3690, 3690, 3690, + 3690, 3679, 3679, 3937, 3679, 3679, 3937, 3679, 3679, 3679, + 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3738, 3937, + 3937, 3937, 3937, 3937, 3738, 3738, 3738, 3937, 3738, 3738, + 3738, 3738, 3738, 3738, 3738, 3738, 3681, 3937, 3937, 3937, + 3937, 3937, 3681, 3681, 3681, 3937, 3681, 3681, 3681, 3681, + 3681, 3681, 3681, 3681, 3741, 3937, 3937, 3741, 3741, 3937, + 3937, 3741, 3937, 3741, 3937, 3741, 3741, 3741, 3741, 3744, + 3744, 3937, 3744, 3744, 3937, 3744, 3744, 3744, 3744, 3744, + + 3744, 3744, 3744, 3744, 3744, 3744, 3745, 3937, 3937, 3937, + 3937, 3937, 3745, 3745, 3745, 3937, 3745, 3745, 3745, 3745, + 3745, 3745, 3745, 3745, 3781, 3937, 3781, 3937, 3781, 3781, + 3781, 3781, 3782, 3782, 3937, 3782, 3782, 3937, 3782, 3782, + 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3783, + 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, + 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3827, 3827, 3937, + 3827, 3827, 3937, 3827, 3827, 3827, 3827, 3827, 3827, 3827, + 3827, 3827, 3827, 3827, 3830, 3830, 3937, 3937, 3830, 3830, + 3830, 3830, 3830, 3937, 3830, 3830, 3830, 3830, 3830, 3830, + + 3830, 3830, 3832, 3832, 3937, 3937, 3832, 3832, 3832, 3832, + 3832, 3937, 3832, 3832, 3832, 3832, 3832, 3832, 3832, 3832, + 3859, 3859, 3937, 3859, 3859, 3937, 3859, 3859, 3859, 3859, + 3859, 3859, 3859, 3859, 3859, 3859, 3859, 3860, 3860, 3937, + 3860, 3860, 3937, 3860, 3860, 3860, 3860, 3860, 3860, 3860, + 3860, 3860, 3860, 3860, 3861, 3861, 3937, 3937, 3861, 3861, + 3861, 3861, 3861, 3937, 3861, 3861, 3861, 3861, 3861, 3861, + 3861, 3861, 3863, 3863, 3937, 3937, 3863, 3863, 3863, 3863, + 3863, 3937, 3863, 3863, 3863, 3863, 3863, 3863, 3863, 3863, + 3877, 3937, 3877, 3937, 3877, 3937, 3877, 3877, 3877, 3877, + + 3879, 3879, 3937, 3879, 3879, 3879, 3879, 3879, 3879, 3879, + 3879, 3879, 3879, 3879, 3879, 3879, 3879, 3889, 3889, 3937, + 3889, 3889, 3937, 3889, 3889, 3889, 3889, 3889, 3889, 3889, + 3889, 3889, 3889, 3889, 3890, 3890, 3937, 3890, 3890, 3937, + 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, + 3890, 3902, 3937, 3902, 3937, 3902, 3937, 3902, 3902, 3902, + 3902, 3903, 3937, 3937, 3937, 3937, 3937, 3903, 3903, 3903, + 3937, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 75, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937 } ; -static const flex_int16_t yy_chk[14258] = +static const flex_int16_t yy_chk[14268] = { 0, 0, 1, 1, 1, 1, 5, 1, 1, 5, 6, 95, 95, 6, 0, 1, 7, 7, 7, 7, 7, - 7, 0, 9, 9, 7, 9, 9, 13, 7, 1188, - 1, 13, 1, 1, 3904, 83, 13, 1, 1, 1, - 116, 116, 14, 1, 1, 1, 14, 1, 1, 3892, + 7, 0, 9, 9, 7, 9, 9, 13, 7, 1190, + 1, 13, 1, 1, 3915, 83, 13, 1, 1, 1, + 116, 116, 14, 1, 1, 1, 14, 1, 1, 3903, 9, 14, 1, 873, 15, 15, 1, 15, 1, 873, 1, 1, 15, 83, 15, 1, 1, 1, 71, 84, - 7, 1, 1, 1, 1188, 1, 1, 9, 132, 132, + 7, 1, 1, 1, 1190, 1, 1, 9, 132, 132, 1, 2, 2, 2, 2, 71, 2, 2, 10, 10, 72, 10, 10, 85, 2, 21, 21, 84, 21, 7, 7, 86, 11, 11, 49, 11, 11, 72, 49, 15, - 2, 49, 2, 2, 87, 3879, 10, 2, 2, 2, + 2, 49, 2, 2, 87, 3890, 10, 2, 2, 2, 88, 85, 773, 2, 2, 2, 89, 2, 2, 86, 11, 92, 2, 250, 118, 250, 2, 118, 2, 773, - 2, 2, 87, 10, 3878, 2, 2, 2, 88, 3868, + 2, 2, 87, 10, 3889, 2, 2, 2, 88, 3879, 21, 2, 2, 2, 89, 2, 2, 11, 49, 92, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -3461,8 +3465,8 @@ static const flex_int16_t yy_chk[14258] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 8, 8, 8, 8, 8, 93, 12, 12, 8, 12, 12, - 3849, 8, 16, 16, 2288, 16, 17, 17, 3848, 17, - 16, 17, 16, 47, 17, 47, 18, 18, 2288, 18, + 3860, 8, 16, 16, 2295, 16, 17, 17, 3859, 17, + 16, 17, 16, 47, 17, 47, 18, 18, 2295, 18, 47, 18, 93, 12, 18, 19, 19, 137, 19, 137, 19, 20, 20, 19, 20, 257, 20, 257, 19, 20, @@ -3470,12 +3474,12 @@ static const flex_int16_t yy_chk[14258] = 12, 220, 81, 297, 90, 33, 33, 16, 33, 100, 33, 17, 90, 33, 297, 27, 27, 47, 27, 94, 27, 18, 8, 8, 137, 27, 35, 35, 27, 35, - 19, 27, 90, 3839, 35, 91, 20, 100, 28, 28, + 19, 27, 90, 3850, 35, 91, 20, 100, 28, 28, 90, 28, 27, 28, 48, 101, 81, 139, 28, 139, 22, 28, 91, 388, 28, 220, 29, 29, 104, 29, - 33, 29, 3809, 91, 29, 28, 29, 107, 143, 29, - 27, 143, 29, 101, 30, 30, 3807, 30, 108, 30, - 91, 35, 30, 29, 30, 3803, 104, 30, 36, 36, + 33, 29, 3820, 91, 29, 28, 29, 107, 143, 29, + 27, 143, 29, 101, 30, 30, 3818, 30, 108, 30, + 91, 35, 30, 29, 30, 3814, 104, 30, 36, 36, 30, 36, 388, 28, 139, 107, 36, 213, 213, 27, 27, 30, 223, 223, 31, 31, 108, 31, 109, 31, @@ -3485,10 +3489,10 @@ static const flex_int16_t yy_chk[14258] = 34, 32, 34, 36, 34, 114, 65, 34, 39, 39, 39, 39, 32, 39, 115, 40, 40, 40, 40, 31, 40, 39, 105, 140, 105, 45, 196, 219, 40, 196, - 219, 46, 219, 114, 65, 195, 195, 195, 195, 3802, - 32, 225, 115, 3795, 225, 226, 226, 265, 265, 97, + 219, 46, 219, 114, 65, 195, 195, 195, 195, 3813, + 32, 225, 115, 3806, 225, 226, 226, 265, 265, 97, - 105, 140, 105, 3773, 34, 37, 37, 37, 37, 37, + 105, 140, 105, 3784, 34, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, @@ -3499,58 +3503,58 @@ static const flex_int16_t yy_chk[14258] = 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 41, 41, 41, 41, 147, 41, 42, 42, - 42, 42, 153, 42, 43, 43, 43, 43, 3770, 43, + 42, 42, 153, 42, 43, 43, 43, 43, 3781, 43, 44, 44, 44, 44, 50, 44, 102, 66, 50, 59, 66, 50, 286, 286, 147, 66, 73, 60, 102, 73, 153, 73, 129, 74, 73, 129, 74, 283, 74, 66, 283, 74, 315, 318, 102, 315, 318, 41, 73, 185, 59, 67, 59, 42, 185, 74, 102, 173, 60, 43, - 60, 59, 59, 59, 59, 44, 2693, 66, 50, 60, + 60, 59, 59, 59, 59, 44, 2702, 66, 50, 60, 60, 60, 60, 68, 77, 77, 73, 77, 59, 348, 59, 183, 67, 74, 67, 173, 60, 129, 60, 59, 59, 59, 59, 67, 67, 67, 67, 60, 60, 60, - 60, 185, 99, 484, 68, 99, 68, 103, 2693, 183, + 60, 185, 99, 484, 68, 99, 68, 103, 2702, 183, 67, 106, 67, 111, 103, 68, 68, 68, 68, 189, - 110, 67, 67, 67, 67, 106, 348, 3761, 111, 77, + 110, 67, 67, 67, 67, 106, 348, 3772, 111, 77, 99, 106, 68, 99, 68, 103, 110, 112, 177, 106, - 177, 111, 103, 68, 68, 68, 68, 189, 110, 3734, + 177, 111, 103, 68, 68, 68, 68, 189, 110, 3745, 113, 309, 112, 106, 113, 113, 111, 484, 145, 106, - 198, 145, 309, 2860, 110, 112, 119, 119, 119, 119, + 198, 145, 309, 2870, 110, 112, 119, 119, 119, 119, 201, 119, 120, 120, 120, 120, 179, 120, 113, 179, 112, 177, 113, 113, 121, 121, 121, 121, 198, 121, 126, 126, 126, 126, 199, 126, 203, 133, 201, 138, - 133, 199, 138, 142, 142, 2860, 187, 138, 145, 138, + 133, 199, 138, 142, 142, 2870, 187, 138, 145, 138, 142, 187, 142, 199, 133, 133, 148, 148, 436, 436, 148, 119, 199, 148, 203, 133, 179, 120, 133, 199, - 144, 156, 156, 144, 156, 144, 3727, 181, 144, 121, + 144, 156, 156, 144, 156, 144, 3738, 181, 144, 121, 181, 199, 133, 133, 205, 126, 131, 131, 131, 131, 131, 131, 208, 131, 138, 211, 131, 142, 187, 405, 131, 149, 131, 131, 149, 131, 131, 131, 188, 149, 148, 188, 205, 642, 131, 131, 131, 131, 131, 131, - 208, 131, 3698, 211, 131, 144, 156, 181, 131, 151, + 208, 131, 3709, 211, 131, 144, 156, 181, 131, 151, 131, 131, 151, 131, 131, 131, 150, 151, 405, 150, 494, 150, 157, 157, 150, 157, 155, 155, 200, 150, 155, 149, 642, 155, 159, 159, 159, 159, 155, 162, 162, 200, 162, 188, 162, 166, 166, 212, 166, 346, - 166, 346, 162, 876, 380, 3696, 200, 380, 166, 151, - 169, 166, 3660, 169, 210, 169, 162, 210, 169, 200, - 435, 150, 166, 435, 494, 212, 2873, 157, 167, 167, + 166, 346, 162, 876, 380, 3707, 200, 380, 166, 151, + 169, 166, 3671, 169, 210, 169, 162, 210, 169, 200, + 435, 150, 166, 435, 494, 212, 2883, 157, 167, 167, 155, 167, 169, 167, 868, 168, 168, 230, 168, 159, - 168, 167, 876, 202, 162, 210, 346, 1389, 168, 186, + 168, 167, 876, 202, 162, 210, 346, 1392, 168, 186, 166, 170, 186, 202, 170, 167, 170, 186, 206, 170, - 169, 170, 168, 3655, 170, 230, 206, 171, 2873, 235, + 169, 170, 168, 3666, 170, 230, 206, 171, 2883, 235, 171, 202, 171, 162, 162, 171, 904, 359, 170, 166, 166, 202, 224, 167, 414, 224, 206, 224, 174, 171, - 168, 174, 1389, 174, 206, 176, 174, 235, 176, 174, - 176, 243, 868, 176, 186, 176, 170, 498, 176, 2063, - 174, 2063, 167, 167, 178, 178, 521, 171, 178, 168, + 168, 174, 1392, 174, 206, 176, 174, 235, 176, 174, + 176, 243, 868, 176, 186, 176, 170, 498, 176, 2069, + 174, 2069, 167, 167, 178, 178, 521, 171, 178, 168, 168, 178, 176, 178, 359, 180, 178, 521, 180, 243, - 180, 414, 244, 180, 3629, 184, 184, 224, 174, 184, - 178, 3625, 184, 904, 190, 190, 190, 486, 486, 197, + 180, 414, 244, 180, 3640, 184, 184, 224, 174, 184, + 178, 3636, 184, 904, 190, 190, 190, 486, 486, 197, 176, 190, 192, 192, 192, 192, 204, 245, 197, 209, 244, 498, 197, 209, 207, 192, 246, 197, 178, 209, @@ -3561,7 +3565,7 @@ static const flex_int16_t yy_chk[14258] = 214, 214, 214, 214, 217, 217, 217, 217, 218, 218, 218, 218, 227, 218, 221, 221, 221, 221, 247, 221, 222, 222, 222, 222, 236, 222, 248, 236, 251, 253, - 228, 251, 260, 2064, 254, 2064, 251, 254, 231, 269, + 228, 251, 260, 2070, 254, 2070, 251, 254, 231, 269, 232, 423, 254, 270, 258, 233, 247, 258, 267, 258, 251, 267, 258, 271, 248, 214, 254, 253, 272, 217, @@ -3577,13 +3581,13 @@ static const flex_int16_t yy_chk[14258] = 301, 302, 313, 314, 323, 327, 303, 323, 327, 323, 304, 305, 507, 307, 304, 325, 304, 308, 325, 310, - 325, 306, 306, 328, 329, 311, 312, 330, 332, 3624, + 325, 306, 306, 328, 329, 311, 312, 330, 332, 3635, 313, 314, 319, 319, 319, 319, 886, 319, 320, 320, 320, 320, 335, 320, 321, 321, 321, 321, 333, 321, 331, 328, 329, 331, 336, 330, 332, 335, 337, 507, - 327, 338, 333, 333, 334, 1115, 334, 339, 340, 341, - 335, 1115, 340, 342, 344, 337, 333, 442, 331, 345, - 337, 331, 336, 345, 745, 335, 337, 319, 3584, 338, + 327, 338, 333, 333, 334, 1116, 334, 339, 340, 341, + 335, 1116, 340, 342, 344, 337, 333, 442, 331, 345, + 337, 331, 336, 345, 745, 335, 337, 319, 3595, 338, 333, 333, 334, 320, 334, 339, 340, 341, 343, 321, 340, 342, 344, 337, 886, 442, 349, 345, 337, 349, @@ -3592,76 +3596,76 @@ static const flex_int16_t yy_chk[14258] = 353, 354, 356, 362, 360, 356, 362, 360, 745, 360, 343, 343, 360, 361, 361, 363, 364, 514, 363, 364, 361, 364, 365, 443, 364, 366, 365, 369, 366, 365, - 2265, 349, 2265, 366, 372, 370, 351, 372, 370, 3034, + 2272, 349, 2272, 366, 372, 370, 351, 372, 370, 3045, 370, 350, 355, 370, 441, 353, 354, 441, 370, 371, 371, 443, 356, 362, 373, 374, 371, 373, 374, 360, 374, 371, 373, 374, 514, 363, 375, 361, 374, 444, 375, 364, 524, 375, 411, 366, 365, 411, 375, 376, - 376, 3034, 376, 524, 372, 377, 377, 445, 377, 398, + 376, 3045, 376, 524, 372, 377, 377, 445, 377, 398, 370, 379, 379, 379, 379, 381, 381, 444, 381, 384, - 384, 446, 384, 371, 373, 1108, 382, 382, 398, 382, + 384, 446, 384, 371, 373, 1109, 382, 382, 398, 382, 374, 382, 384, 395, 474, 445, 395, 474, 395, 382, 375, 395, 386, 386, 411, 386, 384, 386, 447, 446, - 2616, 416, 416, 382, 376, 386, 398, 2798, 416, 448, + 2625, 416, 416, 382, 376, 386, 398, 2808, 416, 448, 377, 488, 387, 387, 488, 387, 379, 387, 483, 386, 381, 483, 421, 483, 384, 387, 447, 421, 387, 389, 389, 382, 389, 395, 389, 390, 390, 448, 390, 387, - 390, 391, 389, 1108, 391, 389, 391, 386, 390, 391, + 390, 391, 389, 1109, 391, 389, 391, 386, 390, 391, - 2616, 426, 426, 384, 384, 416, 389, 2798, 426, 428, + 2625, 426, 426, 384, 384, 416, 389, 2808, 426, 428, 382, 382, 390, 391, 428, 394, 403, 387, 394, 403, - 394, 403, 449, 394, 421, 396, 386, 386, 396, 2266, - 396, 2266, 403, 396, 389, 396, 3568, 394, 396, 417, + 394, 403, 449, 394, 421, 396, 386, 386, 396, 2273, + 396, 2273, 403, 396, 389, 396, 3579, 394, 396, 417, 390, 391, 417, 403, 397, 397, 387, 387, 397, 562, - 449, 397, 396, 397, 399, 426, 397, 399, 3550, 399, + 449, 397, 396, 397, 399, 426, 397, 399, 3561, 399, 562, 428, 399, 389, 389, 394, 427, 427, 427, 390, 390, 403, 425, 427, 401, 425, 399, 401, 402, 401, 396, 402, 401, 402, 401, 565, 402, 401, 402, 417, 418, 402, 487, 418, 402, 487, 565, 487, 397, 403, - 403, 401, 451, 420, 399, 402, 1319, 420, 404, 406, - 420, 404, 406, 404, 406, 3547, 404, 406, 404, 406, + 403, 401, 451, 420, 399, 402, 1321, 420, 404, 406, + 420, 404, 406, 404, 406, 3558, 404, 406, 404, 406, 427, 404, 406, 415, 404, 406, 415, 425, 415, 401, 451, 415, 857, 402, 409, 404, 406, 409, 431, 409, 418, 410, 409, 431, 409, 410, 419, 409, 410, 419, 410, 419, 424, 410, 419, 424, 495, 420, 401, 495, - 424, 409, 402, 404, 406, 429, 1328, 410, 429, 430, - 3520, 430, 454, 429, 1319, 455, 430, 456, 415, 857, + 424, 409, 402, 404, 406, 429, 1330, 410, 429, 430, + 3531, 430, 454, 429, 1321, 455, 430, 456, 415, 857, 452, 432, 432, 432, 432, 438, 438, 438, 438, 409, 431, 452, 404, 406, 432, 410, 450, 457, 450, 458, 454, 419, 450, 455, 459, 456, 460, 424, 452, 462, 463, 462, 464, 465, 466, 459, 467, 468, 467, 452, 429, 469, 464, 430, 450, 457, 450, 458, 471, 472, - 450, 465, 459, 1328, 460, 1323, 432, 462, 463, 462, + 450, 465, 459, 1330, 460, 1325, 432, 462, 463, 462, 464, 465, 466, 459, 467, 468, 467, 473, 489, 469, - 464, 489, 500, 489, 1326, 500, 471, 472, 3515, 465, + 464, 489, 500, 489, 1328, 500, 471, 472, 3526, 465, 470, 470, 493, 470, 505, 493, 470, 493, 470, 505, 470, 470, 470, 520, 470, 473, 470, 470, 470, 470, 476, 476, 476, 476, 480, 480, 480, 480, 470, 470, 497, 470, 508, 497, 470, 497, 470, 508, 470, 470, - 470, 520, 470, 1323, 470, 470, 470, 470, 481, 481, + 470, 520, 470, 1325, 470, 470, 470, 470, 481, 481, 481, 481, 482, 482, 482, 482, 505, 482, 485, 485, - 485, 485, 1326, 485, 491, 491, 491, 491, 2800, 491, + 485, 485, 1328, 485, 491, 491, 491, 491, 2810, 491, 522, 492, 492, 492, 492, 476, 492, 499, 502, 480, 499, 502, 499, 503, 508, 510, 503, 523, 503, 511, - 510, 515, 511, 516, 515, 525, 516, 532, 522, 2137, - 2137, 531, 528, 481, 531, 528, 542, 482, 557, 531, - 528, 557, 543, 485, 533, 523, 532, 533, 2800, 491, + 510, 515, 511, 516, 515, 525, 516, 532, 522, 2144, + 2144, 531, 528, 481, 531, 528, 542, 482, 557, 531, + 528, 557, 543, 485, 533, 523, 532, 533, 2810, 491, 544, 545, 533, 525, 528, 535, 492, 539, 535, 539, - 535, 1575, 499, 535, 542, 546, 533, 510, 547, 511, + 535, 1579, 499, 535, 542, 546, 533, 510, 547, 511, 543, 515, 538, 516, 532, 538, 539, 535, 544, 545, 538, 531, 528, 548, 540, 550, 551, 540, 552, 540, 553, 555, 540, 546, 533, 556, 547, 558, 559, 560, - 558, 561, 563, 564, 539, 535, 540, 590, 566, 2975, - 590, 548, 567, 550, 551, 1575, 552, 568, 553, 555, - 570, 571, 538, 556, 3504, 3494, 559, 560, 572, 561, + 558, 561, 563, 564, 539, 535, 540, 590, 566, 2986, + 590, 548, 567, 550, 551, 1579, 552, 568, 553, 555, + 570, 571, 538, 556, 3515, 3505, 559, 560, 572, 561, 563, 564, 573, 574, 540, 554, 566, 554, 554, 575, - 567, 554, 554, 554, 576, 568, 3492, 554, 570, 571, - 554, 579, 554, 554, 554, 554, 572, 554, 554, 2975, + 567, 554, 554, 554, 576, 568, 3503, 554, 570, 571, + 554, 579, 554, 554, 554, 554, 572, 554, 554, 2986, 573, 574, 580, 554, 581, 554, 554, 575, 577, 554, 554, 554, 576, 578, 578, 554, 582, 583, 554, 579, @@ -3673,1334 +3677,1335 @@ static const flex_int16_t yy_chk[14258] = 615, 598, 616, 617, 618, 599, 600, 588, 602, 603, 619, 606, 607, 620, 626, 620, 608, 626, 609, 869, 610, 611, 612, 613, 646, 869, 623, 614, 615, 623, - 616, 617, 618, 3473, 623, 646, 623, 624, 619, 637, + 616, 617, 618, 3484, 623, 646, 623, 624, 619, 637, 624, 629, 637, 640, 629, 624, 629, 624, 630, 629, 655, 630, 638, 630, 632, 638, 630, 632, 635, 645, - 620, 635, 632, 635, 626, 636, 635, 3428, 636, 645, + 620, 635, 632, 635, 626, 636, 635, 3439, 636, 645, 636, 635, 645, 636, 639, 639, 860, 639, 636, 639, 674, 623, 640, 649, 682, 895, 649, 639, 649, 655, 639, 649, 624, 869, 641, 641, 629, 641, 683, 641, - 684, 639, 3421, 630, 632, 649, 669, 641, 674, 669, + 684, 639, 3432, 630, 632, 649, 669, 641, 674, 669, 641, 640, 682, 635, 643, 643, 899, 643, 655, 643, 636, 641, 679, 860, 895, 679, 683, 643, 684, 639, - 643, 3389, 662, 649, 647, 647, 1391, 647, 685, 647, + 643, 3400, 662, 649, 647, 647, 1394, 647, 685, 647, - 645, 643, 662, 3326, 663, 662, 686, 647, 653, 641, + 645, 643, 662, 3337, 663, 662, 686, 647, 653, 641, 647, 653, 663, 653, 687, 899, 669, 652, 639, 639, - 652, 647, 652, 663, 653, 652, 685, 652, 3308, 643, + 652, 647, 652, 663, 653, 652, 685, 652, 3319, 643, 652, 675, 688, 652, 686, 653, 675, 679, 641, 641, - 654, 1391, 687, 654, 652, 654, 3292, 690, 654, 647, - 654, 663, 691, 654, 692, 3286, 654, 693, 643, 643, + 654, 1394, 687, 654, 652, 654, 3303, 690, 654, 647, + 654, 663, 691, 654, 692, 3297, 654, 693, 643, 643, 688, 656, 694, 653, 656, 695, 656, 654, 697, 656, 698, 656, 652, 662, 656, 690, 754, 656, 647, 647, - 691, 754, 692, 675, 664, 693, 3284, 664, 656, 664, + 691, 754, 692, 675, 664, 693, 3295, 664, 656, 664, 694, 653, 653, 695, 657, 654, 697, 657, 698, 657, - 664, 652, 657, 733, 657, 699, 733, 657, 3278, 658, - 657, 664, 658, 701, 658, 1938, 656, 658, 702, 658, + 664, 652, 657, 733, 657, 699, 733, 657, 3289, 658, + 657, 664, 658, 701, 658, 1944, 656, 658, 702, 658, 734, 657, 658, 734, 654, 658, 672, 659, 754, 672, - 659, 672, 659, 699, 672, 659, 658, 659, 3240, 664, - 659, 701, 2268, 659, 2268, 656, 702, 660, 673, 657, + 659, 672, 659, 699, 672, 659, 658, 659, 3251, 664, + 659, 701, 2275, 659, 2275, 656, 702, 660, 673, 657, 660, 673, 660, 673, 659, 660, 673, 660, 678, 905, - 660, 678, 665, 660, 658, 665, 678, 665, 664, 1938, - 665, 3206, 665, 735, 660, 665, 735, 680, 665, 703, + 660, 678, 665, 660, 658, 665, 678, 665, 664, 1944, + 665, 3217, 665, 735, 660, 665, 735, 680, 665, 703, 680, 672, 659, 737, 705, 680, 737, 666, 706, 665, 666, 707, 666, 658, 708, 666, 667, 666, 905, 667, 666, 667, 660, 673, 667, 736, 667, 703, 736, 667, 736, 659, 705, 678, 666, 709, 706, 665, 823, 707, 710, 712, 708, 667, 714, 715, 696, 716, 717, 823, - 3169, 660, 680, 696, 696, 696, 696, 696, 696, 696, + 3180, 660, 680, 696, 696, 696, 696, 696, 696, 696, 696, 696, 666, 709, 713, 719, 665, 721, 710, 712, 720, 667, 714, 715, 723, 716, 717, 713, 713, 722, - 713, 713, 718, 724, 718, 720, 725, 726, 718, 722, - 727, 728, 713, 719, 2471, 721, 2471, 732, 720, 727, - 740, 743, 723, 740, 743, 713, 713, 722, 713, 713, - 718, 724, 718, 720, 725, 726, 718, 722, 727, 728, - - 729, 1695, 729, 738, 729, 732, 738, 727, 738, 739, - 741, 753, 739, 741, 739, 741, 744, 746, 761, 744, - 746, 744, 746, 747, 748, 762, 747, 748, 729, 748, - 729, 750, 729, 763, 750, 751, 750, 752, 751, 753, - 752, 758, 752, 764, 758, 3047, 761, 766, 774, 775, - 766, 770, 776, 762, 770, 766, 770, 777, 778, 770, - 780, 763, 781, 3156, 782, 783, 784, 790, 1695, 766, - 787, 764, 3151, 770, 787, 786, 774, 775, 787, 791, - 776, 785, 786, 792, 795, 777, 778, 3047, 780, 786, - 781, 758, 782, 783, 784, 790, 785, 766, 787, 785, - - 788, 770, 787, 786, 789, 793, 787, 791, 797, 785, - 786, 792, 795, 798, 788, 794, 788, 786, 796, 799, - 796, 793, 801, 789, 785, 801, 802, 785, 788, 804, - 794, 806, 789, 793, 809, 810, 797, 802, 811, 3121, - 812, 798, 788, 794, 788, 813, 796, 799, 796, 793, - 814, 789, 815, 817, 818, 819, 820, 804, 794, 806, - 821, 822, 809, 810, 824, 825, 811, 802, 812, 826, - 828, 829, 831, 813, 830, 832, 834, 835, 814, 834, - 815, 817, 818, 819, 820, 830, 836, 837, 821, 822, - 838, 839, 824, 825, 840, 841, 830, 826, 828, 829, - - 831, 842, 843, 832, 844, 835, 846, 847, 848, 849, - 850, 851, 852, 853, 836, 837, 848, 854, 838, 839, - 855, 856, 840, 841, 830, 858, 908, 858, 861, 842, - 843, 861, 844, 3107, 846, 847, 848, 849, 850, 851, - 852, 853, 3198, 859, 848, 854, 859, 862, 855, 856, - 862, 859, 862, 859, 863, 862, 870, 864, 865, 863, - 864, 865, 866, 865, 874, 866, 865, 870, 882, 915, - 911, 865, 858, 908, 3061, 874, 867, 867, 861, 867, - 881, 867, 1520, 881, 3198, 881, 867, 882, 881, 867, - 916, 977, 867, 978, 977, 917, 978, 915, 859, 888, - - 1318, 863, 862, 867, 3059, 888, 3134, 864, 914, 872, - 872, 914, 872, 865, 872, 882, 883, 911, 916, 883, - 3057, 883, 872, 917, 883, 872, 883, 1520, 912, 883, - 881, 867, 883, 912, 909, 870, 872, 909, 918, 1318, - 889, 884, 885, 883, 884, 885, 884, 885, 889, 884, - 885, 884, 885, 919, 884, 885, 3134, 884, 885, 889, - 867, 867, 887, 914, 872, 887, 918, 887, 884, 885, - 887, 883, 887, 888, 891, 887, 996, 891, 887, 891, - 912, 919, 980, 920, 909, 980, 921, 889, 3053, 887, - 891, 924, 3044, 872, 872, 913, 884, 885, 913, 925, - - 883, 891, 1329, 913, 893, 892, 928, 893, 892, 893, - 892, 920, 3036, 892, 921, 892, 889, 887, 892, 924, - 893, 892, 3507, 996, 3507, 884, 885, 925, 998, 891, - 894, 893, 892, 894, 928, 894, 3027, 931, 894, 896, - 894, 1329, 896, 894, 896, 1114, 894, 896, 898, 896, - 913, 898, 896, 898, 932, 896, 898, 894, 891, 893, - 892, 2138, 2138, 3017, 897, 931, 896, 897, 900, 897, - 898, 900, 897, 900, 897, 998, 900, 897, 910, 2976, - 897, 910, 932, 910, 1114, 894, 910, 893, 933, 892, - 900, 897, 981, 935, 896, 981, 906, 907, 898, 906, - - 907, 906, 907, 922, 906, 907, 906, 907, 922, 906, - 907, 983, 906, 1114, 983, 2138, 933, 2974, 900, 897, - 922, 935, 936, 906, 907, 979, 986, 2970, 979, 986, - 979, 922, 2932, 910, 937, 939, 922, 929, 929, 929, - 929, 929, 929, 929, 929, 929, 940, 941, 922, 942, - 936, 906, 907, 930, 930, 930, 930, 930, 930, 930, - 930, 930, 937, 939, 943, 945, 946, 947, 948, 949, - 950, 951, 953, 952, 940, 941, 952, 942, 954, 955, - 906, 956, 957, 958, 959, 960, 961, 962, 963, 966, - 2894, 968, 943, 945, 946, 947, 948, 949, 950, 951, - - 953, 965, 969, 970, 952, 965, 954, 955, 971, 956, - 957, 958, 959, 960, 961, 962, 963, 966, 967, 968, - 972, 967, 973, 976, 989, 991, 1000, 989, 991, 965, - 969, 970, 982, 965, 2883, 982, 971, 982, 984, 985, - 997, 984, 985, 984, 985, 997, 967, 1001, 972, 967, - 973, 976, 987, 990, 1000, 987, 990, 987, 990, 992, - 993, 1002, 992, 993, 992, 994, 995, 1003, 994, 995, - 994, 999, 1005, 1004, 999, 1001, 1004, 1006, 1003, 1007, - 1006, 1004, 1006, 1011, 1012, 1006, 1014, 1015, 1016, 1002, - 1017, 1005, 997, 3586, 1018, 3586, 1019, 1020, 1007, 2882, - - 1021, 1022, 1023, 1024, 1025, 1025, 1025, 1025, 1026, 1027, - 1028, 1011, 1012, 1027, 1014, 1015, 1016, 1029, 1017, 1005, - 1030, 999, 1018, 1004, 1019, 1020, 1007, 1006, 1021, 1022, - 1023, 1024, 1025, 1025, 1025, 1025, 1026, 1027, 1028, 1031, - 1032, 1027, 1033, 1034, 1035, 1029, 1036, 1037, 1030, 1038, - 1039, 1037, 1040, 1037, 1039, 1041, 1042, 1043, 1044, 1045, - 1046, 2866, 1049, 1050, 1052, 1051, 1053, 1031, 1032, 1040, - 1033, 1034, 1035, 1054, 1036, 1037, 1051, 1038, 1039, 1037, - 1040, 1037, 1039, 1041, 1042, 1043, 1044, 1045, 1046, 1048, - 1049, 1050, 1052, 1048, 1053, 1055, 1056, 1040, 1057, 1058, - - 1048, 1054, 1048, 1059, 1060, 1062, 1051, 1063, 1064, 1065, - 1066, 1068, 1069, 1070, 2865, 1190, 1072, 1048, 1190, 1073, - 1075, 1048, 1076, 1055, 1056, 1077, 1057, 1058, 1048, 2856, - 1048, 1059, 1060, 1062, 1078, 1063, 1064, 1065, 1066, 1068, - 1069, 1070, 1071, 1071, 1072, 1079, 1071, 1073, 1075, 1080, - 1076, 1071, 1081, 1077, 1082, 1083, 1084, 1071, 1085, 1086, - 1087, 1071, 1078, 1071, 1089, 1090, 1091, 1092, 1093, 1094, - 1071, 1071, 1095, 1079, 1071, 1096, 1097, 1080, 1098, 1071, - 1081, 1099, 1082, 1083, 1084, 1071, 1085, 1086, 1087, 1071, - 1100, 1071, 1089, 1090, 1091, 1092, 1093, 1094, 1107, 1112, - - 1095, 1107, 1112, 1096, 1097, 1113, 1098, 1106, 1106, 1099, - 1106, 1111, 1106, 2815, 1111, 1126, 1111, 1118, 1100, 1111, - 1106, 1111, 1568, 1106, 1111, 1118, 1191, 1111, 1128, 1191, - 1193, 1122, 1116, 1193, 1106, 1116, 1118, 1116, 1111, 1122, - 1116, 1117, 1116, 1126, 1117, 1116, 1117, 1130, 1116, 1117, - 1122, 1117, 1131, 1133, 1117, 1135, 1128, 1117, 1120, 1116, - 1136, 1120, 1106, 1120, 1118, 1138, 1111, 1568, 1117, 1107, - 1112, 2814, 1113, 1113, 1120, 1130, 2805, 1139, 1122, 1192, - 1131, 1133, 1192, 1135, 1192, 1120, 1194, 1116, 1136, 1194, - 2799, 1106, 1106, 1138, 1119, 1111, 1117, 1119, 1121, 1119, - - 2765, 1121, 1119, 1121, 1119, 1139, 1121, 1119, 1121, 1141, - 1119, 1121, 1123, 1120, 1121, 1123, 1116, 1123, 1137, 1143, - 1144, 1119, 1145, 1146, 1147, 1121, 1151, 1153, 1123, 1156, - 1157, 1158, 1159, 2745, 1137, 1160, 1161, 1141, 1162, 1123, - 1195, 1196, 2696, 1195, 1196, 1195, 1137, 1143, 1144, 1119, - 1145, 1146, 1147, 1121, 1151, 1153, 2685, 1156, 1157, 1158, - 1159, 1142, 1137, 1160, 1161, 1164, 1162, 1123, 1142, 1142, - 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1165, 1119, 1163, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1166, 1167, - 1168, 1169, 1170, 1164, 1171, 1171, 1123, 1172, 1173, 1174, - - 1175, 1177, 1178, 1179, 1180, 1165, 1181, 1183, 1184, 1185, - 1186, 1186, 1198, 2681, 1202, 1198, 1166, 1167, 1168, 1169, - 1170, 1200, 1171, 1171, 1200, 1172, 1173, 1174, 1175, 1177, - 1178, 1179, 1180, 1206, 1181, 1183, 1184, 1185, 1186, 1186, - 1197, 1199, 1202, 1197, 1199, 1197, 1199, 1201, 1207, 1208, - 1201, 1215, 1216, 1217, 1219, 1220, 1222, 1223, 1224, 1225, - 1226, 1206, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, - 1235, 1230, 1236, 1237, 1238, 1239, 1207, 1208, 1240, 1215, - 1216, 1217, 1219, 1220, 1222, 1223, 1224, 1225, 1226, 1241, - 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1230, - - 1236, 1237, 1238, 1239, 1242, 1243, 1240, 1244, 1245, 1246, - 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1241, 1254, 1255, - 1256, 1258, 1259, 1260, 1261, 1262, 1263, 1266, 2643, 2642, - 1252, 1268, 1242, 1243, 2618, 1244, 1245, 1246, 1247, 1248, - 1249, 1250, 1251, 1252, 1253, 1265, 1254, 1255, 1256, 1258, - 1259, 1260, 1261, 1262, 1263, 1266, 1265, 1267, 1252, 1268, - 1269, 1265, 1265, 1270, 1272, 1273, 1274, 1275, 1267, 1277, - 1278, 1279, 1280, 1265, 1282, 1284, 1285, 1286, 1288, 1287, - 1289, 1290, 1292, 1294, 1265, 1287, 1295, 1296, 1269, 1265, - 1265, 1270, 1272, 1273, 1274, 1275, 1297, 1277, 1278, 1279, - - 1280, 1298, 1282, 1284, 1285, 1286, 1288, 1287, 1289, 1290, - 1292, 1294, 1299, 1287, 1295, 1296, 1300, 1301, 1302, 1303, - 1304, 1305, 1306, 1308, 1297, 1309, 1310, 1311, 1312, 1298, - 1313, 1314, 1315, 1316, 1317, 1321, 1332, 2580, 1335, 1393, - 1299, 1331, 1393, 2553, 1300, 1301, 1302, 1303, 1304, 1305, - 1306, 1308, 1331, 1309, 1310, 1311, 1312, 1398, 1313, 1314, - 1315, 1316, 1322, 1325, 1332, 1322, 1335, 1322, 1398, 1336, - 1322, 1325, 1322, 1317, 1321, 1322, 1337, 1338, 1322, 3588, - 1327, 3588, 1325, 1327, 1339, 1327, 3555, 1340, 1394, 1322, - 1333, 1394, 1333, 1341, 2550, 1342, 1327, 1336, 1345, 3656, - - 1347, 3656, 1317, 1321, 1337, 1338, 1330, 1327, 1331, 1330, - 1325, 1330, 1339, 1348, 1330, 1340, 1330, 1322, 1333, 1330, - 1333, 1341, 1330, 1342, 1344, 1349, 1345, 1344, 1347, 1344, - 1350, 1351, 1352, 1330, 1344, 1327, 3555, 1344, 1353, 1325, - 2541, 1348, 1354, 1356, 1362, 1364, 1367, 1368, 1369, 1370, - 1371, 1395, 1396, 1349, 1395, 1396, 1395, 1397, 1350, 1351, - 1397, 1330, 1352, 1372, 1327, 1373, 1353, 1374, 1352, 1375, - 1354, 1356, 1362, 1364, 1367, 1368, 1369, 1370, 1371, 1344, - 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1376, - 1352, 1372, 1378, 1373, 1379, 1374, 1352, 1375, 1380, 1381, - - 1383, 1384, 1385, 1386, 1387, 1388, 1399, 1384, 1400, 1403, - 1404, 1405, 1406, 1407, 1405, 1408, 1409, 1376, 1410, 1411, - 1378, 1412, 1379, 1413, 1414, 1415, 1380, 1381, 1383, 1384, - 1385, 1386, 1387, 1388, 1399, 1384, 1400, 1403, 1404, 1417, - 1406, 1407, 1416, 1408, 1409, 1418, 1410, 1411, 1419, 1412, - 1420, 1413, 1414, 1415, 1421, 1416, 1422, 1423, 1424, 1425, - 1416, 1427, 1428, 1426, 1429, 1430, 1431, 1417, 1432, 1426, - 1416, 1426, 1433, 1418, 1426, 1435, 1419, 2539, 1420, 1436, - 1437, 1438, 1421, 1416, 1422, 1423, 1424, 1425, 1416, 1427, - 1428, 1426, 1429, 1430, 1431, 1439, 1432, 1426, 1440, 1426, - - 1433, 1434, 1426, 1435, 1441, 1434, 1442, 1436, 1437, 1438, - 1443, 1444, 1434, 1445, 1434, 1434, 1446, 1434, 1447, 1448, - 1449, 1450, 1451, 1439, 1452, 1453, 1440, 1454, 1455, 1434, - 1460, 1461, 1441, 1434, 1442, 1462, 1463, 1464, 1443, 1444, - 1434, 1445, 1434, 1434, 1446, 1434, 1447, 1448, 1449, 1450, - 1451, 1468, 1452, 1453, 1465, 1454, 1455, 1469, 1460, 1461, - 1470, 1465, 1472, 1462, 1463, 1464, 1473, 1474, 1475, 1465, - 1471, 1476, 1477, 1470, 1465, 1470, 1478, 1479, 1480, 1468, - 1481, 1471, 1465, 1482, 1483, 1469, 1484, 1485, 1470, 1465, - 1472, 1486, 1471, 1487, 1473, 1474, 1475, 1465, 1487, 1476, - - 1477, 1470, 1465, 1470, 1478, 1479, 1480, 1488, 1481, 1489, - 1490, 1482, 1483, 1491, 1484, 1485, 1492, 1493, 1494, 1486, - 1471, 1487, 1495, 1496, 1497, 1498, 1487, 1499, 1501, 1502, - 1503, 1504, 1505, 1501, 2506, 1488, 1508, 1489, 1490, 1509, - 1510, 1491, 1511, 1499, 1492, 1493, 1494, 1513, 2502, 1514, - 1495, 1496, 1497, 1498, 1506, 1499, 1501, 1502, 1503, 1504, - 1507, 1501, 1506, 1507, 1508, 1507, 1515, 1509, 1510, 1516, - 1511, 1499, 2500, 1506, 1517, 1513, 1507, 1514, 1518, 1519, - 1522, 1523, 1519, 1522, 1519, 1522, 1526, 1507, 1527, 1519, - 1522, 1528, 1519, 1522, 1515, 1571, 1573, 1516, 1571, 1505, - - 1505, 1506, 1517, 1531, 1529, 1532, 1518, 1573, 1529, 1523, - 1529, 1534, 1536, 1542, 1526, 1507, 1527, 1543, 2499, 1528, - 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1546, - 1547, 1531, 1529, 1532, 1519, 1522, 1529, 1548, 1529, 1534, - 1536, 1542, 1549, 1550, 1551, 1543, 1544, 1544, 1544, 1544, - 1544, 1544, 1544, 1544, 1544, 1552, 1553, 1546, 1547, 1554, - 1555, 1556, 1557, 1558, 1559, 1548, 1560, 1561, 1562, 1563, - 1549, 1550, 1551, 1564, 1565, 1566, 1572, 1576, 1577, 1788, - 1580, 1581, 1788, 1552, 1553, 1582, 1583, 1554, 1555, 1556, - 1557, 1558, 1559, 1584, 1560, 1561, 1562, 1563, 1585, 1586, - - 1584, 1564, 1565, 1566, 1572, 1576, 1577, 1578, 1580, 1581, - 1578, 1587, 1578, 1582, 1583, 1588, 1589, 1590, 1591, 1592, - 1593, 1584, 1594, 1595, 1596, 1597, 1585, 1586, 1584, 1598, - 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1587, - 1608, 1609, 1610, 1588, 1589, 1590, 1591, 1592, 1593, 1611, - 1594, 1595, 1596, 1597, 1612, 1613, 1614, 1598, 1599, 1600, - 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1615, 1608, 1609, - 1610, 1616, 1617, 1618, 1619, 1620, 1621, 1611, 1622, 1623, - 1624, 1625, 1612, 1613, 1614, 1626, 1627, 1628, 1630, 1631, - 1632, 1634, 1635, 1636, 1629, 1615, 1637, 1638, 1639, 1616, - - 1617, 1618, 1619, 1620, 1621, 1629, 1622, 1623, 1624, 1625, - 1640, 1641, 1642, 1626, 1627, 1628, 1630, 1631, 1632, 1634, - 1635, 1636, 1643, 1645, 1637, 1638, 1639, 1646, 1647, 1648, - 1649, 1650, 1651, 1653, 1655, 1629, 1656, 1657, 1640, 1641, - 1642, 1659, 1660, 1651, 1653, 1803, 1662, 1663, 1803, 1667, - 1643, 1645, 1668, 1669, 2498, 1646, 1647, 1648, 1649, 1650, - 1651, 1670, 1655, 2491, 1656, 1657, 1672, 1673, 1674, 1659, - 1660, 1651, 1652, 1652, 1662, 1663, 1652, 1667, 1652, 1675, - 1668, 1669, 1652, 1652, 1676, 1677, 1652, 1678, 1679, 1670, - 1680, 1652, 1681, 1682, 1672, 1673, 1674, 1683, 1684, 1685, - - 1652, 1652, 1686, 1687, 1652, 1689, 1652, 1675, 1689, 1688, - 1652, 1652, 1676, 1677, 1652, 1678, 1679, 1690, 1680, 1652, - 1681, 1682, 1688, 1691, 1692, 1683, 1684, 1685, 1693, 1694, - 1686, 1687, 1697, 1689, 1698, 1700, 1689, 1688, 1701, 1702, - 1703, 1704, 1705, 1709, 1759, 1690, 1711, 1759, 1715, 1759, - 1688, 1691, 1692, 1703, 1752, 1716, 1693, 1694, 1718, 1719, - 1697, 1720, 1698, 1700, 2479, 1752, 1701, 1702, 1703, 1704, - 1705, 2477, 1707, 1721, 1711, 1707, 1715, 1707, 1722, 2476, - 1722, 1703, 1707, 1716, 1717, 1707, 1718, 1719, 1709, 1720, - 1724, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, - - 1727, 1721, 1724, 1729, 1729, 1730, 1722, 1724, 1722, 1728, - 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1724, 1731, - 1732, 1733, 1734, 1735, 1736, 1737, 1739, 1707, 1727, 1740, - 1724, 1729, 1729, 1730, 1741, 1724, 1743, 1751, 1744, 1745, - 1746, 1747, 1748, 1749, 1741, 1742, 1750, 1731, 1732, 1733, - 1734, 1735, 1736, 1737, 1739, 1741, 1742, 1740, 1756, 1757, - 1760, 1761, 1741, 1763, 1743, 1742, 1744, 1745, 1746, 1747, - 1748, 1749, 1741, 1742, 1750, 1764, 1765, 1766, 1767, 1768, - 1769, 1770, 1751, 1741, 1742, 1771, 1756, 1757, 1760, 1761, - 1772, 1763, 1773, 1742, 1774, 1775, 1776, 1777, 1778, 1779, - - 1780, 1781, 1782, 1764, 1765, 1766, 1767, 1768, 1769, 1770, - 1774, 1783, 1784, 1771, 1785, 1786, 1787, 1789, 1772, 1790, - 1773, 1791, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, - 1782, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1774, 1783, - 1784, 1799, 1785, 1786, 1787, 1789, 1800, 1790, 1801, 1791, - 1802, 1804, 1805, 1807, 1808, 1809, 1802, 1811, 1812, 1792, - 1793, 1794, 1795, 1796, 1797, 1798, 1806, 1815, 1806, 1799, - 1816, 1817, 1819, 1806, 1800, 1818, 1801, 1813, 1802, 1804, - 1805, 1807, 1808, 1809, 1802, 1811, 1812, 1820, 1813, 1818, - 2475, 1821, 1822, 1823, 1806, 1815, 1806, 1825, 1816, 1817, - - 1819, 1806, 1827, 1818, 1828, 1829, 1830, 1831, 1832, 1833, - 1834, 1835, 1836, 1837, 1838, 1820, 1839, 1840, 1813, 1821, - 1822, 1823, 1841, 1844, 1834, 1825, 1845, 1846, 1848, 1849, - 1827, 1854, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, - 1836, 1837, 1838, 1856, 1839, 1840, 1857, 1843, 1843, 1858, - 1841, 1844, 1834, 1843, 1845, 1846, 1848, 1849, 1859, 1854, - 1861, 1843, 1862, 1863, 1843, 1864, 1865, 1866, 1869, 2470, - 1872, 1856, 1873, 1874, 1857, 1843, 1843, 1858, 1875, 1876, - 1877, 1843, 1878, 2445, 1880, 1881, 1859, 2434, 1861, 1843, - 1862, 1863, 1843, 1864, 1865, 1866, 1869, 1870, 1872, 1870, - - 1873, 1874, 1882, 1870, 1884, 1883, 1875, 1876, 1877, 1879, - 1878, 1879, 1883, 1881, 1870, 1879, 1870, 1885, 1886, 1887, - 1888, 1889, 1892, 1893, 1896, 1870, 1879, 1870, 1879, 1880, - 1882, 1870, 1884, 1883, 1897, 2424, 1898, 1879, 1900, 1879, - 1883, 2422, 1870, 1879, 1870, 1885, 1886, 1887, 1888, 1889, - 1890, 1901, 1903, 1890, 1879, 1890, 1879, 1902, 1904, 1902, - 1890, 1905, 1897, 1890, 1898, 1907, 1900, 1892, 1893, 1896, - 1908, 1909, 1912, 1913, 1915, 1916, 1917, 2406, 2390, 1901, - 1903, 1918, 1919, 1920, 1921, 1902, 1904, 1902, 1961, 1905, - 2351, 1961, 1974, 1907, 1922, 1974, 1924, 1974, 1908, 1909, - - 1912, 1913, 1915, 1916, 1917, 1890, 1910, 1925, 1926, 1918, - 1919, 1920, 1921, 1910, 1910, 1910, 1910, 1910, 1910, 1910, - 1910, 1910, 1922, 1923, 1924, 1910, 1927, 1910, 1910, 1910, - 1923, 1928, 1929, 1910, 1930, 1925, 1926, 1931, 1910, 1932, - 1933, 1934, 1935, 1936, 1937, 1930, 1944, 1910, 3658, 2080, - 3658, 1923, 2080, 1910, 1927, 1910, 1910, 1910, 1923, 1928, - 1929, 1910, 1930, 1946, 1947, 1931, 1910, 1932, 1933, 1934, - 1935, 1936, 1937, 1930, 1944, 1910, 1940, 1940, 1940, 1940, - 1942, 1942, 1942, 1942, 1948, 1949, 1950, 1951, 1952, 1953, - 1954, 1946, 1947, 1955, 1956, 1957, 1958, 1959, 1962, 1963, - - 1964, 1965, 1966, 2349, 1967, 1968, 1970, 2336, 1971, 1972, - 1973, 1975, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1976, - 1977, 1955, 1956, 1957, 1958, 1959, 1962, 1963, 1964, 1965, - 1966, 1940, 1967, 1968, 1970, 1942, 1971, 1972, 1973, 1975, - 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1976, 1977, 1985, - 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1990, 1993, 1990, - 1994, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 1978, 1979, - 1980, 1981, 1982, 1983, 1984, 2004, 2000, 1985, 1986, 1987, - 1988, 1989, 2005, 1991, 1992, 2006, 1993, 2000, 1994, 1995, - 1996, 1997, 1998, 1999, 2002, 2003, 2007, 2008, 2009, 2010, - - 2011, 2012, 2294, 2004, 2871, 2014, 2292, 2015, 2201, 2158, - 2005, 2016, 2158, 2006, 2158, 2017, 2018, 2019, 2020, 2201, - 2021, 2871, 2022, 2023, 2007, 2008, 2009, 2010, 2011, 2012, - 2013, 2013, 2013, 2014, 2013, 2015, 2013, 2013, 2024, 2016, - 2013, 2013, 2013, 2017, 2018, 2019, 2020, 2013, 2021, 2013, - 2022, 2023, 2025, 2026, 2027, 2028, 2029, 2030, 2013, 2013, - 2013, 2031, 2013, 2032, 2013, 2013, 2024, 2033, 2013, 2013, - 2013, 2034, 2035, 2036, 2037, 2013, 2038, 2013, 2039, 2042, - 2025, 2026, 2027, 2028, 2029, 2030, 2043, 2044, 2045, 2031, - 2050, 2032, 2051, 2052, 2053, 2033, 2054, 2055, 2056, 2034, - - 2035, 2036, 2037, 2057, 2038, 2061, 2039, 2042, 2058, 2062, - 2058, 2065, 2067, 2068, 2043, 2044, 2045, 2066, 2050, 2066, - 2051, 2052, 2053, 2069, 2054, 2055, 2056, 2070, 2071, 2291, - 2082, 2057, 2072, 2061, 2073, 2074, 2058, 2062, 2058, 2065, - 2083, 2075, 2076, 2077, 2078, 2066, 2079, 2066, 2084, 2087, - 2088, 2089, 2090, 2091, 2092, 2070, 2071, 2067, 2068, 2093, - 2072, 2094, 2073, 2074, 2095, 3720, 2290, 3720, 2069, 2075, - 2076, 2077, 2078, 3191, 2079, 2082, 2099, 2087, 2088, 2089, - 2090, 2091, 2092, 2100, 2096, 2083, 2096, 2093, 2194, 2094, - 3191, 2194, 2095, 2084, 2098, 2098, 2098, 2098, 2098, 2098, - - 2098, 2098, 2098, 2276, 2099, 2101, 2103, 2274, 2102, 2104, - 2105, 2100, 2096, 2102, 2096, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2107, 2108, 2109, 2097, 2110, 2097, - 2097, 2097, 2111, 2101, 2103, 2097, 2102, 2104, 2105, 2112, - 2097, 2102, 2113, 2114, 2116, 2117, 2118, 2119, 2120, 2097, - 2121, 2122, 2107, 2108, 2109, 2097, 2110, 2097, 2097, 2097, - 2111, 2123, 2124, 2097, 2125, 2126, 2127, 2112, 2097, 2129, - 2113, 2114, 2116, 2117, 2118, 2119, 2120, 2097, 2121, 2122, - 2130, 2131, 2132, 2133, 2136, 2136, 2136, 2136, 2141, 2123, - 2124, 2143, 2125, 2126, 2127, 2140, 2140, 2129, 2139, 2139, - - 2139, 2139, 2144, 2145, 2146, 2148, 2149, 2150, 2130, 2131, - 2132, 2133, 2151, 2152, 2153, 2154, 2141, 2155, 2156, 2143, - 2157, 2159, 2160, 2161, 2159, 2275, 2359, 2162, 2163, 2359, - 2144, 2145, 2146, 2148, 2149, 2150, 2164, 2165, 2166, 2136, - 2151, 2152, 2153, 2154, 2167, 2155, 2156, 2168, 2157, 2140, - 2160, 2161, 2169, 2139, 2147, 2162, 2163, 2147, 2273, 2172, - 2251, 2159, 2173, 2174, 2164, 2165, 2166, 2175, 2176, 2177, - 2275, 2170, 2167, 2147, 2170, 2168, 2170, 2178, 2179, 2180, - 2169, 2181, 2183, 2184, 2185, 2186, 2147, 2172, 2147, 2159, - 2173, 2174, 2237, 2189, 2190, 2175, 2176, 2177, 2147, 2191, - - 2147, 2147, 2147, 2192, 2193, 2178, 2179, 2180, 2195, 2181, - 2183, 2184, 2185, 2186, 2147, 2188, 2147, 2196, 2188, 2197, - 2188, 2189, 2190, 2199, 2200, 2203, 2147, 2191, 2147, 2147, - 2147, 2192, 2193, 2202, 2204, 2205, 2195, 2206, 2207, 2208, - 2209, 2210, 2211, 2212, 2202, 2196, 2213, 2197, 2208, 2214, - 2215, 2199, 2200, 2203, 2216, 2217, 2218, 2219, 2220, 2221, - 2222, 2227, 2204, 2205, 2228, 2206, 2207, 2208, 2209, 2210, - 2211, 2212, 2219, 2229, 2213, 2230, 2231, 2214, 2215, 2232, - 2233, 2234, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2227, - 2235, 2236, 2228, 2238, 2239, 2240, 2241, 2242, 2247, 2248, - - 2219, 2229, 2250, 2230, 2231, 2254, 2255, 2232, 2233, 2234, - 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2270, 2235, 2236, - 2271, 2238, 2239, 2240, 2241, 2242, 2247, 2248, 2272, 2277, - 2250, 2279, 2280, 2254, 2255, 2281, 2282, 2283, 2257, 2258, - 2259, 2260, 2261, 2262, 2263, 2270, 2293, 2284, 2271, 2285, - 2286, 2287, 2295, 2296, 2297, 2135, 2272, 2134, 2298, 2279, - 2280, 2299, 2803, 2281, 2282, 2283, 2300, 2301, 2302, 2048, - 2304, 2305, 2306, 2803, 2277, 2284, 2308, 2285, 2286, 2287, - 2289, 2296, 2297, 2289, 2367, 2289, 2298, 2367, 2046, 2299, - 2289, 2293, 2309, 2289, 2300, 2301, 2302, 2295, 2304, 2305, - - 2306, 2307, 2310, 2312, 2308, 2313, 2314, 2289, 2307, 2307, - 2307, 2307, 2307, 2307, 2307, 2307, 2307, 2311, 2315, 2316, - 2309, 2317, 2311, 2318, 2319, 2320, 2321, 2322, 2324, 2325, - 2310, 2312, 2326, 2313, 2314, 2289, 2328, 2331, 2333, 2334, - 2335, 2337, 2338, 2339, 2340, 2311, 2315, 2316, 2341, 2317, - 2311, 2318, 2319, 2320, 2321, 2322, 2324, 2325, 2342, 2343, - 2326, 2346, 2348, 2353, 2328, 2331, 2333, 2334, 2335, 2337, - 2338, 2339, 2340, 2354, 2350, 2350, 2341, 2350, 2352, 2352, - 2357, 2352, 2360, 2362, 2363, 2356, 2342, 2343, 2361, 2346, - 2348, 2353, 2356, 2358, 2361, 2364, 2358, 2365, 2358, 2366, - - 2368, 2354, 2369, 2370, 2371, 2041, 2372, 2373, 2357, 2374, - 2360, 2362, 2363, 2356, 2375, 2379, 2361, 2380, 2381, 2382, - 2356, 2377, 2361, 2364, 2377, 2365, 2377, 2366, 2368, 2350, - 2369, 2370, 2371, 2352, 2372, 2373, 2378, 2374, 2383, 2378, - 2384, 2378, 2375, 2379, 2350, 2380, 2381, 2382, 2352, 2385, - 2386, 2388, 2389, 2391, 2388, 2392, 2393, 2394, 2395, 2396, - 2397, 2398, 2399, 2400, 2402, 2403, 2383, 2404, 2384, 2405, - 2407, 2408, 2409, 2410, 2411, 2409, 2413, 2385, 2386, 2414, - 2389, 2391, 2415, 2392, 2393, 2394, 2395, 2396, 2397, 2398, - 2399, 2400, 2402, 2403, 2416, 2404, 2417, 2405, 2407, 2408, - - 2412, 2410, 2411, 2412, 2413, 2412, 2420, 2414, 2421, 2423, - 2415, 2426, 2425, 2428, 2429, 2430, 2431, 2432, 2433, 2435, - 2436, 2437, 2416, 2425, 2417, 1960, 2438, 2439, 2440, 2442, - 2443, 2444, 2446, 2447, 2420, 2448, 2421, 2423, 2450, 2426, - 2451, 2428, 2429, 2430, 2431, 2432, 2433, 2435, 2436, 2437, - 2452, 2453, 2454, 2425, 2438, 2439, 2440, 2442, 2443, 2444, - 2446, 2447, 2455, 2448, 2456, 2457, 2450, 2458, 2451, 2459, - 2460, 2463, 2464, 2465, 2467, 2468, 2469, 2473, 2452, 2453, - 2454, 2474, 2478, 2480, 2481, 2482, 2483, 2484, 2485, 2486, - 2455, 2487, 2456, 2457, 2488, 2458, 2490, 2459, 2460, 2463, - - 2464, 2465, 2467, 2468, 2469, 2473, 1945, 2494, 1941, 2474, - 2501, 2505, 2503, 2482, 2483, 2484, 2485, 2486, 2493, 2487, - 2492, 2494, 2488, 2492, 2490, 2492, 2504, 2478, 2480, 2481, - 2492, 2495, 2507, 2492, 2495, 2493, 2495, 2508, 2509, 2505, - 2496, 2495, 2510, 2496, 2511, 2496, 2512, 2492, 2513, 2494, - 2496, 2497, 2514, 2496, 2497, 2501, 2497, 2503, 2495, 2516, - 2507, 2497, 2517, 2493, 2497, 2508, 2509, 2496, 2518, 2519, - 2510, 2504, 2511, 2520, 2512, 2492, 2513, 2521, 2497, 2522, - 2514, 2523, 2524, 2525, 2526, 2527, 2495, 2516, 2528, 2529, - 2517, 2530, 2531, 2532, 2533, 2496, 2518, 2519, 2534, 2535, - - 2536, 2520, 2537, 2538, 2540, 2521, 2497, 2522, 2542, 2523, - 2524, 2525, 2526, 2527, 2543, 2544, 2528, 2529, 2545, 2530, - 2531, 2532, 2533, 2546, 2547, 2548, 2534, 2535, 2536, 2549, - 2537, 2538, 2540, 2556, 2551, 2551, 2542, 2551, 2554, 2554, - 2557, 2554, 2543, 2544, 2558, 2559, 2545, 2562, 2563, 2564, - 2562, 2546, 2547, 2548, 2565, 2566, 2567, 2549, 2568, 2569, - 2570, 2556, 2571, 2572, 2573, 2571, 2575, 2571, 2557, 2576, - 2577, 2578, 2558, 2559, 2579, 2583, 2563, 2564, 2584, 2585, - 1939, 2586, 2565, 2566, 2567, 2587, 2568, 2569, 2570, 2551, - 2588, 2572, 2573, 2554, 2575, 2592, 2594, 2576, 2577, 2578, - - 2595, 2596, 2579, 2583, 2551, 2597, 2584, 2585, 2554, 2586, - 2590, 2591, 2590, 2587, 2591, 2599, 2600, 2601, 2588, 2602, - 2603, 2604, 2602, 2592, 2594, 2605, 2606, 2607, 2595, 2596, - 2609, 2610, 2611, 2597, 2613, 2611, 2617, 2611, 2590, 2603, - 2590, 2612, 2612, 2599, 2600, 2601, 2619, 2615, 2603, 2604, - 2615, 2620, 2615, 2605, 2606, 2607, 2621, 2622, 2609, 2610, - 2623, 2624, 2613, 2625, 2617, 2626, 2628, 2603, 2629, 2612, - 2612, 2630, 2631, 2632, 2619, 2633, 2634, 2635, 2636, 2620, - 2637, 2638, 2639, 2640, 2621, 2622, 2641, 2644, 2623, 2624, - 2645, 2625, 2646, 2626, 2628, 2647, 2629, 2648, 2649, 2630, - - 2631, 2632, 2650, 2633, 2634, 2635, 2636, 2651, 2637, 2638, - 2639, 2640, 2652, 2654, 2641, 2644, 2655, 2656, 2645, 2657, - 2646, 2658, 2659, 2647, 2661, 2648, 2649, 2662, 2663, 2665, - 2650, 2666, 2667, 2668, 2669, 2651, 2670, 2671, 2672, 2674, - 2652, 2654, 2675, 2676, 2655, 2656, 2677, 2657, 2678, 2658, - 2659, 2679, 2661, 2697, 2682, 2662, 2663, 2665, 1911, 2666, - 2667, 2668, 2669, 2769, 2670, 2689, 2769, 2674, 2682, 2698, - 2675, 2676, 2686, 2687, 2677, 2683, 2678, 1895, 2683, 2679, - 2683, 2684, 2671, 2672, 2684, 2683, 2684, 2699, 2683, 2686, - 2687, 2684, 2688, 2689, 2684, 2688, 2682, 2700, 2697, 1894, - - 2690, 2691, 2683, 2690, 2691, 2690, 2691, 1891, 2684, 2688, - 2690, 2691, 2701, 2690, 2698, 2699, 2692, 2686, 2687, 2692, - 2703, 2692, 2704, 1855, 2705, 2700, 2692, 2690, 2691, 2692, - 2683, 1824, 2694, 2706, 2707, 2694, 2684, 2694, 2708, 2709, - 2701, 2695, 2694, 2692, 2695, 2694, 2695, 2710, 2703, 2711, - 2704, 2695, 2705, 2712, 2695, 2690, 2691, 2713, 2714, 2694, - 2715, 2706, 2707, 2716, 2717, 2718, 2708, 2709, 2695, 2719, - 2721, 2692, 2722, 2723, 2724, 2710, 2725, 2711, 2726, 2727, - 2728, 2712, 2729, 2730, 2731, 2713, 2714, 2694, 2715, 2732, - 2733, 2716, 2717, 2718, 2735, 2736, 2695, 2719, 2721, 2737, - - 2722, 2723, 2724, 2738, 2725, 2739, 2726, 2727, 2728, 2740, - 2729, 2730, 2731, 2742, 2743, 2747, 2748, 2732, 2733, 2749, - 2750, 2751, 2735, 2736, 2752, 2753, 2754, 2737, 2757, 2758, - 2759, 2738, 2760, 2739, 2761, 2762, 2763, 2740, 2766, 2767, - 2768, 2742, 2743, 2747, 2748, 2772, 2773, 2749, 2750, 2751, - 2778, 2776, 2752, 2753, 2754, 2777, 2757, 2758, 2759, 1755, - 2760, 1754, 2761, 2762, 2763, 2780, 2766, 2767, 2768, 2770, - 2781, 2782, 2770, 2772, 2773, 2775, 2779, 2783, 2775, 2776, - 2785, 2778, 2786, 2777, 2779, 2784, 2787, 2779, 2784, 2779, - 2784, 2788, 2789, 2780, 2790, 2791, 2792, 2795, 2781, 2782, - - 2796, 2797, 2801, 2802, 2779, 2783, 2804, 2806, 2785, 2778, - 2786, 2807, 2779, 2808, 2787, 2779, 2809, 2779, 2806, 2788, - 2789, 2810, 2790, 2791, 2792, 2795, 2811, 2812, 2796, 2797, - 2801, 2802, 2813, 2816, 2804, 2817, 2818, 2819, 2820, 2807, - 2821, 2808, 2822, 2823, 2809, 2824, 2825, 2816, 2826, 2810, - 2827, 2821, 2828, 2829, 2811, 2812, 2830, 2831, 2832, 2834, - 2813, 2816, 2835, 2817, 2818, 2819, 2820, 2836, 2837, 2838, - 2822, 2823, 2839, 2824, 2825, 2840, 2826, 2841, 2827, 2842, - 2828, 2829, 2843, 2844, 2830, 2831, 2832, 2834, 2845, 2846, - 2835, 2847, 2848, 2849, 2850, 2836, 2837, 2838, 2851, 2852, - - 2839, 2853, 2854, 2840, 2855, 2841, 2857, 2842, 2859, 2878, - 2843, 2844, 2878, 2881, 2884, 2938, 2845, 2846, 2938, 2847, - 2848, 2849, 2850, 2858, 2857, 2859, 2858, 2852, 2858, 2853, - 2854, 2867, 2855, 2858, 2857, 2861, 2858, 1753, 2861, 2886, - 2861, 2862, 2884, 2851, 2862, 2861, 2862, 2868, 2867, 2887, - 2858, 2862, 2857, 2859, 2862, 2869, 2863, 2870, 2881, 2863, - 2864, 2863, 2861, 2864, 2868, 2864, 2863, 2886, 2862, 2863, - 2864, 2888, 2869, 2864, 2870, 2889, 2867, 2887, 2858, 1726, - 1723, 2872, 2890, 2863, 2872, 2944, 2872, 2864, 2944, 1714, - 2861, 2872, 2868, 2891, 2872, 2958, 2862, 1710, 2958, 2888, - - 2869, 2980, 2870, 2889, 2874, 2892, 1708, 2874, 2872, 2874, - 2890, 2863, 2980, 2875, 2874, 2864, 2875, 2874, 2875, 2876, - 1706, 2891, 2876, 2875, 2876, 2877, 2875, 2893, 2877, 2876, - 2877, 2874, 2895, 2892, 2879, 2877, 2872, 2879, 2880, 2879, - 2875, 2880, 2896, 2880, 2879, 2898, 2876, 2879, 2880, 2900, - 2902, 2880, 2877, 2903, 2904, 2893, 2906, 2907, 2908, 2874, - 2895, 2879, 2909, 2910, 2911, 2880, 2912, 2913, 2875, 2914, - 2896, 2915, 2916, 2898, 2876, 2920, 2921, 2900, 2902, 2922, - 2877, 2903, 2904, 2924, 2906, 2907, 2908, 2925, 2926, 2879, - 2909, 2910, 2911, 2880, 2912, 2913, 2927, 2914, 2928, 2915, - - 2916, 2929, 2931, 2920, 2921, 2933, 2934, 2922, 2935, 2936, - 2937, 2924, 2939, 2941, 2942, 2925, 2926, 2943, 2945, 2948, - 2949, 2945, 2951, 2945, 2927, 2952, 2928, 2953, 2954, 2929, - 2931, 2955, 2956, 2933, 2934, 2957, 2935, 2936, 2937, 2962, - 2939, 2941, 2942, 2956, 2956, 2943, 2961, 2948, 2949, 2961, - 2951, 2961, 2963, 2952, 2959, 2953, 2954, 2964, 2959, 2955, - 2956, 2965, 2966, 2957, 2965, 2959, 2967, 2962, 2968, 2969, - 2971, 2956, 2956, 2972, 2973, 2977, 2978, 2981, 2983, 2984, - 2963, 2985, 2959, 2986, 2987, 2964, 2959, 2988, 2989, 2990, - 2966, 2991, 2991, 2959, 2967, 2992, 2968, 2969, 2971, 2993, - - 2994, 2972, 2973, 2977, 2978, 2981, 2983, 2984, 2995, 2985, - 2996, 2986, 2987, 2997, 2999, 2988, 2989, 2990, 3000, 2991, - 2991, 3001, 3002, 2992, 3003, 3004, 3005, 2993, 2994, 3006, - 3008, 3010, 3007, 3009, 3012, 3013, 2995, 3014, 2996, 3016, - 3018, 2997, 2999, 3007, 3009, 1696, 3000, 3019, 3020, 3001, - 3002, 3022, 3003, 3004, 3005, 3023, 3024, 3006, 3008, 3010, - 3025, 3026, 3012, 3013, 3028, 3014, 3029, 3016, 3018, 3032, - 3030, 3033, 3039, 3007, 3009, 3019, 3020, 3035, 3037, 3022, - 3035, 1654, 3035, 3023, 3024, 3030, 3045, 3035, 3025, 3026, - 3035, 3046, 3028, 3038, 3029, 3037, 3038, 3032, 3030, 3033, - - 3039, 1644, 3040, 3045, 3035, 3040, 3041, 3040, 3046, 3041, - 1574, 3041, 3040, 3030, 3042, 3040, 3041, 3042, 3049, 3042, - 1569, 3049, 1567, 3037, 3042, 3043, 3054, 3042, 3043, 3040, - 3043, 3045, 3035, 3041, 3055, 3043, 3046, 3048, 3043, 3056, - 3048, 3042, 3048, 3050, 3058, 3060, 3050, 3048, 3050, 3062, - 3048, 3063, 3043, 3050, 3054, 3051, 3050, 3040, 3051, 3064, - 3051, 3041, 3055, 3065, 3048, 3051, 3067, 3056, 3051, 3042, - 3050, 3068, 3058, 3060, 3069, 3070, 3071, 3062, 3072, 3063, - 3043, 3073, 3051, 3074, 3076, 3077, 3078, 3064, 3079, 3081, - 3082, 3065, 3048, 3083, 3067, 3084, 3085, 3086, 3050, 3068, - - 3086, 3087, 3069, 3070, 3071, 3088, 3072, 3089, 3091, 3073, - 3051, 3074, 3076, 3077, 3078, 3092, 3079, 3081, 3082, 3093, - 3094, 3083, 3095, 3084, 3085, 3098, 3628, 3102, 3098, 3087, - 3102, 1545, 3097, 3088, 3096, 3089, 3091, 3096, 3100, 3104, - 3105, 3106, 3104, 3092, 3104, 3108, 3109, 3093, 3094, 3110, - 3095, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, - 3097, 3111, 3112, 3113, 3114, 3115, 3100, 3116, 3105, 3106, - 1541, 1525, 3125, 3108, 3109, 3125, 3628, 3110, 3118, 3117, - 3119, 3120, 3117, 3122, 3123, 3124, 3126, 3127, 3128, 3111, - 3112, 3113, 3114, 3115, 3129, 3116, 3117, 3117, 3117, 3117, - - 3117, 3117, 3117, 3117, 3117, 3131, 3118, 3132, 3119, 3120, - 3133, 3122, 3123, 3124, 3126, 3127, 3128, 3135, 3136, 3138, - 3139, 3140, 3129, 3142, 3143, 3145, 3146, 3147, 3148, 3149, - 3150, 3152, 3153, 3131, 3154, 3132, 3155, 3157, 3133, 3158, - 3159, 3160, 3162, 3164, 3167, 3135, 3136, 3138, 3139, 3140, - 3170, 3142, 3143, 3145, 3146, 3147, 3148, 3149, 3150, 3152, - 3153, 3170, 3154, 1524, 3155, 3157, 3171, 3158, 3159, 3160, - 3162, 3164, 3167, 3173, 3175, 3176, 3177, 3178, 3179, 3180, - 3181, 3183, 3184, 3185, 3186, 3187, 3188, 3273, 1521, 3223, - 3192, 3170, 3223, 3192, 3171, 3192, 3187, 1467, 3273, 3190, - - 3192, 3173, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3183, - 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3192, 3189, 3254, - 3189, 3195, 3254, 3388, 3187, 3189, 3193, 3194, 3189, 3193, - 3194, 3193, 3194, 1466, 3388, 1459, 3193, 3194, 3195, 1458, - 3194, 3201, 3189, 1457, 3190, 3192, 3196, 3197, 3202, 3196, - 3197, 3196, 3197, 3193, 3194, 3203, 3196, 3197, 3199, 3196, - 3197, 3199, 3200, 3199, 3204, 3200, 3195, 3200, 3199, 3201, - 3189, 3199, 3200, 3196, 3197, 3200, 3202, 3205, 3207, 3208, - 3209, 3193, 3194, 3203, 3211, 3199, 3212, 3213, 3214, 3200, - 3215, 3216, 3204, 3219, 3220, 3221, 3222, 3224, 3225, 1402, - - 3228, 3196, 3197, 3229, 1401, 3205, 3207, 3208, 3209, 3230, - 3231, 3232, 3211, 3199, 3212, 3213, 3214, 3200, 3215, 3216, - 3233, 3219, 3220, 3221, 3222, 3224, 3225, 3227, 3228, 3234, - 3227, 3229, 3227, 3235, 1390, 1366, 1365, 3230, 3231, 3232, - 3393, 3242, 3262, 3237, 3242, 3262, 3266, 3268, 3233, 3266, - 3268, 3393, 1361, 3239, 3241, 3238, 3244, 3234, 3238, 1360, - 3245, 3235, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, - 3236, 3237, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, - 3238, 3239, 3241, 3246, 3244, 3247, 3248, 3242, 3245, 3249, - 3250, 3251, 3252, 3253, 3253, 3253, 3253, 3253, 3253, 3253, - - 3253, 3253, 3255, 3256, 3258, 3259, 3260, 3263, 3264, 3265, - 3267, 3246, 3269, 3247, 3248, 3242, 3270, 3249, 3250, 3251, - 3252, 3271, 3272, 3274, 3275, 3276, 3277, 3279, 3280, 3281, - 3255, 3256, 3258, 3259, 3260, 3263, 3264, 3265, 3267, 3282, - 3269, 3283, 3287, 3288, 3270, 3289, 3290, 3293, 3294, 3271, - 3272, 3274, 3275, 3276, 3277, 3279, 3280, 3281, 3295, 3298, - 3296, 3300, 3301, 3302, 3303, 3304, 3305, 3282, 3296, 3283, - 3287, 3288, 3306, 3289, 3290, 3293, 3294, 3307, 3309, 3310, - 3311, 3312, 3313, 3314, 3316, 1359, 3295, 3298, 3296, 3300, - 3301, 3302, 3303, 3304, 3305, 3318, 3296, 1358, 3318, 3321, - - 3306, 3316, 3322, 3649, 1357, 3307, 3309, 3310, 3311, 3312, - 3313, 3314, 3315, 3317, 3649, 3315, 3317, 3315, 3317, 3323, - 3324, 3325, 3315, 3317, 3328, 3315, 3317, 3321, 3319, 3316, - 3322, 3319, 3320, 3319, 3330, 3320, 3332, 3320, 3319, 3315, - 3317, 3319, 3320, 3333, 3334, 3320, 3335, 3323, 3324, 3325, - 3336, 3338, 3328, 3340, 3341, 3319, 3340, 3344, 3345, 3320, - 3346, 3347, 3330, 3369, 3332, 1355, 3369, 3315, 3317, 1324, - 1320, 3333, 3334, 3339, 3335, 1291, 3339, 3370, 3336, 3338, - 3370, 3371, 3341, 3319, 3371, 3344, 3345, 3320, 3346, 3347, - 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3342, - - 3342, 3342, 3342, 3342, 3342, 3342, 3342, 3342, 3342, 3342, - 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, - 3343, 3348, 3349, 3350, 3342, 3351, 3352, 3354, 3356, 3358, - 3360, 3361, 3362, 3363, 3630, 3343, 3353, 3353, 3353, 3353, - 3353, 3353, 3353, 3353, 3353, 3357, 3364, 3365, 3357, 3348, - 3349, 3350, 3366, 3351, 3352, 3354, 3356, 3358, 3360, 3361, - 3362, 3363, 3357, 3357, 3357, 3357, 3357, 3357, 3357, 3357, - 3357, 3367, 3372, 3373, 3364, 3365, 3374, 3375, 3376, 3374, - 3366, 3377, 3378, 3379, 3630, 3378, 3379, 3417, 1283, 3417, - 1281, 3382, 3384, 3380, 3386, 3390, 3380, 3391, 3392, 3367, - - 3372, 3373, 3394, 3395, 1276, 3375, 3376, 3397, 3398, 3377, - 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3382, - 3384, 3399, 3386, 3390, 3396, 3391, 3392, 3400, 3401, 3402, - 3394, 3395, 3396, 3396, 3403, 3397, 3398, 3404, 3405, 3406, - 3407, 3408, 3409, 3410, 3412, 3413, 3414, 3415, 3416, 3399, - 3418, 3419, 3396, 3420, 3422, 3400, 3401, 3402, 3423, 3417, - 3396, 3396, 3403, 3425, 3426, 3404, 3405, 3406, 3407, 3408, - 3409, 3410, 3412, 3413, 3414, 3415, 3416, 3427, 3418, 3419, - 3424, 3420, 3422, 3424, 3429, 3424, 3423, 3431, 3435, 3437, - 3424, 3425, 3426, 3424, 3438, 3438, 3438, 3438, 3438, 3438, - - 3438, 3438, 3438, 3439, 3442, 3427, 3439, 3424, 3439, 3443, - 3440, 1271, 3429, 3440, 3441, 3431, 3435, 3437, 1214, 1213, - 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3444, - 3445, 3446, 3442, 3447, 3448, 3424, 3450, 3443, 3441, 3441, - 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3441, 3451, - 3454, 3455, 3456, 3457, 1212, 3459, 3460, 3444, 3445, 3446, - 3461, 3447, 3448, 3441, 3450, 3453, 3453, 3453, 3453, 3453, - 3453, 3453, 3453, 3453, 3462, 3467, 3468, 3451, 3454, 3455, - 3456, 3457, 3458, 3459, 3460, 3458, 3464, 3465, 3461, 3464, - 3465, 3466, 3465, 3470, 3466, 3469, 3466, 3471, 3469, 3472, - - 3469, 1211, 3462, 3467, 3468, 3474, 3523, 3650, 3474, 3523, - 3477, 3458, 3475, 3531, 3535, 3475, 3531, 3535, 3650, 1210, - 1209, 3470, 3481, 3482, 3483, 3471, 3484, 3472, 3481, 3475, - 3475, 3475, 3475, 3475, 3475, 3475, 3475, 3475, 3477, 3458, - 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3486, - 3481, 3482, 3483, 3487, 3484, 3488, 3481, 3489, 3490, 3491, - 3493, 3496, 3498, 3499, 3500, 3501, 3502, 3505, 3506, 3508, - 3509, 3548, 1205, 1204, 3548, 3551, 3548, 3486, 3551, 1203, - 3551, 3487, 3511, 3488, 3512, 3489, 3490, 3491, 3493, 3496, - 3498, 3499, 3500, 3501, 3502, 3505, 3506, 3508, 3509, 3510, - - 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, 3510, - 3511, 3513, 3512, 3516, 3517, 3518, 3519, 3521, 3522, 3606, - 3609, 1189, 3606, 3609, 3510, 3524, 3524, 3524, 3524, 3524, - 3524, 3524, 3524, 3524, 3528, 3529, 3530, 3532, 3533, 3513, - 3534, 3516, 3517, 3518, 3519, 3521, 3522, 3525, 3525, 3525, - 3525, 3525, 3525, 3525, 3525, 3525, 3526, 3536, 3537, 3526, - 3538, 3540, 3528, 3529, 3530, 3532, 3533, 3542, 3534, 3543, - 3544, 3546, 3553, 3526, 3526, 3526, 3526, 3526, 3526, 3526, - 3526, 3526, 3554, 3556, 3541, 3536, 3537, 3541, 3538, 3540, - 3545, 1187, 3557, 3545, 3558, 3542, 3563, 3543, 3544, 3546, - - 3553, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, - 3554, 3556, 3559, 1182, 3718, 1154, 3564, 3565, 3560, 3545, - 3557, 3560, 3558, 3697, 3563, 3718, 3559, 3559, 3559, 3559, - 3559, 3559, 3559, 3559, 3559, 3560, 3560, 3560, 3560, 3560, - 3560, 3560, 3560, 3560, 3564, 3565, 3567, 3545, 3561, 3561, - 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3569, 3570, 3571, - 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, - 3582, 3585, 3589, 3697, 3567, 3604, 3604, 3604, 3604, 3604, - 3604, 3604, 3604, 3604, 3591, 3569, 3570, 3571, 3572, 3573, - 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3585, - - 3589, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, 3590, - 3590, 3590, 3591, 3592, 3593, 3596, 3598, 3599, 3602, 3612, - 3602, 3602, 3612, 3602, 3612, 1150, 3590, 3605, 3607, 3743, - 3611, 3602, 3743, 3613, 3603, 3614, 3615, 3616, 3618, 3619, - 3622, 3592, 3593, 3596, 3598, 3599, 3603, 3603, 3603, 3603, - 3603, 3603, 3603, 3603, 3603, 3605, 3607, 3608, 3611, 3744, - 3608, 3613, 3744, 3614, 3615, 3616, 3618, 3619, 3622, 3623, - 3626, 3631, 1140, 3632, 3608, 3608, 3608, 3608, 3608, 3608, - 3608, 3608, 3608, 3617, 3617, 3617, 3617, 3617, 3617, 3617, - 3617, 3617, 3621, 3633, 1129, 3621, 3627, 3623, 3626, 3631, - - 3627, 3632, 3602, 3635, 3636, 3637, 3639, 3627, 1127, 3621, - 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3640, 3641, - 3642, 3633, 3634, 3643, 3627, 3644, 3645, 3646, 3627, 3647, - 3648, 3635, 3636, 3637, 3639, 3627, 3634, 3634, 3634, 3634, - 3634, 3634, 3634, 3634, 3634, 3651, 3640, 3641, 3642, 3653, - 3659, 3643, 3661, 3644, 3645, 3646, 3663, 3647, 3648, 3665, - 1125, 3666, 3672, 3666, 3666, 3673, 3666, 3674, 3673, 3783, - 3673, 1124, 3783, 3651, 3666, 1110, 3676, 3653, 3659, 3676, - 3661, 3676, 3681, 3667, 3663, 3667, 3667, 3665, 3667, 3679, - 3672, 3682, 3679, 3683, 3679, 3674, 3667, 3675, 3675, 3675, - - 3675, 3675, 3675, 3675, 3675, 3675, 3684, 3685, 3686, 3688, - 3681, 3689, 3692, 3693, 3694, 3695, 3699, 1109, 3700, 3682, - 3701, 3683, 3687, 3687, 3687, 3687, 3687, 3687, 3687, 3687, - 3687, 3702, 3703, 3704, 3684, 3685, 3686, 3688, 3705, 3689, - 3692, 3693, 3694, 3695, 3699, 3666, 3700, 3706, 3701, 3707, - 3709, 3710, 3711, 3713, 3714, 3717, 3722, 3724, 3725, 3702, - 3703, 3704, 3728, 3732, 3735, 3730, 3705, 3667, 3730, 3725, - 3730, 3736, 3737, 3738, 3739, 3706, 3740, 3707, 3709, 3710, - 3711, 3713, 3714, 3717, 3722, 3724, 3725, 3741, 3742, 3745, - 3728, 3742, 3735, 3746, 3747, 3748, 3749, 3725, 3751, 3736, - - 3737, 3738, 3739, 3752, 3740, 3754, 3755, 3772, 3756, 3757, - 3758, 3759, 3760, 3732, 3764, 3741, 3774, 3745, 3765, 3766, - 3767, 3746, 3769, 3748, 3749, 3776, 3751, 3777, 3779, 1105, - 3780, 3752, 3781, 3754, 3755, 3742, 3756, 3757, 3758, 3759, - 3760, 3782, 3764, 3784, 3747, 3789, 3765, 3766, 3767, 3785, - 3769, 3790, 3785, 3776, 3785, 3777, 3779, 3772, 3780, 3786, - 3781, 3791, 3786, 3742, 3786, 3787, 3774, 3788, 3787, 3782, - 3788, 3784, 3792, 3789, 3793, 3796, 3797, 3798, 3799, 3790, - 3800, 3801, 3804, 3805, 3808, 3810, 3805, 3811, 3812, 3791, - 3814, 3815, 3817, 3818, 3819, 3817, 3841, 3819, 3843, 3819, - - 3792, 3843, 3793, 3796, 3797, 3798, 3799, 3826, 3800, 3801, - 3804, 3828, 3829, 3810, 3830, 3811, 3812, 3821, 3814, 3815, - 3821, 3818, 3821, 3823, 3824, 3832, 3823, 3824, 3823, 3824, - 3833, 3834, 3835, 3836, 3808, 3826, 3837, 3842, 3840, 3828, - 3829, 3840, 3830, 3840, 3844, 3845, 3841, 3837, 3845, 3847, - 3837, 3850, 3852, 3832, 3850, 3852, 3850, 3852, 3833, 3834, - 3835, 3836, 3855, 3856, 3837, 3842, 3857, 3858, 3859, 3860, - 3861, 3862, 3844, 3863, 3864, 3837, 3865, 3847, 3837, 3869, - 3871, 1104, 3869, 3873, 3869, 3875, 3873, 3880, 3881, 1103, - 3855, 3856, 1102, 1101, 3857, 3858, 3859, 3860, 3861, 3862, - - 3872, 3863, 3864, 3872, 3865, 1061, 1009, 3882, 3871, 3874, - 3885, 3887, 3874, 3875, 3888, 3880, 3881, 3872, 3872, 3872, - 3872, 3872, 3872, 3872, 3872, 3872, 3874, 3874, 3874, 3874, - 3874, 3874, 3874, 3874, 3874, 3882, 3889, 3890, 3885, 3887, - 3897, 1008, 3888, 3894, 3894, 3894, 3894, 3894, 3894, 3894, - 3894, 3894, 3895, 988, 975, 3895, 964, 944, 927, 3900, - 3901, 3902, 3905, 3906, 3889, 3890, 902, 890, 3897, 3895, - 3895, 3895, 3895, 3895, 3895, 3895, 3895, 3895, 3896, 3896, - 3896, 3896, 3896, 3896, 3896, 3896, 3896, 3900, 3901, 3902, - 3905, 3906, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, - - 3909, 3913, 3916, 3917, 3918, 3919, 3920, 3922, 3923, 3924, - 879, 877, 875, 871, 827, 816, 807, 803, 772, 771, - 769, 768, 767, 765, 760, 759, 757, 756, 755, 3913, - 3916, 3917, 3918, 3919, 3920, 3922, 3923, 3924, 3927, 3927, - 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, - 3927, 3927, 3927, 3927, 3927, 3927, 3928, 3928, 3928, 3928, - 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, 3928, - 3928, 3928, 3928, 3928, 3929, 3929, 3929, 3929, 3929, 3929, - 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, - 3929, 3929, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, - - 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, - 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, - 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3932, 3932, - 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, - 3932, 3932, 3932, 3932, 3932, 3932, 3933, 3933, 3933, 3933, - 3933, 3933, 3933, 3933, 3933, 3933, 3933, 3933, 3933, 3933, - 3933, 3933, 3933, 3933, 3934, 3934, 3934, 3934, 3934, 3934, - 3934, 3934, 3934, 3934, 3934, 3934, 3934, 3934, 3934, 3934, - 3934, 3934, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, - 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, - - 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, - 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3937, 3937, - 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, - 3937, 3937, 3937, 3937, 3937, 3937, 3938, 3938, 3938, 3938, + 713, 713, 718, 724, 718, 720, 726, 725, 718, 722, + 727, 728, 713, 719, 725, 721, 732, 740, 720, 727, + 740, 743, 723, 908, 743, 713, 713, 722, 713, 713, + 718, 724, 718, 720, 726, 725, 718, 722, 727, 728, + + 753, 729, 725, 729, 732, 729, 738, 727, 761, 738, + 739, 738, 762, 739, 741, 739, 3167, 741, 744, 741, + 3145, 744, 746, 744, 763, 746, 764, 746, 753, 729, + 908, 729, 747, 729, 748, 747, 761, 748, 750, 748, + 762, 750, 751, 750, 752, 751, 774, 752, 758, 752, + 766, 758, 763, 766, 764, 775, 770, 776, 766, 770, + 777, 770, 778, 780, 770, 781, 782, 783, 784, 785, + 3145, 3162, 766, 787, 774, 786, 790, 787, 770, 791, + 789, 787, 786, 775, 785, 776, 792, 785, 777, 786, + 778, 780, 795, 781, 782, 783, 784, 785, 758, 789, + + 766, 787, 788, 786, 790, 787, 770, 791, 789, 787, + 786, 794, 785, 793, 792, 785, 788, 786, 788, 796, + 795, 796, 797, 798, 799, 801, 794, 789, 801, 793, + 788, 802, 804, 806, 809, 810, 811, 812, 813, 794, + 814, 793, 802, 815, 788, 817, 788, 796, 818, 796, + 797, 798, 799, 819, 794, 820, 821, 793, 822, 824, + 804, 806, 809, 810, 811, 812, 813, 825, 814, 826, + 828, 815, 802, 817, 829, 831, 818, 830, 832, 834, + 835, 819, 834, 820, 821, 836, 822, 824, 830, 837, + 838, 839, 840, 841, 842, 825, 843, 826, 828, 830, + + 844, 846, 829, 831, 847, 849, 832, 848, 835, 850, + 851, 852, 853, 836, 854, 848, 855, 837, 838, 839, + 840, 841, 842, 856, 843, 863, 911, 830, 844, 846, + 863, 997, 847, 849, 858, 848, 858, 850, 851, 852, + 853, 870, 854, 848, 855, 859, 861, 864, 859, 861, + 864, 856, 870, 859, 862, 859, 999, 862, 865, 862, + 3058, 865, 862, 865, 866, 874, 865, 866, 3132, 3118, + 882, 865, 863, 911, 867, 867, 874, 867, 997, 867, + 881, 858, 3072, 881, 867, 881, 915, 867, 881, 882, + 867, 916, 1523, 888, 917, 909, 861, 864, 909, 888, + + 859, 867, 3058, 999, 1004, 872, 872, 918, 872, 862, + 872, 912, 919, 865, 915, 1004, 912, 882, 872, 916, + 870, 872, 917, 883, 914, 1572, 883, 914, 883, 867, + 881, 883, 872, 883, 889, 918, 883, 1523, 884, 883, + 919, 884, 889, 884, 910, 909, 884, 910, 884, 910, + 883, 884, 910, 889, 884, 920, 921, 3070, 867, 867, + 872, 885, 3068, 912, 885, 884, 885, 888, 924, 885, + 1572, 885, 978, 925, 885, 978, 928, 885, 883, 914, + 3064, 889, 891, 920, 921, 891, 931, 891, 885, 872, + 872, 979, 887, 884, 979, 887, 924, 887, 891, 910, + + 887, 925, 887, 913, 928, 887, 913, 883, 887, 891, + 889, 913, 1713, 2881, 931, 892, 885, 1320, 892, 887, + 892, 1269, 884, 892, 893, 892, 932, 893, 892, 893, + 2881, 892, 1269, 894, 3055, 933, 894, 891, 894, 998, + 893, 894, 892, 894, 998, 885, 894, 887, 1699, 894, + 981, 893, 935, 981, 932, 936, 1320, 1713, 913, 896, + 894, 3047, 896, 933, 896, 3038, 891, 896, 897, 896, + 892, 897, 896, 897, 937, 896, 897, 3028, 897, 893, + 935, 897, 898, 936, 897, 898, 896, 898, 894, 900, + 898, 998, 900, 906, 900, 897, 906, 900, 906, 892, + + 922, 906, 937, 906, 898, 922, 906, 893, 939, 906, + 940, 900, 941, 942, 896, 1699, 907, 922, 943, 907, + 906, 907, 980, 897, 907, 980, 907, 980, 922, 907, + 2987, 982, 898, 922, 982, 2479, 939, 2479, 940, 900, + 941, 942, 945, 907, 946, 922, 943, 947, 906, 929, + 929, 929, 929, 929, 929, 929, 929, 929, 930, 930, + 930, 930, 930, 930, 930, 930, 930, 948, 949, 950, + 945, 907, 946, 951, 953, 947, 952, 906, 954, 952, + 955, 956, 957, 958, 959, 960, 961, 962, 963, 965, + 966, 967, 969, 965, 970, 948, 949, 950, 971, 972, + + 968, 951, 953, 968, 973, 974, 954, 952, 955, 956, + 957, 958, 959, 960, 961, 962, 963, 965, 966, 967, + 969, 965, 970, 977, 2985, 1401, 971, 972, 968, 1001, + 2981, 968, 973, 974, 983, 984, 1401, 983, 984, 983, + 985, 986, 2943, 985, 986, 985, 986, 987, 2904, 988, + 987, 977, 988, 990, 988, 991, 990, 1001, 991, 992, + 991, 993, 992, 1002, 993, 994, 993, 995, 994, 1003, + 995, 996, 995, 1000, 996, 1005, 1000, 1006, 1005, 1007, + 1008, 1012, 1007, 1005, 1007, 1013, 1015, 1007, 1016, 1017, + 1018, 1002, 1019, 1020, 1021, 2893, 1006, 1003, 1022, 1008, + + 1023, 2892, 1024, 1025, 1026, 1026, 1026, 1026, 1027, 1012, + 1029, 1028, 1030, 1013, 1015, 1028, 1016, 1017, 1018, 1031, + 1019, 1020, 1021, 1000, 1006, 1005, 1022, 1008, 1023, 1007, + 1024, 1025, 1026, 1026, 1026, 1026, 1027, 1032, 1029, 1028, + 1030, 1033, 1034, 1028, 1035, 1036, 1037, 1031, 1038, 1039, + 1041, 1040, 1038, 1042, 1038, 1040, 1043, 1044, 1045, 1046, + 1047, 2876, 1050, 1051, 1052, 1032, 1053, 1041, 1054, 1033, + 1034, 1055, 1035, 1036, 1037, 1052, 1038, 1039, 1041, 1040, + 1038, 1042, 1038, 1040, 1043, 1044, 1045, 1046, 1047, 1049, + 1050, 1051, 1056, 1049, 1053, 1041, 1054, 1057, 1058, 1055, + + 1049, 1059, 1049, 1060, 1061, 1052, 1063, 1064, 1065, 1066, + 1067, 1069, 1070, 1071, 2875, 1192, 1073, 1049, 1192, 1074, + 1056, 1049, 1076, 2866, 1077, 1057, 1058, 1078, 1049, 1059, + 1049, 1060, 1061, 2825, 1063, 1064, 1065, 1066, 1067, 1069, + 1070, 1071, 1072, 1072, 1073, 1079, 1072, 1074, 1080, 1081, + 1076, 1072, 1077, 1082, 1083, 1078, 1084, 1072, 1085, 1086, + 1087, 1072, 1088, 1072, 1090, 1091, 1092, 1093, 1094, 1095, + 1072, 1072, 1096, 1079, 1072, 1097, 1080, 1081, 1098, 1072, + 1099, 1082, 1083, 1100, 1084, 1072, 1085, 1086, 1087, 1072, + 1088, 1072, 1090, 1091, 1092, 1093, 1094, 1095, 1101, 1108, + + 1096, 1114, 1108, 1097, 1107, 1107, 1098, 1107, 1099, 1107, + 1113, 1100, 1115, 1113, 2824, 1119, 1756, 1107, 2815, 1112, + 1107, 1127, 1112, 1119, 1112, 1123, 1101, 1112, 1129, 1112, + 2809, 1107, 1112, 1123, 1119, 1112, 2775, 1117, 1121, 1131, + 1117, 1121, 1117, 1121, 1123, 1117, 1112, 1117, 1132, 1127, + 1117, 1115, 2755, 1117, 1121, 1124, 1129, 1134, 1124, 1107, + 1124, 1756, 1119, 1193, 1117, 1121, 1193, 1131, 1114, 1114, + 1108, 1124, 1123, 2705, 1112, 1195, 1132, 1136, 1195, 1577, + 1115, 1113, 1124, 1196, 1137, 1134, 1196, 1139, 1107, 1107, + 1577, 1118, 1117, 1121, 1118, 1140, 1118, 1138, 1142, 1118, + + 1144, 1118, 1145, 1112, 1118, 1136, 1120, 1118, 1146, 1120, + 1124, 1120, 1137, 1138, 1120, 1139, 1120, 1885, 1118, 1120, + 1147, 1117, 1120, 1140, 1122, 1138, 1142, 1122, 1144, 1122, + 1145, 2694, 1122, 1120, 1122, 1148, 1146, 1122, 1152, 1124, + 1122, 1138, 1154, 1157, 1158, 1143, 1118, 1159, 1147, 1160, + 1161, 1122, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 1120, 1885, 1148, 1162, 1163, 1152, 1165, 1166, 1167, + 1154, 1157, 1158, 1168, 1169, 1159, 1170, 1160, 1161, 1122, + 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1171, + 1120, 1173, 1162, 1163, 1174, 1165, 1166, 1167, 1172, 1172, + + 1175, 1168, 1169, 1176, 1170, 1178, 1179, 1180, 1181, 1182, + 1183, 1185, 1186, 1187, 1188, 1188, 2690, 1171, 1194, 1173, + 2652, 1194, 1174, 1194, 2651, 2627, 1172, 1172, 1175, 1198, + 2589, 1176, 1198, 1178, 1179, 1180, 1181, 1182, 1183, 1185, + 1186, 1187, 1188, 1188, 1197, 1199, 1204, 1197, 1199, 1197, + 1199, 1200, 1201, 1202, 1200, 1201, 1202, 1201, 1203, 1208, + 1209, 1203, 1210, 1217, 1218, 1219, 1221, 1222, 1224, 1225, + 1226, 1227, 1228, 1229, 1204, 1230, 1231, 1232, 1233, 1234, + 1235, 1236, 1237, 1232, 1238, 1239, 1240, 1208, 1209, 1241, + 1210, 1217, 1218, 1219, 1221, 1222, 1224, 1225, 1226, 1227, + + 1228, 1229, 1242, 1230, 1231, 1232, 1233, 1234, 1235, 1236, + 1237, 1232, 1238, 1239, 1240, 1243, 1244, 1241, 1245, 1246, + 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, + 1242, 1257, 1258, 1260, 1261, 1262, 1263, 1264, 1265, 1268, + 1270, 2562, 1254, 1243, 1244, 1271, 1245, 1246, 1247, 1248, + 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1267, 1257, + 1258, 1260, 1261, 1262, 1263, 1264, 1265, 1268, 1270, 1267, + 1254, 1272, 1274, 1271, 1267, 1267, 1275, 1276, 1277, 1279, + 1280, 1281, 1282, 1284, 1286, 1287, 1267, 1288, 1289, 1290, + 1291, 1292, 1294, 1296, 1289, 1297, 1298, 1267, 1299, 1272, + + 1274, 1300, 1267, 1267, 1275, 1276, 1277, 1279, 1280, 1281, + 1282, 1284, 1286, 1287, 1301, 1288, 1289, 1290, 1291, 1292, + 1294, 1296, 1289, 1297, 1298, 1302, 1299, 1303, 1304, 1300, + 1305, 1306, 1307, 1308, 1310, 1311, 1312, 1313, 1314, 1315, + 1316, 1317, 1301, 1318, 1319, 1323, 1334, 1331, 1396, 1397, + 2559, 1396, 1397, 1302, 1399, 1303, 1304, 1399, 1305, 1306, + 1307, 1308, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, + 1327, 1318, 1324, 1337, 1334, 1324, 1329, 1324, 1327, 1329, + 1324, 1329, 1324, 1319, 1323, 1324, 1331, 1333, 1324, 1327, + 1338, 1400, 1329, 1335, 1400, 1335, 1339, 1340, 1333, 1324, + + 1341, 1337, 1342, 1329, 1343, 2549, 1332, 1344, 1347, 1332, + 1349, 1332, 1319, 1323, 1332, 1350, 1332, 1327, 1338, 1332, + 1351, 1335, 1332, 1335, 1339, 1340, 1354, 1324, 1341, 1352, + 1342, 1329, 1343, 1332, 1346, 1344, 1347, 1346, 1349, 1346, + 1353, 1355, 1356, 1350, 1346, 1358, 1327, 1346, 1351, 1364, + 1366, 1369, 1370, 1371, 1333, 1372, 1354, 1352, 1373, 1374, + 1329, 1332, 1354, 1408, 1575, 2547, 1408, 1575, 1353, 1355, + 1356, 2514, 1375, 1358, 1376, 1377, 1378, 1364, 1366, 1369, + 1370, 1371, 1380, 1372, 1354, 1381, 1373, 1374, 1382, 1346, + 1354, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + + 1375, 1383, 1376, 1377, 1378, 1384, 1386, 1388, 1387, 1389, + 1380, 1390, 1391, 1381, 1387, 1398, 1382, 1402, 1398, 1403, + 1398, 1406, 1407, 1409, 1410, 1411, 1412, 1413, 1414, 1383, + 1415, 1416, 1417, 1384, 1386, 1388, 1387, 1389, 1418, 1390, + 1391, 1420, 1387, 1421, 1419, 1402, 1422, 1403, 1423, 1406, + 1407, 1409, 1410, 1411, 1412, 1413, 1414, 1419, 1415, 1416, + 1417, 1424, 1419, 1425, 1426, 1427, 1418, 1428, 1430, 1420, + 1431, 1421, 1419, 1429, 1422, 1432, 1423, 1433, 1434, 1429, + 1435, 1429, 1436, 1582, 1429, 1419, 1582, 1438, 1582, 1424, + 1419, 1425, 1426, 1427, 1439, 1428, 1430, 1440, 1431, 1441, + + 1437, 1429, 1442, 1432, 1437, 1433, 1434, 1429, 1435, 1429, + 1436, 1437, 1429, 1437, 1437, 1438, 1437, 1443, 1444, 1445, + 1446, 1447, 1439, 1448, 1449, 1440, 1450, 1441, 1437, 1451, + 1442, 1452, 1437, 1453, 1454, 1455, 1456, 1457, 1458, 1437, + 1463, 1437, 1437, 1464, 1437, 1443, 1444, 1445, 1446, 1447, + 1465, 1448, 1449, 1466, 1450, 1467, 1471, 1451, 1472, 1452, + 1468, 1453, 1454, 1455, 1456, 1457, 1458, 1468, 1463, 1475, + 1476, 1464, 1473, 2510, 1477, 1468, 1478, 1479, 1465, 1474, + 1468, 1466, 1480, 1467, 1471, 1473, 1472, 1473, 1468, 1481, + 1474, 1482, 1483, 1484, 1485, 1468, 1486, 1475, 1476, 1487, + + 1473, 1474, 1477, 1468, 1478, 1479, 1488, 1489, 1468, 1490, + 1480, 1491, 1492, 1473, 1490, 1473, 1493, 1481, 1494, 1482, + 1483, 1484, 1485, 1495, 1486, 1496, 1497, 1487, 1498, 1474, + 1499, 1500, 1501, 1502, 1488, 1489, 1504, 1490, 1505, 1491, + 1492, 1504, 1490, 1506, 1493, 1507, 1494, 1508, 1511, 1502, + 2508, 1495, 1512, 1496, 1497, 1509, 1498, 1513, 1499, 1500, + 1501, 1502, 1510, 1509, 1504, 1510, 1505, 1510, 1514, 1504, + 1516, 1506, 1517, 1507, 1509, 1518, 1511, 1502, 1510, 1519, + 1512, 1520, 1521, 1657, 1526, 1513, 2507, 2506, 1529, 1510, + 1757, 2499, 1530, 2006, 1657, 1531, 1514, 1534, 1516, 2487, + + 1517, 1757, 1509, 1518, 2006, 2485, 2484, 1519, 1522, 1520, + 1521, 1522, 1526, 1522, 1508, 1508, 1529, 1510, 1522, 1525, + 1530, 1522, 1525, 1531, 1525, 1534, 1535, 1532, 1537, 1525, + 1539, 1532, 1525, 1532, 1533, 1533, 1533, 1533, 1533, 1533, + 1533, 1533, 1533, 1545, 1546, 1547, 1547, 1547, 1547, 1547, + 1547, 1547, 1547, 1547, 1535, 1532, 1537, 1549, 1539, 1532, + 1550, 1532, 1551, 1522, 1552, 1553, 1554, 1555, 1556, 1557, + 1558, 1545, 1546, 1559, 1525, 1560, 1561, 1562, 1563, 1564, + 1565, 1566, 1567, 1568, 1569, 1549, 1570, 1576, 1550, 1580, + 1551, 1581, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1584, + + 1585, 1559, 1586, 1560, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1587, 1570, 1576, 1588, 1580, 1589, 1581, + 1590, 1591, 1592, 1588, 1593, 1594, 1595, 1584, 1585, 1596, + 1586, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, + 1606, 1587, 1607, 1608, 1588, 1609, 1589, 1610, 1590, 1591, + 1592, 1588, 1593, 1594, 1595, 1611, 1612, 1596, 1613, 1597, + 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1614, + 1607, 1608, 1615, 1609, 1616, 1610, 1617, 1618, 1619, 1620, + 1621, 1622, 1623, 1611, 1612, 1624, 1613, 1625, 1626, 1627, + 1628, 1629, 1630, 1631, 1632, 1634, 1635, 1614, 1636, 1638, + + 1615, 1633, 1616, 1639, 1617, 1618, 1619, 1620, 1621, 1622, + 1623, 1640, 1633, 1624, 1897, 1625, 1626, 1627, 1628, 1629, + 1630, 1631, 1632, 1634, 1635, 1641, 1636, 1638, 1642, 1643, + 1644, 1639, 1645, 1646, 1647, 1649, 1650, 1651, 1652, 1640, + 1653, 1654, 1633, 1655, 1659, 1660, 1661, 1663, 1664, 1666, + 1667, 1671, 1672, 1641, 1655, 2483, 1642, 1643, 1644, 1897, + 1645, 1646, 1647, 1649, 1650, 1651, 1652, 1673, 1653, 1654, + 1674, 1655, 1659, 1660, 1661, 1663, 1664, 1666, 1667, 1671, + 1672, 1676, 1655, 1656, 1656, 1677, 1678, 1656, 1679, 1656, + 1680, 1681, 1682, 1656, 1656, 1673, 1683, 1656, 1674, 1684, + + 1685, 1686, 1656, 1687, 1688, 1689, 1690, 1691, 2478, 1676, + 1692, 1656, 1656, 1677, 1678, 1656, 1679, 1656, 1680, 1681, + 1682, 1656, 1656, 1692, 1683, 1656, 1694, 1684, 1685, 1686, + 1656, 1687, 1688, 1689, 1690, 1691, 1693, 1695, 1692, 1693, + 1696, 1697, 1698, 1701, 1702, 1704, 1705, 1706, 1707, 1708, + 1709, 1692, 1715, 1711, 1694, 1719, 1711, 1720, 1711, 1722, + 1723, 1707, 1724, 1711, 1693, 1695, 1711, 1693, 1696, 1697, + 1698, 1701, 1702, 1704, 1705, 1706, 1707, 1708, 1709, 1725, + 1715, 1731, 1734, 1719, 1721, 1720, 1735, 1722, 1723, 1707, + 1724, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, + + 1726, 1728, 1726, 1733, 1733, 1736, 1737, 1725, 1711, 1731, + 1734, 1738, 1739, 1728, 1735, 1740, 1741, 1743, 1728, 1732, + 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1726, 1728, + 1726, 1733, 1733, 1736, 1737, 1744, 1746, 1745, 1748, 1738, + 1739, 1728, 1747, 1740, 1741, 1743, 1728, 1745, 1749, 1750, + 1751, 1752, 1753, 1747, 1754, 1755, 1761, 1762, 1745, 1765, + 1766, 1768, 1747, 1744, 1746, 1745, 1748, 1769, 1764, 1770, + 1747, 1764, 1771, 1764, 1772, 1745, 1749, 1750, 1751, 1752, + 1753, 1747, 1754, 1755, 1761, 1762, 1745, 1765, 1766, 1768, + 1747, 1773, 1774, 1775, 1776, 1769, 1777, 1770, 1778, 1779, + + 1771, 1780, 1772, 1781, 1782, 1783, 1784, 1785, 1786, 1787, + 1788, 1789, 1790, 1791, 1792, 1779, 1794, 1795, 1796, 1773, + 1774, 1775, 1776, 1797, 1777, 1793, 1778, 1779, 1793, 1780, + 1798, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, + 1790, 1791, 1792, 1779, 1794, 1795, 1796, 1799, 1800, 1801, + 1802, 1797, 1803, 1804, 1805, 1806, 1807, 1808, 1798, 1809, + 1808, 1810, 1807, 1811, 1812, 1811, 1813, 1814, 1816, 1817, + 1811, 1820, 1821, 1822, 1818, 1799, 1800, 1801, 1802, 1824, + 1803, 1804, 1805, 1806, 1807, 1818, 1825, 1809, 1823, 1810, + 1807, 1811, 1812, 1811, 1813, 1814, 1816, 1817, 1811, 1820, + + 1821, 1822, 1823, 1826, 1827, 1828, 1830, 1824, 1832, 1833, + 1834, 1835, 1836, 1837, 1825, 1818, 1823, 1838, 1840, 1841, + 1842, 1839, 1843, 1844, 1845, 1846, 3202, 2453, 1849, 1850, + 1851, 1826, 1827, 1828, 1830, 1839, 1832, 1833, 1834, 1835, + 1836, 1837, 1853, 3202, 1854, 1838, 1840, 1841, 1842, 1839, + 1843, 1844, 1845, 1846, 1848, 1848, 1849, 1850, 1851, 1859, + 1848, 1861, 1862, 1839, 1863, 1864, 1866, 1867, 1848, 1868, + 1853, 1848, 1854, 1869, 1870, 1871, 1874, 3518, 1877, 3518, + 1878, 1879, 1848, 1848, 1880, 1881, 1882, 1859, 1848, 1861, + 1862, 1883, 1863, 1864, 1866, 1867, 1848, 1868, 1886, 1848, + + 1887, 1869, 1870, 1871, 1874, 1875, 1877, 1875, 1878, 1879, + 1889, 1875, 1880, 1881, 1882, 1884, 1888, 1884, 1890, 1883, + 1891, 1884, 1875, 1888, 1875, 1892, 1886, 1893, 1887, 1894, + 1898, 1901, 1884, 1875, 1884, 1875, 1902, 1903, 1889, 1875, + 1905, 3209, 1906, 1884, 1888, 1884, 1890, 2073, 1891, 1884, + 1875, 1888, 1875, 1892, 1908, 1893, 1895, 1894, 1909, 1895, + 1884, 1895, 1884, 1910, 1902, 1903, 1895, 1912, 1905, 1895, + 1906, 1907, 1913, 1907, 1914, 1898, 1901, 1917, 1918, 1920, + 1921, 1922, 1908, 3209, 2442, 1923, 1909, 1924, 1925, 1926, + 1927, 1910, 2073, 1967, 2086, 1912, 1967, 2086, 2432, 1907, + + 1913, 1907, 1914, 2430, 1929, 1917, 1918, 1920, 1921, 1922, + 1930, 1895, 1915, 1923, 1931, 1924, 1925, 1926, 1927, 1915, + 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1932, 1928, + 1933, 1915, 1929, 1915, 1915, 1915, 1928, 1934, 1930, 1915, + 1935, 1936, 1931, 1937, 1915, 1938, 1939, 1940, 1941, 1942, + 1943, 1950, 1936, 1915, 2414, 2398, 1932, 1928, 1933, 1915, + 2359, 1915, 1915, 1915, 1928, 1934, 1952, 1915, 1935, 1936, + 1953, 1937, 1915, 1938, 1939, 1940, 1941, 1942, 1943, 1950, + 1936, 1915, 1946, 1946, 1946, 1946, 1948, 1948, 1948, 1948, + 1954, 1955, 1956, 1957, 1952, 1958, 1959, 1960, 1953, 1961, + + 1962, 1963, 1964, 1965, 1968, 1969, 1970, 1971, 1972, 2357, + 1973, 1974, 1976, 2343, 1977, 1978, 1979, 2301, 1954, 1955, + 1956, 1957, 2299, 1958, 1959, 1960, 1981, 1961, 1962, 1963, + 1964, 1965, 1968, 1969, 1970, 1971, 1972, 1946, 1973, 1974, + 1976, 1948, 1977, 1978, 1979, 1980, 1982, 1983, 1980, 1984, + 1980, 1985, 1986, 1987, 1981, 1988, 1989, 1990, 1991, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1996, 1999, 1996, 2000, + 2001, 2002, 2003, 2004, 1982, 1983, 2005, 1984, 2008, 1985, + 1986, 1987, 2009, 1988, 1989, 1990, 1991, 1992, 1993, 1994, + 1995, 2010, 1997, 1998, 2011, 1999, 2012, 2000, 2001, 2002, + + 2003, 2004, 2013, 2014, 2005, 2015, 2008, 2016, 2017, 2018, + 2009, 2165, 2298, 2020, 2165, 2021, 2165, 2201, 2022, 2010, + 2201, 2297, 2011, 2023, 2012, 2024, 2025, 3597, 2026, 3597, + 2013, 2014, 2027, 2015, 2028, 2016, 2017, 2018, 2019, 2019, + 2019, 2020, 2019, 2021, 2019, 2019, 2022, 2029, 2019, 2019, + 2019, 2023, 2030, 2024, 2025, 2019, 2026, 2019, 2031, 2032, + 2027, 2033, 2028, 2034, 2035, 2036, 2019, 2019, 2019, 2037, + 2019, 2038, 2019, 2019, 2039, 2029, 2019, 2019, 2019, 2040, + 2030, 2041, 2042, 2019, 2043, 2019, 2031, 2032, 2044, 2033, + 2045, 2034, 2035, 2036, 2048, 2049, 2050, 2037, 2051, 2038, + + 2056, 2057, 2039, 2058, 2059, 2060, 2061, 2040, 2062, 2041, + 2042, 2063, 2043, 2064, 2067, 2064, 2044, 2068, 2045, 2071, + 2074, 2075, 2048, 2049, 2050, 2072, 2051, 2072, 2056, 2057, + 2076, 2058, 2059, 2060, 2061, 2077, 2062, 2088, 2089, 2063, + 2078, 2064, 2067, 2064, 2079, 2068, 2080, 2071, 2081, 2082, + 2083, 2084, 2085, 2072, 2090, 2072, 2093, 2094, 2076, 2095, + 2096, 2097, 2098, 2077, 2099, 2074, 2075, 2100, 2078, 2101, + 2105, 2283, 2079, 2102, 2080, 2102, 2081, 2082, 2083, 2084, + 2085, 2281, 2088, 2089, 2093, 2094, 2106, 2095, 2096, 2097, + 2098, 2177, 2099, 2107, 2177, 2100, 2177, 2101, 2105, 2090, + + 2109, 2102, 2110, 2102, 2103, 2103, 2103, 2103, 2103, 2103, + 2103, 2103, 2103, 2111, 2106, 2113, 2103, 2108, 2103, 2103, + 2103, 2107, 2108, 2114, 2103, 2115, 2116, 2117, 2109, 2103, + 2110, 2118, 2119, 2120, 2122, 2123, 2124, 2125, 2103, 2367, + 2280, 2111, 2367, 2113, 2103, 2108, 2103, 2103, 2103, 2126, + 2108, 2114, 2103, 2115, 2116, 2117, 2127, 2103, 2128, 2118, + 2119, 2120, 2122, 2123, 2124, 2125, 2103, 2104, 2104, 2104, + 2104, 2104, 2104, 2104, 2104, 2104, 2129, 2126, 2130, 2131, + 2132, 2133, 2134, 2136, 2127, 2137, 2128, 2138, 2139, 2140, + 2143, 2143, 2143, 2143, 2145, 2145, 2146, 2146, 2146, 2146, + + 2147, 2147, 2148, 2150, 2129, 2151, 2130, 2131, 2132, 2133, + 2134, 2136, 2152, 2137, 2153, 2138, 2139, 2140, 2155, 2156, + 2258, 2157, 2158, 2166, 2159, 2160, 2166, 2244, 2161, 2162, + 2148, 2150, 2163, 2151, 2164, 2142, 2167, 2168, 2169, 2170, + 2152, 2171, 2153, 2172, 2173, 2143, 2155, 2156, 2145, 2157, + 2158, 2146, 2159, 2160, 2147, 2154, 2161, 2162, 2154, 3599, + 2163, 3599, 2164, 2166, 2167, 2168, 2169, 2170, 2174, 2171, + 2175, 2172, 2173, 3667, 2154, 3667, 2176, 2179, 2180, 2181, + 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2154, 2190, 2154, + 2191, 2166, 2192, 2193, 2141, 2196, 2174, 2197, 2175, 2154, + + 2198, 2154, 2154, 2154, 2176, 2179, 2180, 2181, 2182, 2183, + 2184, 2185, 2186, 2187, 2188, 2154, 2190, 2154, 2191, 2195, + 2192, 2193, 2195, 2196, 2195, 2197, 2199, 2154, 2198, 2154, + 2154, 2154, 2200, 2202, 2203, 2204, 2206, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2216, 2215, 2217, 2218, 2208, + 2209, 2219, 2220, 2221, 2199, 2215, 2222, 2223, 2224, 2225, + 2200, 2202, 2203, 2204, 2206, 2207, 2227, 2226, 2210, 2211, + 2212, 2213, 2214, 2216, 2215, 2217, 2218, 2228, 2229, 2219, + 2220, 2221, 2226, 2234, 2222, 2223, 2224, 2225, 2235, 2236, + 2237, 2238, 2239, 2240, 2227, 2226, 2241, 2242, 2243, 2245, + + 2246, 2247, 2248, 2249, 2254, 2228, 2229, 2255, 2257, 2261, + 2226, 2234, 2262, 2264, 2265, 2266, 2235, 2236, 2237, 2238, + 2239, 2240, 2267, 2268, 2241, 2242, 2243, 2245, 2246, 2247, + 2248, 2249, 2254, 2269, 2270, 2255, 2257, 2261, 2277, 2278, + 2262, 2264, 2265, 2266, 2279, 2282, 2284, 2286, 2287, 2288, + 2267, 2268, 2289, 2290, 2291, 2292, 2293, 2294, 2300, 2302, + 2296, 2269, 2270, 2296, 2303, 2296, 2277, 2278, 2304, 2305, + 2296, 2306, 2279, 2296, 2307, 2286, 2287, 2288, 2308, 2309, + 2289, 2290, 2291, 2292, 2293, 2294, 2311, 2296, 2312, 2313, + 2282, 2284, 2303, 2054, 2052, 2375, 2304, 2305, 2375, 2306, + + 2315, 2316, 2307, 2300, 2302, 2317, 2308, 2309, 2318, 2319, + 2320, 2314, 2321, 2318, 2311, 2296, 2312, 2313, 2314, 2314, + 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2322, 2315, 2316, + 2323, 2324, 2325, 2317, 2326, 2327, 2318, 2319, 2320, 2328, + 2321, 2318, 2329, 2331, 2332, 2333, 2335, 2338, 2340, 2341, + 2342, 2344, 2345, 2346, 2347, 2322, 2348, 2349, 2323, 2324, + 2325, 2350, 2326, 2327, 2351, 2354, 2356, 2328, 2047, 2361, + 2329, 2331, 2332, 2333, 2335, 2338, 2340, 2341, 2342, 2344, + 2345, 2346, 2347, 2362, 2348, 2349, 2365, 2358, 2358, 2350, + 2358, 2368, 2351, 2354, 2356, 2360, 2360, 2361, 2360, 2364, + + 2366, 2369, 2370, 2366, 2371, 2366, 2364, 2369, 2372, 2373, + 2374, 2362, 2376, 2377, 2365, 2378, 2379, 2380, 2381, 2368, + 2382, 2383, 1966, 2385, 2387, 2388, 2385, 2364, 2385, 2369, + 2370, 2389, 2371, 2390, 2364, 2369, 2372, 2373, 2374, 2391, + 2376, 2377, 2358, 2378, 2379, 2380, 2381, 2392, 2382, 2383, + 2360, 2386, 2387, 2388, 2386, 2393, 2386, 2358, 2394, 2389, + 2396, 2390, 2397, 2396, 2399, 2360, 2400, 2391, 2401, 2402, + 2403, 2404, 2405, 2406, 2407, 2392, 2408, 2410, 2411, 2412, + 2413, 2415, 2416, 2393, 2417, 2418, 2394, 2417, 2419, 1951, + 2397, 2421, 2399, 2422, 2400, 2423, 2401, 2402, 2403, 2404, + + 2405, 2406, 2407, 2424, 2408, 2410, 2411, 2412, 2413, 2415, + 2416, 2425, 2420, 2418, 2428, 2420, 2419, 2420, 2429, 2421, + 2431, 2422, 2433, 2423, 2434, 2436, 2437, 2438, 2439, 2440, + 2441, 2424, 2443, 2433, 2444, 1947, 2445, 2446, 2447, 2425, + 2448, 2450, 2428, 2451, 2452, 2454, 2429, 2455, 2431, 2456, + 2458, 2459, 2434, 2436, 2437, 2438, 2439, 2440, 2441, 2460, + 2443, 2461, 2444, 2433, 2445, 2446, 2447, 2462, 2448, 2450, + 2463, 2451, 2452, 2454, 2464, 2455, 2465, 2456, 2458, 2459, + 2466, 2467, 2468, 2471, 2472, 2473, 2475, 2460, 2476, 2461, + 2477, 2481, 2482, 2486, 2488, 2462, 2489, 2490, 2463, 2491, + + 2492, 2493, 2464, 2494, 2465, 2495, 2496, 2498, 2466, 2467, + 2468, 2471, 2472, 2473, 2475, 2501, 2476, 2513, 2477, 2481, + 2482, 2509, 2511, 2515, 2512, 2490, 1945, 2491, 2492, 2493, + 2502, 2494, 2501, 2495, 2496, 2498, 1916, 2500, 2486, 2488, + 2500, 2489, 2500, 2503, 2502, 2513, 2503, 2500, 2503, 2504, + 2500, 2515, 2504, 2503, 2504, 2516, 2517, 1900, 2505, 2504, + 2501, 2505, 2504, 2505, 2500, 2518, 2509, 2511, 2505, 2512, + 2503, 2505, 2502, 2519, 2520, 2521, 2504, 2522, 2524, 2525, + 2526, 2527, 2528, 2516, 2517, 2505, 2529, 2530, 2531, 2532, + 2533, 2534, 2500, 2518, 2535, 2536, 2537, 2538, 2503, 2539, + + 2540, 2519, 2520, 2521, 2504, 2522, 2524, 2525, 2526, 2527, + 2528, 2541, 2542, 2505, 2529, 2530, 2531, 2532, 2533, 2534, + 2543, 2544, 2535, 2536, 2537, 2538, 2545, 2539, 2540, 2546, + 2548, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2541, + 2542, 2558, 2560, 2560, 2565, 2560, 2566, 2567, 2543, 2544, + 2563, 2563, 2568, 2563, 2545, 2572, 2573, 2546, 2548, 2550, + 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2571, 2574, 2558, + 2571, 2575, 2565, 2576, 2566, 2567, 2577, 1899, 2578, 2579, + 2568, 2581, 2580, 2572, 2573, 2580, 2582, 2580, 2584, 2585, + 2586, 2587, 1896, 2588, 2592, 2593, 2574, 2560, 2594, 2575, + + 2595, 2576, 2596, 2597, 2577, 2563, 2578, 2579, 2599, 2581, + 2599, 2601, 2560, 2603, 2582, 2604, 2584, 2585, 2586, 2587, + 2563, 2588, 2592, 2593, 2600, 2605, 2594, 2600, 2595, 2606, + 2596, 2597, 2608, 2609, 2610, 2612, 2599, 2611, 2599, 2601, + 2611, 2603, 2613, 2604, 2614, 2615, 2616, 2618, 2619, 2621, + 2621, 2622, 2779, 2605, 2612, 2779, 2626, 2606, 2628, 2629, + 2608, 2609, 2610, 2612, 2620, 2630, 2631, 2620, 2632, 2620, + 2613, 2633, 2614, 2615, 2616, 2618, 2619, 2621, 2621, 2622, + 2624, 2634, 2612, 2624, 2626, 2624, 2628, 2629, 2635, 2637, + 2638, 2639, 2640, 2630, 2631, 2641, 2632, 2642, 2643, 2633, + + 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2653, 2654, 2634, + 2655, 2656, 2657, 2658, 2659, 2660, 2635, 2637, 2638, 2639, + 2640, 2661, 2663, 2641, 2664, 2642, 2643, 2665, 2644, 2645, + 2646, 2647, 2648, 2649, 2650, 2653, 2654, 2666, 2655, 2656, + 2657, 2658, 2659, 2660, 2667, 2668, 2670, 2671, 2672, 2661, + 2663, 2674, 2664, 2675, 2676, 2665, 2677, 2678, 2679, 2680, + 2681, 2683, 2684, 2685, 2686, 2666, 2687, 2688, 2706, 2691, + 2695, 2696, 2667, 2668, 2670, 2671, 2672, 1860, 1829, 2674, + 2698, 2675, 2676, 2691, 2677, 2678, 2679, 2695, 2696, 2683, + 2684, 2685, 2686, 2692, 2687, 2688, 2692, 2693, 2692, 1760, + + 2693, 2707, 2693, 2692, 2680, 2681, 2692, 2693, 2698, 2697, + 2693, 2691, 2697, 2706, 2708, 2695, 2696, 3669, 2699, 3669, + 2692, 2699, 2700, 2699, 2693, 2700, 2697, 2700, 2699, 1759, + 2701, 2699, 2700, 2701, 2703, 2701, 2709, 2703, 1758, 2703, + 2701, 2710, 2708, 2701, 2703, 2699, 2707, 2703, 2692, 2700, + 2712, 2713, 2693, 2704, 2714, 2715, 2704, 2701, 2704, 2716, + 2717, 2703, 2718, 2704, 2709, 2719, 2704, 2720, 2721, 2710, + 2722, 2723, 2724, 2699, 2725, 2726, 2727, 2700, 2712, 2713, + 2704, 2728, 2714, 2715, 2730, 2701, 2731, 2716, 2717, 2703, + 2718, 2732, 2733, 2719, 2734, 2720, 2721, 2735, 2722, 2723, + + 2724, 2736, 2725, 2726, 2727, 2737, 2738, 2739, 2704, 2728, + 2740, 2741, 2730, 2742, 2731, 2743, 2745, 2746, 2747, 2732, + 2733, 2748, 2734, 2749, 2750, 2735, 2752, 2753, 2757, 2736, + 2758, 2759, 2760, 2737, 2738, 2739, 2761, 2762, 2740, 2741, + 2763, 2742, 2764, 2743, 2745, 2746, 2747, 2767, 2768, 2748, + 2769, 2749, 2750, 2770, 2752, 2753, 2757, 2771, 2758, 2759, + 2760, 2772, 2773, 2776, 2761, 2762, 2777, 2778, 2763, 2780, + 2764, 2782, 2780, 2783, 2785, 2767, 2768, 2785, 2769, 2786, + 2787, 2770, 2788, 2790, 2791, 2771, 2792, 2793, 2795, 2772, + 2773, 2776, 2789, 2794, 2777, 2778, 2794, 2796, 2794, 2782, + + 2789, 2783, 2797, 2789, 2798, 2789, 2799, 2786, 2787, 2800, + 2801, 2790, 2791, 2788, 2792, 2793, 2795, 2802, 2805, 2806, + 2789, 2807, 2811, 2812, 2813, 2796, 2814, 2817, 2789, 2816, + 2797, 2789, 2798, 2789, 2799, 2813, 2818, 2800, 2801, 2819, + 2816, 2788, 2820, 2821, 2822, 2802, 2805, 2806, 2823, 2807, + 2811, 2812, 2826, 2827, 2814, 2817, 2828, 2829, 2830, 2832, + 2833, 2834, 2831, 2835, 2818, 2836, 2826, 2819, 2837, 2838, + 2820, 2821, 2822, 2831, 2839, 2840, 2823, 2841, 2842, 2844, + 2826, 2827, 2845, 2846, 2828, 2829, 2830, 2832, 2833, 2834, + 2847, 2835, 2848, 2836, 2849, 2850, 2837, 2838, 2851, 2852, + + 2853, 2854, 2839, 2840, 2855, 2841, 2842, 2844, 2856, 2857, + 2845, 2846, 2858, 2859, 2860, 2861, 2862, 2863, 2847, 2864, + 2848, 2865, 2849, 2850, 2891, 2867, 2851, 2852, 2853, 2854, + 2888, 2869, 2855, 2888, 1730, 1727, 2856, 2857, 2894, 2991, + 2858, 2859, 2860, 2867, 2862, 2863, 2877, 2864, 2869, 2865, + 2991, 2868, 2871, 2867, 2868, 2871, 2868, 2871, 2878, 1718, + 2861, 2868, 2871, 2877, 2868, 2949, 2894, 2872, 2949, 2891, + 2872, 2867, 2872, 2879, 2896, 2878, 2869, 2872, 2868, 2871, + 2872, 2880, 2873, 2874, 2897, 2873, 2874, 2873, 2874, 1714, + 2879, 2877, 2873, 2874, 2872, 2873, 2874, 3731, 2880, 3731, + + 2898, 2955, 2896, 2878, 2955, 1712, 2868, 2871, 2899, 2873, + 2874, 1710, 2897, 1700, 2882, 1658, 2900, 2882, 2879, 2882, + 2884, 1648, 2872, 2884, 2882, 2884, 2880, 2882, 2898, 2885, + 2884, 1578, 2885, 2884, 2885, 2901, 2899, 2873, 2874, 2885, + 2886, 2882, 2885, 2886, 2900, 2886, 1573, 2884, 1571, 2887, + 2886, 2902, 2887, 2903, 2887, 2889, 2885, 2905, 2889, 2887, + 2889, 2890, 2906, 2901, 2890, 2889, 2890, 2886, 2889, 2882, + 2908, 2890, 2910, 2912, 2890, 2884, 2887, 2913, 2914, 2902, + 2916, 2903, 2889, 2917, 2885, 2905, 2918, 2919, 2890, 2920, + 2906, 2921, 2922, 2923, 2925, 2886, 2926, 2927, 2908, 2931, + + 2910, 2912, 2932, 2933, 2887, 2913, 2914, 2935, 2916, 2936, + 2889, 2917, 2937, 2938, 2918, 2919, 2890, 2920, 2939, 2921, + 2922, 2923, 2925, 2940, 2926, 2927, 2942, 2931, 2944, 2945, + 2932, 2933, 2946, 2947, 2948, 2935, 2950, 2936, 2952, 2953, + 2937, 2938, 2954, 2959, 2956, 2960, 2939, 2956, 2962, 2956, + 2963, 2940, 2964, 2965, 2942, 2966, 2944, 2945, 2968, 1548, + 2946, 2947, 2948, 2967, 2950, 2969, 2952, 2953, 2969, 2973, + 2954, 2959, 2974, 2960, 2967, 2967, 2962, 2975, 2963, 2977, + 2964, 2965, 2972, 2966, 2970, 2972, 2968, 2972, 2970, 2976, + 2978, 2967, 2976, 2979, 2980, 2970, 2982, 2973, 2983, 2984, + + 2974, 2988, 2967, 2967, 2989, 2975, 2992, 2977, 2994, 2995, + 2996, 2997, 2970, 2998, 2999, 3000, 2970, 3001, 2978, 3002, + 3002, 2979, 2980, 2970, 2982, 3003, 2983, 2984, 3004, 2988, + 3005, 3006, 2989, 3007, 2992, 3008, 2994, 2995, 2996, 2997, + 3010, 2998, 2999, 3000, 3011, 3001, 3012, 3002, 3002, 3013, + 3014, 3015, 3016, 3003, 3017, 3018, 3004, 3019, 3005, 3006, + 3020, 3007, 3021, 3008, 3023, 3024, 3018, 3025, 3010, 3027, + 3029, 3020, 3011, 1544, 3012, 3030, 3031, 3013, 3014, 3015, + 3016, 3033, 3017, 3034, 3035, 3019, 3036, 3037, 3039, 3040, + 3021, 3041, 3023, 3024, 3043, 3025, 3018, 3027, 3029, 3044, + + 1528, 3020, 3049, 3030, 3031, 3049, 3041, 3048, 3050, 3033, + 3060, 3034, 3035, 3060, 3036, 3037, 3039, 3040, 3046, 3041, + 3056, 3046, 3043, 3046, 3048, 1527, 3065, 3044, 3046, 3057, + 3051, 3046, 3066, 3051, 3041, 3051, 3050, 3056, 3097, 3052, + 3051, 3097, 3052, 3051, 3052, 3046, 3057, 3109, 3053, 3052, + 3109, 3053, 3048, 3053, 3065, 1524, 3067, 3051, 3053, 3054, + 3066, 3053, 3054, 1470, 3054, 3056, 3052, 3069, 3113, 3054, + 3071, 3113, 3054, 3046, 3057, 3053, 1469, 3059, 3061, 3073, + 3059, 3061, 3059, 3061, 3067, 3051, 3054, 3059, 3061, 3074, + 3059, 3061, 3075, 3076, 3052, 3069, 3062, 3078, 3071, 3062, + + 3079, 3062, 3080, 3053, 3059, 3061, 3062, 3073, 3081, 3062, + 3082, 3083, 3084, 3085, 3054, 3087, 3088, 3074, 3089, 3090, + 3075, 3076, 3092, 3062, 3093, 3078, 3094, 3095, 3079, 3096, + 3080, 3098, 3059, 3061, 3099, 3100, 3081, 3102, 3082, 3083, + 3084, 3085, 3103, 3087, 3088, 3104, 3089, 3090, 3105, 3106, + 3092, 3062, 3093, 3115, 3094, 3095, 3115, 3096, 3115, 3098, + 3108, 3107, 3099, 3100, 3107, 3102, 3111, 3116, 3117, 3119, + 3103, 3120, 3121, 3104, 3122, 3123, 3105, 3106, 3107, 3107, + 3107, 3107, 3107, 3107, 3107, 3107, 3107, 3124, 3108, 3125, + 3126, 3127, 3129, 1462, 3111, 3116, 3117, 3119, 3136, 3120, + + 3121, 3136, 3122, 3123, 3128, 3130, 3131, 3128, 3133, 3134, + 3135, 3137, 3138, 3139, 3140, 3124, 3142, 3125, 3126, 3127, + 3129, 3128, 3128, 3128, 3128, 3128, 3128, 3128, 3128, 3128, + 3143, 3144, 3146, 3130, 3131, 3147, 3133, 3134, 3135, 3137, + 3138, 3139, 3140, 3149, 3142, 3150, 3151, 3153, 3154, 3156, + 3157, 3158, 3159, 3160, 3161, 3163, 3164, 3165, 3143, 3144, + 3146, 3166, 3168, 3147, 3169, 3170, 3171, 3173, 3175, 3178, + 1461, 3149, 3182, 3150, 3151, 3153, 3154, 3156, 3157, 3158, + 3159, 3160, 3161, 3163, 3164, 3165, 3184, 3181, 3186, 3166, + 3168, 3187, 3169, 3170, 3171, 3173, 3175, 3178, 3181, 3188, + + 3182, 3189, 3190, 3191, 3192, 3194, 3195, 3196, 3197, 3198, + 3199, 1460, 3200, 3212, 3184, 3200, 3186, 3200, 3234, 3187, + 3198, 3234, 3200, 3201, 3566, 3200, 3206, 3188, 3181, 3189, + 3190, 3191, 3192, 3194, 3195, 3196, 3197, 3198, 3199, 3200, + 3201, 3212, 3203, 3206, 3213, 3203, 3204, 3203, 3198, 3204, + 3205, 3204, 3203, 3205, 3214, 3205, 3204, 1405, 3265, 3215, + 3205, 3265, 3216, 3205, 3218, 3219, 3220, 3200, 3201, 3203, + 3222, 3206, 3213, 3204, 3566, 3207, 3208, 3205, 3207, 3208, + 3207, 3208, 3214, 1404, 1393, 3207, 3208, 3215, 3207, 3208, + 3216, 1368, 3218, 3219, 3220, 3223, 3224, 3203, 3222, 3225, + + 3226, 3204, 3207, 3208, 3227, 3205, 3210, 3211, 3230, 3210, + 3211, 3210, 3211, 3231, 3232, 3233, 3210, 3211, 3235, 3210, + 3211, 3236, 3239, 3223, 3224, 3240, 3241, 3225, 3226, 3242, + 3207, 3208, 3227, 3210, 3211, 3238, 3230, 3243, 3238, 3244, + 3238, 3231, 3232, 3233, 3245, 3246, 3235, 3284, 3273, 3236, + 3239, 3273, 1367, 3240, 3241, 3248, 3250, 3242, 3284, 1363, + 3253, 3210, 3211, 3253, 1362, 3243, 3252, 3244, 3249, 3255, + 3256, 3249, 3245, 3246, 3247, 3247, 3247, 3247, 3247, 3247, + 3247, 3247, 3247, 3248, 3250, 3249, 3249, 3249, 3249, 3249, + 3249, 3249, 3249, 3249, 3252, 3257, 3258, 3255, 3256, 3259, + + 3260, 3261, 3262, 3263, 3266, 3267, 3253, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3269, 3270, 3271, 3274, + 3275, 3276, 3277, 3257, 3258, 3277, 3278, 3259, 3260, 3261, + 3262, 3263, 3266, 3267, 3253, 3279, 3280, 3281, 3279, 3282, + 3283, 3285, 3286, 3287, 3269, 3270, 3271, 3274, 3275, 3276, + 3288, 3290, 3291, 3292, 3278, 3293, 3294, 3298, 3299, 3300, + 3301, 3304, 3305, 3306, 3280, 3281, 3307, 3282, 3283, 3285, + 3286, 3287, 3309, 3311, 3307, 3312, 3313, 3314, 3288, 3290, + 3291, 3292, 3315, 3293, 3294, 3298, 3299, 3300, 3301, 3304, + 3305, 3306, 3316, 3317, 3307, 3318, 3320, 3321, 3322, 3323, + + 3309, 3311, 3307, 3312, 3313, 3314, 3324, 3325, 1361, 3326, + 3315, 3327, 3326, 3329, 3326, 1360, 3329, 3332, 3333, 3326, + 3316, 3317, 3326, 3318, 3320, 3321, 3322, 3323, 3327, 3334, + 3335, 3336, 1359, 3339, 3324, 3325, 3326, 1357, 3328, 3330, + 3341, 3328, 3330, 3328, 3330, 3332, 3333, 3343, 3328, 3330, + 3331, 3328, 3330, 3331, 3344, 3331, 3327, 3334, 3335, 3336, + 3331, 3339, 3345, 3331, 3326, 3328, 3330, 3346, 3341, 3347, + 3349, 3351, 3352, 3355, 3351, 3343, 3356, 3331, 3380, 1326, + 3381, 3380, 3344, 3381, 3382, 3385, 1322, 3382, 3385, 3350, + 3345, 3399, 3350, 3328, 3330, 3346, 3389, 3347, 3349, 3389, + + 3352, 3355, 3399, 1293, 3356, 3331, 3350, 3350, 3350, 3350, + 3350, 3350, 3350, 3350, 3350, 3353, 3353, 3353, 3353, 3353, + 3353, 3353, 3353, 3353, 3353, 3353, 3354, 3354, 3354, 3354, + 3354, 3354, 3354, 3354, 3354, 3354, 3354, 3357, 3358, 3359, + 3353, 3360, 3361, 3362, 3363, 3365, 3367, 3369, 3371, 3372, + 1285, 3354, 3364, 3364, 3364, 3364, 3364, 3364, 3364, 3364, + 3364, 3368, 3373, 3374, 3368, 3357, 3358, 3359, 3375, 3360, + 3361, 3362, 3363, 3365, 3367, 3369, 3371, 3372, 3368, 3368, + 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3376, 3377, 3378, + 3373, 3374, 3383, 3384, 3386, 3387, 3375, 3388, 3390, 1283, + + 3451, 3390, 3428, 3451, 3428, 1278, 1273, 3393, 3395, 3391, + 3397, 3401, 3391, 3402, 3403, 3376, 3377, 3378, 3405, 3406, + 3383, 3384, 3386, 3387, 1216, 3388, 3391, 3391, 3391, 3391, + 3391, 3391, 3391, 3391, 3391, 3393, 3395, 3404, 3397, 3401, + 3408, 3402, 3403, 3407, 3409, 3410, 3405, 3406, 3404, 3411, + 3412, 3407, 3407, 3413, 3414, 3415, 3416, 3417, 3418, 3419, + 3420, 3421, 3423, 3424, 3425, 3426, 3427, 3429, 3408, 3430, + 3431, 3407, 3409, 3410, 3428, 3433, 3434, 3411, 3412, 3407, + 3407, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, + 3423, 3424, 3425, 3426, 3427, 3429, 3435, 3430, 3431, 3435, + + 3436, 3435, 3437, 3433, 3434, 3438, 3435, 3440, 3442, 3435, + 3446, 3448, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, + 3449, 3660, 3453, 3435, 3450, 3454, 3455, 3450, 3436, 3450, + 3437, 3452, 3660, 3438, 3475, 3440, 3442, 3475, 3446, 3448, + 3456, 3450, 3450, 3450, 3450, 3450, 3450, 3450, 3450, 3450, + 3453, 3435, 1215, 3454, 3455, 3452, 3452, 3452, 3452, 3452, + 3452, 3452, 3452, 3452, 3452, 3452, 3457, 3458, 3456, 3459, + 3461, 3462, 3465, 3466, 3467, 3468, 3469, 1214, 3470, 3469, + 3452, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, + 3471, 3472, 3473, 3478, 3457, 3458, 3479, 3459, 3461, 3462, + + 3465, 3466, 3467, 3468, 3476, 3469, 3470, 3476, 3477, 3476, + 3481, 3477, 3480, 3477, 3482, 3480, 3483, 3480, 3471, 3472, + 3473, 3478, 3485, 3534, 3479, 3485, 3534, 3542, 3486, 3546, + 3542, 3486, 3546, 3469, 1213, 3488, 3493, 3492, 3481, 3494, + 3495, 3497, 3482, 3492, 3483, 3486, 3486, 3486, 3486, 3486, + 3486, 3486, 3486, 3486, 3487, 3487, 3487, 3487, 3487, 3487, + 3487, 3487, 3487, 3488, 3493, 3492, 3498, 3494, 3495, 3497, + 3499, 3492, 3500, 3501, 3502, 3504, 3507, 3509, 3510, 3511, + 3512, 3513, 3516, 3517, 3519, 3520, 3559, 3562, 3639, 3559, + 3562, 3559, 3562, 3617, 3498, 1212, 3617, 3522, 3499, 3523, + + 3500, 3501, 3502, 3504, 3507, 3509, 3510, 3511, 3512, 3513, + 3516, 3517, 3519, 3520, 3521, 3521, 3521, 3521, 3521, 3521, + 3521, 3521, 3521, 3521, 3521, 3522, 3524, 3523, 3527, 3528, + 3529, 3530, 3532, 3533, 3620, 1211, 1207, 3620, 3639, 3521, + 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3539, + 3540, 3541, 3543, 3544, 3524, 3545, 3527, 3528, 3529, 3530, + 3532, 3533, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, + 3536, 3537, 3547, 3548, 3537, 3549, 3551, 3539, 3540, 3541, + 3543, 3544, 3553, 3545, 3554, 3555, 3557, 3564, 3537, 3537, + 3537, 3537, 3537, 3537, 3537, 3537, 3537, 3565, 3567, 3552, + + 3547, 3548, 3552, 3549, 3551, 3556, 1206, 3568, 3556, 3569, + 3553, 3574, 3554, 3555, 3557, 3564, 3552, 3552, 3552, 3552, + 3552, 3552, 3552, 3552, 3552, 3565, 3567, 3570, 1205, 3661, + 1191, 3575, 3576, 3571, 3556, 3568, 3571, 3569, 3641, 3574, + 3661, 3570, 3570, 3570, 3570, 3570, 3570, 3570, 3570, 3570, + 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3575, + 3576, 3578, 3556, 3572, 3572, 3572, 3572, 3572, 3572, 3572, + 3572, 3572, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, + 3588, 3589, 3590, 3591, 3592, 3593, 3596, 3600, 3641, 3578, + 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3602, + + 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, + 3590, 3591, 3592, 3593, 3596, 3600, 3601, 3601, 3601, 3601, + 3601, 3601, 3601, 3601, 3601, 3601, 3601, 3602, 3603, 3604, + 3607, 3609, 3610, 3613, 3623, 3613, 3613, 3623, 3613, 3623, + 1189, 3601, 3616, 3618, 3754, 3622, 3613, 3754, 3624, 3614, + 3625, 3626, 3627, 3629, 3630, 3633, 3603, 3604, 3607, 3609, + 3610, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, 3614, + 3616, 3618, 3619, 3622, 3755, 3619, 3624, 3755, 3625, 3626, + 3627, 3629, 3630, 3633, 3634, 3637, 3642, 1184, 3643, 3619, + 3619, 3619, 3619, 3619, 3619, 3619, 3619, 3619, 3628, 3628, + + 3628, 3628, 3628, 3628, 3628, 3628, 3628, 3632, 3644, 1155, + 3632, 3638, 3634, 3637, 3642, 3638, 3643, 3613, 3646, 3647, + 3648, 3650, 3638, 1151, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3651, 3652, 3653, 3644, 3645, 3654, 3638, + 3655, 3656, 3657, 3638, 3658, 3659, 3646, 3647, 3648, 3650, + 3638, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3662, 3651, 3652, 3653, 3664, 3670, 3654, 3672, 3655, 3656, + 3657, 3674, 3658, 3659, 3676, 3729, 3677, 3683, 3677, 3677, + 3684, 3677, 3685, 3684, 3794, 3684, 3729, 3794, 3662, 3677, + 1141, 3687, 3664, 3670, 3687, 3672, 3687, 3692, 3678, 3674, + + 3678, 3678, 3676, 3678, 3690, 3683, 3693, 3690, 3694, 3690, + 3685, 3678, 3686, 3686, 3686, 3686, 3686, 3686, 3686, 3686, + 3686, 3695, 3696, 3697, 3699, 3692, 3700, 3703, 3704, 3705, + 3706, 3708, 1130, 3710, 3693, 3711, 3694, 3698, 3698, 3698, + 3698, 3698, 3698, 3698, 3698, 3698, 3712, 3713, 3714, 3695, + 3696, 3697, 3699, 3743, 3700, 3703, 3704, 3705, 3706, 3715, + 3677, 3710, 3716, 3711, 3717, 3718, 3720, 3721, 3722, 3724, + 3725, 3728, 3733, 3735, 3712, 3713, 3714, 3736, 3739, 3746, + 3741, 3708, 3678, 3741, 3747, 3741, 3748, 3715, 3736, 3749, + 3716, 3750, 3717, 3718, 3720, 3721, 3722, 3724, 3725, 3728, + + 3733, 3735, 3751, 3743, 3752, 3736, 3739, 3746, 3753, 3756, + 3757, 3753, 3747, 3758, 3748, 3759, 3736, 3749, 3760, 3750, + 3762, 3763, 3765, 3766, 3767, 3768, 3769, 3783, 3770, 3771, + 3751, 3775, 3752, 3776, 3777, 3785, 3778, 3756, 3757, 3780, + 3787, 3788, 3790, 3759, 3791, 3792, 3760, 3793, 3762, 3763, + 3765, 3766, 3767, 3768, 3769, 3753, 3770, 3771, 3795, 3775, + 3800, 3776, 3777, 3758, 3778, 3801, 3802, 3780, 3787, 3788, + 3790, 3796, 3791, 3792, 3796, 3793, 3796, 3783, 3798, 3797, + 3803, 3798, 3797, 3753, 3797, 3785, 3795, 3799, 3800, 3804, + 3799, 3807, 3808, 3801, 3802, 3809, 3810, 3811, 3812, 3815, + + 3816, 3819, 3821, 3816, 3822, 3823, 3825, 3826, 3803, 3828, + 3829, 3830, 3828, 3852, 3830, 3854, 3830, 3804, 3854, 3807, + 3808, 3837, 3839, 3809, 3810, 3811, 3812, 3815, 3840, 3841, + 3821, 3843, 3822, 3823, 3825, 3826, 3832, 3834, 3829, 3832, + 3834, 3832, 3834, 3835, 3844, 3845, 3835, 3846, 3835, 3837, + 3839, 3819, 3847, 3848, 3853, 3851, 3840, 3841, 3851, 3843, + 3851, 3855, 3856, 3852, 3848, 3856, 3858, 3848, 3866, 3867, + 3868, 3861, 3844, 3845, 3861, 3846, 3861, 3869, 3870, 3871, + 3847, 3848, 3853, 3863, 3872, 3873, 3863, 3874, 3863, 3855, + 3875, 3876, 3848, 3882, 3858, 3848, 3866, 3867, 3868, 3880, + + 3884, 1128, 3880, 3884, 3880, 3869, 3870, 3871, 3883, 1126, + 1125, 3883, 3872, 3873, 1111, 3874, 3886, 3885, 3875, 3876, + 3885, 3882, 3891, 3892, 3893, 3883, 3883, 3883, 3883, 3883, + 3883, 3883, 3883, 3883, 3885, 3885, 3885, 3885, 3885, 3885, + 3885, 3885, 3885, 3896, 3886, 3898, 3899, 3900, 3901, 3908, + 3891, 3892, 3893, 3905, 3905, 3905, 3905, 3905, 3905, 3905, + 3905, 3905, 3906, 1110, 1106, 3906, 1105, 1104, 1103, 3911, + 3912, 3896, 3913, 3898, 3899, 3900, 3901, 3908, 3916, 3906, + 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3907, 3907, + 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3911, 3912, 3917, + + 3913, 3924, 3927, 3928, 3929, 3930, 3916, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3931, 3933, 3934, 3935, + 1102, 1062, 1010, 1009, 989, 976, 964, 3917, 944, 3924, + 3927, 3928, 3929, 3930, 927, 902, 890, 879, 877, 875, + 871, 827, 816, 807, 3931, 3933, 3934, 3935, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, - 3938, 3938, 3938, 3938, 3939, 3939, 3939, 3939, 3939, 3939, + 3938, 3938, 3938, 3938, 3938, 3938, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, 3939, - 3939, 3939, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, + 3939, 3939, 3939, 3939, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, - 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, - 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3942, 3942, + 3940, 3940, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, + 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, - 3942, 3942, 3942, 3942, 3942, 3942, 3943, 3943, 3943, 3943, + 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, - 3943, 3943, 3943, 3943, 3944, 3944, 3944, 3944, 3944, 3944, + 3943, 3943, 3943, 3943, 3943, 3943, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, - 3944, 3944, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, + 3944, 3944, 3944, 3944, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, 3945, - 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, - 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3947, 3947, + 3945, 3945, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, + 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3946, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, - 3947, 3947, 3947, 3947, 3947, 3947, 3948, 3948, 3948, 3948, + 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, 3948, - 3948, 3948, 3948, 3948, 3949, 3949, 3949, 3949, 3949, 3949, + 3948, 3948, 3948, 3948, 3948, 3948, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, - 3949, 3949, 3950, 3950, 749, 3950, 3950, 3950, 3950, 3950, + 3949, 3949, 3949, 3949, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, + 3950, 3950, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, - 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3952, 3952, - 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, - 3952, 3952, 3952, 3952, 3952, 3952, 3953, 3953, 3953, 3953, + 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, + 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, - 3953, 3953, 3953, 3953, 3954, 3954, 3954, 3954, 3954, 3954, + 3953, 3953, 3953, 3953, 3953, 3953, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, 3954, - 3954, 3954, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, + 3954, 3954, 3954, 3954, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, + 3955, 3955, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, - 3957, 3957, 3957, 3957, 3957, 3957, 3958, 3958, 3958, 3958, + 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, - 3958, 3958, 3958, 3958, 3959, 3959, 3959, 3959, 3959, 3959, + 3958, 3958, 3958, 3958, 3958, 3958, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959, - 3959, 3959, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, + 3959, 3959, 3959, 3959, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, + 3960, 3960, 3961, 3961, 803, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, - 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, - 3962, 3962, 3962, 3962, 3962, 3962, 3963, 3963, 3963, 3963, - 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, + 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3963, 3963, - 3963, 3963, 3963, 3963, 3964, 3964, 3964, 3964, 3964, 3964, + 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, 3963, + 3963, 3963, 3963, 3963, 3963, 3963, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, - 3964, 3964, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, + 3964, 3964, 3964, 3964, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, + 3965, 3965, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, - 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, - 3967, 3967, 3967, 3967, 3967, 3967, 3968, 3968, 742, 3968, + 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, - 3968, 3968, 3968, 3968, 3969, 3969, 731, 3969, 3969, 3969, + 3968, 3968, 3968, 3968, 3968, 3968, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969, - 3969, 3969, 3970, 3970, 730, 3970, 3970, 3970, 3970, 3970, + 3969, 3969, 3969, 3969, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, + 3970, 3970, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, - 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, - 3972, 3972, 3972, 3972, 3972, 3972, 3973, 3973, 3973, 3973, + 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, 3973, - 3973, 3973, 3973, 3973, 3974, 3974, 3974, 3974, 3974, 3974, - 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, + 3973, 3973, 3973, 3973, 3973, 3973, 3974, 3974, 3974, 3974, - 3974, 3974, 3975, 3975, 711, 3975, 3975, 3975, 3975, 3975, + 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, + 3974, 3974, 3974, 3974, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, + 3975, 3975, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, - 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3976, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, - 3977, 3977, 3977, 3977, 3977, 3977, 3978, 3978, 3978, 3978, + 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, - 3978, 3978, 700, 3978, 3979, 3979, 3979, 3979, 3979, 3979, + 3978, 3978, 3978, 3978, 3978, 3978, 3979, 3979, 772, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, - 3979, 3979, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, - 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 689, 3980, + 3979, 3979, 3979, 3979, 3980, 3980, 771, 3980, 3980, 3980, + 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, + 3980, 3980, 3981, 3981, 769, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, - 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, - 3982, 3982, 3982, 3982, 3982, 3982, 3983, 3983, 3983, 3983, + 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, - 3983, 3983, 3983, 3983, 3984, 3984, 3984, 3984, 3984, 3984, + 3983, 3983, 3983, 3983, 3983, 3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, - 3984, 3984, 3985, 677, 3985, 3985, 676, 671, 3985, 3985, - 3985, 3985, 3985, 670, 3985, 3985, 3985, 3985, 3985, 3986, + 3984, 3984, 3984, 3984, 3985, 3985, 3985, 3985, 3985, 3985, + 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, + 3985, 3985, 3986, 3986, 768, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, - 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, - 3987, 3987, 3987, 668, 3987, 3988, 3988, 3988, 3988, 3988, + 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3987, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, - 3988, 3988, 3988, 3989, 3989, 3989, 3989, 3989, 3989, 3989, + 3988, 3988, 3988, 3988, 3988, 3988, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, 3989, - 3989, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, - 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3991, - 661, 3991, 3991, 651, 650, 3991, 3991, 3991, 3991, 3991, + 3989, 3989, 767, 3989, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, - 648, 3991, 3991, 3991, 3991, 3991, 3992, 3992, 3992, 3992, + 3990, 3990, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, + 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 765, 3991, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, - 3992, 3992, 3992, 3992, 3993, 3993, 3993, 3993, 3993, 3993, + 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3992, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, 3993, - 644, 3993, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, + 3993, 3993, 3993, 3993, 3993, 3993, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, + 3994, 3994, 3994, 3994, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, - 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3995, 3996, 3996, - 3996, 3996, 3996, 3996, 3996, 3996, 3996, 3996, 3996, 3996, - 3996, 3996, 3996, 3996, 3996, 3996, 3997, 3997, 3997, 3997, + 3995, 3995, 3996, 760, 3996, 3996, 759, 757, 3996, 3996, + 3996, 3996, 3996, 756, 3996, 3996, 3996, 3996, 3996, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, - 3997, 3997, 634, 3997, 3998, 3998, 633, 3998, 3998, 3998, + 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, 3998, - 3998, 3998, 3999, 3999, 631, 3999, 3999, 3999, 3999, 3999, + 3998, 3998, 3998, 755, 3998, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, 3999, - 4000, 4000, 628, 4000, 4000, 4000, 4000, 4000, 4000, 4000, - 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4001, 4001, - 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, - 4001, 4001, 4001, 4001, 4001, 4001, 4002, 4002, 4002, 4002, - 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002, 4002, + 3999, 3999, 3999, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, + 4000, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, + 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4002, - 4002, 4002, 627, 4002, 4003, 4003, 4003, 4003, 4003, 4003, + 749, 4002, 4002, 742, 731, 4002, 4002, 4002, 4002, 4002, + 730, 4002, 4002, 4002, 4002, 4002, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, - 4003, 4003, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, - 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 625, 4004, - 4005, 4005, 622, 4005, 4005, 4005, 4005, 4005, 4005, 4005, - 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4006, 4006, + 4003, 4003, 4003, 4003, 4004, 4004, 4004, 4004, 4004, 4004, + 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, + 711, 4004, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, + 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, - 4006, 4006, 4006, 4006, 4006, 4006, 4007, 4007, 4007, 4007, + 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4006, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, - 4007, 4007, 4007, 4007, 4008, 4008, 4008, 4008, 4008, 4008, + 4007, 4007, 4007, 4007, 4007, 4007, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, 4008, - 4008, 4008, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, + 4008, 4008, 700, 4008, 4009, 4009, 689, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, 4009, + 4009, 4009, 4010, 4010, 677, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, - 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4010, 4011, 4011, - 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, - 4011, 4011, 4011, 4011, 4011, 4011, 4012, 621, 4012, 4012, - 541, 537, 4012, 4012, 4012, 4012, 4012, 536, 4012, 4012, - 4012, 4012, 4012, 4012, 4013, 530, 4013, 4013, 529, 513, - 4013, 4013, 4013, 4013, 4013, 512, 4013, 4013, 4013, 4013, - - 4013, 4013, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, + 4011, 4011, 676, 4011, 4011, 4011, 4011, 4011, 4011, 4011, + 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4012, 4012, + 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, + 4012, 4012, 4012, 4012, 4012, 4012, 4013, 4013, 4013, 4013, + + 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, + 4013, 4013, 671, 4013, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, - 4015, 506, 4015, 4015, 504, 490, 4015, 4015, 4015, 4015, - 4015, 478, 4015, 4015, 4015, 4015, 4015, 4016, 4016, 4016, - 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, - 4016, 4016, 4016, 4016, 4016, 4017, 4017, 4017, 4017, 4017, + 4014, 4014, 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015, + 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015, 670, 4015, + 4016, 4016, 668, 4016, 4016, 4016, 4016, 4016, 4016, 4016, + 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4016, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, 4017, - 4017, 4017, 4017, 4018, 4018, 4018, 4018, 4018, 4018, 4018, + 4017, 4017, 4017, 4017, 4017, 4017, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, - 4018, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, - 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4020, - 475, 4020, 4020, 453, 440, 4020, 4020, 4020, 4020, 4020, - 434, 4020, 4020, 4020, 4020, 4020, 4020, 4021, 4021, 4021, + 4018, 4018, 4018, 4018, 4019, 4019, 4019, 4019, 4019, 4019, + 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, 4019, + 4019, 4019, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, + 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4020, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, - 4021, 4021, 4021, 4021, 4021, 4022, 4022, 4022, 4022, 4022, + 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, - 4022, 4022, 4022, 4023, 422, 4023, 4023, 413, 412, 4023, - 4023, 4023, 4023, 4023, 393, 4023, 4023, 4023, 4023, 4023, - 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, - 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4024, 4025, 4025, + 4022, 4022, 4022, 4022, 4022, 4022, 4023, 661, 4023, 4023, + 651, 650, 4023, 4023, 4023, 4023, 4023, 648, 4023, 4023, + 4023, 4023, 4023, 4023, 4024, 644, 4024, 4024, 634, 633, + 4024, 4024, 4024, 4024, 4024, 631, 4024, 4024, 4024, 4024, + 4024, 4024, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, - 4025, 4025, 4025, 4025, 4025, 4025, 4026, 4026, 4026, 4026, - 4026, 4026, 4026, 4026, 4026, 4026, 4026, 4026, 4026, 4026, - 4026, 4026, 4026, 4026, 4027, 4027, 4027, 4027, 4027, 4027, + 4026, 628, 4026, 4026, 627, 625, 4026, 4026, 4026, 4026, + 4026, 622, 4026, 4026, 4026, 4026, 4026, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, 4027, - 4027, 4027, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, + 4027, 4027, 4027, 4027, 4027, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, 4028, + 4028, 4028, 4028, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, - 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4030, 4030, - 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, - 4030, 4030, 4030, 4030, 4030, 4030, 4031, 4031, 4031, 4031, - 4031, 4031, 4031, 4031, 4031, 4031, 4031, 4031, 4031, 4031, - 4031, 4031, 4031, 4031, 4032, 4032, 4032, 4032, 4032, 4032, + 4029, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, + 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4030, 4031, + 621, 4031, 4031, 541, 537, 4031, 4031, 4031, 4031, 4031, + 536, 4031, 4031, 4031, 4031, 4031, 4031, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, - 4032, 4032, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, + 4032, 4032, 4032, 4032, 4032, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, 4033, - 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, - 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4035, 4035, - 392, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, - 4035, 4035, 4035, 4035, 4035, 4035, 4036, 4036, 4036, 4036, + 4033, 4033, 4033, 4034, 530, 4034, 4034, 529, 513, 4034, + 4034, 4034, 4034, 4034, 512, 4034, 4034, 4034, 4034, 4034, + 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, + 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, - 4036, 4036, 4036, 4036, 4037, 4037, 4037, 4037, 4037, 4037, + 4036, 4036, 4036, 4036, 4036, 4036, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, 4037, - 4037, 4037, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, + 4037, 4037, 4037, 4037, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, + 4038, 4038, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, - 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4040, 385, - 4040, 4040, 383, 368, 4040, 4040, 4040, 4040, 4040, 367, - 4040, 4040, 4040, 4040, 4040, 4040, 4041, 358, 4041, 4041, - 357, 347, 4041, 4041, 4041, 4041, 4041, 317, 4041, 4041, - - 4041, 4041, 4041, 4041, 4042, 316, 4042, 4042, 284, 268, - 4042, 4042, 4042, 4042, 4042, 261, 4042, 4042, 4042, 4042, - 4042, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, - 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4044, - 259, 4044, 4044, 252, 234, 4044, 4044, 4044, 4044, 4044, - 229, 4044, 4044, 4044, 4044, 4044, 4044, 4045, 4045, 4045, + 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, + 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4040, 4041, 4041, + + 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, + 4041, 4041, 4041, 4041, 4041, 4041, 4042, 4042, 4042, 4042, + 4042, 4042, 4042, 4042, 4042, 4042, 4042, 4042, 4042, 4042, + 4042, 4042, 4042, 4042, 4043, 4043, 4043, 4043, 4043, 4043, + 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, + 4043, 4043, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, + 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4044, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, - 4045, 4045, 4045, 4045, 4045, 4046, 216, 4046, 4046, 194, - 182, 4046, 4046, 4046, 4046, 4046, 175, 4046, 4046, 4046, - 4046, 4046, 4046, 4047, 4047, 4047, 4047, 4047, 4047, 4047, + 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4045, 4046, 4046, + 506, 4046, 4046, 4046, 4046, 4046, 4046, 4046, 4046, 4046, + 4046, 4046, 4046, 4046, 4046, 4046, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, 4047, - 4047, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, - 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4049, - 172, 4049, 4049, 165, 164, 4049, 4049, 4049, 4049, 4049, - 163, 4049, 4049, 4049, 4049, 4049, 4050, 4050, 4050, 4050, + 4047, 4047, 4047, 4047, 4048, 4048, 4048, 4048, 4048, 4048, + 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, 4048, + 4048, 4048, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, + 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, - 4050, 4050, 4050, 4050, 4051, 4051, 4051, 4051, 4051, 4051, - 4051, 4051, 4051, 4051, 4051, 4051, 4051, 4051, 4051, 4051, - 4051, 4051, 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, - 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, 4052, - - 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 154, - 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4054, 4054, - 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, - 4054, 4054, 4054, 4054, 4054, 4054, 4055, 4055, 4055, 4055, - 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, - 4055, 4055, 4055, 4055, 4056, 4056, 4056, 4056, 4056, 4056, + 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4051, 504, + 4051, 4051, 490, 478, 4051, 4051, 4051, 4051, 4051, 475, + 4051, 4051, 4051, 4051, 4051, 4051, 4052, 453, 4052, 4052, + + 440, 434, 4052, 4052, 4052, 4052, 4052, 422, 4052, 4052, + 4052, 4052, 4052, 4052, 4053, 413, 4053, 4053, 412, 393, + 4053, 4053, 4053, 4053, 4053, 392, 4053, 4053, 4053, 4053, + 4053, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, + 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4055, + 385, 4055, 4055, 383, 368, 4055, 4055, 4055, 4055, 4055, + 367, 4055, 4055, 4055, 4055, 4055, 4055, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, - 4056, 4056, 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, - 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, 4057, - 4058, 4058, 152, 4058, 4058, 4058, 4058, 4058, 4058, 4058, - - 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4059, 4059, - 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, - 4059, 4059, 4059, 4059, 4059, 4059, 4060, 4060, 4060, 4060, - 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060, 4060, - 4060, 4060, 4060, 4060, 4061, 4061, 4061, 4061, 4061, 4061, + 4056, 4056, 4056, 4056, 4056, 4057, 358, 4057, 4057, 357, + 347, 4057, 4057, 4057, 4057, 4057, 317, 4057, 4057, 4057, + + 4057, 4057, 4057, 4058, 4058, 4058, 4058, 4058, 4058, 4058, + 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, + 4058, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, + 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4060, + 316, 4060, 4060, 284, 268, 4060, 4060, 4060, 4060, 4060, + 261, 4060, 4060, 4060, 4060, 4060, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, - 4061, 4061, 4062, 146, 4062, 4062, 141, 117, 4062, 4062, - 4062, 4062, 4062, 75, 4062, 4062, 4062, 4062, 4062, 4062, - 4063, 64, 4063, 4063, 63, 58, 4063, 4063, 4063, 4063, - 4063, 57, 4063, 4063, 4063, 4063, 4063, 4063, 4064, 4064, - - 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, - 4064, 4064, 4064, 4064, 4064, 4064, 4065, 56, 4065, 4065, - 55, 54, 4065, 4065, 4065, 4065, 4065, 53, 4065, 4065, - 4065, 4065, 4065, 4065, 4066, 4066, 4066, 4066, 4066, 4066, + 4061, 4061, 4061, 4061, 4062, 4062, 4062, 4062, 4062, 4062, + 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062, 4062, + 4062, 4062, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, + + 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, + 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 259, + 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4065, 4065, + 4065, 4065, 4065, 4065, 4065, 4065, 4065, 4065, 4065, 4065, + 4065, 4065, 4065, 4065, 4065, 4065, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, - 4066, 4066, 4067, 52, 4067, 4067, 51, 26, 4067, 4067, - 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4068, + 4066, 4066, 4066, 4066, 4067, 4067, 4067, 4067, 4067, 4067, + 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, 4067, + 4067, 4067, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, - 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4069, 4069, 4069, - 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, - - 4069, 4069, 4069, 4069, 4069, 4070, 25, 4070, 4070, 24, - 23, 4070, 4070, 4070, 0, 4070, 4070, 4070, 4070, 4070, - 4070, 4070, 4070, 4071, 4071, 4071, 4071, 4071, 4071, 4071, - 0, 4071, 0, 4071, 4071, 4071, 4071, 4071, 4071, 4071, - 4071, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, - 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4073, - 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4073, - 4073, 4073, 4073, 4073, 4073, 4073, 4073, 4074, 4074, 4074, - 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, - 4074, 4074, 4074, 4074, 4074, 4075, 4075, 4075, 4075, 4075, + 4069, 4069, 252, 4069, 4069, 4069, 4069, 4069, 4069, 4069, + 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4070, 4070, + 4070, 4070, 4070, 4070, 4070, 4070, 4070, 4070, 4070, 4070, + 4070, 4070, 4070, 4070, 4070, 4070, 4071, 4071, 4071, 4071, + 4071, 4071, 4071, 4071, 4071, 4071, 4071, 4071, 4071, 4071, + 4071, 4071, 4071, 4071, 4072, 4072, 4072, 4072, 4072, 4072, + 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, + 4072, 4072, 4073, 234, 4073, 4073, 229, 216, 4073, 4073, + 4073, 4073, 4073, 194, 4073, 4073, 4073, 4073, 4073, 4073, + 4074, 182, 4074, 4074, 175, 172, 4074, 4074, 4074, 4074, + + 4074, 165, 4074, 4074, 4074, 4074, 4074, 4074, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, 4075, - 4075, 4075, 4075, 4076, 4076, 0, 4076, 4076, 4076, 4076, - 4076, 4076, 4076, 4076, 4076, 4076, 4076, 4076, 4076, 4076, - 4076, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, - 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4078, - 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, - 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4079, 0, 0, - 4079, 0, 0, 4079, 4080, 0, 0, 0, 0, 0, - 4080, 4080, 4080, 0, 4080, 4080, 4080, 4080, 4080, 4080, - 4080, 4080, 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, - - 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, 4081, - 4082, 0, 0, 4082, 0, 4082, 4083, 4083, 4083, 4083, - 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, - 4083, 4083, 4083, 4083, 4084, 0, 0, 4084, 4084, 0, - 0, 4084, 0, 4084, 0, 4084, 4084, 4084, 4084, 4085, - 4085, 4085, 4085, 4086, 4086, 0, 4086, 4086, 4086, 4086, + 4075, 4075, 4075, 4075, 4075, 4075, 4076, 164, 4076, 4076, + 163, 154, 4076, 4076, 4076, 4076, 4076, 152, 4076, 4076, + 4076, 4076, 4076, 4076, 4077, 4077, 4077, 4077, 4077, 4077, + 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, 4077, + 4077, 4077, 4078, 146, 4078, 4078, 141, 117, 4078, 4078, + 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4078, 4079, + 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4079, + 4079, 4079, 4079, 4079, 4079, 4079, 4079, 4080, 4080, 4080, + + 4080, 4080, 4080, 4080, 4080, 4080, 4080, 4080, 4080, 4080, + 4080, 4080, 4080, 4080, 4080, 4081, 75, 4081, 4081, 64, + 63, 4081, 4081, 4081, 58, 4081, 4081, 4081, 4081, 4081, + 4081, 4081, 4081, 4082, 4082, 4082, 4082, 4082, 4082, 4082, + 57, 4082, 56, 4082, 4082, 4082, 4082, 4082, 4082, 4082, + 4082, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4084, + 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, + 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4085, 4085, 4085, + 4085, 4085, 4085, 4085, 4085, 4085, 4085, 4085, 4085, 4085, + + 4085, 4085, 4085, 4085, 4085, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, - 4086, 4087, 4087, 0, 4087, 4087, 4087, 4087, 4087, 4087, - 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4088, - 0, 4088, 0, 4088, 4088, 4088, 4088, 4089, 4089, 4089, - + 4086, 4086, 4086, 4087, 4087, 55, 4087, 4087, 4087, 4087, + 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, + 4087, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, + 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4088, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, - 4089, 4089, 4089, 4089, 4089, 4090, 4090, 4090, 4090, 4090, - 4090, 4090, 4090, 4090, 4090, 4090, 4090, 4090, 4090, 4090, - 4090, 4090, 4090, 4091, 4091, 4091, 4091, 4091, 4091, 4091, - 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, - 4091, 4092, 4092, 0, 0, 4092, 4092, 4092, 4092, 4092, - 0, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4093, - 0, 0, 4093, 4093, 0, 0, 4093, 0, 4093, 0, - 4093, 4093, 4093, 4093, 4094, 4094, 4094, 4094, 4094, 4094, - 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, + 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4090, 54, 53, + 4090, 52, 51, 4090, 4091, 26, 25, 24, 23, 0, + 4091, 4091, 4091, 0, 4091, 4091, 4091, 4091, 4091, 4091, - 4094, 4094, 4095, 0, 4095, 4095, 0, 0, 4095, 4095, - 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, - 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4097, 0, - 0, 0, 0, 0, 4097, 4097, 4097, 0, 4097, 4097, - 4097, 4097, 4097, 4097, 4097, 4097, 4098, 4098, 0, 4098, - 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, - 4098, 4098, 4098, 4098, 4099, 4099, 0, 4099, 4099, 4099, - 4099, 4099, 4099, 4099, 4099, 4099, 4099, 4099, 4099, 4099, - 4099, 4099, 4100, 0, 0, 4100, 4100, 0, 0, 4100, - - 0, 4100, 0, 4100, 4100, 4100, 4100, 4101, 0, 0, - 0, 0, 0, 4101, 4101, 4101, 0, 4101, 4101, 4101, - 4101, 4101, 4101, 4101, 4101, 4102, 4102, 0, 4102, 4102, - 0, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, - 4102, 4102, 4103, 0, 4103, 0, 4103, 4103, 4103, 4103, - 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, - 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4105, 0, - 4105, 4105, 0, 0, 4105, 4105, 4105, 4105, 4105, 4105, - 4105, 4105, 4105, 4105, 4105, 4105, 4106, 4106, 4106, 4106, + 4091, 4091, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, + 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, + 4093, 0, 0, 4093, 0, 4093, 4094, 4094, 4094, 4094, + 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, + 4094, 4094, 4094, 4094, 4095, 0, 0, 4095, 4095, 0, + 0, 4095, 0, 4095, 0, 4095, 4095, 4095, 4095, 4096, + 4096, 4096, 4096, 4097, 4097, 0, 4097, 4097, 4097, 4097, + 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, 4097, + 4097, 4098, 4098, 0, 4098, 4098, 4098, 4098, 4098, 4098, + 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4099, + + 0, 4099, 0, 4099, 4099, 4099, 4099, 4100, 4100, 4100, + 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, + 4100, 4100, 4100, 4100, 4100, 4101, 4101, 4101, 4101, 4101, + 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, + 4101, 4101, 4101, 4102, 4102, 4102, 4102, 4102, 4102, 4102, + 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, + 4102, 4103, 4103, 0, 0, 4103, 4103, 4103, 4103, 4103, + 0, 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4103, 4104, + 0, 0, 4104, 4104, 0, 0, 4104, 0, 4104, 0, + 4104, 4104, 4104, 4104, 4105, 4105, 4105, 4105, 4105, 4105, + + 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, 4105, + 4105, 4105, 4106, 0, 4106, 4106, 0, 0, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, 4106, - - 4106, 4106, 4106, 4106, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, - 4107, 4107, 4108, 0, 0, 4108, 4108, 0, 0, 4108, - 0, 4108, 0, 4108, 4108, 4108, 4108, 4109, 0, 4109, - 0, 4109, 4109, 4109, 4109, 4110, 0, 0, 4110, 4110, - 0, 0, 4110, 0, 4110, 0, 4110, 4110, 4110, 4110, - 4111, 4111, 0, 4111, 4111, 4111, 4111, 4111, 4111, 4111, - 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4112, 0, 4112, - 4112, 0, 0, 4112, 4112, 4112, 4112, 4112, 4112, 4112, - 4112, 4112, 4112, 4112, 4112, 4113, 4113, 4113, 4113, 4113, - - 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, - 4113, 4113, 4113, 4114, 4114, 4114, 4114, 4114, 4114, 4114, - 4114, 4114, 4114, 4114, 4114, 4114, 4114, 4114, 4114, 4114, - 4114, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, - 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4116, - 0, 4116, 4116, 0, 0, 4116, 4116, 4116, 4116, 4116, - 4116, 4116, 4116, 4116, 4116, 4116, 4116, 4117, 4117, 4117, + 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107, 4108, 0, + 0, 0, 0, 0, 4108, 4108, 4108, 0, 4108, 4108, + 4108, 4108, 4108, 4108, 4108, 4108, 4109, 4109, 0, 4109, + 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109, 4109, + 4109, 4109, 4109, 4109, 4110, 4110, 0, 4110, 4110, 4110, + 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, + + 4110, 4110, 4111, 0, 0, 4111, 4111, 0, 0, 4111, + 0, 4111, 0, 4111, 4111, 4111, 4111, 4112, 0, 0, + 0, 0, 0, 4112, 4112, 4112, 0, 4112, 4112, 4112, + 4112, 4112, 4112, 4112, 4112, 4113, 4113, 0, 4113, 4113, + 0, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, + 4113, 4113, 4114, 0, 4114, 0, 4114, 4114, 4114, 4114, + 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, + 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4116, 0, + 4116, 4116, 0, 0, 4116, 4116, 4116, 4116, 4116, 4116, + 4116, 4116, 4116, 4116, 4116, 4116, 4117, 4117, 4117, 4117, + 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, - 4117, 4117, 4117, 4117, 4117, 4118, 4118, 4118, 4118, 4118, + 4117, 4117, 4117, 4117, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, 4118, - - 4118, 4118, 4118, 4119, 4119, 0, 4119, 4119, 4119, 4119, - 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, - 4119, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, - 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4120, 4121, - 4121, 0, 4121, 4121, 4121, 4121, 4121, 4121, 4121, 4121, - 4121, 4121, 4121, 4121, 4121, 4121, 4121, 4122, 4122, 4122, - 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4122, - 4122, 4122, 4122, 4122, 4122, 4123, 0, 4123, 0, 4123, - 4123, 4123, 4123, 4124, 0, 4124, 0, 4124, 4124, 4124, - 4124, 4125, 0, 0, 4125, 0, 0, 0, 4125, 0, - - 4125, 0, 4125, 4125, 4125, 4125, 4126, 0, 0, 4126, - 4126, 0, 0, 4126, 0, 4126, 0, 4126, 4126, 4126, - 4126, 4127, 0, 0, 4127, 0, 4127, 0, 4127, 4127, - 4127, 4127, 4128, 0, 4128, 0, 4128, 4128, 4128, 4128, - 4129, 0, 4129, 0, 4129, 4129, 4129, 4129, 4130, 4130, - 0, 4130, 4130, 0, 4130, 4130, 4130, 4130, 4130, 4130, - 4130, 4130, 4130, 4130, 4130, 4131, 0, 0, 4131, 4131, - 0, 0, 4131, 0, 4131, 0, 4131, 4131, 4131, 4131, - 4132, 4132, 0, 4132, 4132, 0, 4132, 4132, 4132, 4132, + 4118, 4118, 4119, 0, 0, 4119, 4119, 0, 0, 4119, + 0, 4119, 0, 4119, 4119, 4119, 4119, 4120, 0, 4120, + 0, 4120, 4120, 4120, 4120, 4121, 0, 0, 4121, 4121, + 0, 0, 4121, 0, 4121, 0, 4121, 4121, 4121, 4121, + 4122, 4122, 0, 4122, 4122, 4122, 4122, 4122, 4122, 4122, + 4122, 4122, 4122, 4122, 4122, 4122, 4122, 4123, 0, 4123, + 4123, 0, 0, 4123, 4123, 4123, 4123, 4123, 4123, 4123, + + 4123, 4123, 4123, 4123, 4123, 4124, 4124, 4124, 4124, 4124, + 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, + 4124, 4124, 4124, 4125, 4125, 4125, 4125, 4125, 4125, 4125, + 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, + 4125, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, + 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4127, + 0, 4127, 4127, 0, 0, 4127, 4127, 4127, 4127, 4127, + 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4128, 4128, 4128, + 4128, 4128, 4128, 4128, 4128, 4128, 4128, 4128, 4128, 4128, + 4128, 4128, 4128, 4128, 4128, 4129, 4129, 4129, 4129, 4129, + + 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, 4129, + 4129, 4129, 4129, 4130, 4130, 0, 4130, 4130, 4130, 4130, + 4130, 4130, 4130, 4130, 4130, 4130, 4130, 4130, 4130, 4130, + 4130, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, + 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4132, + 4132, 0, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4132, 4133, 4133, 4133, - 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133, 4133, - 4133, 4133, 4133, 4133, 4133, 4134, 4134, 4134, 4134, 4134, - 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, - 4134, 4134, 4134, 4135, 4135, 4135, 4135, 4135, 4135, 4135, - 4135, 4135, 4135, 4135, 4135, 4135, 4135, 4135, 4135, 4135, - 4135, 4136, 0, 4136, 4136, 0, 0, 4136, 4136, 4136, - 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4137, - 0, 4137, 4137, 0, 0, 4137, 4137, 4137, 4137, 4137, - 4137, 4137, 4137, 4137, 4137, 4137, 4137, 4138, 4138, 4138, - 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, - - 4138, 4138, 4138, 4138, 4138, 4139, 4139, 4139, 4139, 4139, - 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, - 4139, 4139, 4139, 4140, 4140, 4140, 4140, 4140, 4140, 4140, - 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, 4140, - 4140, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, - 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4142, - 0, 4142, 4142, 0, 0, 4142, 4142, 4142, 4142, 4142, - 4142, 4142, 4142, 4142, 4142, 4142, 4142, 4143, 4143, 4143, - 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, - 4143, 4143, 4143, 4143, 4143, 4144, 4144, 4144, 4144, 4144, - + 4133, 4133, 4133, 4133, 4133, 4134, 0, 4134, 0, 4134, + 4134, 4134, 4134, 4135, 0, 4135, 0, 4135, 4135, 4135, + + 4135, 4136, 0, 0, 4136, 0, 0, 0, 4136, 0, + 4136, 0, 4136, 4136, 4136, 4136, 4137, 0, 0, 4137, + 4137, 0, 0, 4137, 0, 4137, 0, 4137, 4137, 4137, + 4137, 4138, 0, 0, 4138, 0, 4138, 0, 4138, 4138, + 4138, 4138, 4139, 0, 4139, 0, 4139, 4139, 4139, 4139, + 4140, 0, 4140, 0, 4140, 4140, 4140, 4140, 4141, 4141, + 0, 4141, 4141, 0, 4141, 4141, 4141, 4141, 4141, 4141, + 4141, 4141, 4141, 4141, 4141, 4142, 0, 0, 4142, 4142, + 0, 0, 4142, 0, 4142, 0, 4142, 4142, 4142, 4142, + 4143, 4143, 0, 4143, 4143, 0, 4143, 4143, 4143, 4143, + + 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, - 4144, 4144, 4144, 4145, 4145, 4145, 4145, 4145, 4145, 4145, + 4144, 4144, 4144, 4144, 4144, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, 4145, - 4145, 4146, 0, 4146, 4146, 0, 0, 4146, 4146, 4146, - 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4147, - 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, - 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4148, 4148, 4148, - 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, - 4148, 4148, 4148, 4148, 4148, 4149, 0, 0, 4149, 0, - 4149, 0, 4149, 4149, 4149, 4149, 4150, 0, 4150, 0, - - 4150, 4150, 4150, 4150, 4151, 0, 4151, 0, 4151, 4151, - 4151, 4151, 4152, 0, 4152, 0, 4152, 4152, 4152, 4152, - 4153, 0, 0, 4153, 0, 4153, 0, 4153, 4153, 4153, - 4153, 4154, 4154, 0, 4154, 4154, 0, 4154, 4154, 4154, - 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4155, 0, - 0, 4155, 4155, 0, 0, 4155, 0, 4155, 0, 4155, - 4155, 4155, 4155, 4156, 0, 4156, 0, 4156, 4156, 4156, - 4156, 4157, 0, 4157, 0, 4157, 4157, 4157, 4157, 4158, + 4145, 4145, 4145, 4146, 4146, 4146, 4146, 4146, 4146, 4146, + 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, 4146, + 4146, 4147, 0, 4147, 4147, 0, 0, 4147, 4147, 4147, + 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4147, 4148, + 0, 4148, 4148, 0, 0, 4148, 4148, 4148, 4148, 4148, + 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4149, 4149, 4149, + + 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, + 4149, 4149, 4149, 4149, 4149, 4150, 4150, 4150, 4150, 4150, + 4150, 4150, 4150, 4150, 4150, 4150, 4150, 4150, 4150, 4150, + 4150, 4150, 4150, 4151, 4151, 4151, 4151, 4151, 4151, 4151, + 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151, + 4151, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, + 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4152, 4153, + 0, 4153, 4153, 0, 0, 4153, 4153, 4153, 4153, 4153, + 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4154, 4154, 4154, + 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, 4154, + + 4154, 4154, 4154, 4154, 4154, 4155, 4155, 4155, 4155, 4155, + 4155, 4155, 4155, 4155, 4155, 4155, 4155, 4155, 4155, 4155, + 4155, 4155, 4155, 4156, 4156, 4156, 4156, 4156, 4156, 4156, + 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, + 4156, 4157, 0, 4157, 4157, 0, 0, 4157, 4157, 4157, + 4157, 4157, 4157, 4157, 4157, 4157, 4157, 4157, 4157, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4159, 4159, 4159, - 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159, 4159, - 4159, 4159, 4159, 4159, 4159, 4160, 4160, 4160, 4160, 4160, - 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, - 4160, 4160, 4160, 4161, 4161, 4161, 4161, 4161, 4161, 4161, - 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, 4161, - 4161, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, - 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4162, 4163, - 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, - 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4164, 0, 4164, - 4164, 0, 0, 4164, 4164, 4164, 4164, 4164, 4164, 4164, - - 4164, 4164, 4164, 4164, 4164, 4165, 4165, 4165, 4165, 4165, - 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, - 4165, 4165, 4165, 4166, 4166, 4166, 4166, 4166, 4166, 4166, - 4166, 4166, 4166, 4166, 4166, 4166, 4166, 4166, 4166, 4166, - 4166, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, - 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4168, - 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, - 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4169, 4169, 0, - 4169, 4169, 0, 4169, 4169, 4169, 4169, 4169, 4169, 4169, - 4169, 4169, 4169, 4169, 4170, 0, 0, 4170, 4170, 0, - - 0, 4170, 0, 4170, 0, 4170, 4170, 4170, 4170, 4171, - 4171, 4171, 4171, 0, 4171, 4171, 4171, 4171, 4171, 4171, - 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4172, 0, 0, - 0, 0, 0, 4172, 4172, 4172, 0, 4172, 4172, 4172, - 4172, 4172, 4172, 4172, 4172, 4173, 4173, 4173, 4173, 4173, - 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, - 4173, 4173, 4173, 4174, 0, 4174, 0, 4174, 4174, 4174, - 4174, 4175, 4175, 0, 4175, 4175, 0, 4175, 4175, 4175, - 4175, 4175, 4175, 4175, 4175, 4175, 4175, 4175, 4176, 0, - 0, 4176, 4176, 0, 0, 0, 0, 0, 0, 4176, - - 4177, 4177, 0, 0, 0, 4177, 4177, 4177, 4177, 4177, - 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4178, 4178, - 0, 4178, 4178, 0, 4178, 4178, 4178, 4178, 4178, 4178, - 4178, 4178, 4178, 4178, 4178, 4179, 4179, 0, 4179, 4179, - 0, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, - 4179, 4179, 4180, 4180, 0, 4180, 4180, 4180, 4180, 4180, - 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4181, - 4181, 0, 4181, 4181, 4181, 4181, 4181, 4181, 4181, 4181, - 4181, 4181, 4181, 4181, 4181, 4181, 4182, 0, 4182, 0, - 4182, 0, 4182, 4182, 4182, 4182, 4183, 4183, 0, 4183, - - 4183, 0, 4183, 4183, 4183, 4183, 4183, 4183, 4183, 4183, - 4183, 4183, 4183, 4184, 4184, 0, 4184, 4184, 0, 4184, + 4159, 4159, 4159, 4159, 4159, 4160, 0, 0, 4160, 0, + + 4160, 0, 4160, 4160, 4160, 4160, 4161, 0, 4161, 0, + 4161, 4161, 4161, 4161, 4162, 0, 4162, 0, 4162, 4162, + 4162, 4162, 4163, 0, 4163, 0, 4163, 4163, 4163, 4163, + 4164, 0, 0, 4164, 0, 4164, 0, 4164, 4164, 4164, + 4164, 4165, 4165, 0, 4165, 4165, 0, 4165, 4165, 4165, + 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4166, 0, + 0, 4166, 4166, 0, 0, 4166, 0, 4166, 0, 4166, + 4166, 4166, 4166, 4167, 0, 4167, 0, 4167, 4167, 4167, + 4167, 4168, 0, 4168, 0, 4168, 4168, 4168, 4168, 4169, + 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4169, + + 4169, 4169, 4169, 4169, 4169, 4169, 4169, 4170, 4170, 4170, + 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, + 4170, 4170, 4170, 4170, 4170, 4171, 4171, 4171, 4171, 4171, + 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, + 4171, 4171, 4171, 4172, 4172, 4172, 4172, 4172, 4172, 4172, + 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, + 4172, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, + 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4174, + 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4174, + 4174, 4174, 4174, 4174, 4174, 4174, 4174, 4175, 0, 4175, + + 4175, 0, 0, 4175, 4175, 4175, 4175, 4175, 4175, 4175, + 4175, 4175, 4175, 4175, 4175, 4176, 4176, 4176, 4176, 4176, + 4176, 4176, 4176, 4176, 4176, 4176, 4176, 4176, 4176, 4176, + 4176, 4176, 4176, 4177, 4177, 4177, 4177, 4177, 4177, 4177, + 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, + 4177, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, + 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4178, 4179, + 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, + 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4180, 4180, 0, + 4180, 4180, 0, 4180, 4180, 4180, 4180, 4180, 4180, 4180, + + 4180, 4180, 4180, 4180, 4181, 0, 0, 4181, 4181, 0, + 0, 4181, 0, 4181, 0, 4181, 4181, 4181, 4181, 4182, + 4182, 4182, 4182, 0, 4182, 4182, 4182, 4182, 4182, 4182, + 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4183, 0, 0, + 0, 0, 0, 4183, 4183, 4183, 0, 4183, 4183, 4183, + 4183, 4183, 4183, 4183, 4183, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, 4184, - 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, - 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4185, 4186, 0, - 4186, 0, 4186, 0, 4186, 4186, 4186, 4186, 4187, 4187, - 0, 4187, 4187, 4187, 4187, 4187, 4187, 4187, 4187, 4187, - 4187, 4187, 4187, 4187, 4187, 4187, 4188, 4188, 0, 4188, - 4188, 0, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, - 4188, 4188, 4188, 4189, 4189, 0, 0, 4189, 4189, 4189, - - 4189, 4189, 0, 4189, 4189, 4189, 4189, 4189, 4189, 4189, - 4189, 4190, 4190, 0, 4190, 4190, 0, 4190, 4190, 4190, - 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4191, 0, - 0, 0, 0, 0, 4191, 4191, 4191, 0, 4191, 4191, - 4191, 4191, 4191, 4191, 4191, 4191, 4192, 0, 0, 0, - 0, 0, 4192, 4192, 4192, 0, 4192, 4192, 4192, 4192, - 4192, 4192, 4192, 4192, 4193, 0, 0, 4193, 4193, 0, - 0, 4193, 0, 4193, 0, 4193, 4193, 4193, 4193, 4194, - 4194, 0, 4194, 4194, 0, 4194, 4194, 4194, 4194, 4194, - 4194, 4194, 4194, 4194, 4194, 4194, 4195, 0, 0, 0, - - 0, 0, 4195, 4195, 4195, 0, 4195, 4195, 4195, 4195, - 4195, 4195, 4195, 4195, 4196, 0, 4196, 0, 4196, 4196, - 4196, 4196, 4197, 4197, 0, 4197, 4197, 0, 4197, 4197, - 4197, 4197, 4197, 4197, 4197, 4197, 4197, 4197, 4197, 4198, - 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, - 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4199, 4199, 0, - 4199, 4199, 0, 4199, 4199, 4199, 4199, 4199, 4199, 4199, - 4199, 4199, 4199, 4199, 4200, 4200, 0, 0, 4200, 4200, - 4200, 4200, 4200, 0, 4200, 4200, 4200, 4200, 4200, 4200, - 4200, 4200, 4201, 4201, 0, 0, 4201, 4201, 4201, 4201, - - 4201, 0, 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, - 4202, 4202, 0, 4202, 4202, 0, 4202, 4202, 4202, 4202, - 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4203, 4203, 0, - 4203, 4203, 0, 4203, 4203, 4203, 4203, 4203, 4203, 4203, - 4203, 4203, 4203, 4203, 4204, 4204, 0, 0, 4204, 4204, - 4204, 4204, 4204, 0, 4204, 4204, 4204, 4204, 4204, 4204, - 4204, 4204, 4205, 4205, 0, 0, 4205, 4205, 4205, 4205, - 4205, 0, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, - 4206, 0, 4206, 0, 4206, 0, 4206, 4206, 4206, 4206, - 4207, 4207, 0, 4207, 4207, 4207, 4207, 4207, 4207, 4207, - - 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4208, 4208, 0, - 4208, 4208, 0, 4208, 4208, 4208, 4208, 4208, 4208, 4208, - 4208, 4208, 4208, 4208, 4209, 4209, 0, 4209, 4209, 0, + 4184, 4184, 4184, 4185, 0, 4185, 0, 4185, 4185, 4185, + 4185, 4186, 4186, 0, 4186, 4186, 0, 4186, 4186, 4186, + 4186, 4186, 4186, 4186, 4186, 4186, 4186, 4186, 4187, 0, + + 0, 4187, 4187, 0, 0, 0, 0, 0, 0, 4187, + 4188, 4188, 0, 0, 0, 4188, 4188, 4188, 4188, 4188, + 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4189, 4189, + 0, 4189, 4189, 0, 4189, 4189, 4189, 4189, 4189, 4189, + 4189, 4189, 4189, 4189, 4189, 4190, 4190, 0, 4190, 4190, + 0, 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4190, 4190, + 4190, 4190, 4191, 4191, 0, 4191, 4191, 4191, 4191, 4191, + 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4192, + 4192, 0, 4192, 4192, 4192, 4192, 4192, 4192, 4192, 4192, + 4192, 4192, 4192, 4192, 4192, 4192, 4193, 0, 4193, 0, + + 4193, 0, 4193, 4193, 4193, 4193, 4194, 4194, 0, 4194, + 4194, 0, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, + 4194, 4194, 4194, 4195, 4195, 0, 4195, 4195, 0, 4195, + 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, + 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, + 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4196, 4197, 0, + 4197, 0, 4197, 0, 4197, 4197, 4197, 4197, 4198, 4198, + 0, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, 4198, + 4198, 4198, 4198, 4198, 4198, 4198, 4199, 4199, 0, 4199, + 4199, 0, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, + + 4199, 4199, 4199, 4200, 4200, 0, 0, 4200, 4200, 4200, + 4200, 4200, 0, 4200, 4200, 4200, 4200, 4200, 4200, 4200, + 4200, 4201, 4201, 0, 4201, 4201, 0, 4201, 4201, 4201, + 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4201, 4202, 0, + 0, 0, 0, 0, 4202, 4202, 4202, 0, 4202, 4202, + 4202, 4202, 4202, 4202, 4202, 4202, 4203, 0, 0, 0, + 0, 0, 4203, 4203, 4203, 0, 4203, 4203, 4203, 4203, + 4203, 4203, 4203, 4203, 4204, 0, 0, 4204, 4204, 0, + 0, 4204, 0, 4204, 0, 4204, 4204, 4204, 4204, 4205, + 4205, 0, 4205, 4205, 0, 4205, 4205, 4205, 4205, 4205, + + 4205, 4205, 4205, 4205, 4205, 4205, 4206, 0, 0, 0, + 0, 0, 4206, 4206, 4206, 0, 4206, 4206, 4206, 4206, + 4206, 4206, 4206, 4206, 4207, 0, 4207, 0, 4207, 4207, + 4207, 4207, 4208, 4208, 0, 4208, 4208, 0, 4208, 4208, + 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4209, - 4209, 4210, 0, 4210, 0, 4210, 0, 4210, 4210, 4210, - 4210, 4211, 0, 0, 0, 0, 0, 4211, 4211, 4211, - 0, 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, - 3926, 3926, 3926, 3926, 3926, 3926, 3926 + 4209, 4209, 4209, 4209, 4209, 4209, 4209, 4210, 4210, 0, + 4210, 4210, 0, 4210, 4210, 4210, 4210, 4210, 4210, 4210, + 4210, 4210, 4210, 4210, 4211, 4211, 0, 0, 4211, 4211, + 4211, 4211, 4211, 0, 4211, 4211, 4211, 4211, 4211, 4211, + + 4211, 4211, 4212, 4212, 0, 0, 4212, 4212, 4212, 4212, + 4212, 0, 4212, 4212, 4212, 4212, 4212, 4212, 4212, 4212, + 4213, 4213, 0, 4213, 4213, 0, 4213, 4213, 4213, 4213, + 4213, 4213, 4213, 4213, 4213, 4213, 4213, 4214, 4214, 0, + 4214, 4214, 0, 4214, 4214, 4214, 4214, 4214, 4214, 4214, + 4214, 4214, 4214, 4214, 4215, 4215, 0, 0, 4215, 4215, + 4215, 4215, 4215, 0, 4215, 4215, 4215, 4215, 4215, 4215, + 4215, 4215, 4216, 4216, 0, 0, 4216, 4216, 4216, 4216, + 4216, 0, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, + 4217, 0, 4217, 0, 4217, 0, 4217, 4217, 4217, 4217, + + 4218, 4218, 0, 4218, 4218, 4218, 4218, 4218, 4218, 4218, + 4218, 4218, 4218, 4218, 4218, 4218, 4218, 4219, 4219, 0, + 4219, 4219, 0, 4219, 4219, 4219, 4219, 4219, 4219, 4219, + 4219, 4219, 4219, 4219, 4220, 4220, 0, 4220, 4220, 0, + 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, + 4220, 4221, 0, 4221, 0, 4221, 0, 4221, 4221, 4221, + 4221, 4222, 0, 0, 0, 0, 0, 4222, 4222, 4222, + 0, 4222, 4222, 4222, 4222, 4222, 4222, 4222, 4222, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, 3937, + 3937, 3937, 3937, 3937, 3937, 3937, 3937 } ; static yy_state_type yy_last_accepting_state; @@ -5009,67 +5014,67 @@ static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; -static const flex_int16_t yy_rule_linenum[540] = +static const flex_int16_t yy_rule_linenum[541] = { 0, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 563, 564, 567, 568, - 569, 570, 571, 572, 573, 575, 576, 577, 578, 579, - 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - - 610, 611, 613, 614, 615, 616, 617, 621, 626, 627, - 632, 633, 634, 639, 640, 641, 646, 651, 652, 653, - 658, 659, 663, 664, 665, 669, 670, 674, 675, 679, - 680, 681, 685, 686, 690, 691, 696, 697, 698, 702, - 706, 707, 715, 720, 721, 726, 727, 728, 737, 740, - 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, - 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, - 761, 762, 763, 766, 767, 768, 769, 770, 771, 772, - 773, 775, 776, 777, 778, 779, 780, 781, 782, 783, - 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, - - 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, - 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, - 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, - 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, - 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, - 844, 845, 846, 847, 848, 849, 850, 852, 853, 854, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, - 868, 872, 873, 874, 875, 876, 880, 881, 882, 883, - 884, 885, 889, 890, 891, 892, 897, 898, 899, 900, - 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, - - 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, - 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, - 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, - 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, - 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, - 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1020, 1021, 1022, - 1023, 1024, 1025, 1026, 1027, 1028, 1032, 1033, 1034, 1035, - 1036, 1037, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1052, 1053, 1054, 1055, 1056, 1061, 1062, 1063, 1064, - 1065, 1066, 1068, 1069, 1071, 1072, 1078, 1079, 1080, 1081, - 1082, 1083, 1086, 1087, 1088, 1089, 1090, 1091, 1095, 1096, - 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, - 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, - 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1127, - 1128, 1133, 1137, 1141, 1142, 1146, 1147, 1150, 1151, 1155, - - 1156, 1160, 1161, 1165, 1166, 1171, 1173, 1174, 1175, 1176, - 1178, 1179, 1180, 1181, 1183, 1184, 1185, 1186, 1188, 1190, - 1191, 1193, 1194, 1195, 1196, 1198, 1203, 1204, 1205, 1209, - 1210, 1211, 1216, 1218, 1219, 1220, 1239, 1266, 1296 + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 564, 565, 568, 569, + 570, 571, 572, 573, 574, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + + 611, 612, 613, 615, 616, 617, 618, 619, 623, 628, + 629, 634, 635, 636, 641, 642, 643, 648, 653, 654, + 655, 660, 661, 665, 666, 667, 671, 672, 676, 677, + 681, 682, 683, 687, 688, 692, 693, 698, 699, 700, + 704, 708, 709, 717, 722, 723, 728, 729, 730, 739, + 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, + 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 762, 763, 764, 765, 768, 769, 770, 771, 772, 773, + 774, 775, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, + 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 854, 855, + 856, 858, 859, 860, 861, 862, 863, 864, 865, 866, + 867, 870, 874, 875, 876, 877, 878, 882, 883, 884, + 885, 886, 887, 891, 892, 893, 894, 899, 900, 901, + 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, + + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, + 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, + 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, + 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1022, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1034, 1035, 1036, + 1037, 1038, 1039, 1044, 1045, 1046, 1047, 1048, 1049, 1050, + 1051, 1052, 1054, 1055, 1056, 1057, 1058, 1063, 1064, 1065, + 1066, 1067, 1068, 1070, 1071, 1073, 1074, 1080, 1081, 1082, + 1083, 1084, 1085, 1088, 1089, 1090, 1091, 1092, 1093, 1097, + 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, + 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, + 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, + 1129, 1130, 1135, 1139, 1143, 1144, 1148, 1149, 1152, 1153, + + 1157, 1158, 1162, 1163, 1167, 1168, 1173, 1175, 1176, 1177, + 1178, 1180, 1181, 1182, 1183, 1185, 1186, 1187, 1188, 1190, + 1192, 1193, 1195, 1196, 1197, 1198, 1200, 1205, 1206, 1207, + 1211, 1212, 1213, 1218, 1220, 1221, 1222, 1241, 1268, 1298 } ; /* The intent behind this definition is that it'll catch @@ -5155,15 +5160,15 @@ static std::stack YY_PREVIOUS_STATE; #define BEGIN_PREVIOUS() { BEGIN(YY_PREVIOUS_STATE.top()); YY_PREVIOUS_STATE.pop(); } // The location of the current token. -#line 5158 "seclang-scanner.cc" +#line 5163 "seclang-scanner.cc" #define YY_NO_INPUT 1 -#line 492 "seclang-scanner.ll" +#line 493 "seclang-scanner.ll" // Code run each time a pattern is matched. # define YY_USER_ACTION driver.loc.back()->columns (yyleng); -#line 5165 "seclang-scanner.cc" -#line 5166 "seclang-scanner.cc" +#line 5170 "seclang-scanner.cc" +#line 5171 "seclang-scanner.cc" #define INITIAL 0 #define EXPECTING_ACTION_PREDICATE_VARIABLE 1 @@ -5477,15 +5482,15 @@ YY_DECL { /* %% [7.0] user's declarations go here */ -#line 497 "seclang-scanner.ll" +#line 498 "seclang-scanner.ll" -#line 501 "seclang-scanner.ll" +#line 502 "seclang-scanner.ll" // Code run each time yylex is called. driver.loc.back()->step(); -#line 5488 "seclang-scanner.cc" +#line 5493 "seclang-scanner.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -5514,13 +5519,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3927 ) + if ( yy_current_state >= 3938 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 3926 ); + while ( yy_current_state != 3937 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -5539,13 +5544,13 @@ YY_DECL { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 540 ) + else if ( yy_act < 541 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 540 ) + else if ( yy_act == 541 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 541 ) + else if ( yy_act == 542 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -5563,2770 +5568,2769 @@ YY_DECL case 1: YY_RULE_SETUP -#line 505 "seclang-scanner.ll" +#line 506 "seclang-scanner.ll" { return p::make_ACTION_APPEND(yytext, *driver.loc.back()); } YY_BREAK case 2: YY_RULE_SETUP -#line 506 "seclang-scanner.ll" +#line 507 "seclang-scanner.ll" { return p::make_ACTION_BLOCK(yytext, *driver.loc.back()); } YY_BREAK case 3: YY_RULE_SETUP -#line 507 "seclang-scanner.ll" +#line 508 "seclang-scanner.ll" { return p::make_ACTION_CAPTURE(yytext, *driver.loc.back()); } YY_BREAK case 4: YY_RULE_SETUP -#line 508 "seclang-scanner.ll" +#line 509 "seclang-scanner.ll" { return p::make_ACTION_CHAIN(yytext, *driver.loc.back()); } YY_BREAK case 5: YY_RULE_SETUP -#line 509 "seclang-scanner.ll" +#line 510 "seclang-scanner.ll" { return p::make_ACTION_DENY(yytext, *driver.loc.back()); } YY_BREAK case 6: YY_RULE_SETUP -#line 510 "seclang-scanner.ll" +#line 511 "seclang-scanner.ll" { return p::make_ACTION_DEPRECATE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 7: YY_RULE_SETUP -#line 511 "seclang-scanner.ll" +#line 512 "seclang-scanner.ll" { return p::make_ACTION_DROP(yytext, *driver.loc.back()); } YY_BREAK case 8: YY_RULE_SETUP -#line 512 "seclang-scanner.ll" +#line 513 "seclang-scanner.ll" { return p::make_ACTION_ID(yytext, *driver.loc.back()); } YY_BREAK case 9: YY_RULE_SETUP -#line 513 "seclang-scanner.ll" +#line 514 "seclang-scanner.ll" { return p::make_ACTION_LOG(yytext, *driver.loc.back()); } YY_BREAK case 10: YY_RULE_SETUP -#line 514 "seclang-scanner.ll" +#line 515 "seclang-scanner.ll" { return p::make_ACTION_MULTI_MATCH(yytext, *driver.loc.back()); } YY_BREAK case 11: YY_RULE_SETUP -#line 515 "seclang-scanner.ll" +#line 516 "seclang-scanner.ll" { return p::make_ACTION_NO_AUDIT_LOG(yytext, *driver.loc.back()); } YY_BREAK case 12: YY_RULE_SETUP -#line 516 "seclang-scanner.ll" +#line 517 "seclang-scanner.ll" { return p::make_ACTION_NO_LOG(yytext, *driver.loc.back()); } YY_BREAK case 13: YY_RULE_SETUP -#line 517 "seclang-scanner.ll" +#line 518 "seclang-scanner.ll" { return p::make_ACTION_PASS(yytext, *driver.loc.back()); } YY_BREAK case 14: YY_RULE_SETUP -#line 518 "seclang-scanner.ll" +#line 519 "seclang-scanner.ll" { return p::make_ACTION_PAUSE(yytext, *driver.loc.back()); } YY_BREAK case 15: YY_RULE_SETUP -#line 519 "seclang-scanner.ll" +#line 520 "seclang-scanner.ll" { return p::make_ACTION_PREPEND(yytext, *driver.loc.back()); } YY_BREAK case 16: YY_RULE_SETUP -#line 520 "seclang-scanner.ll" +#line 521 "seclang-scanner.ll" { return p::make_ACTION_PROXY(yytext, *driver.loc.back()); } YY_BREAK case 17: YY_RULE_SETUP -#line 521 "seclang-scanner.ll" +#line 522 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_ARG(yytext, *driver.loc.back()); } YY_BREAK case 18: YY_RULE_SETUP -#line 522 "seclang-scanner.ll" +#line 523 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_MATCHED(yytext, *driver.loc.back()); } YY_BREAK case 19: YY_RULE_SETUP -#line 523 "seclang-scanner.ll" +#line 524 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_MATCHED_BYTES(yytext, *driver.loc.back()); } YY_BREAK case 20: YY_RULE_SETUP -#line 524 "seclang-scanner.ll" +#line 525 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_REQUEST_HEADER(yytext, *driver.loc.back()); } YY_BREAK case 21: YY_RULE_SETUP -#line 525 "seclang-scanner.ll" +#line 526 "seclang-scanner.ll" { return p::make_ACTION_SANITISE_RESPONSE_HEADER(yytext, *driver.loc.back()); } YY_BREAK case 22: YY_RULE_SETUP -#line 526 "seclang-scanner.ll" +#line 527 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETRSC(yytext, *driver.loc.back()); } YY_BREAK case 23: YY_RULE_SETUP -#line 528 "seclang-scanner.ll" +#line 529 "seclang-scanner.ll" { return p::make_ACTION_STATUS(yytext, *driver.loc.back()); } YY_BREAK case 24: /* rule 24 can match eol */ YY_RULE_SETUP -#line 529 "seclang-scanner.ll" +#line 530 "seclang-scanner.ll" { return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } YY_BREAK case 25: /* rule 25 can match eol */ YY_RULE_SETUP -#line 530 "seclang-scanner.ll" +#line 531 "seclang-scanner.ll" { return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } YY_BREAK case 26: YY_RULE_SETUP -#line 531 "seclang-scanner.ll" +#line 532 "seclang-scanner.ll" { return p::make_ACTION_ALLOW(yytext, *driver.loc.back()); } YY_BREAK case 27: YY_RULE_SETUP -#line 532 "seclang-scanner.ll" +#line 533 "seclang-scanner.ll" { return p::make_ACTION_AUDIT_LOG(yytext, *driver.loc.back()); } YY_BREAK case 28: YY_RULE_SETUP -#line 533 "seclang-scanner.ll" +#line 534 "seclang-scanner.ll" { return p::make_ACTION_CTL_AUDIT_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 29: YY_RULE_SETUP -#line 534 "seclang-scanner.ll" +#line 535 "seclang-scanner.ll" { return p::make_ACTION_CTL_AUDIT_LOG_PARTS(yytext, *driver.loc.back()); } YY_BREAK case 30: YY_RULE_SETUP -#line 535 "seclang-scanner.ll" +#line 536 "seclang-scanner.ll" { return p::make_ACTION_CTL_BDY_JSON(yytext, *driver.loc.back()); } YY_BREAK case 31: YY_RULE_SETUP -#line 536 "seclang-scanner.ll" +#line 537 "seclang-scanner.ll" { return p::make_ACTION_CTL_BDY_XML(yytext, *driver.loc.back()); } YY_BREAK case 32: YY_RULE_SETUP -#line 537 "seclang-scanner.ll" +#line 538 "seclang-scanner.ll" { return p::make_ACTION_CTL_BDY_URLENCODED(yytext, *driver.loc.back()); } YY_BREAK case 33: YY_RULE_SETUP -#line 538 "seclang-scanner.ll" +#line 539 "seclang-scanner.ll" { return p::make_ACTION_CTL_FORCE_REQ_BODY_VAR(yytext, *driver.loc.back()); } YY_BREAK case 34: YY_RULE_SETUP -#line 539 "seclang-scanner.ll" +#line 540 "seclang-scanner.ll" { return p::make_ACTION_CTL_REQUEST_BODY_ACCESS(yytext, *driver.loc.back()); } YY_BREAK case 35: YY_RULE_SETUP -#line 540 "seclang-scanner.ll" +#line 541 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_ENGINE(*driver.loc.back()); } YY_BREAK case 36: YY_RULE_SETUP -#line 541 "seclang-scanner.ll" +#line 542 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_BY_ID(yytext, *driver.loc.back()); } YY_BREAK case 37: YY_RULE_SETUP -#line 542 "seclang-scanner.ll" +#line 543 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_BY_TAG(yytext, *driver.loc.back()); } YY_BREAK case 38: YY_RULE_SETUP -#line 543 "seclang-scanner.ll" +#line 544 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID(yytext, *driver.loc.back()); } YY_BREAK case 39: YY_RULE_SETUP -#line 544 "seclang-scanner.ll" +#line 545 "seclang-scanner.ll" { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG(yytext, *driver.loc.back()); } YY_BREAK case 40: /* rule 40 can match eol */ YY_RULE_SETUP -#line 545 "seclang-scanner.ll" +#line 546 "seclang-scanner.ll" { return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } YY_BREAK case 41: /* rule 41 can match eol */ YY_RULE_SETUP -#line 546 "seclang-scanner.ll" +#line 547 "seclang-scanner.ll" { return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } YY_BREAK case 42: /* rule 42 can match eol */ YY_RULE_SETUP -#line 547 "seclang-scanner.ll" +#line 548 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 43: /* rule 43 can match eol */ YY_RULE_SETUP -#line 548 "seclang-scanner.ll" +#line 549 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 44: /* rule 44 can match eol */ YY_RULE_SETUP -#line 549 "seclang-scanner.ll" +#line 550 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 45: /* rule 45 can match eol */ YY_RULE_SETUP -#line 550 "seclang-scanner.ll" +#line 551 "seclang-scanner.ll" { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } YY_BREAK case 46: YY_RULE_SETUP -#line 551 "seclang-scanner.ll" +#line 552 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_INITCOL(yytext, *driver.loc.back()); } YY_BREAK case 47: /* rule 47 can match eol */ YY_RULE_SETUP -#line 552 "seclang-scanner.ll" +#line 553 "seclang-scanner.ll" { return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } YY_BREAK case 48: /* rule 48 can match eol */ YY_RULE_SETUP -#line 553 "seclang-scanner.ll" +#line 554 "seclang-scanner.ll" { return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } YY_BREAK case 49: YY_RULE_SETUP -#line 554 "seclang-scanner.ll" +#line 555 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_MSG(yytext, *driver.loc.back()); } YY_BREAK case 50: YY_RULE_SETUP -#line 555 "seclang-scanner.ll" +#line 556 "seclang-scanner.ll" { return p::make_ACTION_PHASE(yytext, *driver.loc.back()); } YY_BREAK case 51: YY_RULE_SETUP -#line 556 "seclang-scanner.ll" +#line 557 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_REDIRECT(yytext, *driver.loc.back()); } YY_BREAK case 52: /* rule 52 can match eol */ YY_RULE_SETUP -#line 557 "seclang-scanner.ll" +#line 558 "seclang-scanner.ll" { return p::make_ACTION_REV(yytext, *driver.loc.back()); } YY_BREAK case 53: /* rule 53 can match eol */ YY_RULE_SETUP -#line 558 "seclang-scanner.ll" +#line 559 "seclang-scanner.ll" { return p::make_ACTION_REV(yytext, *driver.loc.back()); } YY_BREAK case 54: YY_RULE_SETUP -#line 559 "seclang-scanner.ll" +#line 560 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETENV(yytext, *driver.loc.back()); } YY_BREAK case 55: YY_RULE_SETUP -#line 560 "seclang-scanner.ll" +#line 561 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETSID(yytext, *driver.loc.back()); } YY_BREAK case 56: YY_RULE_SETUP -#line 561 "seclang-scanner.ll" +#line 562 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETUID(yytext, *driver.loc.back()); } YY_BREAK case 57: YY_RULE_SETUP -#line 563 "seclang-scanner.ll" +#line 564 "seclang-scanner.ll" { BEGIN(SETVAR_ACTION_QUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } YY_BREAK case 58: YY_RULE_SETUP -#line 564 "seclang-scanner.ll" +#line 565 "seclang-scanner.ll" { BEGIN(SETVAR_ACTION_NONQUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } YY_BREAK case 59: YY_RULE_SETUP -#line 567 "seclang-scanner.ll" +#line 568 "seclang-scanner.ll" { return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } YY_BREAK case 60: YY_RULE_SETUP -#line 568 "seclang-scanner.ll" +#line 569 "seclang-scanner.ll" { return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } YY_BREAK case 61: YY_RULE_SETUP -#line 569 "seclang-scanner.ll" +#line 570 "seclang-scanner.ll" { return p::make_ACTION_SKIP_AFTER(yytext, *driver.loc.back()); } YY_BREAK case 62: YY_RULE_SETUP -#line 570 "seclang-scanner.ll" +#line 571 "seclang-scanner.ll" { return p::make_ACTION_SKIP(yytext, *driver.loc.back()); } YY_BREAK case 63: YY_RULE_SETUP -#line 571 "seclang-scanner.ll" +#line 572 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_TAG(yytext, *driver.loc.back()); } YY_BREAK case 64: /* rule 64 can match eol */ YY_RULE_SETUP -#line 572 "seclang-scanner.ll" +#line 573 "seclang-scanner.ll" { return p::make_ACTION_VER(yytext, *driver.loc.back()); } YY_BREAK case 65: YY_RULE_SETUP -#line 573 "seclang-scanner.ll" +#line 574 "seclang-scanner.ll" { return p::make_ACTION_XMLNS(yytext, *driver.loc.back()); } YY_BREAK case 66: YY_RULE_SETUP -#line 575 "seclang-scanner.ll" +#line 576 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT(yytext, *driver.loc.back()); } YY_BREAK case 67: YY_RULE_SETUP -#line 576 "seclang-scanner.ll" +#line 577 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT(yytext, *driver.loc.back()); } YY_BREAK case 68: YY_RULE_SETUP -#line 577 "seclang-scanner.ll" +#line 578 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT(yytext, *driver.loc.back()); } YY_BREAK case 69: YY_RULE_SETUP -#line 578 "seclang-scanner.ll" +#line 579 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_SQL_HEX_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 70: YY_RULE_SETUP -#line 579 "seclang-scanner.ll" +#line 580 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_BASE_64_ENCODE(yytext, *driver.loc.back()); } YY_BREAK case 71: YY_RULE_SETUP -#line 580 "seclang-scanner.ll" +#line 581 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 72: YY_RULE_SETUP -#line 581 "seclang-scanner.ll" +#line 582 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT(yytext, *driver.loc.back()); } YY_BREAK case 73: YY_RULE_SETUP -#line 582 "seclang-scanner.ll" +#line 583 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_CMD_LINE(yytext, *driver.loc.back()); } YY_BREAK case 74: YY_RULE_SETUP -#line 583 "seclang-scanner.ll" +#line 584 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_SHA1(yytext, *driver.loc.back()); } YY_BREAK case 75: YY_RULE_SETUP -#line 584 "seclang-scanner.ll" +#line 585 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_MD5(yytext, *driver.loc.back()); } YY_BREAK case 76: YY_RULE_SETUP -#line 585 "seclang-scanner.ll" +#line 586 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 77: YY_RULE_SETUP -#line 586 "seclang-scanner.ll" +#line 587 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.loc.back()); } YY_BREAK case 78: YY_RULE_SETUP -#line 587 "seclang-scanner.ll" +#line 588 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 79: YY_RULE_SETUP -#line 588 "seclang-scanner.ll" +#line 589 "seclang-scanner.ll" { return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.loc.back()); } YY_BREAK case 80: YY_RULE_SETUP -#line 589 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } +#line 590 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.loc.back()); } YY_BREAK case 81: YY_RULE_SETUP -#line 590 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } +#line 591 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } YY_BREAK case 82: YY_RULE_SETUP -#line 591 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } +#line 592 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } YY_BREAK case 83: YY_RULE_SETUP -#line 592 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.loc.back()); } +#line 593 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } YY_BREAK case 84: YY_RULE_SETUP -#line 593 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.loc.back()); } +#line 594 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 85: YY_RULE_SETUP -#line 594 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.loc.back()); } +#line 595 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.loc.back()); } YY_BREAK case 86: YY_RULE_SETUP -#line 595 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.loc.back()); } +#line 596 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.loc.back()); } YY_BREAK case 87: YY_RULE_SETUP -#line 596 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.loc.back()); } +#line 597 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.loc.back()); } YY_BREAK case 88: YY_RULE_SETUP -#line 597 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.loc.back()); } +#line 598 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.loc.back()); } YY_BREAK case 89: YY_RULE_SETUP -#line 598 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.loc.back()); } +#line 599 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.loc.back()); } YY_BREAK case 90: YY_RULE_SETUP -#line 599 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.loc.back()); } +#line 600 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 91: YY_RULE_SETUP -#line 600 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.loc.back()); } +#line 601 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 92: YY_RULE_SETUP -#line 601 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.loc.back()); } +#line 602 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.loc.back()); } YY_BREAK case 93: YY_RULE_SETUP -#line 602 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.loc.back()); } +#line 603 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.loc.back()); } YY_BREAK case 94: YY_RULE_SETUP -#line 603 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.loc.back()); } +#line 604 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.loc.back()); } YY_BREAK case 95: YY_RULE_SETUP -#line 604 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.loc.back()); } +#line 605 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.loc.back()); } YY_BREAK case 96: YY_RULE_SETUP -#line 605 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.loc.back()); } +#line 606 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.loc.back()); } YY_BREAK case 97: YY_RULE_SETUP -#line 606 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.loc.back()); } +#line 607 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.loc.back()); } YY_BREAK case 98: YY_RULE_SETUP -#line 607 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.loc.back()); } +#line 608 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.loc.back()); } YY_BREAK case 99: YY_RULE_SETUP -#line 608 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.loc.back()); } +#line 609 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.loc.back()); } YY_BREAK case 100: YY_RULE_SETUP -#line 609 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.loc.back()); } +#line 610 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.loc.back()); } YY_BREAK case 101: YY_RULE_SETUP -#line 610 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.loc.back()); } +#line 611 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.loc.back()); } YY_BREAK case 102: YY_RULE_SETUP -#line 611 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.loc.back()); } +#line 612 "seclang-scanner.ll" +{ return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.loc.back()); } YY_BREAK case 103: YY_RULE_SETUP #line 613 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.loc.back()); } YY_BREAK case 104: YY_RULE_SETUP -#line 614 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } +#line 615 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } YY_BREAK case 105: YY_RULE_SETUP -#line 615 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } +#line 616 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } YY_BREAK case 106: -/* rule 106 can match eol */ YY_RULE_SETUP -#line 616 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 617 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } YY_BREAK case 107: /* rule 107 can match eol */ YY_RULE_SETUP -#line 617 "seclang-scanner.ll" +#line 618 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - - case 108: +/* rule 108 can match eol */ YY_RULE_SETUP -#line 621 "seclang-scanner.ll" -{ return p::make_COMMA(*driver.loc.back()); } +#line 619 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK case 109: -/* rule 109 can match eol */ YY_RULE_SETUP -#line 626 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 623 "seclang-scanner.ll" +{ return p::make_COMMA(*driver.loc.back()); } YY_BREAK + + case 110: /* rule 110 can match eol */ YY_RULE_SETUP -#line 627 "seclang-scanner.ll" +#line 628 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - - case 111: +/* rule 111 can match eol */ YY_RULE_SETUP -#line 632 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(yyleng); } +#line 629 "seclang-scanner.ll" +{ BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK + + case 112: -/* rule 112 can match eol */ YY_RULE_SETUP -#line 633 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(1); } +#line 634 "seclang-scanner.ll" +{ BEGIN(INITIAL); yyless(yyleng); } YY_BREAK case 113: /* rule 113 can match eol */ YY_RULE_SETUP -#line 634 "seclang-scanner.ll" +#line 635 "seclang-scanner.ll" +{ BEGIN(INITIAL); yyless(1); } + YY_BREAK +case 114: +/* rule 114 can match eol */ +YY_RULE_SETUP +#line 636 "seclang-scanner.ll" { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 114: +case 115: YY_RULE_SETUP -#line 639 "seclang-scanner.ll" +#line 641 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(yyleng); p::make_NEW_LINE(*driver.loc.back()); } YY_BREAK -case 115: -/* rule 115 can match eol */ +case 116: +/* rule 116 can match eol */ YY_RULE_SETUP -#line 640 "seclang-scanner.ll" +#line 642 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(1); } YY_BREAK -case 116: -/* rule 116 can match eol */ +case 117: +/* rule 117 can match eol */ YY_RULE_SETUP -#line 641 "seclang-scanner.ll" +#line 643 "seclang-scanner.ll" { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 646 "seclang-scanner.ll" +#line 648 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_ACTION); yyless(0); } YY_BREAK -case 118: +case 119: YY_RULE_SETUP -#line 651 "seclang-scanner.ll" +#line 653 "seclang-scanner.ll" { BEGIN(ACTION_PREDICATE_ENDS_WITH_QUOTE); } YY_BREAK -case 119: +case 120: YY_RULE_SETUP -#line 652 "seclang-scanner.ll" +#line 654 "seclang-scanner.ll" { BEGIN(ACTION_PREDICATE_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 120: +case 121: YY_RULE_SETUP -#line 653 "seclang-scanner.ll" +#line 655 "seclang-scanner.ll" { BEGIN(ACTION_PREDICATE_ENDS_WITH_COMMA_OR_DOUBLE_QUOTE); yyless(0); } YY_BREAK -case 121: -/* rule 121 can match eol */ +case 122: +/* rule 122 can match eol */ YY_RULE_SETUP -#line 658 "seclang-scanner.ll" +#line 660 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 122: -/* rule 122 can match eol */ +case 123: +/* rule 123 can match eol */ YY_RULE_SETUP -#line 659 "seclang-scanner.ll" +#line 661 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK -case 123: +case 124: YY_RULE_SETUP -#line 663 "seclang-scanner.ll" +#line 665 "seclang-scanner.ll" { yyless(1); BEGIN_PREVIOUS(); } YY_BREAK -case 124: +case 125: YY_RULE_SETUP -#line 664 "seclang-scanner.ll" +#line 666 "seclang-scanner.ll" { BEGIN_PREVIOUS(); } YY_BREAK -case 125: +case 126: YY_RULE_SETUP -#line 665 "seclang-scanner.ll" +#line 667 "seclang-scanner.ll" { BEGIN_PREVIOUS(); } YY_BREAK -case 126: +case 127: YY_RULE_SETUP -#line 669 "seclang-scanner.ll" +#line 671 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(yyleng); } YY_BREAK -case 127: -/* rule 127 can match eol */ +case 128: +/* rule 128 can match eol */ YY_RULE_SETUP -#line 670 "seclang-scanner.ll" +#line 672 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 128: +case 129: YY_RULE_SETUP -#line 674 "seclang-scanner.ll" +#line 676 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(yyleng); } YY_BREAK -case 129: -/* rule 129 can match eol */ +case 130: +/* rule 130 can match eol */ YY_RULE_SETUP -#line 675 "seclang-scanner.ll" +#line 677 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 130: +case 131: YY_RULE_SETUP -#line 679 "seclang-scanner.ll" +#line 681 "seclang-scanner.ll" { yyless(0); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 131: +case 132: YY_RULE_SETUP -#line 680 "seclang-scanner.ll" +#line 682 "seclang-scanner.ll" { yyless(0); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE);} YY_BREAK -case 132: -/* rule 132 can match eol */ +case 133: +/* rule 133 can match eol */ YY_RULE_SETUP -#line 681 "seclang-scanner.ll" +#line 683 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 133: +case 134: YY_RULE_SETUP -#line 685 "seclang-scanner.ll" +#line 687 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 134: +case 135: YY_RULE_SETUP -#line 686 "seclang-scanner.ll" +#line 688 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } YY_BREAK -case 135: +case 136: YY_RULE_SETUP -#line 690 "seclang-scanner.ll" +#line 692 "seclang-scanner.ll" { return p::make_NOT(*driver.loc.back()); } YY_BREAK -case 136: -/* rule 136 can match eol */ +case 137: +/* rule 137 can match eol */ YY_RULE_SETUP -#line 691 "seclang-scanner.ll" +#line 693 "seclang-scanner.ll" { BEGIN_ACTION_OPERATION(); yyless(0); } YY_BREAK -case 137: +case 138: YY_RULE_SETUP -#line 696 "seclang-scanner.ll" +#line 698 "seclang-scanner.ll" { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } YY_BREAK -case 138: +case 139: YY_RULE_SETUP -#line 697 "seclang-scanner.ll" +#line 699 "seclang-scanner.ll" { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } YY_BREAK -case 139: +case 140: YY_RULE_SETUP -#line 698 "seclang-scanner.ll" +#line 700 "seclang-scanner.ll" { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } YY_BREAK -case 140: -/* rule 140 can match eol */ +case 141: +/* rule 141 can match eol */ YY_RULE_SETUP -#line 702 "seclang-scanner.ll" +#line 704 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0);} YY_BREAK -case 141: +case 142: YY_RULE_SETUP -#line 706 "seclang-scanner.ll" +#line 708 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 142: -/* rule 142 can match eol */ +case 143: +/* rule 143 can match eol */ YY_RULE_SETUP -#line 707 "seclang-scanner.ll" +#line 709 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_ACTION); yyless(0); } YY_BREAK -case 143: +case 144: YY_RULE_SETUP -#line 715 "seclang-scanner.ll" +#line 717 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 144: -/* rule 144 can match eol */ +case 145: +/* rule 145 can match eol */ YY_RULE_SETUP -#line 720 "seclang-scanner.ll" +#line 722 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 145: -/* rule 145 can match eol */ +case 146: +/* rule 146 can match eol */ YY_RULE_SETUP -#line 721 "seclang-scanner.ll" +#line 723 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); } YY_BREAK -case 146: +case 147: YY_RULE_SETUP -#line 726 "seclang-scanner.ll" +#line 728 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK -case 147: -/* rule 147 can match eol */ +case 148: +/* rule 148 can match eol */ YY_RULE_SETUP -#line 727 "seclang-scanner.ll" +#line 729 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 148: -/* rule 148 can match eol */ +case 149: +/* rule 149 can match eol */ YY_RULE_SETUP -#line 728 "seclang-scanner.ll" +#line 730 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); } YY_BREAK case YY_STATE_EOF(FINISH_ACTIONS): -#line 736 "seclang-scanner.ll" +#line 738 "seclang-scanner.ll" { BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.loc.back()); } YY_BREAK -case 149: +case 150: YY_RULE_SETUP -#line 737 "seclang-scanner.ll" +#line 739 "seclang-scanner.ll" { BEGIN(INITIAL); } YY_BREAK -case 150: -/* rule 150 can match eol */ -YY_RULE_SETUP -#line 740 "seclang-scanner.ll" -{ return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } - YY_BREAK case 151: /* rule 151 can match eol */ YY_RULE_SETUP -#line 741 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } +#line 742 "seclang-scanner.ll" +{ return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } YY_BREAK case 152: /* rule 152 can match eol */ YY_RULE_SETUP -#line 742 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.loc.back()); } +#line 743 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } YY_BREAK case 153: +/* rule 153 can match eol */ YY_RULE_SETUP -#line 743 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 744 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.loc.back()); } YY_BREAK case 154: YY_RULE_SETUP -#line 744 "seclang-scanner.ll" -{ return p::make_CONFIG_CONTENT_INJECTION(*driver.loc.back()); } +#line 745 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 155: YY_RULE_SETUP -#line 745 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 746 "seclang-scanner.ll" +{ return p::make_CONFIG_CONTENT_INJECTION(*driver.loc.back()); } YY_BREAK case 156: YY_RULE_SETUP -#line 746 "seclang-scanner.ll" +#line 747 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 157: YY_RULE_SETUP -#line 747 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 748 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 158: YY_RULE_SETUP -#line 748 "seclang-scanner.ll" +#line 749 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 159: YY_RULE_SETUP -#line 749 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 750 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 160: YY_RULE_SETUP -#line 750 "seclang-scanner.ll" +#line 751 "seclang-scanner.ll" { return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 161: YY_RULE_SETUP -#line 751 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.loc.back()); } +#line 752 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 162: YY_RULE_SETUP -#line 752 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 753 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.loc.back()); } YY_BREAK case 163: YY_RULE_SETUP -#line 753 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 754 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 164: YY_RULE_SETUP -#line 754 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 755 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 165: YY_RULE_SETUP -#line 755 "seclang-scanner.ll" +#line 756 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 166: YY_RULE_SETUP -#line 756 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 757 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 167: YY_RULE_SETUP -#line 757 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.loc.back()); } +#line 758 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 168: YY_RULE_SETUP -#line 758 "seclang-scanner.ll" -{ return p::make_JSON(*driver.loc.back()); } +#line 759 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.loc.back()); } YY_BREAK case 169: YY_RULE_SETUP -#line 759 "seclang-scanner.ll" -{ return p::make_NATIVE(*driver.loc.back()); } +#line 760 "seclang-scanner.ll" +{ return p::make_JSON(*driver.loc.back()); } YY_BREAK case 170: YY_RULE_SETUP -#line 760 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 761 "seclang-scanner.ll" +{ return p::make_NATIVE(*driver.loc.back()); } YY_BREAK case 171: YY_RULE_SETUP -#line 761 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 762 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 172: YY_RULE_SETUP -#line 762 "seclang-scanner.ll" +#line 763 "seclang-scanner.ll" { return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 173: YY_RULE_SETUP -#line 763 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.loc.back()); } +#line 764 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 174: YY_RULE_SETUP -#line 766 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 765 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.loc.back()); } YY_BREAK case 175: YY_RULE_SETUP -#line 767 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 768 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 176: YY_RULE_SETUP -#line 768 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 769 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 177: YY_RULE_SETUP -#line 769 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 770 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 178: YY_RULE_SETUP -#line 770 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 771 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 179: YY_RULE_SETUP -#line 771 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 772 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 180: YY_RULE_SETUP -#line 772 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 773 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 181: YY_RULE_SETUP -#line 773 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 774 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 182: YY_RULE_SETUP #line 775 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 183: YY_RULE_SETUP -#line 776 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 777 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 184: YY_RULE_SETUP -#line 777 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 778 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 185: YY_RULE_SETUP -#line 778 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.loc.back()); } +#line 779 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 186: YY_RULE_SETUP -#line 779 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } +#line 780 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.loc.back()); } YY_BREAK case 187: YY_RULE_SETUP -#line 780 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 781 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 188: YY_RULE_SETUP -#line 781 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.loc.back()); } +#line 782 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 189: YY_RULE_SETUP -#line 782 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.loc.back()); } +#line 783 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.loc.back()); } YY_BREAK case 190: YY_RULE_SETUP -#line 783 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 784 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.loc.back()); } YY_BREAK case 191: YY_RULE_SETUP -#line 784 "seclang-scanner.ll" +#line 785 "seclang-scanner.ll" { return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 192: YY_RULE_SETUP -#line 785 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 786 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 193: YY_RULE_SETUP -#line 786 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 787 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 194: YY_RULE_SETUP -#line 787 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 788 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 195: YY_RULE_SETUP -#line 788 "seclang-scanner.ll" +#line 789 "seclang-scanner.ll" { return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 196: YY_RULE_SETUP -#line 789 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 790 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 197: YY_RULE_SETUP -#line 790 "seclang-scanner.ll" +#line 791 "seclang-scanner.ll" { return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 198: YY_RULE_SETUP -#line 791 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 792 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 199: YY_RULE_SETUP -#line 792 "seclang-scanner.ll" +#line 793 "seclang-scanner.ll" { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 200: YY_RULE_SETUP -#line 793 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 794 "seclang-scanner.ll" +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 201: YY_RULE_SETUP -#line 794 "seclang-scanner.ll" +#line 795 "seclang-scanner.ll" { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 202: YY_RULE_SETUP -#line 795 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 796 "seclang-scanner.ll" +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 203: YY_RULE_SETUP -#line 796 "seclang-scanner.ll" +#line 797 "seclang-scanner.ll" { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 204: YY_RULE_SETUP -#line 797 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 798 "seclang-scanner.ll" +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 205: YY_RULE_SETUP -#line 798 "seclang-scanner.ll" +#line 799 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 206: YY_RULE_SETUP -#line 799 "seclang-scanner.ll" -{ return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.loc.back()); } +#line 800 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 207: YY_RULE_SETUP -#line 800 "seclang-scanner.ll" -{ return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.loc.back()); } +#line 801 "seclang-scanner.ll" +{ return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.loc.back()); } YY_BREAK case 208: YY_RULE_SETUP -#line 801 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 802 "seclang-scanner.ll" +{ return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.loc.back()); } YY_BREAK case 209: YY_RULE_SETUP -#line 802 "seclang-scanner.ll" +#line 803 "seclang-scanner.ll" { return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 210: YY_RULE_SETUP -#line 803 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 804 "seclang-scanner.ll" +{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 211: YY_RULE_SETUP -#line 804 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 805 "seclang-scanner.ll" +{ return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 212: YY_RULE_SETUP -#line 805 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ABORT(yytext, *driver.loc.back()); } +#line 806 "seclang-scanner.ll" +{ return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 213: YY_RULE_SETUP -#line 806 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } +#line 807 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_ABORT(yytext, *driver.loc.back()); } YY_BREAK case 214: YY_RULE_SETUP -#line 807 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.loc.back()); } +#line 808 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } YY_BREAK case 215: YY_RULE_SETUP -#line 808 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } +#line 809 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.loc.back()); } YY_BREAK case 216: YY_RULE_SETUP -#line 809 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } +#line 810 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } YY_BREAK case 217: YY_RULE_SETUP -#line 810 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.loc.back()); } +#line 811 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } YY_BREAK case 218: YY_RULE_SETUP -#line 811 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.loc.back()); } +#line 812 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.loc.back()); } YY_BREAK case 219: YY_RULE_SETUP -#line 812 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_REJECT(yytext, *driver.loc.back()); } +#line 813 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.loc.back()); } YY_BREAK case 220: YY_RULE_SETUP -#line 813 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.loc.back()); } +#line 814 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_REJECT(yytext, *driver.loc.back()); } YY_BREAK case 221: YY_RULE_SETUP -#line 814 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.loc.back()); } +#line 815 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.loc.back()); } YY_BREAK case 222: YY_RULE_SETUP -#line 815 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_WARN(yytext, *driver.loc.back()); } +#line 816 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.loc.back()); } YY_BREAK case 223: YY_RULE_SETUP -#line 816 "seclang-scanner.ll" -{ return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.loc.back()); } +#line 817 "seclang-scanner.ll" +{ return p::make_CONFIG_VALUE_WARN(yytext, *driver.loc.back()); } YY_BREAK case 224: YY_RULE_SETUP -#line 817 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 818 "seclang-scanner.ll" +{ return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.loc.back()); } YY_BREAK case 225: YY_RULE_SETUP -#line 818 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.loc.back()); } +#line 819 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 226: YY_RULE_SETUP -#line 819 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.loc.back()); } +#line 820 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.loc.back()); } YY_BREAK case 227: YY_RULE_SETUP -#line 820 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 821 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.loc.back()); } YY_BREAK case 228: YY_RULE_SETUP -#line 821 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 822 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 229: YY_RULE_SETUP -#line 822 "seclang-scanner.ll" +#line 823 "seclang-scanner.ll" { return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 230: YY_RULE_SETUP -#line 823 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 824 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 231: YY_RULE_SETUP -#line 824 "seclang-scanner.ll" +#line 825 "seclang-scanner.ll" { return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 232: YY_RULE_SETUP -#line 825 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.loc.back()); } +#line 826 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 233: YY_RULE_SETUP -#line 826 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 827 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 234: YY_RULE_SETUP -#line 827 "seclang-scanner.ll" +#line 828 "seclang-scanner.ll" { return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 235: YY_RULE_SETUP -#line 828 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 829 "seclang-scanner.ll" +{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 236: YY_RULE_SETUP -#line 829 "seclang-scanner.ll" +#line 830 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 237: YY_RULE_SETUP -#line 830 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.loc.back()); } +#line 831 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 238: YY_RULE_SETUP -#line 831 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 832 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.loc.back()); } YY_BREAK case 239: YY_RULE_SETUP -#line 832 "seclang-scanner.ll" +#line 833 "seclang-scanner.ll" { return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 240: YY_RULE_SETUP -#line 833 "seclang-scanner.ll" -{ return p::make_CONFIG_CONN_ENGINE(yytext, *driver.loc.back()); } +#line 834 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 241: YY_RULE_SETUP -#line 834 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.loc.back()); } +#line 835 "seclang-scanner.ll" +{ return p::make_CONFIG_CONN_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 242: YY_RULE_SETUP -#line 835 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.loc.back()); } +#line 836 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.loc.back()); } YY_BREAK case 243: YY_RULE_SETUP -#line 836 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.loc.back()); } +#line 837 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.loc.back()); } YY_BREAK case 244: YY_RULE_SETUP -#line 837 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.loc.back()); } +#line 838 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.loc.back()); } YY_BREAK case 245: YY_RULE_SETUP -#line 838 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.loc.back()); } +#line 839 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.loc.back()); } YY_BREAK case 246: YY_RULE_SETUP -#line 839 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +#line 840 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.loc.back()); } YY_BREAK case 247: YY_RULE_SETUP -#line 840 "seclang-scanner.ll" +#line 841 "seclang-scanner.ll" { return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 248: YY_RULE_SETUP -#line 841 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.loc.back()); } +#line 842 "seclang-scanner.ll" +{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } YY_BREAK case 249: YY_RULE_SETUP -#line 842 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.loc.back()); } +#line 843 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.loc.back()); } YY_BREAK case 250: YY_RULE_SETUP -#line 843 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.loc.back()); } +#line 844 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.loc.back()); } YY_BREAK case 251: YY_RULE_SETUP -#line 844 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.loc.back()); } +#line 845 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.loc.back()); } YY_BREAK case 252: YY_RULE_SETUP -#line 845 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.loc.back()); } +#line 846 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.loc.back()); } YY_BREAK case 253: YY_RULE_SETUP -#line 846 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.loc.back()); } +#line 847 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.loc.back()); } YY_BREAK case 254: YY_RULE_SETUP -#line 847 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 848 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.loc.back()); } YY_BREAK case 255: YY_RULE_SETUP -#line 848 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.loc.back()); } +#line 849 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 256: YY_RULE_SETUP -#line 849 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.loc.back()); } +#line 850 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.loc.back()); } YY_BREAK case 257: YY_RULE_SETUP -#line 850 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.loc.back()); } +#line 851 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.loc.back()); } YY_BREAK case 258: YY_RULE_SETUP #line 852 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.loc.back()); } YY_BREAK case 259: YY_RULE_SETUP -#line 853 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.loc.back()); } +#line 854 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.loc.back()); } YY_BREAK case 260: YY_RULE_SETUP -#line 854 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.loc.back()); } +#line 855 "seclang-scanner.ll" +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 261: YY_RULE_SETUP #line 856 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 262: YY_RULE_SETUP -#line 857 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 858 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.loc.back()); } YY_BREAK case 263: YY_RULE_SETUP -#line 858 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.loc.back()); } +#line 859 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 264: -/* rule 264 can match eol */ YY_RULE_SETUP -#line 859 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 860 "seclang-scanner.ll" +{ return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.loc.back()); } YY_BREAK case 265: /* rule 265 can match eol */ YY_RULE_SETUP -#line 860 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } +#line 861 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK case 266: /* rule 266 can match eol */ YY_RULE_SETUP -#line 861 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } +#line 862 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } YY_BREAK case 267: +/* rule 267 can match eol */ YY_RULE_SETUP -#line 862 "seclang-scanner.ll" -{ driver.loc.back()->step(); /* comment, just ignore. */ } +#line 863 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } YY_BREAK case 268: YY_RULE_SETUP -#line 863 "seclang-scanner.ll" -{ driver.loc.back()->step(); /* carriage return, just ignore. */} +#line 864 "seclang-scanner.ll" +{ driver.loc.back()->step(); /* comment, just ignore. */ } YY_BREAK case 269: YY_RULE_SETUP -#line 864 "seclang-scanner.ll" -{ return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } +#line 865 "seclang-scanner.ll" +{ driver.loc.back()->step(); /* carriage return, just ignore. */} YY_BREAK case 270: YY_RULE_SETUP -#line 865 "seclang-scanner.ll" +#line 866 "seclang-scanner.ll" +{ return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } + YY_BREAK +case 271: +YY_RULE_SETUP +#line 867 "seclang-scanner.ll" { return p::make_COMMA(*driver.loc.back()); } YY_BREAK -case 271: +case 272: YY_RULE_SETUP -#line 868 "seclang-scanner.ll" +#line 870 "seclang-scanner.ll" { BEGIN(EXPECTING_VARIABLE); } YY_BREAK -case 272: +case 273: YY_RULE_SETUP -#line 872 "seclang-scanner.ll" +#line 874 "seclang-scanner.ll" { return p::make_PIPE(*driver.loc.back()); } YY_BREAK -case 273: +case 274: YY_RULE_SETUP -#line 873 "seclang-scanner.ll" +#line 875 "seclang-scanner.ll" { return p::make_PIPE(*driver.loc.back()); } YY_BREAK -case 274: +case 275: YY_RULE_SETUP -#line 874 "seclang-scanner.ll" +#line 876 "seclang-scanner.ll" { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } YY_BREAK -case 275: +case 276: YY_RULE_SETUP -#line 875 "seclang-scanner.ll" +#line 877 "seclang-scanner.ll" { return p::make_VAR_EXCLUSION(*driver.loc.back()); } YY_BREAK -case 276: +case 277: YY_RULE_SETUP -#line 876 "seclang-scanner.ll" +#line 878 "seclang-scanner.ll" { return p::make_VAR_COUNT(*driver.loc.back()); } YY_BREAK -case 277: -YY_RULE_SETUP -#line 880 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } - YY_BREAK case 278: YY_RULE_SETUP -#line 881 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 882 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 279: -/* rule 279 can match eol */ YY_RULE_SETUP -#line 882 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 883 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 280: /* rule 280 can match eol */ YY_RULE_SETUP -#line 883 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 884 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 281: /* rule 281 can match eol */ YY_RULE_SETUP -#line 884 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 885 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK case 282: /* rule 282 can match eol */ YY_RULE_SETUP -#line 885 "seclang-scanner.ll" -{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } +#line 886 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_SPACE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK - - case 283: +/* rule 283 can match eol */ YY_RULE_SETUP -#line 889 "seclang-scanner.ll" -{ } +#line 887 "seclang-scanner.ll" +{ if (state_variable_from == 0) { BEGIN(EXPECTING_OPERATOR_ENDS_WITH_QUOTE); } else { state_variable_from = 0; BEGIN(INITIAL);} } YY_BREAK + + case 284: YY_RULE_SETUP -#line 890 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +#line 891 "seclang-scanner.ll" +{ } YY_BREAK case 285: -/* rule 285 can match eol */ YY_RULE_SETUP -#line 891 "seclang-scanner.ll" +#line 892 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 286: /* rule 286 can match eol */ YY_RULE_SETUP -#line 892 "seclang-scanner.ll" +#line 893 "seclang-scanner.ll" { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK - - case 287: +/* rule 287 can match eol */ YY_RULE_SETUP -#line 897 "seclang-scanner.ll" -{ BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } +#line 894 "seclang-scanner.ll" +{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK + + case 288: YY_RULE_SETUP -#line 898 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); } +#line 899 "seclang-scanner.ll" +{ BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } YY_BREAK case 289: YY_RULE_SETUP -#line 899 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } +#line 900 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); } YY_BREAK case 290: YY_RULE_SETUP -#line 900 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } +#line 901 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } YY_BREAK case 291: YY_RULE_SETUP -#line 901 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } +#line 902 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } YY_BREAK case 292: YY_RULE_SETUP -#line 902 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } +#line 903 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } YY_BREAK case 293: YY_RULE_SETUP -#line 903 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } +#line 904 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } YY_BREAK case 294: YY_RULE_SETUP -#line 904 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } +#line 905 "seclang-scanner.ll" +{ return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } YY_BREAK case 295: YY_RULE_SETUP -#line 905 "seclang-scanner.ll" -{ return p::make_VARIABLE_AUTH_TYPE(*driver.loc.back()); } +#line 906 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } YY_BREAK case 296: YY_RULE_SETUP -#line 906 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.loc.back()); } +#line 907 "seclang-scanner.ll" +{ return p::make_VARIABLE_AUTH_TYPE(*driver.loc.back()); } YY_BREAK case 297: YY_RULE_SETUP -#line 907 "seclang-scanner.ll" -{ return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.loc.back()); } +#line 908 "seclang-scanner.ll" +{ return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.loc.back()); } YY_BREAK case 298: YY_RULE_SETUP -#line 908 "seclang-scanner.ll" -{ return p::make_VARIABLE_FULL_REQUEST(*driver.loc.back()); } +#line 909 "seclang-scanner.ll" +{ return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.loc.back()); } YY_BREAK case 299: YY_RULE_SETUP -#line 909 "seclang-scanner.ll" -{ return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.loc.back()); } +#line 910 "seclang-scanner.ll" +{ return p::make_VARIABLE_FULL_REQUEST(*driver.loc.back()); } YY_BREAK case 300: YY_RULE_SETUP -#line 910 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.loc.back()); } +#line 911 "seclang-scanner.ll" +{ return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.loc.back()); } YY_BREAK case 301: YY_RULE_SETUP -#line 911 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VAR(*driver.loc.back()); } +#line 912 "seclang-scanner.ll" +{ return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.loc.back()); } YY_BREAK case 302: YY_RULE_SETUP -#line 912 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.loc.back()); } +#line 913 "seclang-scanner.ll" +{ return p::make_VARIABLE_MATCHED_VAR(*driver.loc.back()); } YY_BREAK case 303: YY_RULE_SETUP -#line 913 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.loc.back()); } +#line 914 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.loc.back()); } YY_BREAK case 304: YY_RULE_SETUP -#line 914 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.loc.back()); } +#line 915 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.loc.back()); } YY_BREAK case 305: YY_RULE_SETUP -#line 915 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.loc.back()); } +#line 916 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.loc.back()); } YY_BREAK case 306: YY_RULE_SETUP -#line 916 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.loc.back()); } +#line 917 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.loc.back()); } YY_BREAK case 307: YY_RULE_SETUP -#line 917 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.loc.back()); } +#line 918 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.loc.back()); } YY_BREAK case 308: YY_RULE_SETUP -#line 918 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } +#line 919 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.loc.back()); } YY_BREAK case 309: YY_RULE_SETUP -#line 919 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } +#line 920 "seclang-scanner.ll" +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } YY_BREAK case 310: YY_RULE_SETUP -#line 920 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } +#line 921 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } YY_BREAK case 311: YY_RULE_SETUP -#line 921 "seclang-scanner.ll" +#line 922 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } YY_BREAK case 312: YY_RULE_SETUP -#line 922 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.loc.back()); } +#line 923 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } YY_BREAK case 313: YY_RULE_SETUP -#line 923 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.loc.back()); } +#line 924 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.loc.back()); } YY_BREAK case 314: YY_RULE_SETUP -#line 924 "seclang-scanner.ll" +#line 925 "seclang-scanner.ll" +{ return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.loc.back()); } + YY_BREAK +case 315: +YY_RULE_SETUP +#line 926 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_INVALID_QUOTING(*driver.loc.back()); } YY_BREAK -case 315: +case 316: YY_RULE_SETUP -#line 925 "seclang-scanner.ll" +#line 927 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_LF_LINE(*driver.loc.back()); } YY_BREAK -case 316: +case 317: YY_RULE_SETUP -#line 926 "seclang-scanner.ll" +#line 928 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_MISSING_SEMICOLON(*driver.loc.back()); } YY_BREAK -case 317: +case 318: YY_RULE_SETUP -#line 927 "seclang-scanner.ll" +#line 929 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_SEMICOLON_MISSING(*driver.loc.back()); } YY_BREAK -case 318: +case 319: YY_RULE_SETUP -#line 928 "seclang-scanner.ll" +#line 930 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } YY_BREAK -case 319: +case 320: YY_RULE_SETUP -#line 929 "seclang-scanner.ll" +#line 931 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } YY_BREAK -case 320: +case 321: YY_RULE_SETUP -#line 930 "seclang-scanner.ll" +#line 932 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_STRICT_ERROR(*driver.loc.back()); } YY_BREAK -case 321: +case 322: YY_RULE_SETUP -#line 931 "seclang-scanner.ll" +#line 933 "seclang-scanner.ll" { return p::make_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY(*driver.loc.back()); } YY_BREAK -case 322: +case 323: YY_RULE_SETUP -#line 932 "seclang-scanner.ll" +#line 934 "seclang-scanner.ll" { return p::make_VARIABLE_OUTBOUND_DATA_ERROR(*driver.loc.back()); } YY_BREAK -case 323: +case 324: YY_RULE_SETUP -#line 933 "seclang-scanner.ll" +#line 935 "seclang-scanner.ll" { return p::make_VARIABLE_PATH_INFO(*driver.loc.back()); } YY_BREAK -case 324: +case 325: YY_RULE_SETUP -#line 934 "seclang-scanner.ll" +#line 936 "seclang-scanner.ll" { return p::make_VARIABLE_QUERY_STRING(*driver.loc.back()); } YY_BREAK -case 325: +case 326: YY_RULE_SETUP -#line 935 "seclang-scanner.ll" +#line 937 "seclang-scanner.ll" { return p::make_VARIABLE_REMOTE_ADDR(*driver.loc.back()); } YY_BREAK -case 326: +case 327: YY_RULE_SETUP -#line 936 "seclang-scanner.ll" +#line 938 "seclang-scanner.ll" { return p::make_VARIABLE_REMOTE_HOST(*driver.loc.back()); } YY_BREAK -case 327: +case 328: YY_RULE_SETUP -#line 937 "seclang-scanner.ll" +#line 939 "seclang-scanner.ll" { return p::make_VARIABLE_REMOTE_PORT(*driver.loc.back()); } YY_BREAK -case 328: +case 329: YY_RULE_SETUP -#line 938 "seclang-scanner.ll" +#line 940 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_ERROR_MSG(*driver.loc.back()); } YY_BREAK -case 329: +case 330: YY_RULE_SETUP -#line 939 "seclang-scanner.ll" +#line 941 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_ERROR(*driver.loc.back()); } YY_BREAK -case 330: +case 331: YY_RULE_SETUP -#line 940 "seclang-scanner.ll" +#line 942 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG(*driver.loc.back()); } YY_BREAK -case 331: +case 332: YY_RULE_SETUP -#line 941 "seclang-scanner.ll" +#line 943 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR(*driver.loc.back()); } YY_BREAK -case 332: +case 333: YY_RULE_SETUP -#line 942 "seclang-scanner.ll" +#line 944 "seclang-scanner.ll" { return p::make_VARIABLE_REQBODY_PROCESSOR(*driver.loc.back()); } YY_BREAK -case 333: +case 334: YY_RULE_SETUP -#line 943 "seclang-scanner.ll" +#line 945 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_BASENAME(*driver.loc.back()); } YY_BREAK -case 334: +case 335: YY_RULE_SETUP -#line 944 "seclang-scanner.ll" +#line 946 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_BODY_LENGTH(*driver.loc.back()); } YY_BREAK -case 335: +case 336: YY_RULE_SETUP -#line 945 "seclang-scanner.ll" +#line 947 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_BODY(*driver.loc.back()); } YY_BREAK -case 336: +case 337: YY_RULE_SETUP -#line 946 "seclang-scanner.ll" +#line 948 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_FILE_NAME(*driver.loc.back()); } YY_BREAK -case 337: +case 338: YY_RULE_SETUP -#line 947 "seclang-scanner.ll" +#line 949 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 338: +case 339: YY_RULE_SETUP -#line 948 "seclang-scanner.ll" +#line 950 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 339: +case 340: YY_RULE_SETUP -#line 949 "seclang-scanner.ll" +#line 951 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_LINE(*driver.loc.back()); } YY_BREAK -case 340: +case 341: YY_RULE_SETUP -#line 950 "seclang-scanner.ll" +#line 952 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_METHOD(*driver.loc.back()); } YY_BREAK -case 341: +case 342: YY_RULE_SETUP -#line 951 "seclang-scanner.ll" +#line 953 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_PROTOCOL(*driver.loc.back()); } YY_BREAK -case 342: +case 343: YY_RULE_SETUP -#line 952 "seclang-scanner.ll" +#line 954 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_URI_RAW(*driver.loc.back()); } YY_BREAK -case 343: +case 344: YY_RULE_SETUP -#line 953 "seclang-scanner.ll" +#line 955 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_URI(*driver.loc.back()); } YY_BREAK -case 344: +case 345: YY_RULE_SETUP -#line 954 "seclang-scanner.ll" +#line 956 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_BODY(*driver.loc.back()); } YY_BREAK -case 345: +case 346: YY_RULE_SETUP -#line 955 "seclang-scanner.ll" +#line 957 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_CONTENT_LENGTH(*driver.loc.back()); } YY_BREAK -case 346: +case 347: YY_RULE_SETUP -#line 956 "seclang-scanner.ll" +#line 958 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_CONTENT_TYPE(*driver.loc.back()); } YY_BREAK -case 347: +case 348: YY_RULE_SETUP -#line 957 "seclang-scanner.ll" +#line 959 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 348: +case 349: YY_RULE_SETUP -#line 958 "seclang-scanner.ll" +#line 960 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } YY_BREAK -case 349: +case 350: YY_RULE_SETUP -#line 959 "seclang-scanner.ll" +#line 961 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_PROTOCOL(*driver.loc.back()); } YY_BREAK -case 350: +case 351: YY_RULE_SETUP -#line 960 "seclang-scanner.ll" +#line 962 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_STATUS(*driver.loc.back()); } YY_BREAK -case 351: +case 352: YY_RULE_SETUP -#line 961 "seclang-scanner.ll" +#line 963 "seclang-scanner.ll" { return p::make_VARIABLE_SERVER_ADDR(*driver.loc.back()); } YY_BREAK -case 352: +case 353: YY_RULE_SETUP -#line 962 "seclang-scanner.ll" +#line 964 "seclang-scanner.ll" { return p::make_VARIABLE_SERVER_NAME(*driver.loc.back()); } YY_BREAK -case 353: +case 354: YY_RULE_SETUP -#line 963 "seclang-scanner.ll" +#line 965 "seclang-scanner.ll" { return p::make_VARIABLE_SERVER_PORT(*driver.loc.back()); } YY_BREAK -case 354: +case 355: YY_RULE_SETUP -#line 964 "seclang-scanner.ll" +#line 966 "seclang-scanner.ll" { return p::make_VARIABLE_SESSION_ID(*driver.loc.back()); } YY_BREAK -case 355: +case 356: YY_RULE_SETUP -#line 965 "seclang-scanner.ll" +#line 967 "seclang-scanner.ll" { return p::make_VARIABLE_UNIQUE_ID(*driver.loc.back()); } YY_BREAK -case 356: +case 357: YY_RULE_SETUP -#line 966 "seclang-scanner.ll" +#line 968 "seclang-scanner.ll" { return p::make_VARIABLE_URL_ENCODED_ERROR(*driver.loc.back()); } YY_BREAK -case 357: +case 358: YY_RULE_SETUP -#line 967 "seclang-scanner.ll" +#line 969 "seclang-scanner.ll" { return p::make_VARIABLE_USER_ID(*driver.loc.back()); } YY_BREAK -case 358: +case 359: YY_RULE_SETUP -#line 968 "seclang-scanner.ll" +#line 970 "seclang-scanner.ll" { return p::make_VARIABLE_WEB_APP_ID(*driver.loc.back()); } YY_BREAK -case 359: +case 360: YY_RULE_SETUP -#line 969 "seclang-scanner.ll" +#line 971 "seclang-scanner.ll" { return p::make_VARIABLE_ARGS(*driver.loc.back()); } YY_BREAK -case 360: +case 361: YY_RULE_SETUP -#line 970 "seclang-scanner.ll" +#line 972 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS(*driver.loc.back()); } YY_BREAK -case 361: +case 362: YY_RULE_SETUP -#line 971 "seclang-scanner.ll" +#line 973 "seclang-scanner.ll" { return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } YY_BREAK -case 362: +case 363: YY_RULE_SETUP -#line 972 "seclang-scanner.ll" +#line 974 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } YY_BREAK -case 363: +case 364: YY_RULE_SETUP -#line 973 "seclang-scanner.ll" +#line 975 "seclang-scanner.ll" { return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } YY_BREAK -case 364: +case 365: YY_RULE_SETUP -#line 974 "seclang-scanner.ll" +#line 976 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } YY_BREAK -case 365: +case 366: YY_RULE_SETUP -#line 975 "seclang-scanner.ll" +#line 977 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } YY_BREAK -case 366: +case 367: YY_RULE_SETUP -#line 976 "seclang-scanner.ll" +#line 978 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } YY_BREAK -case 367: +case 368: YY_RULE_SETUP -#line 977 "seclang-scanner.ll" +#line 979 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } YY_BREAK -case 368: +case 369: YY_RULE_SETUP -#line 978 "seclang-scanner.ll" +#line 980 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } YY_BREAK -case 369: +case 370: YY_RULE_SETUP -#line 979 "seclang-scanner.ll" +#line 981 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } YY_BREAK -case 370: +case 371: YY_RULE_SETUP -#line 980 "seclang-scanner.ll" +#line 982 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } YY_BREAK -case 371: +case 372: YY_RULE_SETUP -#line 981 "seclang-scanner.ll" +#line 983 "seclang-scanner.ll" { return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } YY_BREAK -case 372: +case 373: YY_RULE_SETUP -#line 982 "seclang-scanner.ll" +#line 984 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } YY_BREAK -case 373: +case 374: YY_RULE_SETUP -#line 983 "seclang-scanner.ll" +#line 985 "seclang-scanner.ll" { return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } YY_BREAK -case 374: +case 375: YY_RULE_SETUP -#line 984 "seclang-scanner.ll" +#line 986 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } YY_BREAK -case 375: +case 376: YY_RULE_SETUP -#line 985 "seclang-scanner.ll" +#line 987 "seclang-scanner.ll" { return p::make_VARIABLE_FILES(*driver.loc.back()); } YY_BREAK -case 376: +case 377: YY_RULE_SETUP -#line 986 "seclang-scanner.ll" +#line 988 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES(*driver.loc.back()); } YY_BREAK -case 377: +case 378: YY_RULE_SETUP -#line 987 "seclang-scanner.ll" +#line 989 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } YY_BREAK -case 378: +case 379: YY_RULE_SETUP -#line 988 "seclang-scanner.ll" +#line 990 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } YY_BREAK -case 379: +case 380: YY_RULE_SETUP -#line 989 "seclang-scanner.ll" +#line 991 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } YY_BREAK -case 380: +case 381: YY_RULE_SETUP -#line 990 "seclang-scanner.ll" +#line 992 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } YY_BREAK -case 381: +case 382: YY_RULE_SETUP -#line 991 "seclang-scanner.ll" +#line 993 "seclang-scanner.ll" { return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } YY_BREAK -case 382: +case 383: YY_RULE_SETUP -#line 992 "seclang-scanner.ll" +#line 994 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } YY_BREAK -case 383: +case 384: YY_RULE_SETUP -#line 993 "seclang-scanner.ll" +#line 995 "seclang-scanner.ll" { return p::make_VARIABLE_GEO(*driver.loc.back()); } YY_BREAK -case 384: +case 385: YY_RULE_SETUP -#line 994 "seclang-scanner.ll" +#line 996 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_GEO(*driver.loc.back()); } YY_BREAK -case 385: +case 386: YY_RULE_SETUP -#line 995 "seclang-scanner.ll" +#line 997 "seclang-scanner.ll" { return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } YY_BREAK -case 386: +case 387: YY_RULE_SETUP -#line 996 "seclang-scanner.ll" +#line 998 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } YY_BREAK -case 387: +case 388: YY_RULE_SETUP -#line 997 "seclang-scanner.ll" +#line 999 "seclang-scanner.ll" { return p::make_VARIABLE_RULE(*driver.loc.back()); } YY_BREAK -case 388: +case 389: YY_RULE_SETUP -#line 998 "seclang-scanner.ll" +#line 1000 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RULE(*driver.loc.back()); } YY_BREAK -case 389: +case 390: YY_RULE_SETUP -#line 999 "seclang-scanner.ll" +#line 1001 "seclang-scanner.ll" { return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } YY_BREAK -case 390: +case 391: YY_RULE_SETUP -#line 1000 "seclang-scanner.ll" +#line 1002 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } YY_BREAK -case 391: +case 392: YY_RULE_SETUP -#line 1001 "seclang-scanner.ll" +#line 1003 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } YY_BREAK -case 392: +case 393: YY_RULE_SETUP -#line 1002 "seclang-scanner.ll" +#line 1004 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } YY_BREAK -case 393: +case 394: YY_RULE_SETUP -#line 1003 "seclang-scanner.ll" +#line 1005 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } YY_BREAK -case 394: +case 395: YY_RULE_SETUP -#line 1004 "seclang-scanner.ll" +#line 1006 "seclang-scanner.ll" { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } YY_BREAK -case 395: +case 396: YY_RULE_SETUP -#line 1005 "seclang-scanner.ll" +#line 1007 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_BLD(yytext, *driver.loc.back()); } YY_BREAK -case 396: +case 397: YY_RULE_SETUP -#line 1006 "seclang-scanner.ll" +#line 1008 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_DUR(yytext, *driver.loc.back()); } YY_BREAK -case 397: +case 398: YY_RULE_SETUP -#line 1007 "seclang-scanner.ll" +#line 1009 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_HSV(yytext, *driver.loc.back()); } YY_BREAK -case 398: +case 399: YY_RULE_SETUP -#line 1008 "seclang-scanner.ll" +#line 1010 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_REMOTE_USER(yytext, *driver.loc.back()); } YY_BREAK -case 399: +case 400: YY_RULE_SETUP -#line 1009 "seclang-scanner.ll" +#line 1011 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_DAY(yytext, *driver.loc.back()); } YY_BREAK -case 400: +case 401: YY_RULE_SETUP -#line 1010 "seclang-scanner.ll" +#line 1012 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_EPOCH(yytext, *driver.loc.back()); } YY_BREAK -case 401: +case 402: YY_RULE_SETUP -#line 1011 "seclang-scanner.ll" +#line 1013 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_HOUR(yytext, *driver.loc.back()); } YY_BREAK -case 402: +case 403: YY_RULE_SETUP -#line 1012 "seclang-scanner.ll" +#line 1014 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_MIN(yytext, *driver.loc.back()); } YY_BREAK -case 403: +case 404: YY_RULE_SETUP -#line 1013 "seclang-scanner.ll" +#line 1015 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_MON(yytext, *driver.loc.back()); } YY_BREAK -case 404: +case 405: YY_RULE_SETUP -#line 1014 "seclang-scanner.ll" +#line 1016 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_SEC(yytext, *driver.loc.back()); } YY_BREAK -case 405: +case 406: YY_RULE_SETUP -#line 1015 "seclang-scanner.ll" +#line 1017 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_YEAR(yytext, *driver.loc.back()); } YY_BREAK -case 406: +case 407: YY_RULE_SETUP -#line 1016 "seclang-scanner.ll" +#line 1018 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME(yytext, *driver.loc.back()); } YY_BREAK -case 407: +case 408: YY_RULE_SETUP -#line 1017 "seclang-scanner.ll" +#line 1019 "seclang-scanner.ll" { return p::make_RUN_TIME_VAR_TIME_WDAY(yytext, *driver.loc.back()); } YY_BREAK -case 408: +case 409: YY_RULE_SETUP -#line 1020 "seclang-scanner.ll" +#line 1022 "seclang-scanner.ll" { driver.error (*driver.loc.back(), "Variable VARIABLE_WEBSERVER_ERROR_LOG is not supported by libModSecurity", ""); throw p::syntax_error(*driver.loc.back(), "");} YY_BREAK -case 409: +case 410: YY_RULE_SETUP -#line 1021 "seclang-scanner.ll" +#line 1023 "seclang-scanner.ll" { return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } YY_BREAK -case 410: +case 411: YY_RULE_SETUP -#line 1022 "seclang-scanner.ll" +#line 1024 "seclang-scanner.ll" { return p::make_VARIABLE_IP(*driver.loc.back()); } YY_BREAK -case 411: +case 412: YY_RULE_SETUP -#line 1023 "seclang-scanner.ll" +#line 1025 "seclang-scanner.ll" { return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } YY_BREAK -case 412: +case 413: YY_RULE_SETUP -#line 1024 "seclang-scanner.ll" +#line 1026 "seclang-scanner.ll" { return p::make_VARIABLE_SESSION(*driver.loc.back()); } YY_BREAK -case 413: +case 414: YY_RULE_SETUP -#line 1025 "seclang-scanner.ll" +#line 1027 "seclang-scanner.ll" { return p::make_VARIABLE_STATUS(*driver.loc.back()); } YY_BREAK -case 414: +case 415: YY_RULE_SETUP -#line 1026 "seclang-scanner.ll" +#line 1028 "seclang-scanner.ll" { return p::make_VARIABLE_STATUS_LINE(*driver.loc.back()); } YY_BREAK -case 415: +case 416: YY_RULE_SETUP -#line 1027 "seclang-scanner.ll" +#line 1029 "seclang-scanner.ll" { return p::make_VARIABLE_TX(*driver.loc.back()); } YY_BREAK -case 416: +case 417: YY_RULE_SETUP -#line 1028 "seclang-scanner.ll" +#line 1030 "seclang-scanner.ll" { return p::make_VARIABLE_USER(*driver.loc.back()); } YY_BREAK -case 417: +case 418: YY_RULE_SETUP -#line 1032 "seclang-scanner.ll" +#line 1034 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } YY_BREAK -case 418: +case 419: YY_RULE_SETUP -#line 1033 "seclang-scanner.ll" +#line 1035 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_IP(*driver.loc.back()); } YY_BREAK -case 419: +case 420: YY_RULE_SETUP -#line 1034 "seclang-scanner.ll" +#line 1036 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } YY_BREAK -case 420: +case 421: YY_RULE_SETUP -#line 1035 "seclang-scanner.ll" +#line 1037 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_SESSION(*driver.loc.back()); } YY_BREAK -case 421: +case 422: YY_RULE_SETUP -#line 1036 "seclang-scanner.ll" +#line 1038 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_TX(*driver.loc.back()); } YY_BREAK -case 422: +case 423: YY_RULE_SETUP -#line 1037 "seclang-scanner.ll" +#line 1039 "seclang-scanner.ll" { BEGINX_(); return p::make_VARIABLE_USER(*driver.loc.back()); } YY_BREAK -case 423: -YY_RULE_SETUP -#line 1042 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } - YY_BREAK case 424: YY_RULE_SETUP -#line 1043 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } +#line 1044 "seclang-scanner.ll" +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } YY_BREAK case 425: YY_RULE_SETUP -#line 1044 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } +#line 1045 "seclang-scanner.ll" +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } YY_BREAK case 426: -/* rule 426 can match eol */ YY_RULE_SETUP -#line 1045 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +#line 1046 "seclang-scanner.ll" +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } YY_BREAK case 427: /* rule 427 can match eol */ YY_RULE_SETUP -#line 1046 "seclang-scanner.ll" +#line 1047 "seclang-scanner.ll" { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 428: /* rule 428 can match eol */ YY_RULE_SETUP -#line 1047 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1048 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 429: /* rule 429 can match eol */ YY_RULE_SETUP -#line 1048 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1049 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 430: /* rule 430 can match eol */ YY_RULE_SETUP -#line 1049 "seclang-scanner.ll" -{ yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +#line 1050 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 431: /* rule 431 can match eol */ YY_RULE_SETUP -#line 1050 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +#line 1051 "seclang-scanner.ll" +{ yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK case 432: /* rule 432 can match eol */ YY_RULE_SETUP #line 1052 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK case 433: /* rule 433 can match eol */ YY_RULE_SETUP -#line 1053 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1054 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 434: +/* rule 434 can match eol */ YY_RULE_SETUP -#line 1054 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(0); } +#line 1055 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 435: YY_RULE_SETUP -#line 1055 "seclang-scanner.ll" +#line 1056 "seclang-scanner.ll" { BEGIN_PREVIOUS(); yyless(0); } YY_BREAK case 436: YY_RULE_SETUP -#line 1056 "seclang-scanner.ll" -{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } +#line 1057 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(0); } YY_BREAK - - case 437: -/* rule 437 can match eol */ YY_RULE_SETUP -#line 1061 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +#line 1058 "seclang-scanner.ll" +{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } YY_BREAK + + case 438: /* rule 438 can match eol */ YY_RULE_SETUP -#line 1062 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +#line 1063 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 439: /* rule 439 can match eol */ YY_RULE_SETUP -#line 1063 "seclang-scanner.ll" +#line 1064 "seclang-scanner.ll" { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 440: /* rule 440 can match eol */ YY_RULE_SETUP -#line 1064 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1065 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 441: /* rule 441 can match eol */ YY_RULE_SETUP -#line 1065 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1066 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 442: /* rule 442 can match eol */ YY_RULE_SETUP -#line 1066 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.loc.back()); } +#line 1067 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 443: /* rule 443 can match eol */ YY_RULE_SETUP #line 1068 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.loc.back()); } YY_BREAK case 444: /* rule 444 can match eol */ YY_RULE_SETUP -#line 1069 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +#line 1070 "seclang-scanner.ll" +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } YY_BREAK case 445: +/* rule 445 can match eol */ YY_RULE_SETUP #line 1071 "seclang-scanner.ll" -{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } YY_BREAK case 446: YY_RULE_SETUP -#line 1072 "seclang-scanner.ll" +#line 1073 "seclang-scanner.ll" +{ BEGINX(LEXING_ERROR_ACTION); yyless(0); } + YY_BREAK +case 447: +YY_RULE_SETUP +#line 1074 "seclang-scanner.ll" { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } YY_BREAK -case 447: +case 448: YY_RULE_SETUP -#line 1078 "seclang-scanner.ll" +#line 1080 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } YY_BREAK -case 448: +case 449: YY_RULE_SETUP -#line 1079 "seclang-scanner.ll" +#line 1081 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } YY_BREAK -case 449: +case 450: YY_RULE_SETUP -#line 1080 "seclang-scanner.ll" +#line 1082 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } YY_BREAK -case 450: +case 451: YY_RULE_SETUP -#line 1081 "seclang-scanner.ll" +#line 1083 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } YY_BREAK -case 451: +case 452: YY_RULE_SETUP -#line 1082 "seclang-scanner.ll" +#line 1084 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } YY_BREAK -case 452: +case 453: YY_RULE_SETUP -#line 1083 "seclang-scanner.ll" +#line 1085 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } YY_BREAK -case 453: +case 454: YY_RULE_SETUP -#line 1086 "seclang-scanner.ll" +#line 1088 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } YY_BREAK -case 454: +case 455: YY_RULE_SETUP -#line 1087 "seclang-scanner.ll" +#line 1089 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } YY_BREAK -case 455: +case 456: YY_RULE_SETUP -#line 1088 "seclang-scanner.ll" +#line 1090 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } YY_BREAK -case 456: +case 457: YY_RULE_SETUP -#line 1089 "seclang-scanner.ll" +#line 1091 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } YY_BREAK -case 457: +case 458: YY_RULE_SETUP -#line 1090 "seclang-scanner.ll" +#line 1092 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } YY_BREAK -case 458: +case 459: YY_RULE_SETUP -#line 1091 "seclang-scanner.ll" +#line 1093 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } YY_BREAK -case 459: +case 460: YY_RULE_SETUP -#line 1095 "seclang-scanner.ll" +#line 1097 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_WITHIN(*driver.loc.back()); } YY_BREAK -case 460: +case 461: YY_RULE_SETUP -#line 1096 "seclang-scanner.ll" +#line 1098 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS_WORD(*driver.loc.back()); } YY_BREAK -case 461: +case 462: YY_RULE_SETUP -#line 1097 "seclang-scanner.ll" +#line 1099 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS(*driver.loc.back()); } YY_BREAK -case 462: +case 463: YY_RULE_SETUP -#line 1098 "seclang-scanner.ll" +#line 1100 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_ENDS_WITH(*driver.loc.back()); } YY_BREAK -case 463: +case 464: YY_RULE_SETUP -#line 1099 "seclang-scanner.ll" +#line 1101 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_EQ(*driver.loc.back()); } YY_BREAK -case 464: +case 465: YY_RULE_SETUP -#line 1100 "seclang-scanner.ll" +#line 1102 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_GE(*driver.loc.back()); } YY_BREAK -case 465: +case 466: YY_RULE_SETUP -#line 1101 "seclang-scanner.ll" +#line 1103 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_GT(*driver.loc.back()); } YY_BREAK -case 466: +case 467: YY_RULE_SETUP -#line 1102 "seclang-scanner.ll" +#line 1104 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH_FROM_FILE(*driver.loc.back()); } YY_BREAK -case 467: +case 468: YY_RULE_SETUP -#line 1103 "seclang-scanner.ll" +#line 1105 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH(*driver.loc.back()); } YY_BREAK -case 468: +case 469: YY_RULE_SETUP -#line 1104 "seclang-scanner.ll" +#line 1106 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_LE(*driver.loc.back()); } YY_BREAK -case 469: +case 470: YY_RULE_SETUP -#line 1105 "seclang-scanner.ll" +#line 1107 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_LT(*driver.loc.back()); } YY_BREAK -case 470: +case 471: YY_RULE_SETUP -#line 1106 "seclang-scanner.ll" +#line 1108 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_PM_FROM_FILE(*driver.loc.back()); } YY_BREAK -case 471: +case 472: YY_RULE_SETUP -#line 1107 "seclang-scanner.ll" +#line 1109 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_PM(*driver.loc.back()); } YY_BREAK -case 472: +case 473: YY_RULE_SETUP -#line 1108 "seclang-scanner.ll" +#line 1110 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RBL( *driver.loc.back()); } YY_BREAK -case 473: +case 474: YY_RULE_SETUP -#line 1109 "seclang-scanner.ll" +#line 1111 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RX(*driver.loc.back()); } YY_BREAK -case 474: +case 475: YY_RULE_SETUP -#line 1110 "seclang-scanner.ll" +#line 1112 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RX_GLOBAL(*driver.loc.back()); } YY_BREAK -case 475: +case 476: YY_RULE_SETUP -#line 1111 "seclang-scanner.ll" +#line 1113 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_EQ(*driver.loc.back()); } YY_BREAK -case 476: +case 477: YY_RULE_SETUP -#line 1112 "seclang-scanner.ll" +#line 1114 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_MATCH(*driver.loc.back()); } YY_BREAK -case 477: +case 478: YY_RULE_SETUP -#line 1113 "seclang-scanner.ll" +#line 1115 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_BEGINS_WITH(*driver.loc.back()); } YY_BREAK -case 478: +case 479: YY_RULE_SETUP -#line 1114 "seclang-scanner.ll" +#line 1116 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_INSPECT_FILE(*driver.loc.back()); } YY_BREAK -case 479: +case 480: YY_RULE_SETUP -#line 1115 "seclang-scanner.ll" +#line 1117 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_FUZZY_HASH(*driver.loc.back()); } YY_BREAK -case 480: +case 481: YY_RULE_SETUP -#line 1116 "seclang-scanner.ll" +#line 1118 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_BYTE_RANGE(*driver.loc.back()); } YY_BREAK -case 481: +case 482: YY_RULE_SETUP -#line 1117 "seclang-scanner.ll" +#line 1119 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_DTD(*driver.loc.back()); } YY_BREAK -case 482: +case 483: YY_RULE_SETUP -#line 1118 "seclang-scanner.ll" +#line 1120 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_HASH(*driver.loc.back()); } YY_BREAK -case 483: +case 484: YY_RULE_SETUP -#line 1119 "seclang-scanner.ll" +#line 1121 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_SCHEMA(*driver.loc.back()); } YY_BREAK -case 484: +case 485: YY_RULE_SETUP -#line 1120 "seclang-scanner.ll" +#line 1122 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CC(*driver.loc.back()); } YY_BREAK -case 485: +case 486: YY_RULE_SETUP -#line 1121 "seclang-scanner.ll" +#line 1123 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CPF(*driver.loc.back()); } YY_BREAK -case 486: +case 487: YY_RULE_SETUP -#line 1122 "seclang-scanner.ll" +#line 1124 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SSN(*driver.loc.back()); } YY_BREAK -case 487: +case 488: YY_RULE_SETUP -#line 1123 "seclang-scanner.ll" +#line 1125 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SVNR(*driver.loc.back()); } YY_BREAK -case 488: +case 489: YY_RULE_SETUP -#line 1124 "seclang-scanner.ll" +#line 1126 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_GSB_LOOKUP(*driver.loc.back()); } YY_BREAK -case 489: +case 490: YY_RULE_SETUP -#line 1125 "seclang-scanner.ll" +#line 1127 "seclang-scanner.ll" { BEGIN_PARAMETER(); return p::make_OPERATOR_RSUB(*driver.loc.back()); } YY_BREAK -case 490: +case 491: YY_RULE_SETUP -#line 1127 "seclang-scanner.ll" +#line 1129 "seclang-scanner.ll" { return p::make_NOT(*driver.loc.back()); } YY_BREAK -case 491: +case 492: YY_RULE_SETUP -#line 1128 "seclang-scanner.ll" +#line 1130 "seclang-scanner.ll" { BEGIN_NO_OP_INFORMED(); yyless(0); } YY_BREAK -case 492: +case 493: YY_RULE_SETUP -#line 1133 "seclang-scanner.ll" +#line 1135 "seclang-scanner.ll" { BEGIN(EXPECTING_PARAMETER_ENDS_WITH_SPACE); } YY_BREAK -case 493: +case 494: YY_RULE_SETUP -#line 1137 "seclang-scanner.ll" +#line 1139 "seclang-scanner.ll" { BEGIN(EXPECTING_PARAMETER_ENDS_WITH_QUOTE); } YY_BREAK -case 494: +case 495: YY_RULE_SETUP -#line 1141 "seclang-scanner.ll" +#line 1143 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 495: -/* rule 495 can match eol */ +case 496: +/* rule 496 can match eol */ YY_RULE_SETUP -#line 1142 "seclang-scanner.ll" +#line 1144 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 496: +case 497: YY_RULE_SETUP -#line 1146 "seclang-scanner.ll" +#line 1148 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 497: -/* rule 497 can match eol */ +case 498: +/* rule 498 can match eol */ YY_RULE_SETUP -#line 1147 "seclang-scanner.ll" +#line 1149 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 498: +case 499: YY_RULE_SETUP -#line 1150 "seclang-scanner.ll" +#line 1152 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 499: +case 500: YY_RULE_SETUP -#line 1151 "seclang-scanner.ll" +#line 1153 "seclang-scanner.ll" { BEGIN(LEXING_ERROR); yyless(0); } YY_BREAK -case 500: +case 501: YY_RULE_SETUP -#line 1155 "seclang-scanner.ll" +#line 1157 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 501: -/* rule 501 can match eol */ +case 502: +/* rule 502 can match eol */ YY_RULE_SETUP -#line 1156 "seclang-scanner.ll" +#line 1158 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 502: +case 503: YY_RULE_SETUP -#line 1160 "seclang-scanner.ll" +#line 1162 "seclang-scanner.ll" { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } YY_BREAK -case 503: -/* rule 503 can match eol */ +case 504: +/* rule 504 can match eol */ YY_RULE_SETUP -#line 1161 "seclang-scanner.ll" +#line 1163 "seclang-scanner.ll" { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } YY_BREAK -case 504: +case 505: YY_RULE_SETUP -#line 1165 "seclang-scanner.ll" +#line 1167 "seclang-scanner.ll" { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } YY_BREAK -case 505: +case 506: YY_RULE_SETUP -#line 1166 "seclang-scanner.ll" +#line 1168 "seclang-scanner.ll" { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } YY_BREAK -case 506: -YY_RULE_SETUP -#line 1171 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } - YY_BREAK case 507: -/* rule 507 can match eol */ YY_RULE_SETUP #line 1173 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 508: /* rule 508 can match eol */ YY_RULE_SETUP -#line 1174 "seclang-scanner.ll" +#line 1175 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 509: /* rule 509 can match eol */ YY_RULE_SETUP -#line 1175 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +#line 1176 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 510: /* rule 510 can match eol */ YY_RULE_SETUP -#line 1176 "seclang-scanner.ll" +#line 1177 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 511: /* rule 511 can match eol */ YY_RULE_SETUP #line 1178 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 512: /* rule 512 can match eol */ YY_RULE_SETUP -#line 1179 "seclang-scanner.ll" +#line 1180 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 513: /* rule 513 can match eol */ YY_RULE_SETUP -#line 1180 "seclang-scanner.ll" +#line 1181 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 514: /* rule 514 can match eol */ YY_RULE_SETUP -#line 1181 "seclang-scanner.ll" +#line 1182 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 515: /* rule 515 can match eol */ YY_RULE_SETUP #line 1183 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 516: /* rule 516 can match eol */ YY_RULE_SETUP -#line 1184 "seclang-scanner.ll" +#line 1185 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 517: /* rule 517 can match eol */ YY_RULE_SETUP -#line 1185 "seclang-scanner.ll" +#line 1186 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 518: /* rule 518 can match eol */ YY_RULE_SETUP -#line 1186 "seclang-scanner.ll" +#line 1187 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 519: +/* rule 519 can match eol */ YY_RULE_SETUP #line 1188 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 520: -/* rule 520 can match eol */ YY_RULE_SETUP #line 1190 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 521: /* rule 521 can match eol */ YY_RULE_SETUP -#line 1191 "seclang-scanner.ll" +#line 1192 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 522: @@ -8338,84 +8342,90 @@ YY_RULE_SETUP case 523: /* rule 523 can match eol */ YY_RULE_SETUP -#line 1194 "seclang-scanner.ll" +#line 1195 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 524: /* rule 524 can match eol */ YY_RULE_SETUP -#line 1195 "seclang-scanner.ll" +#line 1196 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 525: /* rule 525 can match eol */ YY_RULE_SETUP -#line 1196 "seclang-scanner.ll" +#line 1197 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 526: +/* rule 526 can match eol */ YY_RULE_SETUP #line 1198 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK - - case 527: YY_RULE_SETUP -#line 1203 "seclang-scanner.ll" -{ } +#line 1200 "seclang-scanner.ll" +{ BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK + + case 528: -/* rule 528 can match eol */ YY_RULE_SETUP -#line 1204 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 1205 "seclang-scanner.ll" +{ } YY_BREAK case 529: /* rule 529 can match eol */ YY_RULE_SETUP -#line 1205 "seclang-scanner.ll" +#line 1206 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - - case 530: /* rule 530 can match eol */ YY_RULE_SETUP -#line 1209 "seclang-scanner.ll" +#line 1207 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK + + case 531: /* rule 531 can match eol */ YY_RULE_SETUP -#line 1210 "seclang-scanner.ll" +#line 1211 "seclang-scanner.ll" { driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK case 532: /* rule 532 can match eol */ YY_RULE_SETUP -#line 1211 "seclang-scanner.ll" -{ BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +#line 1212 "seclang-scanner.ll" +{ driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK - case 533: +/* rule 533 can match eol */ YY_RULE_SETUP -#line 1216 "seclang-scanner.ll" -{ BEGIN(LEXING_ERROR); yyless(0); } +#line 1213 "seclang-scanner.ll" +{ BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } YY_BREAK + case 534: YY_RULE_SETUP #line 1218 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Invalid input: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +{ BEGIN(LEXING_ERROR); yyless(0); } YY_BREAK case 535: YY_RULE_SETUP -#line 1219 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +#line 1220 "seclang-scanner.ll" +{ driver.error (*driver.loc.back(), "Invalid input: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } YY_BREAK case 536: YY_RULE_SETUP -#line 1220 "seclang-scanner.ll" +#line 1221 "seclang-scanner.ll" +{ driver.error (*driver.loc.back(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } + YY_BREAK +case 537: +YY_RULE_SETUP +#line 1222 "seclang-scanner.ll" { driver.error (*driver.loc.back(), "Expecting a variable, got: : ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } YY_BREAK case YY_STATE_EOF(INITIAL): @@ -8454,7 +8464,7 @@ case YY_STATE_EOF(SETVAR_ACTION_QUOTED): case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_COLLECTION_ELEM): case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_OPERATION): case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_CONTENT): -#line 1223 "seclang-scanner.ll" +#line 1225 "seclang-scanner.ll" { if (yyin) { fclose(yyin); @@ -8470,9 +8480,9 @@ case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_CONTENT): delete l; } YY_BREAK -case 537: +case 538: YY_RULE_SETUP -#line 1239 "seclang-scanner.ll" +#line 1241 "seclang-scanner.ll" { std::string err; const char *file = strchr(yytext, ' ') + 1; @@ -8500,9 +8510,9 @@ YY_RULE_SETUP } } YY_BREAK -case 538: +case 539: YY_RULE_SETUP -#line 1266 "seclang-scanner.ll" +#line 1268 "seclang-scanner.ll" { std::string err; const char *file = strchr(yytext, ' ') + 1; @@ -8533,10 +8543,10 @@ YY_RULE_SETUP free(f); } YY_BREAK -case 539: -/* rule 539 can match eol */ +case 540: +/* rule 540 can match eol */ YY_RULE_SETUP -#line 1296 "seclang-scanner.ll" +#line 1298 "seclang-scanner.ll" { HttpsClient c; std::string key; @@ -8572,12 +8582,12 @@ YY_RULE_SETUP yy_scan_string(c.content.c_str()); } YY_BREAK -case 540: +case 541: YY_RULE_SETUP -#line 1332 "seclang-scanner.ll" +#line 1334 "seclang-scanner.ll" ECHO; YY_BREAK -#line 8580 "seclang-scanner.cc" +#line 8590 "seclang-scanner.cc" case YY_END_OF_BUFFER: { @@ -8896,7 +8906,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3927 ) + if ( yy_current_state >= 3938 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -8929,11 +8939,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3927 ) + if ( yy_current_state >= 3938 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3926); + yy_is_jam = (yy_current_state == 3937); return yy_is_jam ? 0 : yy_current_state; } @@ -9682,7 +9692,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 1332 "seclang-scanner.ll" +#line 1334 "seclang-scanner.ll" namespace modsecurity { diff --git a/src/parser/seclang-scanner.ll b/src/parser/seclang-scanner.ll index 9686027ba7..2383106d95 100755 --- a/src/parser/seclang-scanner.ll +++ b/src/parser/seclang-scanner.ll @@ -148,6 +148,7 @@ ACTION_TRANSFORMATION_HTML_ENTITY_DECODE (?i:t:htmlEntityDecode) ACTION_TRANSFORMATION_JS_DECODE (?i:t:jsDecode) ACTION_TRANSFORMATION_LENGTH (?i:t:length) ACTION_TRANSFORMATION_LOWERCASE (?i:t:lowercase) +ACTION_TRANSFORMATION_PHP_ARGS_NAMES (?i:t:phpArgsNames) ACTION_TRANSFORMATION_MD5 (?i:t:md5) ACTION_TRANSFORMATION_NONE (?i:t:none) ACTION_TRANSFORMATION_NORMALISE_PATH (?i:t:(normalisePath|normalizePath)) @@ -585,6 +586,7 @@ EQUALS_MINUS (?i:=\-) {ACTION_TRANSFORMATION_HEX_ENCODE} { return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_HEX_DECODE} { return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_LOWERCASE} { return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.loc.back()); } +{ACTION_TRANSFORMATION_PHP_ARGS_NAMES} { return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_UPPERCASE} { return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_URL_ENCODE} { return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } {ACTION_TRANSFORMATION_URL_DECODE_UNI} { return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } diff --git a/test/test-cases/regression/transformations.json b/test/test-cases/regression/transformations.json index dcb328f16c..049ee6b9fe 100644 --- a/test/test-cases/regression/transformations.json +++ b/test/test-cases/regression/transformations.json @@ -114,5 +114,64 @@ "SecRuleEngine On", "SecRule ARGS \"@contains test \" \"id:1,pass,t:trim,t:lowercase\"" ] + }, + { + "enabled": 1, + "version_min": 300000, + "version_max": 0, + "title": "Testing transformations :: block,t:none,t:phpArgsNames", + "client": { + "ip": "200.249.12.31", + "port": 2313 + }, + "server": { + "ip": "200.249.12.31", + "port": 80 + }, + "request": { + "headers": { + "Host": "net.tutsplus.com", + "User-Agent": "Mozilla\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko\/20091102 Firefox\/3.5.5 (.NET CLR 3.5.30729)", + "Accept": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8", + "Accept-Language": "en-us,en;q=0.5", + "Accept-Encoding": "gzip,deflate", + "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7", + "Keep-Alive": "300", + "Connection": "keep-alive", + "Cookie": "PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120", + "Pragma": "no-cache", + "Cache-Control": "no-cache" + }, + "uri": "\/test.pl?param1=fdsfsd&s%252bc%20r.%2b+ipt._[a[_xss]]iaaa=1", + "method": "GET", + "http_version": 1.1, + "body": "" + }, + "response": { + "headers": { + "Content-Type": "text\/xml; charset=utf-8\n\r", + "Content-Length": "length\n\r" + }, + "body": [ + "\n\r", + "\n\r", + " \n\r", + " \n\r", + " string<\/EnlightenResult>\n\r", + " <\/EnlightenResponse>\n\r", + " <\/soap:Body>\n\r", + "<\/soap:Envelope>\n\r" + ] + }, + "expected": { + "audit_log": "", + "debug_log": "phpArgsNames: \"s%2bc_r_[+]_ipt__[a[_xss]", + "error_log": "", + "http_code": 403 + }, + "rules": [ + "SecRuleEngine On", + "SecRule ARGS_NAMES \"@streq s%2bc_r_+_ipt__[a[_xss]\" \"id:1,phase:2,deny,status:403,t:none,t:phpArgsNames\"" + ] } ] From 6c874721cf43cbf2569f8c9f4b9de1184307b61d Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Mon, 6 Apr 2020 20:27:10 -0300 Subject: [PATCH 03/16] Moves default actions to be part of the rules --- CHANGES | 10 ++++++++++ headers/modsecurity/rules.h | 2 ++ headers/modsecurity/rules_set_properties.h | 22 ---------------------- src/actions/block.cc | 2 +- src/parser/seclang-parser.cc | 4 ++-- src/parser/seclang-parser.yy | 4 ++-- src/rule_with_actions.cc | 4 ++-- src/rules_set_phases.cc | 7 +++++++ 8 files changed, 26 insertions(+), 29 deletions(-) diff --git a/CHANGES b/CHANGES index 0d27657bdc..d08f3a0a7a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,16 @@ v3.x.y - YYYY-MMM-DD (to be released) ------------------------------------- + - Using std::shared_ptr instead of generates its own references counters + for Rules and related. + [@zimmerle] + - Better handle shared_pointers on messages aiming for better performance. + [@zimmerle] + - Better handle memory usage on transformations aiming for better + performance. + [@zimmerle] + - Coding refactoring on the Rule class. The Rule class is now refactored + into RuleWithOperator, RuleWithActions, and RuleUnconditional. - EXPERIMENTAL: Add new transformation call phpArgsNames [Issue #2387 - @marshal09] diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 1aaa65b549..3c8ccff470 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -84,6 +84,8 @@ class Rules { std::shared_ptr operator[](int index) const { return m_rules[index]; } std::shared_ptr at(int index) const { return m_rules[index]; } + std::vector > m_defaultActions; + std::vector > m_rules; }; diff --git a/headers/modsecurity/rules_set_properties.h b/headers/modsecurity/rules_set_properties.h index 13519fcb5a..b48d368239 100644 --- a/headers/modsecurity/rules_set_properties.h +++ b/headers/modsecurity/rules_set_properties.h @@ -201,16 +201,6 @@ class RulesSetProperties { RulesSetProperties &operator =(const RulesSetProperties &r) = delete; ~RulesSetProperties() { - int i = 0; - - for (i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - std::vector > *tmp = \ - &m_defaultActions[i]; - while (tmp->empty() == false) { - tmp->pop_back(); - } - } - delete m_debugLog; delete m_auditLog; } @@ -410,16 +400,6 @@ class RulesSetProperties { to->m_responseBodyTypeToBeInspected.m_set = true; } - for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - std::vector > *actions_from = \ - &from->m_defaultActions[i]; - std::vector > *actions_to = \ - &to->m_defaultActions[i]; - for (size_t j = 0; j < actions_from->size(); j++) { - actions_to->push_back(actions_from->at(j)); - } - } - if (to->m_auditLog) { std::string error; to->m_auditLog->merge(from->m_auditLog, &error); @@ -481,8 +461,6 @@ class RulesSetProperties { ConfigString m_uploadTmpDirectory; ConfigString m_secArgumentSeparator; ConfigString m_secWebAppId; - std::vector > \ - m_defaultActions[modsecurity::Phases::NUMBER_OF_PHASES]; ConfigUnicodeMap m_unicodeMapTable; }; diff --git a/src/actions/block.cc b/src/actions/block.cc index bde5e63464..a6b91480c1 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -33,7 +33,7 @@ bool Block::evaluate(RuleWithActions *rule, Transaction *transaction, std::shared_ptr rm) { ms_dbg_a(transaction, 8, "Marking request as disruptive."); - for (auto &a : transaction->m_rules->m_defaultActions[rule->getPhase()]) { + for (auto &a : transaction->m_rules->m_rulesSetPhases[rule->getPhase()]->m_defaultActions) { if (a->isDisruptive() == false) { continue; } diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index 9e8f5f8680..67fbc4972e 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -2437,7 +2437,7 @@ namespace yy { YYERROR; } - if (!driver.m_defaultActions[definedPhase].empty()) { + if (!driver.m_rulesSetPhases[definedPhase]->m_defaultActions.empty()) { std::stringstream ss; ss << "SecDefaultActions can only be placed once per phase and configuration context. Phase "; ss << secRuleDefinedPhase; @@ -2447,7 +2447,7 @@ namespace yy { } for (actions::Action *a : checkedActions) { - driver.m_defaultActions[definedPhase].push_back( + driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back( std::unique_ptr(a)); } diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index 75ee7c08e0..6f49bbe321 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -1209,7 +1209,7 @@ expression: YYERROR; } - if (!driver.m_defaultActions[definedPhase].empty()) { + if (!driver.m_rulesSetPhases[definedPhase]->m_defaultActions.empty()) { std::stringstream ss; ss << "SecDefaultActions can only be placed once per phase and configuration context. Phase "; ss << secRuleDefinedPhase; @@ -1219,7 +1219,7 @@ expression: } for (actions::Action *a : checkedActions) { - driver.m_defaultActions[definedPhase].push_back( + driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back( std::unique_ptr(a)); } diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 688cc6285a..69445e29f3 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -222,7 +222,7 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, bool containsBlock, std::shared_ptr ruleMessage) { bool disruptiveAlreadyExecuted = false; - for (auto &a : trans->m_rules->m_defaultActions[getPhase()]) { + for (auto &a : trans->m_rules->m_rulesSetPhases[getPhase()]->m_defaultActions) { if (a.get()->action_kind != actions::Action::RunTimeOnlyIfMatchKind) { continue; } @@ -356,7 +356,7 @@ void RuleWithActions::executeTransformations( // Notice that first we make sure that won't be a t:none // on the target rule. if (none == 0) { - for (auto &a : trans->m_rules->m_defaultActions[getPhase()]) { + for (auto &a : trans->m_rules->m_rulesSetPhases[getPhase()]->m_defaultActions) { if (a->action_kind \ != actions::Action::RunTimeBeforeMatchAttemptKind) { continue; diff --git a/src/rules_set_phases.cc b/src/rules_set_phases.cc index 1d93330caa..f0d572cb3e 100644 --- a/src/rules_set_phases.cc +++ b/src/rules_set_phases.cc @@ -61,6 +61,13 @@ int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { return res; } amount_of_rules = amount_of_rules + res; + + std::vector > *actions_from = &from->at(phase)->m_defaultActions; + std::vector > *actions_to = &at(phase)->m_defaultActions; + + for (size_t j = 0; j < actions_from->size(); j++) { + actions_to->push_back(actions_from->at(j)); + } } return amount_of_rules; From b079faee9734671edbac474d995b1cce8a9339b9 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 14 Apr 2020 11:33:17 -0300 Subject: [PATCH 04/16] Adds new method for rule merge IMPORTANT: SecDefaultAction specified on a child configuration will overwrite the ones specified on the parent; Previously it was concatenating. --- CHANGES | 4 + .../reading_logs_via_rule_message.h | 15 +- .../using_bodies_in_chunks/simple_request.cc | 14 +- headers/modsecurity/actions/action.h | 2 +- headers/modsecurity/modsecurity.h | 2 +- headers/modsecurity/rule.h | 15 +- headers/modsecurity/rule_marker.h | 5 - headers/modsecurity/rule_message.h | 242 +- headers/modsecurity/rule_unconditional.h | 2 +- headers/modsecurity/rule_with_actions.h | 327 +- headers/modsecurity/rule_with_operator.h | 14 +- headers/modsecurity/rules.h | 3 + headers/modsecurity/transaction.h | 60 +- src/actions/accuracy.cc | 1 - src/actions/accuracy.h | 1 + src/actions/audit_log.cc | 7 +- src/actions/audit_log.h | 2 +- src/actions/block.cc | 10 +- src/actions/block.h | 2 +- src/actions/chain.cc | 2 +- src/actions/data/status.cc | 2 +- src/actions/data/status.h | 2 +- src/actions/disruptive/deny.cc | 6 +- src/actions/disruptive/deny.h | 2 +- src/actions/disruptive/drop.cc | 6 +- src/actions/disruptive/drop.h | 2 +- src/actions/disruptive/pass.cc | 2 +- src/actions/disruptive/pass.h | 2 +- src/actions/disruptive/redirect.cc | 6 +- src/actions/disruptive/redirect.h | 2 +- src/actions/init_col.h | 2 +- src/actions/log.cc | 4 +- src/actions/log.h | 2 +- src/actions/log_data.cc | 4 +- src/actions/log_data.h | 4 +- src/actions/maturity.cc | 1 - src/actions/maturity.h | 1 + src/actions/msg.cc | 4 +- src/actions/msg.h | 4 +- src/actions/no_audit_log.cc | 6 +- src/actions/no_audit_log.h | 2 +- src/actions/no_log.cc | 3 +- src/actions/no_log.h | 2 +- src/actions/rev.cc | 1 - src/actions/rev.h | 3 +- src/actions/set_env.h | 2 +- src/actions/set_rsc.h | 2 +- src/actions/set_sid.h | 2 +- src/actions/set_uid.h | 2 +- src/actions/set_var.h | 4 +- src/actions/severity.cc | 12 +- src/actions/severity.h | 2 +- src/actions/tag.cc | 4 +- src/actions/tag.h | 4 +- src/actions/ver.cc | 1 - src/audit_log/audit_log.cc | 7 +- src/modsecurity.cc | 4 +- src/operators/begins_with.cc | 2 +- src/operators/begins_with.h | 2 +- src/operators/contains.cc | 2 +- src/operators/contains.h | 2 +- src/operators/contains_word.cc | 2 +- src/operators/contains_word.h | 2 +- src/operators/detect_sqli.cc | 2 +- src/operators/detect_sqli.h | 2 +- src/operators/detect_xss.cc | 2 +- src/operators/detect_xss.h | 2 +- src/operators/ends_with.cc | 2 +- src/operators/ends_with.h | 2 +- src/operators/operator.cc | 2 +- src/operators/operator.h | 6 +- src/operators/pm.cc | 4 +- src/operators/pm.h | 2 +- src/operators/rbl.cc | 2 +- src/operators/rbl.h | 2 +- src/operators/rx.cc | 2 +- src/operators/rx.h | 2 +- src/operators/rx_global.cc | 2 +- src/operators/rx_global.h | 2 +- src/operators/validate_byte_range.cc | 2 +- src/operators/validate_byte_range.h | 2 +- src/operators/validate_url_encoding.cc | 2 +- src/operators/validate_url_encoding.h | 2 +- src/operators/validate_utf8_encoding.cc | 2 +- src/operators/validate_utf8_encoding.h | 2 +- src/operators/verify_cc.cc | 2 +- src/operators/verify_cc.h | 2 +- src/operators/verify_cpf.cc | 2 +- src/operators/verify_cpf.h | 2 +- src/operators/verify_ssn.cc | 2 +- src/operators/verify_ssn.h | 2 +- src/operators/verify_svnr.cc | 2 +- src/operators/verify_svnr.h | 2 +- src/operators/within.cc | 2 +- src/operators/within.h | 2 +- src/parser/driver.cc | 71 +- src/parser/location.hh | 50 +- src/parser/position.hh | 2 +- src/parser/seclang-parser.cc | 4986 ++++++++--------- src/parser/seclang-parser.hh | 3126 +++++------ src/parser/seclang-parser.yy | 27 +- src/parser/seclang-scanner.cc | 10 +- src/parser/stack.hh | 2 +- src/rule_message.cc | 37 +- src/rule_script.cc | 11 +- src/rule_script.h | 14 +- src/rule_unconditional.cc | 11 +- src/rule_with_actions.cc | 388 +- src/rule_with_operator.cc | 62 +- src/rules_set.cc | 40 + src/rules_set_phases.cc | 22 +- src/transaction.cc | 71 +- src/variables/rule.h | 58 +- test/cppcheck_suppressions.txt | 3 + .../config-update-action-by-id.json | 4 +- test/test-cases/regression/issue-1528.json | 4 +- test/test-cases/regression/issue-1844.json | 22 +- test/test-cases/regression/issue-2296.json | 12 +- .../regression/offset-variable.json | 286 +- test/test-cases/regression/operator-rx.json | 5 +- .../regression/variable-ARGS_POST_NAMES.json | 3 +- 121 files changed, 5159 insertions(+), 5101 deletions(-) diff --git a/CHANGES b/CHANGES index d08f3a0a7a..fa2f52775d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ v3.x.y - YYYY-MMM-DD (to be released) ------------------------------------- + - IMPORTANT: SecDefaultAction behaves changing: SecDefaultAction specified + on a child configuration will overwrite the ones specified on the parent; + Previously it was concatenating. + [@zimmerle] - Using std::shared_ptr instead of generates its own references counters for Rules and related. [@zimmerle] diff --git a/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h b/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h index 58cbba8b2f..98e0a0ec42 100644 --- a/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h +++ b/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h @@ -176,21 +176,22 @@ class ReadingLogsViaRuleMessage { return; } - const modsecurity::RuleMessage *ruleMessage = \ - reinterpret_cast(ruleMessagev); + modsecurity::RuleMessage ruleMessage( + *reinterpret_cast(ruleMessagev)); - std::cout << "Rule Id: " << std::to_string(ruleMessage->m_ruleId); - std::cout << " phase: " << std::to_string(ruleMessage->m_phase); + + std::cout << "Rule Id: " << std::to_string(ruleMessage.getRuleId()); + std::cout << " phase: " << std::to_string(ruleMessage.getPhase()); std::cout << std::endl; - if (ruleMessage->m_isDisruptive) { + if (ruleMessage.isDisruptive()) { std::cout << " * Disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; std::cout << " ** %d is meant to be informed by the webserver."; std::cout << std::endl; } else { std::cout << " * Match, but no disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; } } diff --git a/examples/using_bodies_in_chunks/simple_request.cc b/examples/using_bodies_in_chunks/simple_request.cc index 0f55562220..87899fcbd5 100644 --- a/examples/using_bodies_in_chunks/simple_request.cc +++ b/examples/using_bodies_in_chunks/simple_request.cc @@ -69,21 +69,21 @@ static void logCb(void *data, const void *ruleMessagev) { return; } - const modsecurity::RuleMessage *ruleMessage = \ - reinterpret_cast(ruleMessagev); + modsecurity::RuleMessage ruleMessage( + *reinterpret_cast(ruleMessagev)); - std::cout << "Rule Id: " << std::to_string(ruleMessage->m_ruleId); - std::cout << " phase: " << std::to_string(ruleMessage->m_phase); + std::cout << "Rule Id: " << std::to_string(ruleMessage.getRuleId()); + std::cout << " phase: " << std::to_string(ruleMessage.getPhase()); std::cout << std::endl; - if (ruleMessage->m_isDisruptive) { + if (ruleMessage.isDisruptive()) { std::cout << " * Disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; std::cout << " ** %d is meant to be informed by the webserver."; std::cout << std::endl; } else { std::cout << " * Match, but no disruptive action: "; - std::cout << modsecurity::RuleMessage::log(ruleMessage); + std::cout << modsecurity::RuleMessage::log(&ruleMessage); std::cout << std::endl; } } diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index 374b77d6c6..f5791e3926 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -78,7 +78,7 @@ class Action { Transaction *transaction); virtual bool evaluate(RuleWithActions *rule, Transaction *transaction); virtual bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr ruleMessage) { + RuleMessage &ruleMessage) { return evaluate(rule, transaction); } virtual bool init(std::string *error) { return true; } diff --git a/headers/modsecurity/modsecurity.h b/headers/modsecurity/modsecurity.h index d4892f960d..5d26efb74e 100644 --- a/headers/modsecurity/modsecurity.h +++ b/headers/modsecurity/modsecurity.h @@ -292,7 +292,7 @@ class ModSecurity { */ void setServerLogCb(ModSecLogCb cb, int properties); - void serverLog(void *data, std::shared_ptr rm); + void serverLog(void *data, RuleMessage *rm); const std::string& getConnectorInformation() const; diff --git a/headers/modsecurity/rule.h b/headers/modsecurity/rule.h index b10e0556e8..2805d5dea7 100644 --- a/headers/modsecurity/rule.h +++ b/headers/modsecurity/rule.h @@ -57,13 +57,17 @@ using TransformationResult = std::pair, using TransformationResults = std::list; using Transformation = actions::transformations::Transformation; -using Transformations = std::vector; +using Transformations = std::vector >; +using TransformationsPtr = std::vector; using Actions = std::vector; -using Tags = std::vector; -using SetVars = std::vector; -using MatchActions = std::vector; +using Tags = std::vector >; +using TagsPtr = std::vector; +using SetVars = std::vector >; +using SetVarsPtr = std::vector; +using MatchActions = std::vector >; +using MatchActionsPtr = std::vector; class Rule { public: @@ -88,9 +92,6 @@ class Rule { virtual bool evaluate(Transaction *transaction) = 0; - virtual bool evaluate(Transaction *transaction, - std::shared_ptr rm) = 0; - std::shared_ptr getFileName() const { return m_fileName; } diff --git a/headers/modsecurity/rule_marker.h b/headers/modsecurity/rule_marker.h index b8b835efda..6aa1205dde 100644 --- a/headers/modsecurity/rule_marker.h +++ b/headers/modsecurity/rule_marker.h @@ -55,11 +55,6 @@ class RuleMarker : public Rule { return *this; } - virtual bool evaluate(Transaction *transaction, - std::shared_ptr rm) override { - return evaluate(transaction); - } - virtual bool evaluate(Transaction *transaction) override { if (transaction->isInsideAMarker()) { if (*transaction->getCurrentMarker() == *m_name) { diff --git a/headers/modsecurity/rule_message.h b/headers/modsecurity/rule_message.h index 51eca0e8ef..a529391d5c 100644 --- a/headers/modsecurity/rule_message.h +++ b/headers/modsecurity/rule_message.h @@ -42,120 +42,59 @@ class RuleMessage { ClientLogMessageInfo = 4 }; - /** - * - * FIXME: RuleMessage is currently too big, doing a lot of - * unnecessary data duplication. Needs to be shrink down. - * - */ - RuleMessage(RuleWithActions *rule, Transaction *trans) : - m_accuracy(rule->m_accuracy), - m_clientIpAddress(trans->m_clientIpAddress), + + explicit RuleMessage(const RuleMessage &ruleMessage) : + m_severity(ruleMessage.m_severity), + m_tags(), + m_data(ruleMessage.m_data), + m_match(ruleMessage.m_match), + m_message(ruleMessage.m_message), + m_reference(ruleMessage.m_reference), + m_transaction(ruleMessage.m_transaction), + m_rule(ruleMessage.m_rule) + { } + + + explicit RuleMessage(Transaction *transaction) : + m_severity(0), + m_tags(), m_data(""), - m_id(trans->m_id), - m_isDisruptive(false), m_match(""), - m_maturity(rule->m_maturity), m_message(""), - m_noAuditLog(false), - m_phase(rule->getPhase() - 1), m_reference(""), - m_rev(rule->m_rev), - m_rule(rule), - m_ruleFile(rule->getFileName()), - m_ruleId(rule->m_ruleId), - m_ruleLine(rule->getLineNumber()), - m_saveMessage(true), - m_serverIpAddress(trans->m_serverIpAddress), - m_severity(0), - m_uriNoQueryStringDecoded(trans->m_uri_no_query_string_decoded), - m_ver(rule->m_ver), - m_tags() + m_transaction(transaction), + m_rule(nullptr) + { } explicit RuleMessage(RuleMessage *rule) : - m_accuracy(rule->m_accuracy), - m_clientIpAddress(rule->m_clientIpAddress), + m_severity(rule->m_severity), + m_tags(rule->m_tags), m_data(rule->m_data), - m_id(rule->m_id), - m_isDisruptive(rule->m_isDisruptive), m_match(rule->m_match), - m_maturity(rule->m_maturity), m_message(rule->m_message), - m_noAuditLog(rule->m_noAuditLog), - m_phase(rule->m_phase), m_reference(rule->m_reference), - m_rev(rule->m_rev), - m_rule(rule->m_rule), - m_ruleFile(rule->m_ruleFile), - m_ruleId(rule->m_ruleId), - m_ruleLine(rule->m_ruleLine), - m_saveMessage(rule->m_saveMessage), - m_serverIpAddress(rule->m_serverIpAddress), - m_severity(rule->m_severity), - m_uriNoQueryStringDecoded(rule->m_uriNoQueryStringDecoded), - m_ver(rule->m_ver), - m_tags(rule->m_tags) - { } - - RuleMessage(const RuleMessage& ruleMessage) - : m_accuracy(ruleMessage.m_accuracy), - m_clientIpAddress(ruleMessage.m_clientIpAddress), - m_data(ruleMessage.m_data), - m_id(ruleMessage.m_id), - m_isDisruptive(ruleMessage.m_isDisruptive), - m_match(ruleMessage.m_match), - m_maturity(ruleMessage.m_maturity), - m_message(ruleMessage.m_message), - m_noAuditLog(ruleMessage.m_noAuditLog), - m_phase(ruleMessage.m_phase), - m_reference(ruleMessage.m_reference), - m_rev(ruleMessage.m_rev), - m_rule(ruleMessage.m_rule), - m_ruleFile(ruleMessage.m_ruleFile), - m_ruleId(ruleMessage.m_ruleId), - m_ruleLine(ruleMessage.m_ruleLine), - m_saveMessage(ruleMessage.m_saveMessage), - m_serverIpAddress(ruleMessage.m_serverIpAddress), - m_severity(ruleMessage.m_severity), - m_uriNoQueryStringDecoded(ruleMessage.m_uriNoQueryStringDecoded), - m_ver(ruleMessage.m_ver), - m_tags(ruleMessage.m_tags) + m_transaction(rule->m_transaction), + m_rule(rule->m_rule) { } RuleMessage &operator=(const RuleMessage& ruleMessage) { - m_accuracy = ruleMessage.m_accuracy; - m_clientIpAddress = ruleMessage.m_clientIpAddress; + m_severity = ruleMessage.m_severity; + m_tags = ruleMessage.m_tags; m_data = ruleMessage.m_data; - m_id = ruleMessage.m_id; - m_isDisruptive = ruleMessage.m_isDisruptive; m_match = ruleMessage.m_match; - m_maturity = ruleMessage.m_maturity; m_message = ruleMessage.m_message; - m_noAuditLog = ruleMessage.m_noAuditLog; - m_phase = ruleMessage.m_phase; m_reference = ruleMessage.m_reference; - m_rev = ruleMessage.m_rev; + m_transaction = ruleMessage.m_transaction; m_rule = ruleMessage.m_rule; - m_ruleFile = ruleMessage.m_ruleFile; - m_ruleId = ruleMessage.m_ruleId; - m_ruleLine = ruleMessage.m_ruleLine; - m_saveMessage = ruleMessage.m_saveMessage; - m_serverIpAddress = ruleMessage.m_serverIpAddress; - m_severity = ruleMessage.m_severity; - m_uriNoQueryStringDecoded = ruleMessage.m_uriNoQueryStringDecoded; - m_ver = ruleMessage.m_ver; - m_tags = ruleMessage.m_tags; return *this; } void clean() { m_data = ""; m_match = ""; - m_isDisruptive = false; m_reference = ""; m_severity = 0; - m_ver = ""; } std::string log() { @@ -183,29 +122,122 @@ class RuleMessage { static std::string _details(const RuleMessage *rm); static std::string _errorLogTail(const RuleMessage *rm); - int m_accuracy; - std::shared_ptr m_clientIpAddress; + RuleWithActions *getRule() const { + return m_rule; + } + + void setRule(RuleWithActions *rule) { + m_rule = rule; + } + + bool isSettle() const { + return m_rule != nullptr; + } + + int getRuleId() const { + if (m_rule) { + return m_rule->m_ruleId; + } + return -1; + } + + int getPhase() const { + if (m_rule) { + return m_rule->getPhase(); + } + return 0; + } + + std::string getFileName() const { + if (m_rule) { + return *m_rule->getFileName().get(); + } + return ""; + } + + int getLineNumber() const { + if (m_rule) { + return m_rule->getLineNumber(); + } + return 0; + } + + std::string getRev() const { + if (m_rule) { + return m_rule->getRevision(); + } + return ""; + } + + std::string getVer() const { + if (m_rule) { + return m_rule->getRevision(); + } + return ""; + } + + int getMaturity() const { + if (m_rule) { + return m_rule->getMaturity(); + } + return 0; + } + + int getAccuracy() const { + if (m_rule) { + return m_rule->getAccuracy(); + } + return 0; + } + + std::string getClientIpAddress() const { + if (m_transaction) { + return *m_transaction->m_clientIpAddress.get(); + } + return ""; + } + + std::string getServerIpAddress() const { + if (m_transaction) { + return *m_transaction->m_serverIpAddress.get(); + } + return ""; + } + + std::string getRequestId() const { + if (m_transaction) { + return *m_transaction->m_id.get(); + } + return ""; + } + + std::string getUri() const { + if (m_transaction) { + return *m_transaction->m_uri_no_query_string_decoded.get(); + } + return ""; + } + + bool isDisruptive() const { + if (m_rule) { + return m_rule->hasDisruptiveAction(); + } + return 0; + } + + int m_severity; + std::list m_tags; + + // Transaction std::string m_data; - std::shared_ptr m_id; - bool m_isDisruptive; std::string m_match; - int m_maturity; + std::string m_message; - bool m_noAuditLog; - int m_phase; std::string m_reference; - std::string m_rev; - RuleWithActions *m_rule; - std::shared_ptr m_ruleFile; - int m_ruleId; - int m_ruleLine; - bool m_saveMessage; - std::shared_ptr m_serverIpAddress; - int m_severity; - std::shared_ptr m_uriNoQueryStringDecoded; - std::string m_ver; - std::list m_tags; + private: + Transaction *m_transaction; + RuleWithActions *m_rule; }; diff --git a/headers/modsecurity/rule_unconditional.h b/headers/modsecurity/rule_unconditional.h index c66fa7c1ea..b1ac0eb4ec 100644 --- a/headers/modsecurity/rule_unconditional.h +++ b/headers/modsecurity/rule_unconditional.h @@ -55,7 +55,7 @@ class RuleUnconditional : public RuleWithActions { return *this; } - virtual bool evaluate(Transaction *transaction, std::shared_ptr ruleMessage) override; + virtual bool evaluate(Transaction *transaction) override; private: }; diff --git a/headers/modsecurity/rule_with_actions.h b/headers/modsecurity/rule_with_actions.h index 4b7db43f73..a6731cb46f 100644 --- a/headers/modsecurity/rule_with_actions.h +++ b/headers/modsecurity/rule_with_actions.h @@ -37,6 +37,10 @@ namespace modsecurity { class RuleWithActions : public Rule { public: + int SEVERITY_NOT_SET = 10; + int ACCURACY_NOT_SET = 10; + int MATURITY_NOT_SET = 10; + RuleWithActions( Actions *a, Transformations *t, @@ -45,33 +49,54 @@ class RuleWithActions : public Rule { ~RuleWithActions(); - RuleWithActions(const RuleWithActions& r) + RuleWithActions(const RuleWithActions &r) : Rule(r), - m_rev(r.m_rev), - m_ver(r.m_ver), - m_accuracy(r.m_accuracy), - m_maturity(r.m_maturity), m_ruleId(r.m_ruleId), m_chainedRuleChild(r.m_chainedRuleChild), m_chainedRuleParent(r.m_chainedRuleParent), m_disruptiveAction(r.m_disruptiveAction), m_logData(r.m_logData), m_msg(r.m_msg), - m_severity(r.m_severity), m_actionsRuntimePos(r.m_actionsRuntimePos), m_actionsSetVar(r.m_actionsSetVar), m_actionsTag(r.m_actionsTag), + m_defaultActionDisruptiveAction(r.m_defaultActionDisruptiveAction), + m_defaultActionLogData(r.m_defaultActionLogData), + m_defaultActionMsg(r.m_defaultActionMsg), + m_defaultActionActionsRuntimePos(r.m_defaultActionActionsRuntimePos), + m_defaultActionActionsSetVar(r.m_defaultActionActionsSetVar), + m_defaultActionActionsTag(r.m_defaultActionActionsTag), m_transformations(r.m_transformations), + m_defaultTransformations(r.m_defaultTransformations), + m_severity(r.m_severity), + m_revision(r.m_revision), + m_version(r.m_version), + m_accuracy(r.m_accuracy), + m_maturity(r.m_maturity), m_containsCaptureAction(r.m_containsCaptureAction), + m_containsLogAction(r.m_containsLogAction), + m_containsNoLogAction(r.m_containsNoLogAction), m_containsMultiMatchAction(r.m_containsMultiMatchAction), m_containsStaticBlockAction(r.m_containsStaticBlockAction), - m_isChained(r.m_isChained) - { } + m_defaultSeverity(r.m_defaultSeverity), + m_defaultRevision(r.m_defaultRevision), + m_defaultVersion(r.m_defaultVersion), + m_defaultAccuracy(r.m_defaultAccuracy), + m_defaultMaturity(r.m_defaultMaturity), + m_defaultContainsCaptureAction(r.m_defaultContainsCaptureAction), + m_defaultContainsLogAction(r.m_defaultContainsLogAction), + m_defaultContainsNoLogAction(r.m_defaultContainsNoLogAction), + m_defaultContainsMultiMatchAction(r.m_defaultContainsMultiMatchAction), + m_defaultContainsStaticBlockAction(r.m_defaultContainsStaticBlockAction), + m_isChained(r.m_isChained) { }; + virtual bool evaluate(Transaction *transaction) override; + +/* RuleWithActions &operator=(const RuleWithActions& r) { Rule::operator = (r); - m_rev = r.m_rev; - m_ver = r.m_ver; + //m_rev = r.m_rev; + //m_ver = r.m_ver; m_accuracy = r.m_accuracy; m_maturity = r.m_maturity; m_ruleId = r.m_ruleId; @@ -96,24 +121,21 @@ class RuleWithActions : public Rule { return *this; } - virtual bool evaluate(Transaction *transaction, std::shared_ptr ruleMessage) override; + //virtual bool evaluate(Transaction *transaction, std::shared_ptr ruleMessage) override; virtual bool evaluate(Transaction *transaction) override; - +*/ void executeActionsIndependentOfChainedRuleResult( Transaction *trasn, - bool *containsDisruptive, - std::shared_ptr ruleMessage); + bool *containsDisruptive); void executeActionsAfterFullMatch( Transaction *trasn, - bool containsDisruptive, - std::shared_ptr ruleMessage); + bool containsDisruptive); void executeAction(Transaction *trans, bool containsBlock, - std::shared_ptr ruleMessage, actions::Action *a, bool context); @@ -130,34 +152,193 @@ class RuleWithActions : public Rule { int *nth) const; - void performLogging(Transaction *trans, - std::shared_ptr ruleMessage, - bool lastLog = true, - bool chainedParentNull = false); + void addAction(actions::Action *a); + void addTransformation(std::shared_ptr t) { + m_transformations.push_back(t); + } + void addDefaultAction(std::shared_ptr); + void addDefaultTransformation(std::shared_ptr t) { + m_defaultTransformations.push_back(t); + } + std::vector getActionsByName(const std::string& name, Transaction *t); - bool containsTag(const std::string& name, Transaction *t); + bool containsTag(const std::string& name, Transaction *t) const; bool containsMsg(const std::string& name, Transaction *t); - inline bool isChained() const { return m_isChained == true; } - inline bool hasCaptureAction() const { return m_containsCaptureAction == true; } - inline void setChained(bool b) { m_isChained = b; } - inline bool hasDisruptiveAction() const { return m_disruptiveAction != NULL; } - inline bool hasBlockAction() const { return m_containsStaticBlockAction == true; } - inline bool hasMultimatch() const { return m_containsMultiMatchAction == true; } - inline bool hasLogData() const { return m_logData != NULL; } - std::string logData(Transaction *t); - inline bool hasMsg() const { return m_msg != NULL; } - std::string msg(Transaction *t); - inline bool hasSeverity() const { return m_severity != NULL; } - int severity() const; + void clearDefaultActions() { + m_defaultSeverity = SEVERITY_NOT_SET; + m_defaultRevision = ""; + m_defaultVersion = ""; + m_defaultAccuracy = ACCURACY_NOT_SET; + m_defaultMaturity = MATURITY_NOT_SET; + m_defaultContainsCaptureAction = false; + m_defaultContainsLogAction = false; + m_defaultContainsNoLogAction = false; + m_defaultContainsMultiMatchAction = false; + m_defaultContainsStaticBlockAction = false; + m_defaultActionLogData = nullptr; + m_defaultActionMsg = nullptr; + m_defaultActionActionsSetVar.clear(); + m_defaultActionActionsTag.clear(); + m_defaultActionActionsRuntimePos.clear(); + m_defaultActionDisruptiveAction = nullptr; + m_defaultActionActionsRuntimePos.clear(); + m_defaultTransformations.clear(); + } + + Transformations getTransformation() const { + Transformations dst; + for (auto &a : m_defaultTransformations) { + dst.push_back(a); + } + for (auto &a : m_transformations) { + dst.push_back(a); + } + return dst; + } - std::string m_rev; - std::string m_ver; - int m_accuracy; - int m_maturity; + TransformationsPtr getTransformationPtr() const { + TransformationsPtr dst; + for (auto &a : m_defaultTransformations) { + dst.push_back(a.get()); + } + for (auto &a : m_transformations) { + dst.push_back(a.get()); + } + return dst; + } + + SetVars getSetVarsActions() const { + SetVars dst; + for (auto &a : m_defaultActionActionsSetVar) { + dst.push_back(a); + } + for (auto &a : m_actionsSetVar) { + dst.push_back(a); + } + return dst; + } + + SetVarsPtr getSetVarsActionsPtr() const { + SetVarsPtr dst; + for (auto &a : m_defaultActionActionsSetVar) { + dst.push_back(a.get()); + } + for (auto &a : m_actionsSetVar) { + dst.push_back(a.get()); + } + return dst; + } + + MatchActionsPtr getMatchActionsPtr() const { + MatchActionsPtr dst; + for (auto &a : m_defaultActionActionsRuntimePos) { + dst.push_back(a.get()); + } + for (auto &a : m_actionsRuntimePos) { + dst.push_back(a.get()); + } + return dst; + } + + MatchActions getMatchActions() const { + MatchActions dst; + for (auto &a : m_defaultActionActionsRuntimePos) { + dst.push_back(a); + } + for (auto &a : m_actionsRuntimePos) { + dst.push_back(a); + } + return dst; + } + + inline bool hasChainAction() const { return m_isChained == true; } + inline void setHasChainAction(bool b) { m_isChained = b; } + inline bool hasChainedParent() const { return m_chainedRuleParent != nullptr; } + inline bool hasChainedChild() const { return m_chainedRuleChild.get() != nullptr; } + + inline bool hasCaptureAction() const { return m_containsCaptureAction || m_defaultContainsCaptureAction; } + + inline bool hasDisruptiveAction() const { return m_disruptiveAction != nullptr || m_defaultActionDisruptiveAction != nullptr; } + inline void setDisruptiveAction(std::shared_ptr a) { m_disruptiveAction = a; } + inline std::shared_ptr getDisruptiveAction() const { return m_disruptiveAction; } + + inline bool hasBlockAction() const { return m_containsStaticBlockAction || m_defaultContainsStaticBlockAction; } + inline void setHasBlockAction(bool b) { m_containsStaticBlockAction = b; } + + inline bool hasMultimatchAction() const { return m_containsMultiMatchAction || m_defaultContainsMultiMatchAction; } + + inline bool hasLogAction() const { return m_containsLogAction == true; } + inline void setHasLogAction(bool b) { m_containsLogAction = b; } + inline bool hasNoLogAction() const { return m_containsNoLogAction == true; } + inline void setHasNoLogAction(bool b) { m_containsNoLogAction = b; } + + inline bool hasLogDataAction() const { return m_logData != nullptr || m_defaultActionLogData != nullptr; } + inline std::shared_ptr getLogDataAction() const { return m_logData; } + std::string getLogData(/*const */Transaction *t); + inline void setLogDataAction(std::shared_ptr data) { m_logData = data; } + + inline bool hasMessageAction() const { return m_msg != nullptr || m_defaultActionMsg != nullptr; } + inline std::shared_ptr getMessageAction() const { return m_msg; } + inline void setMessageAction(std::shared_ptr msg) { m_msg = msg; } + std::string getMessage(/*const */Transaction *t); + + + inline bool hasSeverityAction() const { return m_severity != SEVERITY_NOT_SET || m_defaultSeverity != SEVERITY_NOT_SET; } + inline int getSeverity() const { return (m_severity != SEVERITY_NOT_SET)?m_severity:m_defaultSeverity; } + inline void setDefaultActionSeverity(unsigned int severity) { m_defaultSeverity = severity; } + inline void setSeverity(unsigned int severity) { m_severity = severity; } + + inline bool hasRevisionAction() const { return m_revision != ""; } + inline std::string getRevision() const { return m_revision; }; + inline void setRevision(const std::string &revision) { m_revision.assign(revision); } + + inline bool hasVersionAction() const { return m_version != ""; } + inline std::string getVersion() const { return m_version; }; + inline void setVersion(const std::string &version) { m_version.assign(version); } + + inline bool hasAccuracyAction() const { return m_accuracy != ACCURACY_NOT_SET || m_defaultAccuracy != ACCURACY_NOT_SET; } + inline int getAccuracy() const { return m_accuracy; } + inline void setAccuracy(unsigned int accuracy) { m_accuracy = accuracy; } + + inline bool hasMaturityAction() const { return m_maturity != MATURITY_NOT_SET || m_defaultMaturity != MATURITY_NOT_SET; } + inline int getMaturity() const { return m_maturity; } + inline void setDefaultActionMaturity(unsigned int maturity) { m_defaultMaturity = maturity; } + inline void setMaturity(unsigned int maturity) { m_maturity = maturity; } + + inline bool hasTagAction() const { return m_actionsTag.size() > 0; } + inline void setTags(Tags tags) { + for (auto tag : tags) { + m_actionsTag.push_back(tag); + } + } + inline void cleanTags() { + m_actionsTag.clear(); + } + Tags getTagsAction() const { + Tags dst; + for (auto &a : m_defaultActionActionsTag) { + dst.push_back(a); + } + for (auto &a : m_actionsTag) { + dst.push_back(a); + } + return dst; + } + + TagsPtr getTagsActionPtr() const { + TagsPtr dst; + for (auto &a : m_defaultActionActionsTag) { + dst.push_back(a.get()); + } + for (auto &a : m_actionsTag) { + dst.push_back(a.get()); + } + return dst; + } int64_t m_ruleId; @@ -167,20 +348,82 @@ class RuleWithActions : public Rule { private: /* actions */ - actions::Action *m_disruptiveAction; - actions::LogData *m_logData; - actions::Msg *m_msg; - actions::Severity *m_severity; + std::shared_ptr m_disruptiveAction; + std::shared_ptr m_logData; + std::shared_ptr m_msg; MatchActions m_actionsRuntimePos; SetVars m_actionsSetVar; Tags m_actionsTag; + /* actions || SecDefaultAction */ + std::shared_ptr m_defaultActionDisruptiveAction; + std::shared_ptr m_defaultActionLogData; + std::shared_ptr m_defaultActionMsg; + MatchActions m_defaultActionActionsRuntimePos; + SetVars m_defaultActionActionsSetVar; + Tags m_defaultActionActionsTag; + /* actions > transformations */ Transformations m_transformations; + /* actions > transformations || SecDefaultAction */ + Transformations m_defaultTransformations; + + + /* || */ + /** + * 0 - EMERGENCY: is generated from correlation of anomaly + * scoring data where there is an inbound + * attack and an outbound leakage. + * 1 - ALERT: is generated from correlation where there is + * an inbound attack and an outbound application + * level error. + * 2 - CRITICAL: Anomaly Score of 5. Is the highest severity + * level possible without correlation. It is + * normally generated by the web attack rules + * (40 level files). + * 3 - ERROR: Error - Anomaly Score of 4. Is generated mostly + * from outbound leakage rules (50 level files). + * 4 - WARNING: Anomaly Score of 3. Is generated by malicious + * client rules (35 level files). + * 5 - NOTICE: Anomaly Score of 2. Is generated by the Protocol + * policy and anomaly files. + * 6 - INFO + * 7 - DEBUG + **/ + unsigned int m_severity:3; + + std::string m_revision; + std::string m_version; + + /** + * 1-9 where 9 is very strong and 1 has many false positives + */ + unsigned int m_accuracy:3; + /** + * 1-9 where 9 is extensively tested and 1 is a brand new experimental rule + */ + unsigned int m_maturity:3; + + bool m_containsCaptureAction:1; + bool m_containsLogAction:1; + bool m_containsNoLogAction:1; bool m_containsMultiMatchAction:1; bool m_containsStaticBlockAction:1; + + /* || SecDefaultAction */ + unsigned int m_defaultSeverity:3; + std::string m_defaultRevision; + std::string m_defaultVersion; + unsigned int m_defaultAccuracy:3; + unsigned int m_defaultMaturity:3; + bool m_defaultContainsCaptureAction:1; + bool m_defaultContainsLogAction:1; + bool m_defaultContainsNoLogAction:1; + bool m_defaultContainsMultiMatchAction:1; + bool m_defaultContainsStaticBlockAction:1; + bool m_isChained:1; }; diff --git a/headers/modsecurity/rule_with_operator.h b/headers/modsecurity/rule_with_operator.h index a8868bcbaa..059c71739f 100644 --- a/headers/modsecurity/rule_with_operator.h +++ b/headers/modsecurity/rule_with_operator.h @@ -45,10 +45,14 @@ class RuleWithOperator : public RuleWithActions { std::unique_ptr fileName, int lineNumber); + RuleWithOperator(const RuleWithOperator &op) + : RuleWithActions(op), + m_variables(op.m_variables), + m_operator(op.m_operator) { }; + virtual ~RuleWithOperator(); - bool evaluate(Transaction *transaction, - std::shared_ptr rm) override; + bool evaluate(Transaction *transaction) override; void getVariablesExceptions(Transaction *t, variables::Variables *exclusion, variables::Variables *addition); @@ -56,7 +60,7 @@ class RuleWithOperator : public RuleWithActions { variables::Variables *eclusion, Transaction *trans); bool executeOperatorAt(Transaction *trasn, const std::string &key, - std::string value, std::shared_ptr rm); + std::string value); static void updateMatchedVars(Transaction *trasn, const std::string &key, const std::string &value); @@ -70,8 +74,8 @@ class RuleWithOperator : public RuleWithActions { } private: - modsecurity::variables::Variables *m_variables; - operators::Operator *m_operator; + std::shared_ptr m_variables; + std::shared_ptr m_operator; }; diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 3c8ccff470..79264b0866 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -80,11 +80,14 @@ class Rules { return true; } + void fixDefaultActions(); + size_t size() const { return m_rules.size(); } std::shared_ptr operator[](int index) const { return m_rules[index]; } std::shared_ptr at(int index) const { return m_rules[index]; } std::vector > m_defaultActions; + std::vector > m_defaultTransformations; std::vector > m_rules; }; diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index 79d7b3b6a6..ba38bc3903 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -103,6 +103,7 @@ class ModSecurity; class Transaction; class RulesSet; class RuleMessage; +class RuleWithActions; namespace actions { class Action; namespace disruptive { @@ -319,8 +320,56 @@ class TransactionSecMarkerManagement { std::shared_ptr m_marker; }; +class TransactionRuleMessageManagement { + public: + explicit TransactionRuleMessageManagement(Transaction *t) + : m_transaction(t), + m_noAuditLog(false) { + messageNew(); + }; + + RuleMessage *messageGetLast(); + void messageNew(); + + void logMatchLastRuleOnTheChain(RuleWithActions *rule); + + void messageSetNoAuditLog(bool a) { + m_noAuditLog = a; + } + + bool messageSaveAuditLog() const { + return m_noAuditLog; + } + + std::list messageGetAll() { + std::list messages; + for (RuleMessage *a : m_rulesMessages) { + messages.push_back(a); + } + + return messages; + } + + void messageClear() { + m_rulesMessages.clear(); + } + + private: + /** + * This variable holds all the messages asked to be save by the utilization + * of the actions: `log_data' and `msg'. These should be included on the + * auditlogs. + */ + std::list m_rulesMessages; + + Transaction *m_transaction; + bool m_noAuditLog; +}; + + /** @ingroup ModSecurity_CPP_API */ -class Transaction : public TransactionAnchoredVariables, public TransactionSecMarkerManagement { +class Transaction : public TransactionAnchoredVariables, public TransactionSecMarkerManagement, \ + public TransactionRuleMessageManagement { public: Transaction(ModSecurity *transaction, RulesSet *rules, void *logCbData); Transaction(ModSecurity *transaction, RulesSet *rules, char *id, @@ -400,7 +449,7 @@ class Transaction : public TransactionAnchoredVariables, public TransactionSecMa #ifndef NO_LOGS void debug(int, std::string) const; #endif - void serverLog(std::shared_ptr rm); + void serverLog(RuleMessage *rm); int getRuleEngineState() const; @@ -529,13 +578,6 @@ class Transaction : public TransactionAnchoredVariables, public TransactionSecMa */ std::list< std::pair > m_auditLogModifier; - /** - * This variable holds all the messages asked to be save by the utilization - * of the actions: `log_data' and `msg'. These should be included on the - * auditlogs. - */ - std::list m_rulesMessages; - /** * Holds the request body, in case of any. */ diff --git a/src/actions/accuracy.cc b/src/actions/accuracy.cc index c8cfca72aa..152ab05d16 100644 --- a/src/actions/accuracy.cc +++ b/src/actions/accuracy.cc @@ -40,7 +40,6 @@ bool Accuracy::init(std::string *error) { bool Accuracy::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_accuracy = m_accuracy; return true; } diff --git a/src/actions/accuracy.h b/src/actions/accuracy.h index f787af190c..0933f4f1e3 100644 --- a/src/actions/accuracy.h +++ b/src/actions/accuracy.h @@ -35,6 +35,7 @@ class Accuracy : public Action { bool evaluate(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; + int getAccuracy() const { return m_accuracy; } private: int m_accuracy; diff --git a/src/actions/audit_log.cc b/src/actions/audit_log.cc index c628ac2364..7b64ddcb8b 100644 --- a/src/actions/audit_log.cc +++ b/src/actions/audit_log.cc @@ -28,11 +28,8 @@ namespace actions { bool AuditLog::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_noAuditLog = false; - ms_dbg_a(transaction, 9, "Saving transaction to logs"); - rm->m_saveMessage = true; - + RuleMessage &rm) { + transaction->messageSetNoAuditLog(false); return true; } diff --git a/src/actions/audit_log.h b/src/actions/audit_log.h index d870de2ac3..3a81496892 100644 --- a/src/actions/audit_log.h +++ b/src/actions/audit_log.h @@ -36,7 +36,7 @@ class AuditLog : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; }; diff --git a/src/actions/block.cc b/src/actions/block.cc index a6b91480c1..07d61643ca 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -30,16 +30,8 @@ namespace actions { bool Block::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { ms_dbg_a(transaction, 8, "Marking request as disruptive."); - - for (auto &a : transaction->m_rules->m_rulesSetPhases[rule->getPhase()]->m_defaultActions) { - if (a->isDisruptive() == false) { - continue; - } - a->evaluate(rule, transaction, rm); - } - return true; } diff --git a/src/actions/block.h b/src/actions/block.h index 7c40bbd830..b32e864c19 100644 --- a/src/actions/block.h +++ b/src/actions/block.h @@ -36,7 +36,7 @@ class Block : public Action { explicit Block(const std::string &action) : Action(action) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; }; diff --git a/src/actions/chain.cc b/src/actions/chain.cc index 197f861ff2..dddf8cce8e 100644 --- a/src/actions/chain.cc +++ b/src/actions/chain.cc @@ -26,7 +26,7 @@ namespace actions { bool Chain::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->setChained(true); + rule->setHasChainAction(true); return true; } diff --git a/src/actions/data/status.cc b/src/actions/data/status.cc index 9429973859..5c2b862759 100644 --- a/src/actions/data/status.cc +++ b/src/actions/data/status.cc @@ -39,7 +39,7 @@ bool Status::init(std::string *error) { bool Status::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { transaction->m_it.status = m_status; return true; } diff --git a/src/actions/data/status.h b/src/actions/data/status.h index d792247d68..b61b4a2ac2 100644 --- a/src/actions/data/status.h +++ b/src/actions/data/status.h @@ -38,7 +38,7 @@ class Status : public Action { bool init(std::string *error) override; bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; int m_status; }; diff --git a/src/actions/disruptive/deny.cc b/src/actions/disruptive/deny.cc index e105d65127..6dfe4245fe 100644 --- a/src/actions/disruptive/deny.cc +++ b/src/actions/disruptive/deny.cc @@ -29,7 +29,7 @@ namespace disruptive { bool Deny::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { ms_dbg_a(transaction, 8, "Running action deny"); if (transaction->m_it.status == 200) { @@ -38,9 +38,9 @@ bool Deny::evaluate(RuleWithActions *rule, Transaction *transaction, transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm->m_isDisruptive = true; + rm.setRule(rule); transaction->m_it.log = strdup( - rm->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + rm.log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/deny.h b/src/actions/disruptive/deny.h index fb841a49a7..a11d41bb27 100644 --- a/src/actions/disruptive/deny.h +++ b/src/actions/disruptive/deny.h @@ -34,7 +34,7 @@ class Deny : public Action { explicit Deny(const std::string &action) : Action(action) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/drop.cc b/src/actions/disruptive/drop.cc index 18a3b55280..5c7b04565d 100644 --- a/src/actions/disruptive/drop.cc +++ b/src/actions/disruptive/drop.cc @@ -33,7 +33,7 @@ namespace disruptive { bool Drop::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { ms_dbg_a(transaction, 8, "Running action drop " \ "[executing deny instead of drop.]"); @@ -43,9 +43,9 @@ bool Drop::evaluate(RuleWithActions *rule, Transaction *transaction, transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm->m_isDisruptive = true; + rm.setRule(rule); transaction->m_it.log = strdup( - rm->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + rm.log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/drop.h b/src/actions/disruptive/drop.h index f60eddfa6d..ebfc853b16 100644 --- a/src/actions/disruptive/drop.h +++ b/src/actions/disruptive/drop.h @@ -33,7 +33,7 @@ class Drop : public Action { explicit Drop(const std::string &action) : Action(action) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/pass.cc b/src/actions/disruptive/pass.cc index e0f038c4cb..2334ce2101 100644 --- a/src/actions/disruptive/pass.cc +++ b/src/actions/disruptive/pass.cc @@ -30,7 +30,7 @@ namespace disruptive { bool Pass::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { intervention::free(&transaction->m_it); intervention::reset(&transaction->m_it); diff --git a/src/actions/disruptive/pass.h b/src/actions/disruptive/pass.h index 0c09d2874f..3abbe03f98 100644 --- a/src/actions/disruptive/pass.h +++ b/src/actions/disruptive/pass.h @@ -32,7 +32,7 @@ class Pass : public Action { explicit Pass(const std::string &action) : Action(action) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/redirect.cc b/src/actions/disruptive/redirect.cc index ac2993b4c0..ef3a3a433e 100644 --- a/src/actions/disruptive/redirect.cc +++ b/src/actions/disruptive/redirect.cc @@ -35,7 +35,7 @@ bool Redirect::init(std::string *error) { bool Redirect::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { std::string m_urlExpanded(m_string->evaluate(transaction)); /* if it was changed before, lets keep it. */ if (transaction->m_it.status == 200 @@ -47,9 +47,9 @@ bool Redirect::evaluate(RuleWithActions *rule, Transaction *transaction, transaction->m_it.url = strdup(m_urlExpanded.c_str()); transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm->m_isDisruptive = true; + rm.setRule(rule); transaction->m_it.log = strdup( - rm->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + rm.log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/redirect.h b/src/actions/disruptive/redirect.h index 46b5d51a96..50022d0a7f 100644 --- a/src/actions/disruptive/redirect.h +++ b/src/actions/disruptive/redirect.h @@ -47,7 +47,7 @@ class Redirect : public Action { m_string(std::move(z)) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; bool init(std::string *error) override; bool isDisruptive() override { return true; } diff --git a/src/actions/init_col.h b/src/actions/init_col.h index 16d7ace921..5cd2f8bc5c 100644 --- a/src/actions/init_col.h +++ b/src/actions/init_col.h @@ -42,7 +42,7 @@ class InitCol : public Action { bool init(std::string *error) override; private: std::string m_collection_key; - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/log.cc b/src/actions/log.cc index 6ca507cdb1..137a00d351 100644 --- a/src/actions/log.cc +++ b/src/actions/log.cc @@ -29,9 +29,7 @@ namespace actions { bool Log::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - ms_dbg_a(transaction, 9, "Saving transaction to logs"); - rm->m_saveMessage = true; + RuleMessage &rm) { return true; } diff --git a/src/actions/log.h b/src/actions/log.h index 736d4a1304..d6d5e46d41 100644 --- a/src/actions/log.h +++ b/src/actions/log.h @@ -34,7 +34,7 @@ class Log : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; }; } // namespace actions diff --git a/src/actions/log_data.cc b/src/actions/log_data.cc index 49c539cfc4..82549a3de1 100644 --- a/src/actions/log_data.cc +++ b/src/actions/log_data.cc @@ -30,8 +30,8 @@ namespace actions { bool LogData::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_data = data(transaction); + RuleMessage &rm) { + rm.m_data = data(transaction); return true; } diff --git a/src/actions/log_data.h b/src/actions/log_data.h index da2fbf4df0..44afb773d3 100644 --- a/src/actions/log_data.h +++ b/src/actions/log_data.h @@ -40,11 +40,11 @@ class LogData : public Action { m_string(std::move(z)) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; std::string data(Transaction *Transaction); - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/maturity.cc b/src/actions/maturity.cc index 131d2148bd..c125641a98 100644 --- a/src/actions/maturity.cc +++ b/src/actions/maturity.cc @@ -40,7 +40,6 @@ bool Maturity::init(std::string *error) { bool Maturity::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_maturity = m_maturity; return true; } diff --git a/src/actions/maturity.h b/src/actions/maturity.h index dd185efaa2..1fe13533c1 100644 --- a/src/actions/maturity.h +++ b/src/actions/maturity.h @@ -35,6 +35,7 @@ class Maturity : public Action { bool evaluate(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; + int getMaturity() const { return m_maturity; } private: int m_maturity; diff --git a/src/actions/msg.cc b/src/actions/msg.cc index 1f0b3538d1..1cf0dfe754 100644 --- a/src/actions/msg.cc +++ b/src/actions/msg.cc @@ -47,9 +47,9 @@ namespace actions { bool Msg::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { std::string msg = data(transaction); - rm->m_message = msg; + rm.m_message = msg; ms_dbg_a(transaction, 9, "Saving msg: " + msg); return true; diff --git a/src/actions/msg.h b/src/actions/msg.h index 61661194ba..ddc67f738f 100644 --- a/src/actions/msg.h +++ b/src/actions/msg.h @@ -41,10 +41,10 @@ class Msg : public Action { m_string(std::move(z)) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; std::string data(Transaction *Transaction); - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/no_audit_log.cc b/src/actions/no_audit_log.cc index e4a59f7361..8f7f538812 100644 --- a/src/actions/no_audit_log.cc +++ b/src/actions/no_audit_log.cc @@ -27,10 +27,8 @@ namespace actions { bool NoAuditLog::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_noAuditLog = true; - rm->m_saveMessage = false; - + RuleMessage &rm) { + transaction->messageSetNoAuditLog(true); return true; } diff --git a/src/actions/no_audit_log.h b/src/actions/no_audit_log.h index dbd5d098fb..337e76f1f8 100644 --- a/src/actions/no_audit_log.h +++ b/src/actions/no_audit_log.h @@ -36,7 +36,7 @@ class NoAuditLog : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; }; } // namespace actions diff --git a/src/actions/no_log.cc b/src/actions/no_log.cc index 501ea4da4d..496e151554 100644 --- a/src/actions/no_log.cc +++ b/src/actions/no_log.cc @@ -30,8 +30,7 @@ namespace actions { bool NoLog::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - rm->m_saveMessage = false; + RuleMessage &rm) { return true; } diff --git a/src/actions/no_log.h b/src/actions/no_log.h index 87d4e30593..0d2f745deb 100644 --- a/src/actions/no_log.h +++ b/src/actions/no_log.h @@ -34,7 +34,7 @@ class NoLog : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; }; } // namespace actions diff --git a/src/actions/rev.cc b/src/actions/rev.cc index 43d8d1be46..400b31c354 100644 --- a/src/actions/rev.cc +++ b/src/actions/rev.cc @@ -34,7 +34,6 @@ bool Rev::init(std::string *error) { bool Rev::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_rev = m_rev; return true; } diff --git a/src/actions/rev.h b/src/actions/rev.h index 9e3c1bfb64..a5c95258ae 100644 --- a/src/actions/rev.h +++ b/src/actions/rev.h @@ -33,9 +33,10 @@ class Rev : public Action { bool evaluate(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; + std::string getRevision() const { return m_rev; } private: - std::string m_rev; + std::string m_rev; }; diff --git a/src/actions/set_env.h b/src/actions/set_env.h index 33ccfc3380..d5284d42b4 100644 --- a/src/actions/set_env.h +++ b/src/actions/set_env.h @@ -43,7 +43,7 @@ class SetENV : public Action { bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_rsc.h b/src/actions/set_rsc.h index 5913b7c799..41094f0e1c 100644 --- a/src/actions/set_rsc.h +++ b/src/actions/set_rsc.h @@ -43,7 +43,7 @@ class SetRSC : public Action { bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_sid.h b/src/actions/set_sid.h index 64f8f3cc78..78a2911a7a 100644 --- a/src/actions/set_sid.h +++ b/src/actions/set_sid.h @@ -43,7 +43,7 @@ class SetSID : public Action { bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_uid.h b/src/actions/set_uid.h index b8c3a0db74..5cc96c6b25 100644 --- a/src/actions/set_uid.h +++ b/src/actions/set_uid.h @@ -43,7 +43,7 @@ class SetUID : public Action { bool init(std::string *error) override; private: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/set_var.h b/src/actions/set_var.h index 5fe9de0329..51f596b481 100644 --- a/src/actions/set_var.h +++ b/src/actions/set_var.h @@ -63,8 +63,8 @@ class SetVar : public Action { private: SetVarOperation m_operation; - std::unique_ptr m_variable; - std::unique_ptr m_string; + std::shared_ptr m_variable; + std::shared_ptr m_string; }; } // namespace actions diff --git a/src/actions/severity.cc b/src/actions/severity.cc index 8344e1052d..e1bc8239c5 100644 --- a/src/actions/severity.cc +++ b/src/actions/severity.cc @@ -72,17 +72,7 @@ bool Severity::init(std::string *error) { bool Severity::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { - ms_dbg_a(transaction, 9, "This rule severity is: " + \ - std::to_string(this->m_severity) + " current transaction is: " + \ - std::to_string(transaction->m_highestSeverityAction)); - - rm->m_severity = m_severity; - - if (transaction->m_highestSeverityAction > this->m_severity) { - transaction->m_highestSeverityAction = this->m_severity; - } - + RuleMessage &rm) { return true; } diff --git a/src/actions/severity.h b/src/actions/severity.h index 32a223e005..eb3f0adadc 100644 --- a/src/actions/severity.h +++ b/src/actions/severity.h @@ -36,7 +36,7 @@ class Severity : public Action { m_severity(0) { } bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; bool init(std::string *error) override; int m_severity; diff --git a/src/actions/tag.cc b/src/actions/tag.cc index 3b1b6fd539..04d36afde4 100644 --- a/src/actions/tag.cc +++ b/src/actions/tag.cc @@ -58,11 +58,11 @@ std::string Tag::getName(Transaction *transaction) { bool Tag::evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) { + RuleMessage &rm) { std::string tag = getName(transaction); ms_dbg_a(transaction, 9, "Rule tag: " + tag); - rm->m_tags.push_back(tag); + rm.m_tags.push_back(tag); return true; } diff --git a/src/actions/tag.h b/src/actions/tag.h index 75369f5f7c..38b069280f 100644 --- a/src/actions/tag.h +++ b/src/actions/tag.h @@ -39,10 +39,10 @@ class Tag : public Action { std::string getName(Transaction *transaction); bool evaluate(RuleWithActions *rule, Transaction *transaction, - std::shared_ptr rm) override; + RuleMessage &rm) override; protected: - std::unique_ptr m_string; + std::shared_ptr m_string; }; diff --git a/src/actions/ver.cc b/src/actions/ver.cc index 43b8b832e2..8f1d1ef7cb 100644 --- a/src/actions/ver.cc +++ b/src/actions/ver.cc @@ -28,7 +28,6 @@ namespace actions { bool Ver::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_ver = m_parser_payload; return true; } diff --git a/src/audit_log/audit_log.cc b/src/audit_log/audit_log.cc index 50213d5df9..b159f779c1 100644 --- a/src/audit_log/audit_log.cc +++ b/src/audit_log/audit_log.cc @@ -295,12 +295,7 @@ bool AuditLog::saveIfRelevant(Transaction *transaction, int parts) { return true; } - for (RuleMessage &i : transaction->m_rulesMessages) { - if (i.m_noAuditLog == false) { - saveAnyway = true; - break; - } - } + saveAnyway = transaction->messageSaveAuditLog(); if ((m_status == RelevantOnlyAuditLogStatus && this->isRelevant(transaction->m_httpCodeReturned) == false) diff --git a/src/modsecurity.cc b/src/modsecurity.cc index 854ec31ea9..101309cdd4 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -190,7 +190,7 @@ const std::string& ModSecurity::getConnectorInformation() const { return m_connector; } -void ModSecurity::serverLog(void *data, std::shared_ptr rm) { +void ModSecurity::serverLog(void *data, RuleMessage *rm) { if (m_logCb == NULL) { std::cerr << "Server log callback is not set -- " << rm->errorLog(); std::cerr << std::endl; @@ -209,7 +209,7 @@ void ModSecurity::serverLog(void *data, std::shared_ptr rm) { } if (m_logProperties & RuleMessageLogProperty) { - const void *a = static_cast(rm.get()); + const void *a = static_cast(rm); if (m_logProperties & IncludeFullHighlightLogProperty) { m_logCb(data, a); return; diff --git a/src/operators/begins_with.cc b/src/operators/begins_with.cc index a2f89fce9c..7cf8909dbc 100644 --- a/src/operators/begins_with.cc +++ b/src/operators/begins_with.cc @@ -25,7 +25,7 @@ namespace operators { bool BeginsWith::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { + const std::string &str, RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); if (str.size() < p.size()) { diff --git a/src/operators/begins_with.h b/src/operators/begins_with.h index c9fcee467a..db8755ca3d 100644 --- a/src/operators/begins_with.h +++ b/src/operators/begins_with.h @@ -33,7 +33,7 @@ class BeginsWith : public Operator { : Operator("BeginsWith", std::move(param)) { } bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/contains.cc b/src/operators/contains.cc index 95c2702a88..828e7ac637 100644 --- a/src/operators/contains.cc +++ b/src/operators/contains.cc @@ -22,7 +22,7 @@ namespace modsecurity { namespace operators { bool Contains::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { + const std::string &input, RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); size_t offset = input.find(p); diff --git a/src/operators/contains.h b/src/operators/contains.h index 13fcda9224..0144e418d4 100644 --- a/src/operators/contains.h +++ b/src/operators/contains.h @@ -36,7 +36,7 @@ class Contains : public Operator { : Operator("Contains", std::move(param)) { } bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/contains_word.cc b/src/operators/contains_word.cc index 9bcdbd6cf3..b691d62e0a 100644 --- a/src/operators/contains_word.cc +++ b/src/operators/contains_word.cc @@ -37,7 +37,7 @@ bool ContainsWord::acceptableChar(const std::string& a, size_t pos) { } bool ContainsWord::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { + const std::string &str, RuleMessage *ruleMessage) { std::string paramTarget(m_string->evaluate(transaction)); if (paramTarget.empty()) { diff --git a/src/operators/contains_word.h b/src/operators/contains_word.h index c15e399089..20ee3ff87c 100644 --- a/src/operators/contains_word.h +++ b/src/operators/contains_word.h @@ -34,7 +34,7 @@ class ContainsWord : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; private: static bool acceptableChar(const std::string& a, size_t pos); diff --git a/src/operators/detect_sqli.cc b/src/operators/detect_sqli.cc index 793d564406..b4cae8ccbc 100644 --- a/src/operators/detect_sqli.cc +++ b/src/operators/detect_sqli.cc @@ -26,7 +26,7 @@ namespace operators { bool DetectSQLi::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const std::string& input, RuleMessage *ruleMessage) { char fingerprint[8]; int issqli; diff --git a/src/operators/detect_sqli.h b/src/operators/detect_sqli.h index 237e6a2ffd..9ab7a7c169 100644 --- a/src/operators/detect_sqli.h +++ b/src/operators/detect_sqli.h @@ -34,7 +34,7 @@ class DetectSQLi : public Operator { bool evaluate(Transaction *t, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/detect_xss.cc b/src/operators/detect_xss.cc index 6c89ef7203..c10238abc2 100644 --- a/src/operators/detect_xss.cc +++ b/src/operators/detect_xss.cc @@ -26,7 +26,7 @@ namespace operators { bool DetectXSS::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const std::string& input, RuleMessage *ruleMessage) { int is_xss; is_xss = libinjection_xss(input.c_str(), input.length()); diff --git a/src/operators/detect_xss.h b/src/operators/detect_xss.h index c455462513..16bddb2299 100644 --- a/src/operators/detect_xss.h +++ b/src/operators/detect_xss.h @@ -33,7 +33,7 @@ class DetectXSS : public Operator { bool evaluate(Transaction *t, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/ends_with.cc b/src/operators/ends_with.cc index 404f3ffd03..125fef6a44 100644 --- a/src/operators/ends_with.cc +++ b/src/operators/ends_with.cc @@ -24,7 +24,7 @@ namespace operators { bool EndsWith::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { + const std::string &str, RuleMessage *ruleMessage) { bool ret = false; std::string p(m_string->evaluate(transaction)); diff --git a/src/operators/ends_with.h b/src/operators/ends_with.h index 47e42c3fd9..1fd555955b 100644 --- a/src/operators/ends_with.h +++ b/src/operators/ends_with.h @@ -35,7 +35,7 @@ class EndsWith : public Operator { } bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; }; diff --git a/src/operators/operator.cc b/src/operators/operator.cc index b74b072946..2aaa143afb 100644 --- a/src/operators/operator.cc +++ b/src/operators/operator.cc @@ -71,7 +71,7 @@ namespace operators { bool Operator::evaluateInternal(Transaction *transaction, - RuleWithActions *rule, const std::string& a, std::shared_ptr rm) { + RuleWithActions *rule, const std::string& a, RuleMessage *rm) { bool res = evaluate(transaction, rule, a, rm); if (m_negation) { diff --git a/src/operators/operator.h b/src/operators/operator.h index 4a21e59524..444377942e 100644 --- a/src/operators/operator.h +++ b/src/operators/operator.h @@ -114,7 +114,7 @@ class Operator { bool evaluateInternal(Transaction *t, RuleWithActions *rule, const std::string& a); bool evaluateInternal(Transaction *t, RuleWithActions *rule, - const std::string& a, std::shared_ptr ruleMessage); + const std::string& a, RuleMessage *ruleMessage); virtual bool evaluate(Transaction *transaction, const std::string &str); @@ -123,11 +123,11 @@ class Operator { return evaluate(transaction, str); } virtual bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { + const std::string &str, RuleMessage *ruleMessage) { return evaluate(transaction, str); } - static void logOffset(std::shared_ptr ruleMessage, int offset, int len) { + static void logOffset(RuleMessage *ruleMessage, int offset, int len) { if (ruleMessage) { ruleMessage->m_reference.append("o" + std::to_string(offset) + "," diff --git a/src/operators/pm.cc b/src/operators/pm.cc index ebf31c4077..d08f37bb80 100644 --- a/src/operators/pm.cc +++ b/src/operators/pm.cc @@ -82,8 +82,8 @@ void Pm::postOrderTraversal(acmp_btree_node_t *node) { bool Pm::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { - int rc; + const std::string &input, RuleMessage *ruleMessage) { + int rc = -1; ACMPT pt; pt.parser = m_p; pt.ptr = NULL; diff --git a/src/operators/pm.h b/src/operators/pm.h index b090ec5dc5..34ff688ad4 100644 --- a/src/operators/pm.h +++ b/src/operators/pm.h @@ -43,7 +43,7 @@ class Pm : public Operator { ~Pm(); bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index ffdb17a288..973494ad97 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -202,7 +202,7 @@ void Rbl::furtherInfo(struct sockaddr_in *sin, const std::string &ipStr, bool Rbl::evaluate(Transaction *t, RuleWithActions *rule, const std::string& ipStr, - std::shared_ptr ruleMessage) { + RuleMessage *ruleMessage) { struct addrinfo *info = NULL; std::string host = Rbl::mapIpToAddress(ipStr, t); int rc = 0; diff --git a/src/operators/rbl.h b/src/operators/rbl.h index f002d532c5..eb25c56b5f 100644 --- a/src/operators/rbl.h +++ b/src/operators/rbl.h @@ -78,7 +78,7 @@ class Rbl : public Operator { } bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; std::string mapIpToAddress(const std::string &ipStr, Transaction *trans) const; diff --git a/src/operators/rx.cc b/src/operators/rx.cc index f69ca97dde..a6112f0c0c 100644 --- a/src/operators/rx.cc +++ b/src/operators/rx.cc @@ -37,7 +37,7 @@ bool Rx::init(const std::string &arg, std::string *error) { bool Rx::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const std::string& input, RuleMessage *ruleMessage) { Regex *re; if (m_param.empty() && !m_string->m_containsMacro) { diff --git a/src/operators/rx.h b/src/operators/rx.h index 817e74eb0b..3fee464ad0 100644 --- a/src/operators/rx.h +++ b/src/operators/rx.h @@ -51,7 +51,7 @@ class Rx : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; bool init(const std::string &arg, std::string *error) override; diff --git a/src/operators/rx_global.cc b/src/operators/rx_global.cc index f715a4fd13..7f71655b76 100644 --- a/src/operators/rx_global.cc +++ b/src/operators/rx_global.cc @@ -37,7 +37,7 @@ bool RxGlobal::init(const std::string &arg, std::string *error) { bool RxGlobal::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const std::string& input, RuleMessage *ruleMessage) { Regex *re; if (m_param.empty() && !m_string->m_containsMacro) { diff --git a/src/operators/rx_global.h b/src/operators/rx_global.h index 86e37d0d5f..f608773cb0 100644 --- a/src/operators/rx_global.h +++ b/src/operators/rx_global.h @@ -51,7 +51,7 @@ class RxGlobal : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; bool init(const std::string &arg, std::string *error) override; diff --git a/src/operators/validate_byte_range.cc b/src/operators/validate_byte_range.cc index 07b88149c2..8ab58538ad 100644 --- a/src/operators/validate_byte_range.cc +++ b/src/operators/validate_byte_range.cc @@ -111,7 +111,7 @@ bool ValidateByteRange::init(const std::string &file, bool ValidateByteRange::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { + const std::string &input, RuleMessage *ruleMessage) { bool ret = true; size_t count = 0; diff --git a/src/operators/validate_byte_range.h b/src/operators/validate_byte_range.h index 2c44e76921..da053783cf 100644 --- a/src/operators/validate_byte_range.h +++ b/src/operators/validate_byte_range.h @@ -39,7 +39,7 @@ class ValidateByteRange : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; bool getRange(const std::string &rangeRepresentation, std::string *error); bool init(const std::string& file, std::string *error) override; private: diff --git a/src/operators/validate_url_encoding.cc b/src/operators/validate_url_encoding.cc index 20a86eb625..302ca1f894 100644 --- a/src/operators/validate_url_encoding.cc +++ b/src/operators/validate_url_encoding.cc @@ -69,7 +69,7 @@ int ValidateUrlEncoding::validate_url_encoding(const char *input, bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, std::shared_ptr ruleMessage) { + const std::string &input, RuleMessage *ruleMessage) { size_t offset = 0; bool res = false; diff --git a/src/operators/validate_url_encoding.h b/src/operators/validate_url_encoding.h index fe274dc0a0..3f0498dca2 100644 --- a/src/operators/validate_url_encoding.h +++ b/src/operators/validate_url_encoding.h @@ -33,7 +33,7 @@ class ValidateUrlEncoding : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; static int validate_url_encoding(const char *input, uint64_t input_length, size_t *offset); diff --git a/src/operators/validate_utf8_encoding.cc b/src/operators/validate_utf8_encoding.cc index e95061af3c..ec5ac90a60 100644 --- a/src/operators/validate_utf8_encoding.cc +++ b/src/operators/validate_utf8_encoding.cc @@ -114,7 +114,7 @@ int ValidateUtf8Encoding::detect_utf8_character( } bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { + const std::string &str, RuleMessage *ruleMessage) { unsigned int i, bytes_left; const char *str_c = str.c_str(); diff --git a/src/operators/validate_utf8_encoding.h b/src/operators/validate_utf8_encoding.h index e59eef5897..a7d63c8343 100644 --- a/src/operators/validate_utf8_encoding.h +++ b/src/operators/validate_utf8_encoding.h @@ -40,7 +40,7 @@ class ValidateUtf8Encoding : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; static int detect_utf8_character(const unsigned char *p_read, unsigned int length); diff --git a/src/operators/verify_cc.cc b/src/operators/verify_cc.cc index a0d76cc376..4690e22c76 100644 --- a/src/operators/verify_cc.cc +++ b/src/operators/verify_cc.cc @@ -118,7 +118,7 @@ bool VerifyCC::init(const std::string ¶m2, std::string *error) { bool VerifyCC::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& i, std::shared_ptr ruleMessage) { + const std::string& i, RuleMessage *ruleMessage) { int offset = 0; int target_length = i.length(); diff --git a/src/operators/verify_cc.h b/src/operators/verify_cc.h index dc82492c9a..7095cbc8ce 100644 --- a/src/operators/verify_cc.h +++ b/src/operators/verify_cc.h @@ -37,7 +37,7 @@ class VerifyCC : public Operator { bool evaluate(Transaction *t, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; bool init(const std::string ¶m, std::string *error) override; private: pcre *m_pc; diff --git a/src/operators/verify_cpf.cc b/src/operators/verify_cpf.cc index 778584db62..5566d8b69d 100644 --- a/src/operators/verify_cpf.cc +++ b/src/operators/verify_cpf.cc @@ -109,7 +109,7 @@ bool VerifyCPF::verify(const char *cpfnumber, int len) { bool VerifyCPF::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const std::string& input, RuleMessage *ruleMessage) { std::list matches; bool is_cpf = false; int i; diff --git a/src/operators/verify_cpf.h b/src/operators/verify_cpf.h index eecf71b1a2..e15e74c47a 100644 --- a/src/operators/verify_cpf.h +++ b/src/operators/verify_cpf.h @@ -48,7 +48,7 @@ class VerifyCPF : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; bool verify(const char *ssnumber, int len); diff --git a/src/operators/verify_ssn.cc b/src/operators/verify_ssn.cc index 59a36dd78f..8912b99ca4 100644 --- a/src/operators/verify_ssn.cc +++ b/src/operators/verify_ssn.cc @@ -111,7 +111,7 @@ bool VerifySSN::verify(const char *ssnumber, int len) { bool VerifySSN::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const std::string& input, RuleMessage *ruleMessage) { std::list matches; bool is_ssn = false; int i; diff --git a/src/operators/verify_ssn.h b/src/operators/verify_ssn.h index 7c0828fbb9..ef38cad3c6 100644 --- a/src/operators/verify_ssn.h +++ b/src/operators/verify_ssn.h @@ -48,7 +48,7 @@ class VerifySSN : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; diff --git a/src/operators/verify_svnr.cc b/src/operators/verify_svnr.cc index 248e6b4ec1..f9f4174cfc 100644 --- a/src/operators/verify_svnr.cc +++ b/src/operators/verify_svnr.cc @@ -78,7 +78,7 @@ bool VerifySVNR::verify(const char *svnrnumber, int len) { bool VerifySVNR::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, std::shared_ptr ruleMessage) { + const std::string& input, RuleMessage* ruleMessage) { std::list matches; bool is_svnr = false; int i; diff --git a/src/operators/verify_svnr.h b/src/operators/verify_svnr.h index 6fe9df9afb..898bee79b1 100644 --- a/src/operators/verify_svnr.h +++ b/src/operators/verify_svnr.h @@ -34,7 +34,7 @@ class VerifySVNR : public Operator { bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string& input, - std::shared_ptr ruleMessage) override; + RuleMessage *ruleMessage) override; bool verify(const char *ssnumber, int len); diff --git a/src/operators/within.cc b/src/operators/within.cc index ce781cc7d7..a4ffc655cd 100644 --- a/src/operators/within.cc +++ b/src/operators/within.cc @@ -25,7 +25,7 @@ namespace operators { bool Within::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) { + const std::string &str, RuleMessage *ruleMessage) { bool res = false; size_t pos = 0; std::string paramTarget(m_string->evaluate(transaction)); diff --git a/src/operators/within.h b/src/operators/within.h index 7fcb430910..b9921a7352 100644 --- a/src/operators/within.h +++ b/src/operators/within.h @@ -34,7 +34,7 @@ class Within : public Operator { m_couldContainsMacro = true; } bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, std::shared_ptr ruleMessage) override; + const std::string &str, RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/parser/driver.cc b/src/parser/driver.cc index c8d15b48af..be63b43482 100644 --- a/src/parser/driver.cc +++ b/src/parser/driver.cc @@ -81,7 +81,7 @@ int Driver::addSecRule(std::unique_ptr r) { } /* is it a chained rule? */ - if (m_lastRule != nullptr && m_lastRule->isChained()) { + if (m_lastRule != nullptr && m_lastRule->hasChainAction()) { r->setPhase(m_lastRule->getPhase()); if (r->hasDisruptiveAction()) { m_parserError << "Disruptive actions can only be specified by"; @@ -91,6 +91,74 @@ int Driver::addSecRule(std::unique_ptr r) { m_lastRule->m_chainedRuleChild = std::move(r); m_lastRule->m_chainedRuleChild->m_chainedRuleParent = m_lastRule; m_lastRule = m_lastRule->m_chainedRuleChild.get(); + + /* Lets set all meta-data to the first rule */ + RuleWithActions *firstRule = m_lastRule; + if (!firstRule->hasChainAction()) { + while (firstRule->m_chainedRuleParent != nullptr) { + if (firstRule->hasMessageAction()) { + firstRule->m_chainedRuleParent->setMessageAction( + firstRule->getMessageAction() + ); + firstRule->setMessageAction(nullptr); + } + if (firstRule->hasLogDataAction()) { + firstRule->m_chainedRuleParent->setLogDataAction( + firstRule->getLogDataAction() + ); + firstRule->setLogDataAction(nullptr); + } + if (firstRule->hasSeverityAction()) { + firstRule->m_chainedRuleParent->setSeverity( + firstRule->getSeverity() + ); + } + if (firstRule->hasRevisionAction()) { + firstRule->m_chainedRuleParent->setRevision( + firstRule->getRevision() + ); + } + if (firstRule->hasVersionAction()) { + firstRule->m_chainedRuleParent->setVersion( + firstRule->getVersion() + ); + } + if (firstRule->hasAccuracyAction()) { + firstRule->m_chainedRuleParent->setAccuracy( + firstRule->getAccuracy() + ); + } + if (firstRule->hasMaturityAction()) { + firstRule->m_chainedRuleParent->setMaturity( + firstRule->getMaturity() + ); + } + + if (firstRule->hasTagAction()) { + firstRule->m_chainedRuleParent->setTags( + firstRule->getTagsAction() + ); + firstRule->cleanTags(); + } + + if (firstRule->hasDisruptiveAction()) { + firstRule->m_chainedRuleParent->setDisruptiveAction( + firstRule->getDisruptiveAction() + ); + firstRule->setDisruptiveAction(nullptr); + } + firstRule->m_chainedRuleParent->setHasBlockAction( + firstRule->hasBlockAction() + ); + firstRule->m_chainedRuleParent->setHasLogAction( + firstRule->hasLogAction() + ); + firstRule->m_chainedRuleParent->setHasLogAction( + firstRule->hasNoLogAction() + ); + firstRule = firstRule->m_chainedRuleParent; + } + } return true; } @@ -119,6 +187,7 @@ int Driver::addSecRule(std::unique_ptr r) { } m_lastRule = rule.get(); + m_rulesSetPhases.insert(rule); return true; diff --git a/src/parser/location.hh b/src/parser/location.hh index 314b0693a1..3f87b6b7d8 100644 --- a/src/parser/location.hh +++ b/src/parser/location.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Locations for Bison parsers in C++ @@ -60,13 +60,11 @@ namespace yy { class position { public: - /// Type for file name. - typedef const std::string filename_type; /// Type for line and column numbers. typedef int counter_type; /// Construct a position. - explicit position (filename_type* f = YY_NULLPTR, + explicit position (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) : filename (f) @@ -76,7 +74,7 @@ namespace yy { /// Initialization. - void initialize (filename_type* fn = YY_NULLPTR, + void initialize (std::string* fn = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -105,7 +103,7 @@ namespace yy { /** \} */ /// File name to which this position refers. - filename_type* filename; + std::string* filename; /// Current line number. counter_type line; /// Current column number. @@ -148,6 +146,24 @@ namespace yy { return res -= width; } + /// Compare two position objects. + inline bool + operator== (const position& pos1, const position& pos2) + { + return (pos1.line == pos2.line + && pos1.column == pos2.column + && (pos1.filename == pos2.filename + || (pos1.filename && pos2.filename + && *pos1.filename == *pos2.filename))); + } + + /// Compare two position objects. + inline bool + operator!= (const position& pos1, const position& pos2) + { + return !(pos1 == pos2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param pos a reference to the position to redirect @@ -165,8 +181,6 @@ namespace yy { class location { public: - /// Type for file name. - typedef position::filename_type filename_type; /// Type for line and column numbers. typedef position::counter_type counter_type; @@ -183,7 +197,7 @@ namespace yy { {} /// Construct a 0-width location in \a f, \a l, \a c. - explicit location (filename_type* f, + explicit location (std::string* f, counter_type l = 1, counter_type c = 1) : begin (f, l, c) @@ -192,7 +206,7 @@ namespace yy { /// Initialization. - void initialize (filename_type* f = YY_NULLPTR, + void initialize (std::string* f = YY_NULLPTR, counter_type l = 1, counter_type c = 1) { @@ -274,6 +288,20 @@ namespace yy { return res -= width; } + /// Compare two location objects. + inline bool + operator== (const location& loc1, const location& loc2) + { + return loc1.begin == loc2.begin && loc1.end == loc2.end; + } + + /// Compare two location objects. + inline bool + operator!= (const location& loc1, const location& loc2) + { + return !(loc1 == loc2); + } + /** \brief Intercept output stream redirection. ** \param ostr the destination output stream ** \param loc a reference to the location to redirect @@ -299,6 +327,6 @@ namespace yy { } } // yy -#line 303 "location.hh" +#line 331 "location.hh" #endif // !YY_YY_LOCATION_HH_INCLUDED diff --git a/src/parser/position.hh b/src/parser/position.hh index 037a25d381..bf34c1c57a 100644 --- a/src/parser/position.hh +++ b/src/parser/position.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined in "location.hh". diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index 67fbc4972e..b3e76941db 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton implementation for Bison LALR(1) parsers in C++ @@ -30,9 +30,8 @@ // This special exception was added by the Free Software Foundation in // version 2.2 of Bison. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. @@ -46,7 +45,7 @@ #include "src/parser/driver.h" -#line 50 "seclang-parser.cc" +#line 49 "seclang-parser.cc" #ifndef YY_ @@ -61,7 +60,6 @@ # endif #endif - // Whether we are compiled with exception support. #ifndef YY_EXCEPTIONS # if defined __GNUC__ && !defined __EXCEPTIONS @@ -117,7 +115,7 @@ # define YY_STACK_PRINT() \ do { \ if (yydebug_) \ - yy_stack_print_ (); \ + yystack_print_ (); \ } while (false) #else // !YYDEBUG @@ -138,7 +136,49 @@ #define YYRECOVERING() (!!yyerrstatus_) namespace yy { -#line 142 "seclang-parser.cc" +#line 140 "seclang-parser.cc" + + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + seclang_parser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + /// Build a parser object. seclang_parser::seclang_parser (modsecurity::Parser::Driver& driver_yyarg) @@ -158,7 +198,7 @@ namespace yy { {} /*---------------. - | symbol kinds. | + | Symbol types. | `---------------*/ @@ -189,13 +229,13 @@ namespace yy { : state (s) {} - seclang_parser::symbol_kind_type - seclang_parser::by_state::kind () const YY_NOEXCEPT + seclang_parser::symbol_number_type + seclang_parser::by_state::type_get () const YY_NOEXCEPT { if (state == empty_state) - return symbol_kind::S_YYEMPTY; + return empty_symbol; else - return YY_CAST (symbol_kind_type, yystos_[+state]); + return yystos_[+state]; } seclang_parser::stack_symbol_type::stack_symbol_type () @@ -204,235 +244,235 @@ namespace yy { seclang_parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that) : super_type (YY_MOVE (that.state), YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.YY_MOVE_OR_COPY< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.YY_MOVE_OR_COPY< std::unique_ptr > > > (YY_MOVE (that.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.YY_MOVE_OR_COPY< std::unique_ptr > > > (YY_MOVE (that.value)); break; @@ -449,235 +489,235 @@ namespace yy { seclang_parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that) : super_type (s, YY_MOVE (that.location)) { - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.move< std::string > (YY_MOVE (that.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.move< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.move< std::unique_ptr > > > (YY_MOVE (that.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.move< std::unique_ptr > > > (YY_MOVE (that.value)); break; @@ -686,7 +726,7 @@ namespace yy { } // that is emptied. - that.kind_ = symbol_kind::S_YYEMPTY; + that.type = empty_symbol; } #if YY_CPLUSPLUS < 201103L @@ -694,235 +734,235 @@ namespace yy { seclang_parser::stack_symbol_type::operator= (const stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.copy< std::string > (that.value); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_var: // var + case 356: // var value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.copy< std::unique_ptr > (that.value); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.copy< std::unique_ptr > > > (that.value); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.copy< std::unique_ptr > > > (that.value); break; @@ -938,235 +978,235 @@ namespace yy { seclang_parser::stack_symbol_type::operator= (stack_symbol_type& that) { state = that.state; - switch (that.kind ()) + switch (that.type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.move< std::string > (that.value); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_var: // var + case 356: // var value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.move< std::unique_ptr > (that.value); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.move< std::unique_ptr > > > (that.value); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.move< std::unique_ptr > > > (that.value); break; @@ -1192,21 +1232,23 @@ namespace yy { #if YYDEBUG template void - seclang_parser::yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const + seclang_parser::yy_print_ (std::ostream& yyo, + const basic_symbol& yysym) const { std::ostream& yyoutput = yyo; YYUSE (yyoutput); + symbol_number_type yytype = yysym.type_get (); +#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408 + // Avoid a (spurious) G++ 4.8 warning about "array subscript is + // below array bounds". if (yysym.empty ()) - yyo << "empty symbol"; - else - { - symbol_kind_type yykind = yysym.kind (); - yyo << (yykind < YYNTOKENS ? "token" : "nterm") - << ' ' << yysym.name () << " (" - << yysym.location << ": "; - YYUSE (yykind); - yyo << ')'; - } + std::abort (); +#endif + yyo << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << yysym.location << ": "; + YYUSE (yytype); + yyo << ')'; } #endif @@ -1265,11 +1307,11 @@ namespace yy { seclang_parser::state_type seclang_parser::yy_lr_goto_state_ (state_type yystate, int yysym) { - int yyr = yypgoto_[yysym - YYNTOKENS] + yystate; + int yyr = yypgoto_[yysym - yyntokens_] + yystate; if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) return yytable_[yyr]; else - return yydefgoto_[yysym - YYNTOKENS]; + return yydefgoto_[yysym - yyntokens_]; } bool @@ -1324,7 +1366,7 @@ namespace yy { yyla.location.begin.filename = yyla.location.end.filename = new std::string(driver.file); } -#line 1328 "seclang-parser.cc" +#line 1370 "seclang-parser.cc" /* Initialize the stack. The initial state will be set in @@ -1339,7 +1381,6 @@ namespace yy { `-----------------------------------------------*/ yynewstate: YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; - YY_STACK_PRINT (); // Accept? if (yystack_[0].state == yyfinal_) @@ -1360,7 +1401,7 @@ namespace yy { // Read a lookahead token. if (yyla.empty ()) { - YYCDEBUG << "Reading a token\n"; + YYCDEBUG << "Reading a token: "; #if YY_EXCEPTIONS try #endif // YY_EXCEPTIONS @@ -1379,20 +1420,10 @@ namespace yy { } YY_SYMBOL_PRINT ("Next token is", yyla); - if (yyla.kind () == symbol_kind::S_YYerror) - { - // The scanner already issued an error message, process directly - // to error recovery. But do not keep the error token as - // lookahead, it is too special and may lead us to an endless - // loop in error recovery. */ - yyla.kind_ = symbol_kind::S_YYUNDEF; - goto yyerrlab1; - } - /* If the proper action on seeing token YYLA.TYPE is to reduce or to detect an error, take that action. */ - yyn += yyla.kind (); - if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ()) + yyn += yyla.type_get (); + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ()) { goto yydefault; } @@ -1439,233 +1470,233 @@ namespace yy { when using variants. */ switch (yyr1_[yyn]) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" yylhs.value.emplace< std::string > (); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_var: // var + case 356: // var yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action yylhs.value.emplace< std::unique_ptr > (); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted yylhs.value.emplace< std::unique_ptr > > > (); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted yylhs.value.emplace< std::unique_ptr > > > (); break; @@ -1689,230 +1720,230 @@ namespace yy { { switch (yyn) { - case 2: // input: "end of file" + case 2: #line 713 "seclang-parser.yy" { return 0; } -#line 1698 "seclang-parser.cc" +#line 1729 "seclang-parser.cc" break; - case 6: // audit_log: "CONFIG_DIR_AUDIT_DIR_MOD" + case 6: #line 726 "seclang-parser.yy" { driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } -#line 1706 "seclang-parser.cc" +#line 1737 "seclang-parser.cc" break; - case 7: // audit_log: "CONFIG_DIR_AUDIT_DIR" + case 7: #line 732 "seclang-parser.yy" { driver.m_auditLog->setStorageDir(yystack_[0].value.as < std::string > ()); } -#line 1714 "seclang-parser.cc" +#line 1745 "seclang-parser.cc" break; - case 8: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_RELEVANT_ONLY" + case 8: #line 738 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus); } -#line 1722 "seclang-parser.cc" +#line 1753 "seclang-parser.cc" break; - case 9: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_OFF" + case 9: #line 742 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus); } -#line 1730 "seclang-parser.cc" +#line 1761 "seclang-parser.cc" break; - case 10: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_ON" + case 10: #line 746 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus); } -#line 1738 "seclang-parser.cc" +#line 1769 "seclang-parser.cc" break; - case 11: // audit_log: "CONFIG_DIR_AUDIT_FLE_MOD" + case 11: #line 752 "seclang-parser.yy" { driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } -#line 1746 "seclang-parser.cc" +#line 1777 "seclang-parser.cc" break; - case 12: // audit_log: "CONFIG_DIR_AUDIT_LOG2" + case 12: #line 758 "seclang-parser.yy" { driver.m_auditLog->setFilePath2(yystack_[0].value.as < std::string > ()); } -#line 1754 "seclang-parser.cc" +#line 1785 "seclang-parser.cc" break; - case 13: // audit_log: "CONFIG_DIR_AUDIT_LOG_P" + case 13: #line 764 "seclang-parser.yy" { driver.m_auditLog->setParts(yystack_[0].value.as < std::string > ()); } -#line 1762 "seclang-parser.cc" +#line 1793 "seclang-parser.cc" break; - case 14: // audit_log: "CONFIG_DIR_AUDIT_LOG" + case 14: #line 770 "seclang-parser.yy" { driver.m_auditLog->setFilePath1(yystack_[0].value.as < std::string > ()); } -#line 1770 "seclang-parser.cc" +#line 1801 "seclang-parser.cc" break; - case 15: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT JSON + case 15: #line 775 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::JSONAuditLogFormat); } -#line 1778 "seclang-parser.cc" +#line 1809 "seclang-parser.cc" break; - case 16: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT NATIVE + case 16: #line 780 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::NativeAuditLogFormat); } -#line 1786 "seclang-parser.cc" +#line 1817 "seclang-parser.cc" break; - case 17: // audit_log: "CONFIG_DIR_AUDIT_STS" + case 17: #line 786 "seclang-parser.yy" { std::string relevant_status(yystack_[0].value.as < std::string > ()); driver.m_auditLog->setRelevantStatus(relevant_status); } -#line 1795 "seclang-parser.cc" +#line 1826 "seclang-parser.cc" break; - case 18: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_SERIAL" + case 18: #line 793 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType); } -#line 1803 "seclang-parser.cc" +#line 1834 "seclang-parser.cc" break; - case 19: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_PARALLEL" + case 19: #line 797 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType); } -#line 1811 "seclang-parser.cc" +#line 1842 "seclang-parser.cc" break; - case 20: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_HTTPS" + case 20: #line 801 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType); } -#line 1819 "seclang-parser.cc" +#line 1850 "seclang-parser.cc" break; - case 21: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_ON" + case 21: #line 807 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 1827 "seclang-parser.cc" +#line 1858 "seclang-parser.cc" break; - case 22: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_OFF" + case 22: #line 811 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 1835 "seclang-parser.cc" +#line 1866 "seclang-parser.cc" break; - case 23: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_RELEVANT_ONLY" + case 23: #line 815 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecUploadKeepFiles RelevantOnly is not currently supported. Accepted values are On or Off"); YYERROR; } -#line 1844 "seclang-parser.cc" +#line 1875 "seclang-parser.cc" break; - case 24: // audit_log: "CONFIG_UPLOAD_FILE_LIMIT" + case 24: #line 820 "seclang-parser.yy" { driver.m_uploadFileLimit.m_set = true; driver.m_uploadFileLimit.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 10); } -#line 1853 "seclang-parser.cc" +#line 1884 "seclang-parser.cc" break; - case 25: // audit_log: "CONFIG_UPLOAD_FILE_MODE" + case 25: #line 825 "seclang-parser.yy" { driver.m_uploadFileMode.m_set = true; driver.m_uploadFileMode.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8); } -#line 1862 "seclang-parser.cc" +#line 1893 "seclang-parser.cc" break; - case 26: // audit_log: "CONFIG_UPLOAD_DIR" + case 26: #line 830 "seclang-parser.yy" { driver.m_uploadDirectory.m_set = true; driver.m_uploadDirectory.m_value = yystack_[0].value.as < std::string > (); } -#line 1871 "seclang-parser.cc" +#line 1902 "seclang-parser.cc" break; - case 27: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_ON" + case 27: #line 835 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 1879 "seclang-parser.cc" +#line 1910 "seclang-parser.cc" break; - case 28: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_OFF" + case 28: #line 839 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 1887 "seclang-parser.cc" +#line 1918 "seclang-parser.cc" break; - case 29: // actions: "QUOTATION_MARK" actions_may_quoted "QUOTATION_MARK" + case 29: #line 846 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } -#line 1895 "seclang-parser.cc" +#line 1926 "seclang-parser.cc" break; - case 30: // actions: actions_may_quoted + case 30: #line 850 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } -#line 1903 "seclang-parser.cc" +#line 1934 "seclang-parser.cc" break; - case 31: // actions_may_quoted: actions_may_quoted "," act + case 31: #line 857 "seclang-parser.yy" { ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[3].location) yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[2].value.as < std::unique_ptr > > > ()); } -#line 1913 "seclang-parser.cc" +#line 1944 "seclang-parser.cc" break; - case 32: // actions_may_quoted: act + case 32: #line 863 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); @@ -1920,10 +1951,10 @@ namespace yy { b->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 1924 "seclang-parser.cc" +#line 1955 "seclang-parser.cc" break; - case 33: // op: op_before_init + case 33: #line 873 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); @@ -1933,10 +1964,10 @@ namespace yy { YYERROR; } } -#line 1937 "seclang-parser.cc" +#line 1968 "seclang-parser.cc" break; - case 34: // op: "NOT" op_before_init + case 34: #line 882 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); @@ -1947,10 +1978,10 @@ namespace yy { YYERROR; } } -#line 1951 "seclang-parser.cc" +#line 1982 "seclang-parser.cc" break; - case 35: // op: run_time_string + case 35: #line 892 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); @@ -1960,10 +1991,10 @@ namespace yy { YYERROR; } } -#line 1964 "seclang-parser.cc" +#line 1995 "seclang-parser.cc" break; - case 36: // op: "NOT" run_time_string + case 36: #line 901 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); @@ -1974,301 +2005,301 @@ namespace yy { YYERROR; } } -#line 1978 "seclang-parser.cc" +#line 2009 "seclang-parser.cc" break; - case 37: // op_before_init: "OPERATOR_UNCONDITIONAL_MATCH" + case 37: #line 914 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::UnconditionalMatch()); } -#line 1986 "seclang-parser.cc" +#line 2017 "seclang-parser.cc" break; - case 38: // op_before_init: "OPERATOR_DETECT_SQLI" + case 38: #line 918 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectSQLi()); } -#line 1994 "seclang-parser.cc" +#line 2025 "seclang-parser.cc" break; - case 39: // op_before_init: "OPERATOR_DETECT_XSS" + case 39: #line 922 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectXSS()); } -#line 2002 "seclang-parser.cc" +#line 2033 "seclang-parser.cc" break; - case 40: // op_before_init: "OPERATOR_VALIDATE_URL_ENCODING" + case 40: #line 926 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUrlEncoding()); } -#line 2010 "seclang-parser.cc" +#line 2041 "seclang-parser.cc" break; - case 41: // op_before_init: "OPERATOR_VALIDATE_UTF8_ENCODING" + case 41: #line 930 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUtf8Encoding()); } -#line 2018 "seclang-parser.cc" +#line 2049 "seclang-parser.cc" break; - case 42: // op_before_init: "OPERATOR_INSPECT_FILE" run_time_string + case 42: #line 934 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::InspectFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2026 "seclang-parser.cc" +#line 2057 "seclang-parser.cc" break; - case 43: // op_before_init: "OPERATOR_FUZZY_HASH" run_time_string + case 43: #line 938 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::FuzzyHash(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2034 "seclang-parser.cc" +#line 2065 "seclang-parser.cc" break; - case 44: // op_before_init: "OPERATOR_VALIDATE_BYTE_RANGE" run_time_string + case 44: #line 942 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateByteRange(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2042 "seclang-parser.cc" +#line 2073 "seclang-parser.cc" break; - case 45: // op_before_init: "OPERATOR_VALIDATE_DTD" run_time_string + case 45: #line 946 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateDTD(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2050 "seclang-parser.cc" +#line 2081 "seclang-parser.cc" break; - case 46: // op_before_init: "OPERATOR_VALIDATE_HASH" run_time_string + case 46: #line 950 "seclang-parser.yy" { /* $$ = new operators::ValidateHash($1); */ OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location); } -#line 2059 "seclang-parser.cc" +#line 2090 "seclang-parser.cc" break; - case 47: // op_before_init: "OPERATOR_VALIDATE_SCHEMA" run_time_string + case 47: #line 955 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateSchema(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2067 "seclang-parser.cc" +#line 2098 "seclang-parser.cc" break; - case 48: // op_before_init: "OPERATOR_VERIFY_CC" run_time_string + case 48: #line 959 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2075 "seclang-parser.cc" +#line 2106 "seclang-parser.cc" break; - case 49: // op_before_init: "OPERATOR_VERIFY_CPF" run_time_string + case 49: #line 963 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCPF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2083 "seclang-parser.cc" +#line 2114 "seclang-parser.cc" break; - case 50: // op_before_init: "OPERATOR_VERIFY_SSN" run_time_string + case 50: #line 967 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySSN(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2091 "seclang-parser.cc" +#line 2122 "seclang-parser.cc" break; - case 51: // op_before_init: "OPERATOR_VERIFY_SVNR" run_time_string + case 51: #line 971 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySVNR(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2099 "seclang-parser.cc" +#line 2130 "seclang-parser.cc" break; - case 52: // op_before_init: "OPERATOR_GSB_LOOKUP" run_time_string + case 52: #line 975 "seclang-parser.yy" { /* $$ = new operators::GsbLookup($1); */ OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location); } -#line 2108 "seclang-parser.cc" +#line 2139 "seclang-parser.cc" break; - case 53: // op_before_init: "OPERATOR_RSUB" run_time_string + case 53: #line 980 "seclang-parser.yy" { /* $$ = new operators::Rsub($1); */ OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location); } -#line 2117 "seclang-parser.cc" +#line 2148 "seclang-parser.cc" break; - case 54: // op_before_init: "OPERATOR_WITHIN" run_time_string + case 54: #line 985 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Within(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2125 "seclang-parser.cc" +#line 2156 "seclang-parser.cc" break; - case 55: // op_before_init: "OPERATOR_CONTAINS_WORD" run_time_string + case 55: #line 989 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ContainsWord(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2133 "seclang-parser.cc" +#line 2164 "seclang-parser.cc" break; - case 56: // op_before_init: "OPERATOR_CONTAINS" run_time_string + case 56: #line 993 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Contains(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2141 "seclang-parser.cc" +#line 2172 "seclang-parser.cc" break; - case 57: // op_before_init: "OPERATOR_ENDS_WITH" run_time_string + case 57: #line 997 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::EndsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2149 "seclang-parser.cc" +#line 2180 "seclang-parser.cc" break; - case 58: // op_before_init: "OPERATOR_EQ" run_time_string + case 58: #line 1001 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Eq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2157 "seclang-parser.cc" +#line 2188 "seclang-parser.cc" break; - case 59: // op_before_init: "OPERATOR_GE" run_time_string + case 59: #line 1005 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Ge(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2165 "seclang-parser.cc" +#line 2196 "seclang-parser.cc" break; - case 60: // op_before_init: "OPERATOR_GT" run_time_string + case 60: #line 1009 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Gt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2173 "seclang-parser.cc" +#line 2204 "seclang-parser.cc" break; - case 61: // op_before_init: "OPERATOR_IP_MATCH_FROM_FILE" run_time_string + case 61: #line 1013 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatchF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2181 "seclang-parser.cc" +#line 2212 "seclang-parser.cc" break; - case 62: // op_before_init: "OPERATOR_IP_MATCH" run_time_string + case 62: #line 1017 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2189 "seclang-parser.cc" +#line 2220 "seclang-parser.cc" break; - case 63: // op_before_init: "OPERATOR_LE" run_time_string + case 63: #line 1021 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Le(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2197 "seclang-parser.cc" +#line 2228 "seclang-parser.cc" break; - case 64: // op_before_init: "OPERATOR_LT" run_time_string + case 64: #line 1025 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Lt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2205 "seclang-parser.cc" +#line 2236 "seclang-parser.cc" break; - case 65: // op_before_init: "OPERATOR_PM_FROM_FILE" run_time_string + case 65: #line 1029 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::PmFromFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2213 "seclang-parser.cc" +#line 2244 "seclang-parser.cc" break; - case 66: // op_before_init: "OPERATOR_PM" run_time_string + case 66: #line 1033 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Pm(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2221 "seclang-parser.cc" +#line 2252 "seclang-parser.cc" break; - case 67: // op_before_init: "OPERATOR_RBL" run_time_string + case 67: #line 1037 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rbl(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2229 "seclang-parser.cc" +#line 2260 "seclang-parser.cc" break; - case 68: // op_before_init: "OPERATOR_RX" run_time_string + case 68: #line 1041 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2237 "seclang-parser.cc" +#line 2268 "seclang-parser.cc" break; - case 69: // op_before_init: "OPERATOR_RX_GLOBAL" run_time_string + case 69: #line 1045 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::RxGlobal(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2245 "seclang-parser.cc" +#line 2276 "seclang-parser.cc" break; - case 70: // op_before_init: "OPERATOR_STR_EQ" run_time_string + case 70: #line 1049 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrEq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2253 "seclang-parser.cc" +#line 2284 "seclang-parser.cc" break; - case 71: // op_before_init: "OPERATOR_STR_MATCH" run_time_string + case 71: #line 1053 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2261 "seclang-parser.cc" +#line 2292 "seclang-parser.cc" break; - case 72: // op_before_init: "OPERATOR_BEGINS_WITH" run_time_string + case 72: #line 1057 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::BeginsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 2269 "seclang-parser.cc" +#line 2300 "seclang-parser.cc" break; - case 73: // op_before_init: "OPERATOR_GEOLOOKUP" + case 73: #line 1061 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) @@ -2280,17 +2311,19 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 2284 "seclang-parser.cc" +#line 2315 "seclang-parser.cc" break; - case 75: // expression: "DIRECTIVE" variables op actions + case 75: #line 1076 "seclang-parser.yy" { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *yystack_[0].value.as < std::unique_ptr > > > ().get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -2314,11 +2347,11 @@ namespace yy { YYERROR; } } -#line 2318 "seclang-parser.cc" +#line 2351 "seclang-parser.cc" break; - case 76: // expression: "DIRECTIVE" variables op -#line 1106 "seclang-parser.yy" + case 76: +#line 1108 "seclang-parser.yy" { variables::Variables *v = new variables::Variables(); for (auto &i : *yystack_[1].value.as < std::unique_ptr > > > ().get()) { @@ -2337,17 +2370,19 @@ namespace yy { YYERROR; } } -#line 2341 "seclang-parser.cc" +#line 2374 "seclang-parser.cc" break; - case 77: // expression: "CONFIG_DIR_SEC_ACTION" actions -#line 1125 "seclang-parser.yy" + case 77: +#line 1127 "seclang-parser.yy" { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *yystack_[0].value.as < std::unique_ptr > > > ().get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -2360,18 +2395,20 @@ namespace yy { )); driver.addSecAction(std::move(rule)); } -#line 2364 "seclang-parser.cc" +#line 2399 "seclang-parser.cc" break; - case 78: // expression: "DIRECTIVE_SECRULESCRIPT" actions -#line 1144 "seclang-parser.yy" + case 78: +#line 1148 "seclang-parser.yy" { std::string err; std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *yystack_[0].value.as < std::unique_ptr > > > ().get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -2392,11 +2429,11 @@ namespace yy { YYERROR; } } -#line 2396 "seclang-parser.cc" +#line 2433 "seclang-parser.cc" break; - case 79: // expression: "CONFIG_DIR_SEC_DEFAULT_ACTION" actions -#line 1172 "seclang-parser.yy" + case 79: +#line 1178 "seclang-parser.yy" { bool hasDisruptive = false; std::vector *actions = new std::vector(); @@ -2447,84 +2484,89 @@ namespace yy { } for (actions::Action *a : checkedActions) { - driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back( - std::unique_ptr(a)); + if (dynamic_cast(a)) { + driver.m_rulesSetPhases[definedPhase]->m_defaultTransformations.push_back( + std::shared_ptr( + dynamic_cast(a))); + } else { + driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back(std::unique_ptr(a)); + } } delete actions; } -#line 2457 "seclang-parser.cc" +#line 2499 "seclang-parser.cc" break; - case 80: // expression: "CONFIG_DIR_SEC_MARKER" -#line 1229 "seclang-parser.yy" + case 80: +#line 1240 "seclang-parser.yy" { driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as < std::string > ()), /* file name */ std::unique_ptr(new std::string(*yystack_[0].location.end.filename)), /* line number */ yystack_[0].location.end.line ); } -#line 2468 "seclang-parser.cc" +#line 2510 "seclang-parser.cc" break; - case 81: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_OFF" -#line 1236 "seclang-parser.yy" + case 81: +#line 1247 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DisabledRuleEngine; } -#line 2476 "seclang-parser.cc" +#line 2518 "seclang-parser.cc" break; - case 82: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_ON" -#line 1240 "seclang-parser.yy" + case 82: +#line 1251 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::EnabledRuleEngine; } -#line 2484 "seclang-parser.cc" +#line 2526 "seclang-parser.cc" break; - case 83: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_DETC" -#line 1244 "seclang-parser.yy" + case 83: +#line 1255 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DetectionOnlyRuleEngine; } -#line 2492 "seclang-parser.cc" +#line 2534 "seclang-parser.cc" break; - case 84: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_ON" -#line 1248 "seclang-parser.yy" + case 84: +#line 1259 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2500 "seclang-parser.cc" +#line 2542 "seclang-parser.cc" break; - case 85: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_OFF" -#line 1252 "seclang-parser.yy" + case 85: +#line 1263 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2508 "seclang-parser.cc" +#line 2550 "seclang-parser.cc" break; - case 86: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_ON" -#line 1256 "seclang-parser.yy" + case 86: +#line 1267 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2516 "seclang-parser.cc" +#line 2558 "seclang-parser.cc" break; - case 87: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_OFF" -#line 1260 "seclang-parser.yy" + case 87: +#line 1271 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2524 "seclang-parser.cc" +#line 2566 "seclang-parser.cc" break; - case 88: // expression: "CONFIG_SEC_ARGUMENT_SEPARATOR" -#line 1264 "seclang-parser.yy" + case 88: +#line 1275 "seclang-parser.yy" { if (yystack_[0].value.as < std::string > ().length() != 1) { driver.error(yystack_[1].location, "Argument separator should be set to a single character."); @@ -2533,259 +2575,259 @@ namespace yy { driver.m_secArgumentSeparator.m_value = yystack_[0].value.as < std::string > (); driver.m_secArgumentSeparator.m_set = true; } -#line 2537 "seclang-parser.cc" +#line 2579 "seclang-parser.cc" break; - case 89: // expression: "CONFIG_COMPONENT_SIG" -#line 1273 "seclang-parser.yy" + case 89: +#line 1284 "seclang-parser.yy" { driver.m_components.push_back(yystack_[0].value.as < std::string > ()); } -#line 2545 "seclang-parser.cc" +#line 2587 "seclang-parser.cc" break; - case 90: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_ON" -#line 1277 "seclang-parser.yy" + case 90: +#line 1288 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecConnEngine is not yet supported."); YYERROR; } -#line 2554 "seclang-parser.cc" +#line 2596 "seclang-parser.cc" break; - case 91: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_OFF" -#line 1282 "seclang-parser.yy" + case 91: +#line 1293 "seclang-parser.yy" { } -#line 2561 "seclang-parser.cc" +#line 2603 "seclang-parser.cc" break; - case 92: // expression: "CONFIG_SEC_WEB_APP_ID" -#line 1285 "seclang-parser.yy" + case 92: +#line 1296 "seclang-parser.yy" { driver.m_secWebAppId.m_value = yystack_[0].value.as < std::string > (); driver.m_secWebAppId.m_set = true; } -#line 2570 "seclang-parser.cc" +#line 2612 "seclang-parser.cc" break; - case 93: // expression: "CONFIG_SEC_SERVER_SIG" -#line 1290 "seclang-parser.yy" + case 93: +#line 1301 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecServerSignature is not supported."); YYERROR; } -#line 2579 "seclang-parser.cc" +#line 2621 "seclang-parser.cc" break; - case 94: // expression: "CONFIG_SEC_CACHE_TRANSFORMATIONS" -#line 1295 "seclang-parser.yy" + case 94: +#line 1306 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCacheTransformations is not supported."); YYERROR; } -#line 2588 "seclang-parser.cc" +#line 2630 "seclang-parser.cc" break; - case 95: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_ON" -#line 1300 "seclang-parser.yy" + case 95: +#line 1311 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecDisableBackendCompression is not supported."); YYERROR; } -#line 2597 "seclang-parser.cc" +#line 2639 "seclang-parser.cc" break; - case 96: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_OFF" -#line 1305 "seclang-parser.yy" + case 96: +#line 1316 "seclang-parser.yy" { } -#line 2604 "seclang-parser.cc" +#line 2646 "seclang-parser.cc" break; - case 97: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_ON" -#line 1308 "seclang-parser.yy" + case 97: +#line 1319 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecContentInjection is not yet supported."); YYERROR; } -#line 2613 "seclang-parser.cc" +#line 2655 "seclang-parser.cc" break; - case 98: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_OFF" -#line 1313 "seclang-parser.yy" + case 98: +#line 1324 "seclang-parser.yy" { } -#line 2620 "seclang-parser.cc" +#line 2662 "seclang-parser.cc" break; - case 99: // expression: "CONFIG_SEC_CHROOT_DIR" -#line 1316 "seclang-parser.yy" + case 99: +#line 1327 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecChrootDir is not supported."); YYERROR; } -#line 2629 "seclang-parser.cc" +#line 2671 "seclang-parser.cc" break; - case 100: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_ON" -#line 1321 "seclang-parser.yy" + case 100: +#line 1332 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecHashEngine is not yet supported."); YYERROR; } -#line 2638 "seclang-parser.cc" +#line 2680 "seclang-parser.cc" break; - case 101: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_OFF" -#line 1326 "seclang-parser.yy" + case 101: +#line 1337 "seclang-parser.yy" { } -#line 2645 "seclang-parser.cc" +#line 2687 "seclang-parser.cc" break; - case 102: // expression: "CONFIG_SEC_HASH_KEY" -#line 1329 "seclang-parser.yy" + case 102: +#line 1340 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashKey is not yet supported."); YYERROR; } -#line 2654 "seclang-parser.cc" +#line 2696 "seclang-parser.cc" break; - case 103: // expression: "CONFIG_SEC_HASH_PARAM" -#line 1334 "seclang-parser.yy" + case 103: +#line 1345 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashParam is not yet supported."); YYERROR; } -#line 2663 "seclang-parser.cc" +#line 2705 "seclang-parser.cc" break; - case 104: // expression: "CONFIG_SEC_HASH_METHOD_RX" -#line 1339 "seclang-parser.yy" + case 104: +#line 1350 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodRx is not yet supported."); YYERROR; } -#line 2672 "seclang-parser.cc" +#line 2714 "seclang-parser.cc" break; - case 105: // expression: "CONFIG_SEC_HASH_METHOD_PM" -#line 1344 "seclang-parser.yy" + case 105: +#line 1355 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodPm is not yet supported."); YYERROR; } -#line 2681 "seclang-parser.cc" +#line 2723 "seclang-parser.cc" break; - case 106: // expression: "CONFIG_DIR_GSB_DB" -#line 1349 "seclang-parser.yy" + case 106: +#line 1360 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGsbLookupDb is not supported."); YYERROR; } -#line 2690 "seclang-parser.cc" +#line 2732 "seclang-parser.cc" break; - case 107: // expression: "CONFIG_SEC_GUARDIAN_LOG" -#line 1354 "seclang-parser.yy" + case 107: +#line 1365 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGuardianLog is not supported."); YYERROR; } -#line 2699 "seclang-parser.cc" +#line 2741 "seclang-parser.cc" break; - case 108: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_ON" -#line 1359 "seclang-parser.yy" + case 108: +#line 1370 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecInterceptOnError is not yet supported."); YYERROR; } -#line 2708 "seclang-parser.cc" +#line 2750 "seclang-parser.cc" break; - case 109: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_OFF" -#line 1364 "seclang-parser.yy" + case 109: +#line 1375 "seclang-parser.yy" { } -#line 2715 "seclang-parser.cc" +#line 2757 "seclang-parser.cc" break; - case 110: // expression: "CONFIG_SEC_CONN_R_STATE_LIMIT" -#line 1367 "seclang-parser.yy" + case 110: +#line 1378 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnReadStateLimit is not yet supported."); YYERROR; } -#line 2724 "seclang-parser.cc" +#line 2766 "seclang-parser.cc" break; - case 111: // expression: "CONFIG_SEC_CONN_W_STATE_LIMIT" -#line 1372 "seclang-parser.yy" + case 111: +#line 1383 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnWriteStateLimit is not yet supported."); YYERROR; } -#line 2733 "seclang-parser.cc" +#line 2775 "seclang-parser.cc" break; - case 112: // expression: "CONFIG_SEC_SENSOR_ID" -#line 1377 "seclang-parser.yy" + case 112: +#line 1388 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecSensorId is not yet supported."); YYERROR; } -#line 2742 "seclang-parser.cc" +#line 2784 "seclang-parser.cc" break; - case 113: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_ON" -#line 1382 "seclang-parser.yy" + case 113: +#line 1393 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecRuleInheritance is not yet supported."); YYERROR; } -#line 2751 "seclang-parser.cc" +#line 2793 "seclang-parser.cc" break; - case 114: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_OFF" -#line 1387 "seclang-parser.yy" + case 114: +#line 1398 "seclang-parser.yy" { } -#line 2758 "seclang-parser.cc" +#line 2800 "seclang-parser.cc" break; - case 115: // expression: "CONFIG_SEC_RULE_PERF_TIME" -#line 1390 "seclang-parser.yy" + case 115: +#line 1401 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecRulePerfTime is not yet supported."); YYERROR; } -#line 2767 "seclang-parser.cc" +#line 2809 "seclang-parser.cc" break; - case 116: // expression: "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" -#line 1395 "seclang-parser.yy" + case 116: +#line 1406 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamInBodyInspection is not supported."); YYERROR; } -#line 2776 "seclang-parser.cc" +#line 2818 "seclang-parser.cc" break; - case 117: // expression: "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" -#line 1400 "seclang-parser.yy" + case 117: +#line 1411 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamOutBodyInspection is not supported."); YYERROR; } -#line 2785 "seclang-parser.cc" +#line 2827 "seclang-parser.cc" break; - case 118: // expression: "CONFIG_SEC_RULE_REMOVE_BY_ID" -#line 1405 "seclang-parser.yy" + case 118: +#line 1416 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.load(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2798,11 +2840,11 @@ namespace yy { YYERROR; } } -#line 2802 "seclang-parser.cc" +#line 2844 "seclang-parser.cc" break; - case 119: // expression: "CONFIG_SEC_RULE_REMOVE_BY_TAG" -#line 1418 "seclang-parser.yy" + case 119: +#line 1429 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByTag(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2815,11 +2857,11 @@ namespace yy { YYERROR; } } -#line 2819 "seclang-parser.cc" +#line 2861 "seclang-parser.cc" break; - case 120: // expression: "CONFIG_SEC_RULE_REMOVE_BY_MSG" -#line 1431 "seclang-parser.yy" + case 120: +#line 1442 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByMsg(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2832,11 +2874,11 @@ namespace yy { YYERROR; } } -#line 2836 "seclang-parser.cc" +#line 2878 "seclang-parser.cc" break; - case 121: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" variables_pre_process -#line 1444 "seclang-parser.yy" + case 121: +#line 1455 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByTag(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2849,11 +2891,11 @@ namespace yy { YYERROR; } } -#line 2853 "seclang-parser.cc" +#line 2895 "seclang-parser.cc" break; - case 122: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" variables_pre_process -#line 1457 "seclang-parser.yy" + case 122: +#line 1468 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByMsg(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2866,11 +2908,11 @@ namespace yy { YYERROR; } } -#line 2870 "seclang-parser.cc" +#line 2912 "seclang-parser.cc" break; - case 123: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" variables_pre_process -#line 1470 "seclang-parser.yy" + case 123: +#line 1481 "seclang-parser.yy" { std::string error; double ruleId; @@ -2896,11 +2938,11 @@ namespace yy { YYERROR; } } -#line 2900 "seclang-parser.cc" +#line 2942 "seclang-parser.cc" break; - case 124: // expression: "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" actions -#line 1496 "seclang-parser.yy" + case 124: +#line 1507 "seclang-parser.yy" { std::string error; double ruleId; @@ -2927,11 +2969,11 @@ namespace yy { YYERROR; } } -#line 2931 "seclang-parser.cc" +#line 2973 "seclang-parser.cc" break; - case 125: // expression: "CONFIG_DIR_DEBUG_LVL" -#line 1524 "seclang-parser.yy" + case 125: +#line 1535 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { driver.m_debugLog->setDebugLogLevel(atoi(yystack_[0].value.as < std::string > ().c_str())); @@ -2943,11 +2985,11 @@ namespace yy { YYERROR; } } -#line 2947 "seclang-parser.cc" +#line 2989 "seclang-parser.cc" break; - case 126: // expression: "CONFIG_DIR_DEBUG_LOG" -#line 1536 "seclang-parser.yy" + case 126: +#line 1547 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { std::string error; @@ -2966,11 +3008,11 @@ namespace yy { YYERROR; } } -#line 2970 "seclang-parser.cc" +#line 3012 "seclang-parser.cc" break; - case 127: // expression: "CONFIG_DIR_GEO_DB" -#line 1556 "seclang-parser.yy" + case 127: +#line 1567 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) std::string err; @@ -2997,38 +3039,38 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 3001 "seclang-parser.cc" +#line 3043 "seclang-parser.cc" break; - case 128: // expression: "CONFIG_DIR_ARGS_LIMIT" -#line 1583 "seclang-parser.yy" + case 128: +#line 1594 "seclang-parser.yy" { driver.m_argumentsLimit.m_set = true; driver.m_argumentsLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3010 "seclang-parser.cc" +#line 3052 "seclang-parser.cc" break; - case 129: // expression: "CONFIG_DIR_REQ_BODY_LIMIT" -#line 1589 "seclang-parser.yy" + case 129: +#line 1600 "seclang-parser.yy" { driver.m_requestBodyLimit.m_set = true; driver.m_requestBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3019 "seclang-parser.cc" +#line 3061 "seclang-parser.cc" break; - case 130: // expression: "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" -#line 1594 "seclang-parser.yy" + case 130: +#line 1605 "seclang-parser.yy" { driver.m_requestBodyNoFilesLimit.m_set = true; driver.m_requestBodyNoFilesLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3028 "seclang-parser.cc" +#line 3070 "seclang-parser.cc" break; - case 131: // expression: "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" -#line 1599 "seclang-parser.yy" + case 131: +#line 1610 "seclang-parser.yy" { std::stringstream ss; ss << "As of ModSecurity version 3.0, SecRequestBodyInMemoryLimit is no longer "; @@ -3037,68 +3079,68 @@ namespace yy { driver.error(yystack_[1].location, ss.str()); YYERROR; } -#line 3041 "seclang-parser.cc" +#line 3083 "seclang-parser.cc" break; - case 132: // expression: "CONFIG_DIR_RES_BODY_LIMIT" -#line 1608 "seclang-parser.yy" + case 132: +#line 1619 "seclang-parser.yy" { driver.m_responseBodyLimit.m_set = true; driver.m_responseBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3050 "seclang-parser.cc" +#line 3092 "seclang-parser.cc" break; - case 133: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1613 "seclang-parser.yy" + case 133: +#line 1624 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3058 "seclang-parser.cc" +#line 3100 "seclang-parser.cc" break; - case 134: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1617 "seclang-parser.yy" + case 134: +#line 1628 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3066 "seclang-parser.cc" +#line 3108 "seclang-parser.cc" break; - case 135: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1621 "seclang-parser.yy" + case 135: +#line 1632 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3074 "seclang-parser.cc" +#line 3116 "seclang-parser.cc" break; - case 136: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1625 "seclang-parser.yy" + case 136: +#line 1636 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3082 "seclang-parser.cc" +#line 3124 "seclang-parser.cc" break; - case 137: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_ABORT" -#line 1629 "seclang-parser.yy" + case 137: +#line 1640 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction; } -#line 3090 "seclang-parser.cc" +#line 3132 "seclang-parser.cc" break; - case 138: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_WARN" -#line 1633 "seclang-parser.yy" + case 138: +#line 1644 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction; } -#line 3098 "seclang-parser.cc" +#line 3140 "seclang-parser.cc" break; - case 141: // expression: "CONGIG_DIR_RESPONSE_BODY_MP" -#line 1647 "seclang-parser.yy" + case 141: +#line 1658 "seclang-parser.yy" { std::istringstream buf(yystack_[0].value.as < std::string > ()); std::istream_iterator beg(buf), end; @@ -3110,37 +3152,37 @@ namespace yy { driver.m_responseBodyTypeToBeInspected.m_value.insert(*it); } } -#line 3114 "seclang-parser.cc" +#line 3156 "seclang-parser.cc" break; - case 142: // expression: "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" -#line 1659 "seclang-parser.yy" + case 142: +#line 1670 "seclang-parser.yy" { driver.m_responseBodyTypeToBeInspected.m_set = true; driver.m_responseBodyTypeToBeInspected.m_clear = true; driver.m_responseBodyTypeToBeInspected.m_value.clear(); } -#line 3124 "seclang-parser.cc" +#line 3166 "seclang-parser.cc" break; - case 143: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_OFF" -#line 1665 "seclang-parser.yy" + case 143: +#line 1676 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 3132 "seclang-parser.cc" +#line 3174 "seclang-parser.cc" break; - case 144: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_ON" -#line 1669 "seclang-parser.yy" + case 144: +#line 1680 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 3140 "seclang-parser.cc" +#line 3182 "seclang-parser.cc" break; - case 145: // expression: "CONGIG_DIR_SEC_TMP_DIR" -#line 1673 "seclang-parser.yy" + case 145: +#line 1684 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default installations with modsecurity.conf-recommended std::stringstream ss; @@ -3151,31 +3193,31 @@ namespace yy { YYERROR; */ } -#line 3155 "seclang-parser.cc" +#line 3197 "seclang-parser.cc" break; - case 148: // expression: "CONGIG_DIR_SEC_COOKIE_FORMAT" -#line 1694 "seclang-parser.yy" + case 148: +#line 1705 "seclang-parser.yy" { if (atoi(yystack_[0].value.as < std::string > ().c_str()) == 1) { driver.error(yystack_[1].location, "SecCookieFormat 1 is not yet supported."); YYERROR; } } -#line 3166 "seclang-parser.cc" +#line 3208 "seclang-parser.cc" break; - case 149: // expression: "CONFIG_SEC_COOKIEV0_SEPARATOR" -#line 1701 "seclang-parser.yy" + case 149: +#line 1712 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCookieV0Separator is not yet supported."); YYERROR; } -#line 3175 "seclang-parser.cc" +#line 3217 "seclang-parser.cc" break; - case 151: // expression: "CONFIG_DIR_UNICODE_MAP_FILE" -#line 1711 "seclang-parser.yy" + case 151: +#line 1722 "seclang-parser.yy" { std::string error; std::vector param; @@ -3229,31 +3271,31 @@ namespace yy { } } -#line 3233 "seclang-parser.cc" +#line 3275 "seclang-parser.cc" break; - case 152: // expression: "CONFIG_SEC_COLLECTION_TIMEOUT" -#line 1765 "seclang-parser.yy" + case 152: +#line 1776 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default CRS installations with crs-setup.conf-recommended driver.error(@0, "SecCollectionTimeout is not yet supported."); YYERROR; */ } -#line 3244 "seclang-parser.cc" +#line 3286 "seclang-parser.cc" break; - case 153: // expression: "CONFIG_SEC_HTTP_BLKEY" -#line 1772 "seclang-parser.yy" + case 153: +#line 1783 "seclang-parser.yy" { driver.m_httpblKey.m_set = true; driver.m_httpblKey.m_value = yystack_[0].value.as < std::string > (); } -#line 3253 "seclang-parser.cc" +#line 3295 "seclang-parser.cc" break; - case 154: // variables: variables_pre_process -#line 1780 "seclang-parser.yy" + case 154: +#line 1791 "seclang-parser.yy" { std::unique_ptr > > originalList = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); std::unique_ptr>> newList(new std::vector>()); @@ -3287,2371 +3329,2371 @@ namespace yy { } yylhs.value.as < std::unique_ptr > > > () = std::move(newNewList); } -#line 3291 "seclang-parser.cc" +#line 3333 "seclang-parser.cc" break; - case 155: // variables_pre_process: variables_may_be_quoted -#line 1817 "seclang-parser.yy" + case 155: +#line 1828 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } -#line 3299 "seclang-parser.cc" +#line 3341 "seclang-parser.cc" break; - case 156: // variables_pre_process: "QUOTATION_MARK" variables_may_be_quoted "QUOTATION_MARK" -#line 1821 "seclang-parser.yy" + case 156: +#line 1832 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } -#line 3307 "seclang-parser.cc" +#line 3349 "seclang-parser.cc" break; - case 157: // variables_may_be_quoted: variables_may_be_quoted PIPE var -#line 1828 "seclang-parser.yy" + case 157: +#line 1839 "seclang-parser.yy" { yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[2].value.as < std::unique_ptr > > > ()); } -#line 3316 "seclang-parser.cc" +#line 3358 "seclang-parser.cc" break; - case 158: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_EXCLUSION var -#line 1833 "seclang-parser.yy" + case 158: +#line 1844 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[3].value.as < std::unique_ptr > > > ()); } -#line 3326 "seclang-parser.cc" +#line 3368 "seclang-parser.cc" break; - case 159: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_COUNT var -#line 1839 "seclang-parser.yy" + case 159: +#line 1850 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[3].value.as < std::unique_ptr > > > ()); } -#line 3336 "seclang-parser.cc" +#line 3378 "seclang-parser.cc" break; - case 160: // variables_may_be_quoted: var -#line 1845 "seclang-parser.yy" + case 160: +#line 1856 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); b->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3346 "seclang-parser.cc" +#line 3388 "seclang-parser.cc" break; - case 161: // variables_may_be_quoted: VAR_EXCLUSION var -#line 1851 "seclang-parser.yy" + case 161: +#line 1862 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3357 "seclang-parser.cc" +#line 3399 "seclang-parser.cc" break; - case 162: // variables_may_be_quoted: VAR_COUNT var -#line 1858 "seclang-parser.yy" + case 162: +#line 1869 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as < std::unique_ptr > > > () = std::move(b); } -#line 3368 "seclang-parser.cc" +#line 3410 "seclang-parser.cc" break; - case 163: // var: VARIABLE_ARGS "Dictionary element" -#line 1868 "seclang-parser.yy" + case 163: +#line 1879 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3376 "seclang-parser.cc" +#line 3418 "seclang-parser.cc" break; - case 164: // var: VARIABLE_ARGS "Dictionary element, selected by regexp" -#line 1872 "seclang-parser.yy" + case 164: +#line 1883 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3384 "seclang-parser.cc" +#line 3426 "seclang-parser.cc" break; - case 165: // var: VARIABLE_ARGS -#line 1876 "seclang-parser.yy" + case 165: +#line 1887 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_NoDictElement()); } -#line 3392 "seclang-parser.cc" +#line 3434 "seclang-parser.cc" break; - case 166: // var: VARIABLE_ARGS_POST "Dictionary element" -#line 1880 "seclang-parser.yy" + case 166: +#line 1891 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3400 "seclang-parser.cc" +#line 3442 "seclang-parser.cc" break; - case 167: // var: VARIABLE_ARGS_POST "Dictionary element, selected by regexp" -#line 1884 "seclang-parser.yy" + case 167: +#line 1895 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3408 "seclang-parser.cc" +#line 3450 "seclang-parser.cc" break; - case 168: // var: VARIABLE_ARGS_POST -#line 1888 "seclang-parser.yy" + case 168: +#line 1899 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_NoDictElement()); } -#line 3416 "seclang-parser.cc" +#line 3458 "seclang-parser.cc" break; - case 169: // var: VARIABLE_ARGS_GET "Dictionary element" -#line 1892 "seclang-parser.yy" + case 169: +#line 1903 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3424 "seclang-parser.cc" +#line 3466 "seclang-parser.cc" break; - case 170: // var: VARIABLE_ARGS_GET "Dictionary element, selected by regexp" -#line 1896 "seclang-parser.yy" + case 170: +#line 1907 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3432 "seclang-parser.cc" +#line 3474 "seclang-parser.cc" break; - case 171: // var: VARIABLE_ARGS_GET -#line 1900 "seclang-parser.yy" + case 171: +#line 1911 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_NoDictElement()); } -#line 3440 "seclang-parser.cc" +#line 3482 "seclang-parser.cc" break; - case 172: // var: VARIABLE_FILES_SIZES "Dictionary element" -#line 1904 "seclang-parser.yy" + case 172: +#line 1915 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3448 "seclang-parser.cc" +#line 3490 "seclang-parser.cc" break; - case 173: // var: VARIABLE_FILES_SIZES "Dictionary element, selected by regexp" -#line 1908 "seclang-parser.yy" + case 173: +#line 1919 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3456 "seclang-parser.cc" +#line 3498 "seclang-parser.cc" break; - case 174: // var: VARIABLE_FILES_SIZES -#line 1912 "seclang-parser.yy" + case 174: +#line 1923 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_NoDictElement()); } -#line 3464 "seclang-parser.cc" +#line 3506 "seclang-parser.cc" break; - case 175: // var: VARIABLE_FILES_NAMES "Dictionary element" -#line 1916 "seclang-parser.yy" + case 175: +#line 1927 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3472 "seclang-parser.cc" +#line 3514 "seclang-parser.cc" break; - case 176: // var: VARIABLE_FILES_NAMES "Dictionary element, selected by regexp" -#line 1920 "seclang-parser.yy" + case 176: +#line 1931 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3480 "seclang-parser.cc" +#line 3522 "seclang-parser.cc" break; - case 177: // var: VARIABLE_FILES_NAMES -#line 1924 "seclang-parser.yy" + case 177: +#line 1935 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_NoDictElement()); } -#line 3488 "seclang-parser.cc" +#line 3530 "seclang-parser.cc" break; - case 178: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element" -#line 1928 "seclang-parser.yy" + case 178: +#line 1939 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3496 "seclang-parser.cc" +#line 3538 "seclang-parser.cc" break; - case 179: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element, selected by regexp" -#line 1932 "seclang-parser.yy" + case 179: +#line 1943 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3504 "seclang-parser.cc" +#line 3546 "seclang-parser.cc" break; - case 180: // var: VARIABLE_FILES_TMP_CONTENT -#line 1936 "seclang-parser.yy" + case 180: +#line 1947 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_NoDictElement()); } -#line 3512 "seclang-parser.cc" +#line 3554 "seclang-parser.cc" break; - case 181: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element" -#line 1940 "seclang-parser.yy" + case 181: +#line 1951 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3520 "seclang-parser.cc" +#line 3562 "seclang-parser.cc" break; - case 182: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element, selected by regexp" -#line 1944 "seclang-parser.yy" + case 182: +#line 1955 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3528 "seclang-parser.cc" +#line 3570 "seclang-parser.cc" break; - case 183: // var: VARIABLE_MULTIPART_FILENAME -#line 1948 "seclang-parser.yy" + case 183: +#line 1959 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_NoDictElement()); } -#line 3536 "seclang-parser.cc" +#line 3578 "seclang-parser.cc" break; - case 184: // var: VARIABLE_MULTIPART_NAME "Dictionary element" -#line 1952 "seclang-parser.yy" + case 184: +#line 1963 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3544 "seclang-parser.cc" +#line 3586 "seclang-parser.cc" break; - case 185: // var: VARIABLE_MULTIPART_NAME "Dictionary element, selected by regexp" -#line 1956 "seclang-parser.yy" + case 185: +#line 1967 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3552 "seclang-parser.cc" +#line 3594 "seclang-parser.cc" break; - case 186: // var: VARIABLE_MULTIPART_NAME -#line 1960 "seclang-parser.yy" + case 186: +#line 1971 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_NoDictElement()); } -#line 3560 "seclang-parser.cc" +#line 3602 "seclang-parser.cc" break; - case 187: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element" -#line 1964 "seclang-parser.yy" + case 187: +#line 1975 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3568 "seclang-parser.cc" +#line 3610 "seclang-parser.cc" break; - case 188: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element, selected by regexp" -#line 1968 "seclang-parser.yy" + case 188: +#line 1979 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3576 "seclang-parser.cc" +#line 3618 "seclang-parser.cc" break; - case 189: // var: VARIABLE_MATCHED_VARS_NAMES -#line 1972 "seclang-parser.yy" + case 189: +#line 1983 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_NoDictElement()); } -#line 3584 "seclang-parser.cc" +#line 3626 "seclang-parser.cc" break; - case 190: // var: VARIABLE_MATCHED_VARS "Dictionary element" -#line 1976 "seclang-parser.yy" + case 190: +#line 1987 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3592 "seclang-parser.cc" +#line 3634 "seclang-parser.cc" break; - case 191: // var: VARIABLE_MATCHED_VARS "Dictionary element, selected by regexp" -#line 1980 "seclang-parser.yy" + case 191: +#line 1991 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3600 "seclang-parser.cc" +#line 3642 "seclang-parser.cc" break; - case 192: // var: VARIABLE_MATCHED_VARS -#line 1984 "seclang-parser.yy" + case 192: +#line 1995 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_NoDictElement()); } -#line 3608 "seclang-parser.cc" +#line 3650 "seclang-parser.cc" break; - case 193: // var: VARIABLE_FILES "Dictionary element" -#line 1988 "seclang-parser.yy" + case 193: +#line 1999 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3616 "seclang-parser.cc" +#line 3658 "seclang-parser.cc" break; - case 194: // var: VARIABLE_FILES "Dictionary element, selected by regexp" -#line 1992 "seclang-parser.yy" + case 194: +#line 2003 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3624 "seclang-parser.cc" +#line 3666 "seclang-parser.cc" break; - case 195: // var: VARIABLE_FILES -#line 1996 "seclang-parser.yy" + case 195: +#line 2007 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_NoDictElement()); } -#line 3632 "seclang-parser.cc" +#line 3674 "seclang-parser.cc" break; - case 196: // var: VARIABLE_REQUEST_COOKIES "Dictionary element" -#line 2000 "seclang-parser.yy" + case 196: +#line 2011 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3640 "seclang-parser.cc" +#line 3682 "seclang-parser.cc" break; - case 197: // var: VARIABLE_REQUEST_COOKIES "Dictionary element, selected by regexp" -#line 2004 "seclang-parser.yy" + case 197: +#line 2015 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3648 "seclang-parser.cc" +#line 3690 "seclang-parser.cc" break; - case 198: // var: VARIABLE_REQUEST_COOKIES -#line 2008 "seclang-parser.yy" + case 198: +#line 2019 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_NoDictElement()); } -#line 3656 "seclang-parser.cc" +#line 3698 "seclang-parser.cc" break; - case 199: // var: VARIABLE_REQUEST_HEADERS "Dictionary element" -#line 2012 "seclang-parser.yy" + case 199: +#line 2023 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3664 "seclang-parser.cc" +#line 3706 "seclang-parser.cc" break; - case 200: // var: VARIABLE_REQUEST_HEADERS "Dictionary element, selected by regexp" -#line 2016 "seclang-parser.yy" + case 200: +#line 2027 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3672 "seclang-parser.cc" +#line 3714 "seclang-parser.cc" break; - case 201: // var: VARIABLE_REQUEST_HEADERS -#line 2020 "seclang-parser.yy" + case 201: +#line 2031 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_NoDictElement()); } -#line 3680 "seclang-parser.cc" +#line 3722 "seclang-parser.cc" break; - case 202: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element" -#line 2024 "seclang-parser.yy" + case 202: +#line 2035 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3688 "seclang-parser.cc" +#line 3730 "seclang-parser.cc" break; - case 203: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element, selected by regexp" -#line 2028 "seclang-parser.yy" + case 203: +#line 2039 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3696 "seclang-parser.cc" +#line 3738 "seclang-parser.cc" break; - case 204: // var: VARIABLE_RESPONSE_HEADERS -#line 2032 "seclang-parser.yy" + case 204: +#line 2043 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_NoDictElement()); } -#line 3704 "seclang-parser.cc" +#line 3746 "seclang-parser.cc" break; - case 205: // var: VARIABLE_GEO "Dictionary element" -#line 2036 "seclang-parser.yy" + case 205: +#line 2047 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3712 "seclang-parser.cc" +#line 3754 "seclang-parser.cc" break; - case 206: // var: VARIABLE_GEO "Dictionary element, selected by regexp" -#line 2040 "seclang-parser.yy" + case 206: +#line 2051 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3720 "seclang-parser.cc" +#line 3762 "seclang-parser.cc" break; - case 207: // var: VARIABLE_GEO -#line 2044 "seclang-parser.yy" + case 207: +#line 2055 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_NoDictElement()); } -#line 3728 "seclang-parser.cc" +#line 3770 "seclang-parser.cc" break; - case 208: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element" -#line 2048 "seclang-parser.yy" + case 208: +#line 2059 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3736 "seclang-parser.cc" +#line 3778 "seclang-parser.cc" break; - case 209: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element, selected by regexp" -#line 2052 "seclang-parser.yy" + case 209: +#line 2063 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3744 "seclang-parser.cc" +#line 3786 "seclang-parser.cc" break; - case 210: // var: VARIABLE_REQUEST_COOKIES_NAMES -#line 2056 "seclang-parser.yy" + case 210: +#line 2067 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_NoDictElement()); } -#line 3752 "seclang-parser.cc" +#line 3794 "seclang-parser.cc" break; - case 211: // var: VARIABLE_RULE "Dictionary element" -#line 2060 "seclang-parser.yy" + case 211: +#line 2071 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3760 "seclang-parser.cc" +#line 3802 "seclang-parser.cc" break; - case 212: // var: VARIABLE_RULE "Dictionary element, selected by regexp" -#line 2064 "seclang-parser.yy" + case 212: +#line 2075 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3768 "seclang-parser.cc" +#line 3810 "seclang-parser.cc" break; - case 213: // var: VARIABLE_RULE -#line 2068 "seclang-parser.yy" + case 213: +#line 2079 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_NoDictElement()); } -#line 3776 "seclang-parser.cc" +#line 3818 "seclang-parser.cc" break; - case 214: // var: "RUN_TIME_VAR_ENV" "Dictionary element" -#line 2072 "seclang-parser.yy" + case 214: +#line 2083 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3784 "seclang-parser.cc" +#line 3826 "seclang-parser.cc" break; - case 215: // var: "RUN_TIME_VAR_ENV" "Dictionary element, selected by regexp" -#line 2076 "seclang-parser.yy" + case 215: +#line 2087 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3792 "seclang-parser.cc" +#line 3834 "seclang-parser.cc" break; - case 216: // var: "RUN_TIME_VAR_ENV" -#line 2080 "seclang-parser.yy" + case 216: +#line 2091 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV")); } -#line 3800 "seclang-parser.cc" +#line 3842 "seclang-parser.cc" break; - case 217: // var: "RUN_TIME_VAR_XML" "Dictionary element" -#line 2084 "seclang-parser.yy" + case 217: +#line 2095 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } -#line 3808 "seclang-parser.cc" +#line 3850 "seclang-parser.cc" break; - case 218: // var: "RUN_TIME_VAR_XML" "Dictionary element, selected by regexp" -#line 2088 "seclang-parser.yy" + case 218: +#line 2099 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } -#line 3816 "seclang-parser.cc" +#line 3858 "seclang-parser.cc" break; - case 219: // var: "RUN_TIME_VAR_XML" -#line 2092 "seclang-parser.yy" + case 219: +#line 2103 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML_NoDictElement()); } -#line 3824 "seclang-parser.cc" +#line 3866 "seclang-parser.cc" break; - case 220: // var: "FILES_TMPNAMES" "Dictionary element" -#line 2096 "seclang-parser.yy" + case 220: +#line 2107 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3832 "seclang-parser.cc" +#line 3874 "seclang-parser.cc" break; - case 221: // var: "FILES_TMPNAMES" "Dictionary element, selected by regexp" -#line 2100 "seclang-parser.yy" + case 221: +#line 2111 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3840 "seclang-parser.cc" +#line 3882 "seclang-parser.cc" break; - case 222: // var: "FILES_TMPNAMES" -#line 2104 "seclang-parser.yy" + case 222: +#line 2115 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_NoDictElement()); } -#line 3848 "seclang-parser.cc" +#line 3890 "seclang-parser.cc" break; - case 223: // var: "RESOURCE" run_time_string -#line 2108 "seclang-parser.yy" + case 223: +#line 2119 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3856 "seclang-parser.cc" +#line 3898 "seclang-parser.cc" break; - case 224: // var: "RESOURCE" "Dictionary element" -#line 2112 "seclang-parser.yy" + case 224: +#line 2123 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3864 "seclang-parser.cc" +#line 3906 "seclang-parser.cc" break; - case 225: // var: "RESOURCE" "Dictionary element, selected by regexp" -#line 2116 "seclang-parser.yy" + case 225: +#line 2127 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3872 "seclang-parser.cc" +#line 3914 "seclang-parser.cc" break; - case 226: // var: "RESOURCE" -#line 2120 "seclang-parser.yy" + case 226: +#line 2131 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_NoDictElement()); } -#line 3880 "seclang-parser.cc" +#line 3922 "seclang-parser.cc" break; - case 227: // var: "VARIABLE_IP" run_time_string -#line 2124 "seclang-parser.yy" + case 227: +#line 2135 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3888 "seclang-parser.cc" +#line 3930 "seclang-parser.cc" break; - case 228: // var: "VARIABLE_IP" "Dictionary element" -#line 2128 "seclang-parser.yy" + case 228: +#line 2139 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3896 "seclang-parser.cc" +#line 3938 "seclang-parser.cc" break; - case 229: // var: "VARIABLE_IP" "Dictionary element, selected by regexp" -#line 2132 "seclang-parser.yy" + case 229: +#line 2143 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3904 "seclang-parser.cc" +#line 3946 "seclang-parser.cc" break; - case 230: // var: "VARIABLE_IP" -#line 2136 "seclang-parser.yy" + case 230: +#line 2147 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_NoDictElement()); } -#line 3912 "seclang-parser.cc" +#line 3954 "seclang-parser.cc" break; - case 231: // var: "VARIABLE_GLOBAL" run_time_string -#line 2140 "seclang-parser.yy" + case 231: +#line 2151 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3920 "seclang-parser.cc" +#line 3962 "seclang-parser.cc" break; - case 232: // var: "VARIABLE_GLOBAL" "Dictionary element" -#line 2144 "seclang-parser.yy" + case 232: +#line 2155 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3928 "seclang-parser.cc" +#line 3970 "seclang-parser.cc" break; - case 233: // var: "VARIABLE_GLOBAL" "Dictionary element, selected by regexp" -#line 2148 "seclang-parser.yy" + case 233: +#line 2159 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3936 "seclang-parser.cc" +#line 3978 "seclang-parser.cc" break; - case 234: // var: "VARIABLE_GLOBAL" -#line 2152 "seclang-parser.yy" + case 234: +#line 2163 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_NoDictElement()); } -#line 3944 "seclang-parser.cc" +#line 3986 "seclang-parser.cc" break; - case 235: // var: "VARIABLE_USER" run_time_string -#line 2156 "seclang-parser.yy" + case 235: +#line 2167 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3952 "seclang-parser.cc" +#line 3994 "seclang-parser.cc" break; - case 236: // var: "VARIABLE_USER" "Dictionary element" -#line 2160 "seclang-parser.yy" + case 236: +#line 2171 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3960 "seclang-parser.cc" +#line 4002 "seclang-parser.cc" break; - case 237: // var: "VARIABLE_USER" "Dictionary element, selected by regexp" -#line 2164 "seclang-parser.yy" + case 237: +#line 2175 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3968 "seclang-parser.cc" +#line 4010 "seclang-parser.cc" break; - case 238: // var: "VARIABLE_USER" -#line 2168 "seclang-parser.yy" + case 238: +#line 2179 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_NoDictElement()); } -#line 3976 "seclang-parser.cc" +#line 4018 "seclang-parser.cc" break; - case 239: // var: "VARIABLE_TX" run_time_string -#line 2172 "seclang-parser.yy" + case 239: +#line 2183 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3984 "seclang-parser.cc" +#line 4026 "seclang-parser.cc" break; - case 240: // var: "VARIABLE_TX" "Dictionary element" -#line 2176 "seclang-parser.yy" + case 240: +#line 2187 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3992 "seclang-parser.cc" +#line 4034 "seclang-parser.cc" break; - case 241: // var: "VARIABLE_TX" "Dictionary element, selected by regexp" -#line 2180 "seclang-parser.yy" + case 241: +#line 2191 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4000 "seclang-parser.cc" +#line 4042 "seclang-parser.cc" break; - case 242: // var: "VARIABLE_TX" -#line 2184 "seclang-parser.yy" + case 242: +#line 2195 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_NoDictElement()); } -#line 4008 "seclang-parser.cc" +#line 4050 "seclang-parser.cc" break; - case 243: // var: "VARIABLE_SESSION" run_time_string -#line 2188 "seclang-parser.yy" + case 243: +#line 2199 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 4016 "seclang-parser.cc" +#line 4058 "seclang-parser.cc" break; - case 244: // var: "VARIABLE_SESSION" "Dictionary element" -#line 2192 "seclang-parser.yy" + case 244: +#line 2203 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4024 "seclang-parser.cc" +#line 4066 "seclang-parser.cc" break; - case 245: // var: "VARIABLE_SESSION" "Dictionary element, selected by regexp" -#line 2196 "seclang-parser.yy" + case 245: +#line 2207 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4032 "seclang-parser.cc" +#line 4074 "seclang-parser.cc" break; - case 246: // var: "VARIABLE_SESSION" -#line 2200 "seclang-parser.yy" + case 246: +#line 2211 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_NoDictElement()); } -#line 4040 "seclang-parser.cc" +#line 4082 "seclang-parser.cc" break; - case 247: // var: "Variable ARGS_NAMES" "Dictionary element" -#line 2204 "seclang-parser.yy" + case 247: +#line 2215 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4048 "seclang-parser.cc" +#line 4090 "seclang-parser.cc" break; - case 248: // var: "Variable ARGS_NAMES" "Dictionary element, selected by regexp" -#line 2208 "seclang-parser.yy" + case 248: +#line 2219 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4056 "seclang-parser.cc" +#line 4098 "seclang-parser.cc" break; - case 249: // var: "Variable ARGS_NAMES" -#line 2212 "seclang-parser.yy" + case 249: +#line 2223 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_NoDictElement()); } -#line 4064 "seclang-parser.cc" +#line 4106 "seclang-parser.cc" break; - case 250: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element" -#line 2216 "seclang-parser.yy" + case 250: +#line 2227 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4072 "seclang-parser.cc" +#line 4114 "seclang-parser.cc" break; - case 251: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element, selected by regexp" -#line 2220 "seclang-parser.yy" + case 251: +#line 2231 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4080 "seclang-parser.cc" +#line 4122 "seclang-parser.cc" break; - case 252: // var: VARIABLE_ARGS_GET_NAMES -#line 2224 "seclang-parser.yy" + case 252: +#line 2235 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_NoDictElement()); } -#line 4088 "seclang-parser.cc" +#line 4130 "seclang-parser.cc" break; - case 253: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element" -#line 2229 "seclang-parser.yy" + case 253: +#line 2240 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4096 "seclang-parser.cc" +#line 4138 "seclang-parser.cc" break; - case 254: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element, selected by regexp" -#line 2233 "seclang-parser.yy" + case 254: +#line 2244 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4104 "seclang-parser.cc" +#line 4146 "seclang-parser.cc" break; - case 255: // var: VARIABLE_ARGS_POST_NAMES -#line 2237 "seclang-parser.yy" + case 255: +#line 2248 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_NoDictElement()); } -#line 4112 "seclang-parser.cc" +#line 4154 "seclang-parser.cc" break; - case 256: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element" -#line 2242 "seclang-parser.yy" + case 256: +#line 2253 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4120 "seclang-parser.cc" +#line 4162 "seclang-parser.cc" break; - case 257: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2246 "seclang-parser.yy" + case 257: +#line 2257 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4128 "seclang-parser.cc" +#line 4170 "seclang-parser.cc" break; - case 258: // var: VARIABLE_REQUEST_HEADERS_NAMES -#line 2250 "seclang-parser.yy" + case 258: +#line 2261 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_NoDictElement()); } -#line 4136 "seclang-parser.cc" +#line 4178 "seclang-parser.cc" break; - case 259: // var: VARIABLE_RESPONSE_CONTENT_TYPE -#line 2255 "seclang-parser.yy" + case 259: +#line 2266 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentType()); } -#line 4144 "seclang-parser.cc" +#line 4186 "seclang-parser.cc" break; - case 260: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element" -#line 2260 "seclang-parser.yy" + case 260: +#line 2271 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4152 "seclang-parser.cc" +#line 4194 "seclang-parser.cc" break; - case 261: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2264 "seclang-parser.yy" + case 261: +#line 2275 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4160 "seclang-parser.cc" +#line 4202 "seclang-parser.cc" break; - case 262: // var: VARIABLE_RESPONSE_HEADERS_NAMES -#line 2268 "seclang-parser.yy" + case 262: +#line 2279 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_NoDictElement()); } -#line 4168 "seclang-parser.cc" +#line 4210 "seclang-parser.cc" break; - case 263: // var: VARIABLE_ARGS_COMBINED_SIZE -#line 2272 "seclang-parser.yy" + case 263: +#line 2283 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsCombinedSize()); } -#line 4176 "seclang-parser.cc" +#line 4218 "seclang-parser.cc" break; - case 264: // var: "AUTH_TYPE" -#line 2276 "seclang-parser.yy" + case 264: +#line 2287 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::AuthType()); } -#line 4184 "seclang-parser.cc" +#line 4226 "seclang-parser.cc" break; - case 265: // var: "FILES_COMBINED_SIZE" -#line 2280 "seclang-parser.yy" + case 265: +#line 2291 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesCombinedSize()); } -#line 4192 "seclang-parser.cc" +#line 4234 "seclang-parser.cc" break; - case 266: // var: "FULL_REQUEST" -#line 2284 "seclang-parser.yy" + case 266: +#line 2295 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequest()); } -#line 4200 "seclang-parser.cc" +#line 4242 "seclang-parser.cc" break; - case 267: // var: "FULL_REQUEST_LENGTH" -#line 2288 "seclang-parser.yy" + case 267: +#line 2299 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequestLength()); } -#line 4208 "seclang-parser.cc" +#line 4250 "seclang-parser.cc" break; - case 268: // var: "INBOUND_DATA_ERROR" -#line 2292 "seclang-parser.yy" + case 268: +#line 2303 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::InboundDataError()); } -#line 4216 "seclang-parser.cc" +#line 4258 "seclang-parser.cc" break; - case 269: // var: "MATCHED_VAR" -#line 2296 "seclang-parser.yy" + case 269: +#line 2307 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVar()); } -#line 4224 "seclang-parser.cc" +#line 4266 "seclang-parser.cc" break; - case 270: // var: "MATCHED_VAR_NAME" -#line 2300 "seclang-parser.yy" + case 270: +#line 2311 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarName()); } -#line 4232 "seclang-parser.cc" +#line 4274 "seclang-parser.cc" break; - case 271: // var: VARIABLE_MULTIPART_BOUNDARY_QUOTED -#line 2304 "seclang-parser.yy" + case 271: +#line 2315 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryQuoted()); } -#line 4240 "seclang-parser.cc" +#line 4282 "seclang-parser.cc" break; - case 272: // var: VARIABLE_MULTIPART_BOUNDARY_WHITESPACE -#line 2308 "seclang-parser.yy" + case 272: +#line 2319 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryWhiteSpace()); } -#line 4248 "seclang-parser.cc" +#line 4290 "seclang-parser.cc" break; - case 273: // var: "MULTIPART_CRLF_LF_LINES" -#line 2312 "seclang-parser.yy" + case 273: +#line 2323 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartCrlfLFLines()); } -#line 4256 "seclang-parser.cc" +#line 4298 "seclang-parser.cc" break; - case 274: // var: "MULTIPART_DATA_AFTER" -#line 2316 "seclang-parser.yy" + case 274: +#line 2327 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateAfter()); } -#line 4264 "seclang-parser.cc" +#line 4306 "seclang-parser.cc" break; - case 275: // var: VARIABLE_MULTIPART_DATA_BEFORE -#line 2320 "seclang-parser.yy" + case 275: +#line 2331 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateBefore()); } -#line 4272 "seclang-parser.cc" +#line 4314 "seclang-parser.cc" break; - case 276: // var: "MULTIPART_FILE_LIMIT_EXCEEDED" -#line 2324 "seclang-parser.yy" + case 276: +#line 2335 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartFileLimitExceeded()); } -#line 4280 "seclang-parser.cc" +#line 4322 "seclang-parser.cc" break; - case 277: // var: "MULTIPART_HEADER_FOLDING" -#line 2328 "seclang-parser.yy" + case 277: +#line 2339 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartHeaderFolding()); } -#line 4288 "seclang-parser.cc" +#line 4330 "seclang-parser.cc" break; - case 278: // var: "MULTIPART_INVALID_HEADER_FOLDING" -#line 2332 "seclang-parser.yy" + case 278: +#line 2343 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidHeaderFolding()); } -#line 4296 "seclang-parser.cc" +#line 4338 "seclang-parser.cc" break; - case 279: // var: VARIABLE_MULTIPART_INVALID_PART -#line 2336 "seclang-parser.yy" + case 279: +#line 2347 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidPart()); } -#line 4304 "seclang-parser.cc" +#line 4346 "seclang-parser.cc" break; - case 280: // var: "MULTIPART_INVALID_QUOTING" -#line 2340 "seclang-parser.yy" + case 280: +#line 2351 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidQuoting()); } -#line 4312 "seclang-parser.cc" +#line 4354 "seclang-parser.cc" break; - case 281: // var: VARIABLE_MULTIPART_LF_LINE -#line 2344 "seclang-parser.yy" + case 281: +#line 2355 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartLFLine()); } -#line 4320 "seclang-parser.cc" +#line 4362 "seclang-parser.cc" break; - case 282: // var: VARIABLE_MULTIPART_MISSING_SEMICOLON -#line 2348 "seclang-parser.yy" + case 282: +#line 2359 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4328 "seclang-parser.cc" +#line 4370 "seclang-parser.cc" break; - case 283: // var: VARIABLE_MULTIPART_SEMICOLON_MISSING -#line 2352 "seclang-parser.yy" + case 283: +#line 2363 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4336 "seclang-parser.cc" +#line 4378 "seclang-parser.cc" break; - case 284: // var: "MULTIPART_STRICT_ERROR" -#line 2356 "seclang-parser.yy" + case 284: +#line 2367 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartStrictError()); } -#line 4344 "seclang-parser.cc" +#line 4386 "seclang-parser.cc" break; - case 285: // var: "MULTIPART_UNMATCHED_BOUNDARY" -#line 2360 "seclang-parser.yy" + case 285: +#line 2371 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartUnmatchedBoundary()); } -#line 4352 "seclang-parser.cc" +#line 4394 "seclang-parser.cc" break; - case 286: // var: "OUTBOUND_DATA_ERROR" -#line 2364 "seclang-parser.yy" + case 286: +#line 2375 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::OutboundDataError()); } -#line 4360 "seclang-parser.cc" +#line 4402 "seclang-parser.cc" break; - case 287: // var: "PATH_INFO" -#line 2368 "seclang-parser.yy" + case 287: +#line 2379 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::PathInfo()); } -#line 4368 "seclang-parser.cc" +#line 4410 "seclang-parser.cc" break; - case 288: // var: "QUERY_STRING" -#line 2372 "seclang-parser.yy" + case 288: +#line 2383 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::QueryString()); } -#line 4376 "seclang-parser.cc" +#line 4418 "seclang-parser.cc" break; - case 289: // var: "REMOTE_ADDR" -#line 2376 "seclang-parser.yy" + case 289: +#line 2387 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteAddr()); } -#line 4384 "seclang-parser.cc" +#line 4426 "seclang-parser.cc" break; - case 290: // var: "REMOTE_HOST" -#line 2380 "seclang-parser.yy" + case 290: +#line 2391 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteHost()); } -#line 4392 "seclang-parser.cc" +#line 4434 "seclang-parser.cc" break; - case 291: // var: "REMOTE_PORT" -#line 2384 "seclang-parser.yy" + case 291: +#line 2395 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemotePort()); } -#line 4400 "seclang-parser.cc" +#line 4442 "seclang-parser.cc" break; - case 292: // var: "REQBODY_ERROR" -#line 2388 "seclang-parser.yy" + case 292: +#line 2399 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyError()); } -#line 4408 "seclang-parser.cc" +#line 4450 "seclang-parser.cc" break; - case 293: // var: "REQBODY_ERROR_MSG" -#line 2392 "seclang-parser.yy" + case 293: +#line 2403 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyErrorMsg()); } -#line 4416 "seclang-parser.cc" +#line 4458 "seclang-parser.cc" break; - case 294: // var: "REQBODY_PROCESSOR" -#line 2396 "seclang-parser.yy" + case 294: +#line 2407 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessor()); } -#line 4424 "seclang-parser.cc" +#line 4466 "seclang-parser.cc" break; - case 295: // var: "REQBODY_PROCESSOR_ERROR" -#line 2400 "seclang-parser.yy" + case 295: +#line 2411 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorError()); } -#line 4432 "seclang-parser.cc" +#line 4474 "seclang-parser.cc" break; - case 296: // var: "REQBODY_PROCESSOR_ERROR_MSG" -#line 2404 "seclang-parser.yy" + case 296: +#line 2415 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorErrorMsg()); } -#line 4440 "seclang-parser.cc" +#line 4482 "seclang-parser.cc" break; - case 297: // var: "REQUEST_BASENAME" -#line 2408 "seclang-parser.yy" + case 297: +#line 2419 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBasename()); } -#line 4448 "seclang-parser.cc" +#line 4490 "seclang-parser.cc" break; - case 298: // var: "REQUEST_BODY" -#line 2412 "seclang-parser.yy" + case 298: +#line 2423 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBody()); } -#line 4456 "seclang-parser.cc" +#line 4498 "seclang-parser.cc" break; - case 299: // var: "REQUEST_BODY_LENGTH" -#line 2416 "seclang-parser.yy" + case 299: +#line 2427 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBodyLength()); } -#line 4464 "seclang-parser.cc" +#line 4506 "seclang-parser.cc" break; - case 300: // var: "REQUEST_FILENAME" -#line 2420 "seclang-parser.yy" + case 300: +#line 2431 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestFilename()); } -#line 4472 "seclang-parser.cc" +#line 4514 "seclang-parser.cc" break; - case 301: // var: "REQUEST_LINE" -#line 2424 "seclang-parser.yy" + case 301: +#line 2435 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestLine()); } -#line 4480 "seclang-parser.cc" +#line 4522 "seclang-parser.cc" break; - case 302: // var: "REQUEST_METHOD" -#line 2428 "seclang-parser.yy" + case 302: +#line 2439 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestMethod()); } -#line 4488 "seclang-parser.cc" +#line 4530 "seclang-parser.cc" break; - case 303: // var: "REQUEST_PROTOCOL" -#line 2432 "seclang-parser.yy" + case 303: +#line 2443 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestProtocol()); } -#line 4496 "seclang-parser.cc" +#line 4538 "seclang-parser.cc" break; - case 304: // var: "REQUEST_URI" -#line 2436 "seclang-parser.yy" + case 304: +#line 2447 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURI()); } -#line 4504 "seclang-parser.cc" +#line 4546 "seclang-parser.cc" break; - case 305: // var: "REQUEST_URI_RAW" -#line 2440 "seclang-parser.yy" + case 305: +#line 2451 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURIRaw()); } -#line 4512 "seclang-parser.cc" +#line 4554 "seclang-parser.cc" break; - case 306: // var: "RESPONSE_BODY" -#line 2444 "seclang-parser.yy" + case 306: +#line 2455 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseBody()); } -#line 4520 "seclang-parser.cc" +#line 4562 "seclang-parser.cc" break; - case 307: // var: "RESPONSE_CONTENT_LENGTH" -#line 2448 "seclang-parser.yy" + case 307: +#line 2459 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentLength()); } -#line 4528 "seclang-parser.cc" +#line 4570 "seclang-parser.cc" break; - case 308: // var: "RESPONSE_PROTOCOL" -#line 2452 "seclang-parser.yy" + case 308: +#line 2463 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseProtocol()); } -#line 4536 "seclang-parser.cc" +#line 4578 "seclang-parser.cc" break; - case 309: // var: "RESPONSE_STATUS" -#line 2456 "seclang-parser.yy" + case 309: +#line 2467 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseStatus()); } -#line 4544 "seclang-parser.cc" +#line 4586 "seclang-parser.cc" break; - case 310: // var: "SERVER_ADDR" -#line 2460 "seclang-parser.yy" + case 310: +#line 2471 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerAddr()); } -#line 4552 "seclang-parser.cc" +#line 4594 "seclang-parser.cc" break; - case 311: // var: "SERVER_NAME" -#line 2464 "seclang-parser.yy" + case 311: +#line 2475 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerName()); } -#line 4560 "seclang-parser.cc" +#line 4602 "seclang-parser.cc" break; - case 312: // var: "SERVER_PORT" -#line 2468 "seclang-parser.yy" + case 312: +#line 2479 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerPort()); } -#line 4568 "seclang-parser.cc" +#line 4610 "seclang-parser.cc" break; - case 313: // var: "SESSIONID" -#line 2472 "seclang-parser.yy" + case 313: +#line 2483 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::SessionID()); } -#line 4576 "seclang-parser.cc" +#line 4618 "seclang-parser.cc" break; - case 314: // var: "UNIQUE_ID" -#line 2476 "seclang-parser.yy" + case 314: +#line 2487 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UniqueID()); } -#line 4584 "seclang-parser.cc" +#line 4626 "seclang-parser.cc" break; - case 315: // var: "URLENCODED_ERROR" -#line 2480 "seclang-parser.yy" + case 315: +#line 2491 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UrlEncodedError()); } -#line 4592 "seclang-parser.cc" +#line 4634 "seclang-parser.cc" break; - case 316: // var: "USERID" -#line 2484 "seclang-parser.yy" + case 316: +#line 2495 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UserID()); } -#line 4600 "seclang-parser.cc" +#line 4642 "seclang-parser.cc" break; - case 317: // var: "VARIABLE_STATUS" -#line 2488 "seclang-parser.yy" + case 317: +#line 2499 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4608 "seclang-parser.cc" +#line 4650 "seclang-parser.cc" break; - case 318: // var: "VARIABLE_STATUS_LINE" -#line 2492 "seclang-parser.yy" + case 318: +#line 2503 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4616 "seclang-parser.cc" +#line 4658 "seclang-parser.cc" break; - case 319: // var: "WEBAPPID" -#line 2496 "seclang-parser.yy" + case 319: +#line 2507 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::WebAppId()); } -#line 4624 "seclang-parser.cc" +#line 4666 "seclang-parser.cc" break; - case 320: // var: "RUN_TIME_VAR_DUR" -#line 2500 "seclang-parser.yy" + case 320: +#line 2511 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Duration(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4635 "seclang-parser.cc" +#line 4677 "seclang-parser.cc" break; - case 321: // var: "RUN_TIME_VAR_BLD" -#line 2508 "seclang-parser.yy" + case 321: +#line 2519 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new ModsecBuild(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4646 "seclang-parser.cc" +#line 4688 "seclang-parser.cc" break; - case 322: // var: "RUN_TIME_VAR_HSV" -#line 2515 "seclang-parser.yy" + case 322: +#line 2526 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new HighestSeverity(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4657 "seclang-parser.cc" +#line 4699 "seclang-parser.cc" break; - case 323: // var: "RUN_TIME_VAR_REMOTE_USER" -#line 2522 "seclang-parser.yy" + case 323: +#line 2533 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new RemoteUser(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4668 "seclang-parser.cc" +#line 4710 "seclang-parser.cc" break; - case 324: // var: "RUN_TIME_VAR_TIME" -#line 2529 "seclang-parser.yy" + case 324: +#line 2540 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Time(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4679 "seclang-parser.cc" +#line 4721 "seclang-parser.cc" break; - case 325: // var: "RUN_TIME_VAR_TIME_DAY" -#line 2536 "seclang-parser.yy" + case 325: +#line 2547 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4690 "seclang-parser.cc" +#line 4732 "seclang-parser.cc" break; - case 326: // var: "RUN_TIME_VAR_TIME_EPOCH" -#line 2543 "seclang-parser.yy" + case 326: +#line 2554 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeEpoch(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4701 "seclang-parser.cc" +#line 4743 "seclang-parser.cc" break; - case 327: // var: "RUN_TIME_VAR_TIME_HOUR" -#line 2550 "seclang-parser.yy" + case 327: +#line 2561 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeHour(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4712 "seclang-parser.cc" +#line 4754 "seclang-parser.cc" break; - case 328: // var: "RUN_TIME_VAR_TIME_MIN" -#line 2557 "seclang-parser.yy" + case 328: +#line 2568 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMin(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4723 "seclang-parser.cc" +#line 4765 "seclang-parser.cc" break; - case 329: // var: "RUN_TIME_VAR_TIME_MON" -#line 2564 "seclang-parser.yy" + case 329: +#line 2575 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMon(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4734 "seclang-parser.cc" +#line 4776 "seclang-parser.cc" break; - case 330: // var: "RUN_TIME_VAR_TIME_SEC" -#line 2571 "seclang-parser.yy" + case 330: +#line 2582 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeSec(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4745 "seclang-parser.cc" +#line 4787 "seclang-parser.cc" break; - case 331: // var: "RUN_TIME_VAR_TIME_WDAY" -#line 2578 "seclang-parser.yy" + case 331: +#line 2589 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeWDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4756 "seclang-parser.cc" +#line 4798 "seclang-parser.cc" break; - case 332: // var: "RUN_TIME_VAR_TIME_YEAR" -#line 2585 "seclang-parser.yy" + case 332: +#line 2596 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeYear(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4767 "seclang-parser.cc" +#line 4809 "seclang-parser.cc" break; - case 333: // act: "Accuracy" -#line 2595 "seclang-parser.yy" + case 333: +#line 2606 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Accuracy(yystack_[0].value.as < std::string > ())); } -#line 4775 "seclang-parser.cc" +#line 4817 "seclang-parser.cc" break; - case 334: // act: "Allow" -#line 2599 "seclang-parser.yy" + case 334: +#line 2610 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Allow(yystack_[0].value.as < std::string > ())); } -#line 4783 "seclang-parser.cc" +#line 4825 "seclang-parser.cc" break; - case 335: // act: "Append" -#line 2603 "seclang-parser.yy" + case 335: +#line 2614 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Append", yystack_[1].location); } -#line 4791 "seclang-parser.cc" +#line 4833 "seclang-parser.cc" break; - case 336: // act: "AuditLog" -#line 2607 "seclang-parser.yy" + case 336: +#line 2618 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::AuditLog(yystack_[0].value.as < std::string > ())); } -#line 4799 "seclang-parser.cc" +#line 4841 "seclang-parser.cc" break; - case 337: // act: "Block" -#line 2611 "seclang-parser.yy" + case 337: +#line 2622 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Block(yystack_[0].value.as < std::string > ())); } -#line 4807 "seclang-parser.cc" +#line 4849 "seclang-parser.cc" break; - case 338: // act: "Capture" -#line 2615 "seclang-parser.yy" + case 338: +#line 2626 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Capture(yystack_[0].value.as < std::string > ())); } -#line 4815 "seclang-parser.cc" +#line 4857 "seclang-parser.cc" break; - case 339: // act: "Chain" -#line 2619 "seclang-parser.yy" + case 339: +#line 2630 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Chain(yystack_[0].value.as < std::string > ())); } -#line 4823 "seclang-parser.cc" +#line 4865 "seclang-parser.cc" break; - case 340: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_ON" -#line 2623 "seclang-parser.yy" + case 340: +#line 2634 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4832 "seclang-parser.cc" +#line 4874 "seclang-parser.cc" break; - case 341: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_OFF" -#line 2628 "seclang-parser.yy" + case 341: +#line 2639 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4841 "seclang-parser.cc" +#line 4883 "seclang-parser.cc" break; - case 342: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_RELEVANT_ONLY" -#line 2633 "seclang-parser.yy" + case 342: +#line 2644 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4850 "seclang-parser.cc" +#line 4892 "seclang-parser.cc" break; - case 343: // act: "ACTION_CTL_AUDIT_LOG_PARTS" -#line 2638 "seclang-parser.yy" + case 343: +#line 2649 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::AuditLogParts(yystack_[0].value.as < std::string > ())); } -#line 4858 "seclang-parser.cc" +#line 4900 "seclang-parser.cc" break; - case 344: // act: "ACTION_CTL_BDY_JSON" -#line 2642 "seclang-parser.yy" + case 344: +#line 2653 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorJSON(yystack_[0].value.as < std::string > ())); } -#line 4866 "seclang-parser.cc" +#line 4908 "seclang-parser.cc" break; - case 345: // act: "ACTION_CTL_BDY_XML" -#line 2646 "seclang-parser.yy" + case 345: +#line 2657 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorXML(yystack_[0].value.as < std::string > ())); } -#line 4874 "seclang-parser.cc" +#line 4916 "seclang-parser.cc" break; - case 346: // act: "ACTION_CTL_BDY_URLENCODED" -#line 2650 "seclang-parser.yy" + case 346: +#line 2661 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorURLENCODED(yystack_[0].value.as < std::string > ())); } -#line 4882 "seclang-parser.cc" +#line 4924 "seclang-parser.cc" break; - case 347: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_ON" -#line 2654 "seclang-parser.yy" + case 347: +#line 2665 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4891 "seclang-parser.cc" +#line 4933 "seclang-parser.cc" break; - case 348: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_OFF" -#line 2659 "seclang-parser.yy" + case 348: +#line 2670 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); } -#line 4900 "seclang-parser.cc" +#line 4942 "seclang-parser.cc" break; - case 349: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_ON" -#line 2664 "seclang-parser.yy" + case 349: +#line 2675 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "true")); } -#line 4908 "seclang-parser.cc" +#line 4950 "seclang-parser.cc" break; - case 350: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_OFF" -#line 2668 "seclang-parser.yy" + case 350: +#line 2679 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "false")); } -#line 4916 "seclang-parser.cc" +#line 4958 "seclang-parser.cc" break; - case 351: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_ON" -#line 2672 "seclang-parser.yy" + case 351: +#line 2683 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=on")); } -#line 4924 "seclang-parser.cc" +#line 4966 "seclang-parser.cc" break; - case 352: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_OFF" -#line 2676 "seclang-parser.yy" + case 352: +#line 2687 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=off")); } -#line 4932 "seclang-parser.cc" +#line 4974 "seclang-parser.cc" break; - case 353: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_DETC" -#line 2680 "seclang-parser.yy" + case 353: +#line 2691 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=detectiononly")); } -#line 4940 "seclang-parser.cc" +#line 4982 "seclang-parser.cc" break; - case 354: // act: "ACTION_CTL_RULE_REMOVE_BY_ID" -#line 2684 "seclang-parser.yy" + case 354: +#line 2695 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveById(yystack_[0].value.as < std::string > ())); } -#line 4948 "seclang-parser.cc" +#line 4990 "seclang-parser.cc" break; - case 355: // act: "ACTION_CTL_RULE_REMOVE_BY_TAG" -#line 2688 "seclang-parser.yy" + case 355: +#line 2699 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveByTag(yystack_[0].value.as < std::string > ())); } -#line 4956 "seclang-parser.cc" +#line 4998 "seclang-parser.cc" break; - case 356: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" -#line 2692 "seclang-parser.yy" + case 356: +#line 2703 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetById(yystack_[0].value.as < std::string > ())); } -#line 4964 "seclang-parser.cc" +#line 5006 "seclang-parser.cc" break; - case 357: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" -#line 2696 "seclang-parser.yy" + case 357: +#line 2707 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetByTag(yystack_[0].value.as < std::string > ())); } -#line 4972 "seclang-parser.cc" +#line 5014 "seclang-parser.cc" break; - case 358: // act: "Deny" -#line 2700 "seclang-parser.yy" + case 358: +#line 2711 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Deny(yystack_[0].value.as < std::string > ())); } -#line 4980 "seclang-parser.cc" +#line 5022 "seclang-parser.cc" break; - case 359: // act: "DeprecateVar" -#line 2704 "seclang-parser.yy" + case 359: +#line 2715 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[1].location); } -#line 4988 "seclang-parser.cc" +#line 5030 "seclang-parser.cc" break; - case 360: // act: "Drop" -#line 2708 "seclang-parser.yy" + case 360: +#line 2719 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Drop(yystack_[0].value.as < std::string > ())); } -#line 4996 "seclang-parser.cc" +#line 5038 "seclang-parser.cc" break; - case 361: // act: "Exec" -#line 2712 "seclang-parser.yy" + case 361: +#line 2723 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Exec(yystack_[0].value.as < std::string > ())); } -#line 5004 "seclang-parser.cc" +#line 5046 "seclang-parser.cc" break; - case 362: // act: "ExpireVar" -#line 2716 "seclang-parser.yy" + case 362: +#line 2727 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("ExpireVar", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[0].value.as < std::string > ())); } -#line 5013 "seclang-parser.cc" +#line 5055 "seclang-parser.cc" break; - case 363: // act: "Id" -#line 2721 "seclang-parser.yy" + case 363: +#line 2732 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::RuleId(yystack_[0].value.as < std::string > ())); } -#line 5021 "seclang-parser.cc" +#line 5063 "seclang-parser.cc" break; - case 364: // act: "InitCol" run_time_string -#line 2725 "seclang-parser.yy" + case 364: +#line 2736 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::InitCol(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5029 "seclang-parser.cc" +#line 5071 "seclang-parser.cc" break; - case 365: // act: "LogData" run_time_string -#line 2729 "seclang-parser.yy" + case 365: +#line 2740 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::LogData(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5037 "seclang-parser.cc" +#line 5079 "seclang-parser.cc" break; - case 366: // act: "Log" -#line 2733 "seclang-parser.yy" + case 366: +#line 2744 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Log(yystack_[0].value.as < std::string > ())); } -#line 5045 "seclang-parser.cc" +#line 5087 "seclang-parser.cc" break; - case 367: // act: "Maturity" -#line 2737 "seclang-parser.yy" + case 367: +#line 2748 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Maturity(yystack_[0].value.as < std::string > ())); } -#line 5053 "seclang-parser.cc" +#line 5095 "seclang-parser.cc" break; - case 368: // act: "Msg" run_time_string -#line 2741 "seclang-parser.yy" + case 368: +#line 2752 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Msg(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5061 "seclang-parser.cc" +#line 5103 "seclang-parser.cc" break; - case 369: // act: "MultiMatch" -#line 2745 "seclang-parser.yy" + case 369: +#line 2756 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::MultiMatch(yystack_[0].value.as < std::string > ())); } -#line 5069 "seclang-parser.cc" +#line 5111 "seclang-parser.cc" break; - case 370: // act: "NoAuditLog" -#line 2749 "seclang-parser.yy" + case 370: +#line 2760 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoAuditLog(yystack_[0].value.as < std::string > ())); } -#line 5077 "seclang-parser.cc" +#line 5119 "seclang-parser.cc" break; - case 371: // act: "NoLog" -#line 2753 "seclang-parser.yy" + case 371: +#line 2764 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoLog(yystack_[0].value.as < std::string > ())); } -#line 5085 "seclang-parser.cc" +#line 5127 "seclang-parser.cc" break; - case 372: // act: "Pass" -#line 2757 "seclang-parser.yy" + case 372: +#line 2768 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Pass(yystack_[0].value.as < std::string > ())); } -#line 5093 "seclang-parser.cc" +#line 5135 "seclang-parser.cc" break; - case 373: // act: "Pause" -#line 2761 "seclang-parser.yy" + case 373: +#line 2772 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Pause", yystack_[1].location); } -#line 5101 "seclang-parser.cc" +#line 5143 "seclang-parser.cc" break; - case 374: // act: "Phase" -#line 2765 "seclang-parser.yy" + case 374: +#line 2776 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Phase(yystack_[0].value.as < std::string > ())); } -#line 5109 "seclang-parser.cc" +#line 5151 "seclang-parser.cc" break; - case 375: // act: "Prepend" -#line 2769 "seclang-parser.yy" + case 375: +#line 2780 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Prepend", yystack_[1].location); } -#line 5117 "seclang-parser.cc" +#line 5159 "seclang-parser.cc" break; - case 376: // act: "Proxy" -#line 2773 "seclang-parser.yy" + case 376: +#line 2784 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Proxy", yystack_[1].location); } -#line 5125 "seclang-parser.cc" +#line 5167 "seclang-parser.cc" break; - case 377: // act: "Redirect" run_time_string -#line 2777 "seclang-parser.yy" + case 377: +#line 2788 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Redirect(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5133 "seclang-parser.cc" +#line 5175 "seclang-parser.cc" break; - case 378: // act: "Rev" -#line 2781 "seclang-parser.yy" + case 378: +#line 2792 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Rev(yystack_[0].value.as < std::string > ())); } -#line 5141 "seclang-parser.cc" +#line 5183 "seclang-parser.cc" break; - case 379: // act: "SanitiseArg" -#line 2785 "seclang-parser.yy" + case 379: +#line 2796 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[1].location); } -#line 5149 "seclang-parser.cc" +#line 5191 "seclang-parser.cc" break; - case 380: // act: "SanitiseMatched" -#line 2789 "seclang-parser.yy" + case 380: +#line 2800 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[1].location); } -#line 5157 "seclang-parser.cc" +#line 5199 "seclang-parser.cc" break; - case 381: // act: "SanitiseMatchedBytes" -#line 2793 "seclang-parser.yy" + case 381: +#line 2804 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[1].location); } -#line 5165 "seclang-parser.cc" +#line 5207 "seclang-parser.cc" break; - case 382: // act: "SanitiseRequestHeader" -#line 2797 "seclang-parser.yy" + case 382: +#line 2808 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[1].location); } -#line 5173 "seclang-parser.cc" +#line 5215 "seclang-parser.cc" break; - case 383: // act: "SanitiseResponseHeader" -#line 2801 "seclang-parser.yy" + case 383: +#line 2812 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[1].location); } -#line 5181 "seclang-parser.cc" +#line 5223 "seclang-parser.cc" break; - case 384: // act: "SetEnv" run_time_string -#line 2805 "seclang-parser.yy" + case 384: +#line 2816 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetENV(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5189 "seclang-parser.cc" +#line 5231 "seclang-parser.cc" break; - case 385: // act: "SetRsc" run_time_string -#line 2809 "seclang-parser.yy" + case 385: +#line 2820 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetRSC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5197 "seclang-parser.cc" +#line 5239 "seclang-parser.cc" break; - case 386: // act: "SetSid" run_time_string -#line 2813 "seclang-parser.yy" + case 386: +#line 2824 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetSID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5205 "seclang-parser.cc" +#line 5247 "seclang-parser.cc" break; - case 387: // act: "SetUID" run_time_string -#line 2817 "seclang-parser.yy" + case 387: +#line 2828 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetUID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5213 "seclang-parser.cc" +#line 5255 "seclang-parser.cc" break; - case 388: // act: "SetVar" setvar_action -#line 2821 "seclang-parser.yy" + case 388: +#line 2832 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); } -#line 5221 "seclang-parser.cc" +#line 5263 "seclang-parser.cc" break; - case 389: // act: "Severity" -#line 2825 "seclang-parser.yy" + case 389: +#line 2836 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Severity(yystack_[0].value.as < std::string > ())); } -#line 5229 "seclang-parser.cc" +#line 5271 "seclang-parser.cc" break; - case 390: // act: "Skip" -#line 2829 "seclang-parser.yy" + case 390: +#line 2840 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Skip(yystack_[0].value.as < std::string > ())); } -#line 5237 "seclang-parser.cc" +#line 5279 "seclang-parser.cc" break; - case 391: // act: "SkipAfter" -#line 2833 "seclang-parser.yy" + case 391: +#line 2844 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SkipAfter(yystack_[0].value.as < std::string > ())); } -#line 5245 "seclang-parser.cc" +#line 5287 "seclang-parser.cc" break; - case 392: // act: "Status" -#line 2837 "seclang-parser.yy" + case 392: +#line 2848 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::data::Status(yystack_[0].value.as < std::string > ())); } -#line 5253 "seclang-parser.cc" +#line 5295 "seclang-parser.cc" break; - case 393: // act: "Tag" run_time_string -#line 2841 "seclang-parser.yy" + case 393: +#line 2852 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Tag(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5261 "seclang-parser.cc" +#line 5303 "seclang-parser.cc" break; - case 394: // act: "Ver" -#line 2845 "seclang-parser.yy" + case 394: +#line 2856 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Ver(yystack_[0].value.as < std::string > ())); } -#line 5269 "seclang-parser.cc" +#line 5311 "seclang-parser.cc" break; - case 395: // act: "xmlns" -#line 2849 "seclang-parser.yy" + case 395: +#line 2860 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::XmlNS(yystack_[0].value.as < std::string > ())); } -#line 5277 "seclang-parser.cc" +#line 5319 "seclang-parser.cc" break; - case 396: // act: "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" -#line 2853 "seclang-parser.yy" + case 396: +#line 2864 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityZero7bit(yystack_[0].value.as < std::string > ())); } -#line 5285 "seclang-parser.cc" +#line 5327 "seclang-parser.cc" break; - case 397: // act: "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" -#line 2857 "seclang-parser.yy" + case 397: +#line 2868 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityOdd7bit(yystack_[0].value.as < std::string > ())); } -#line 5293 "seclang-parser.cc" +#line 5335 "seclang-parser.cc" break; - case 398: // act: "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" -#line 2861 "seclang-parser.yy" + case 398: +#line 2872 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityEven7bit(yystack_[0].value.as < std::string > ())); } -#line 5301 "seclang-parser.cc" +#line 5343 "seclang-parser.cc" break; - case 399: // act: "ACTION_TRANSFORMATION_SQL_HEX_DECODE" -#line 2865 "seclang-parser.yy" + case 399: +#line 2876 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::SqlHexDecode(yystack_[0].value.as < std::string > ())); } -#line 5309 "seclang-parser.cc" +#line 5351 "seclang-parser.cc" break; - case 400: // act: "ACTION_TRANSFORMATION_BASE_64_ENCODE" -#line 2869 "seclang-parser.yy" + case 400: +#line 2880 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Encode(yystack_[0].value.as < std::string > ())); } -#line 5317 "seclang-parser.cc" +#line 5359 "seclang-parser.cc" break; - case 401: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE" -#line 2873 "seclang-parser.yy" + case 401: +#line 2884 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Decode(yystack_[0].value.as < std::string > ())); } -#line 5325 "seclang-parser.cc" +#line 5367 "seclang-parser.cc" break; - case 402: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" -#line 2877 "seclang-parser.yy" + case 402: +#line 2888 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64DecodeExt(yystack_[0].value.as < std::string > ())); } -#line 5333 "seclang-parser.cc" +#line 5375 "seclang-parser.cc" break; - case 403: // act: "ACTION_TRANSFORMATION_CMD_LINE" -#line 2881 "seclang-parser.yy" + case 403: +#line 2892 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CmdLine(yystack_[0].value.as < std::string > ())); } -#line 5341 "seclang-parser.cc" +#line 5383 "seclang-parser.cc" break; - case 404: // act: "ACTION_TRANSFORMATION_SHA1" -#line 2885 "seclang-parser.yy" + case 404: +#line 2896 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Sha1(yystack_[0].value.as < std::string > ())); } -#line 5349 "seclang-parser.cc" +#line 5391 "seclang-parser.cc" break; - case 405: // act: "ACTION_TRANSFORMATION_MD5" -#line 2889 "seclang-parser.yy" + case 405: +#line 2900 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Md5(yystack_[0].value.as < std::string > ())); } -#line 5357 "seclang-parser.cc" +#line 5399 "seclang-parser.cc" break; - case 406: // act: "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" -#line 2893 "seclang-parser.yy" + case 406: +#line 2904 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::EscapeSeqDecode(yystack_[0].value.as < std::string > ())); } -#line 5365 "seclang-parser.cc" +#line 5407 "seclang-parser.cc" break; - case 407: // act: "ACTION_TRANSFORMATION_HEX_ENCODE" -#line 2897 "seclang-parser.yy" + case 407: +#line 2908 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexEncode(yystack_[0].value.as < std::string > ())); } -#line 5373 "seclang-parser.cc" +#line 5415 "seclang-parser.cc" break; - case 408: // act: "ACTION_TRANSFORMATION_HEX_DECODE" -#line 2901 "seclang-parser.yy" + case 408: +#line 2912 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexDecode(yystack_[0].value.as < std::string > ())); } -#line 5381 "seclang-parser.cc" +#line 5423 "seclang-parser.cc" break; - case 409: // act: "ACTION_TRANSFORMATION_LOWERCASE" -#line 2905 "seclang-parser.yy" + case 409: +#line 2916 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::LowerCase(yystack_[0].value.as < std::string > ())); } -#line 5389 "seclang-parser.cc" +#line 5431 "seclang-parser.cc" break; - case 410: // act: "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" -#line 2909 "seclang-parser.yy" + case 410: +#line 2920 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::PhpArgsNames(yystack_[0].value.as < std::string > ())); } -#line 5397 "seclang-parser.cc" +#line 5439 "seclang-parser.cc" break; - case 411: // act: "ACTION_TRANSFORMATION_UPPERCASE" -#line 2913 "seclang-parser.yy" + case 411: +#line 2924 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UpperCase(yystack_[0].value.as < std::string > ())); } -#line 5405 "seclang-parser.cc" +#line 5447 "seclang-parser.cc" break; - case 412: // act: "ACTION_TRANSFORMATION_URL_DECODE_UNI" -#line 2917 "seclang-parser.yy" + case 412: +#line 2928 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecodeUni(yystack_[0].value.as < std::string > ())); } -#line 5413 "seclang-parser.cc" +#line 5455 "seclang-parser.cc" break; - case 413: // act: "ACTION_TRANSFORMATION_URL_DECODE" -#line 2921 "seclang-parser.yy" + case 413: +#line 2932 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecode(yystack_[0].value.as < std::string > ())); } -#line 5421 "seclang-parser.cc" +#line 5463 "seclang-parser.cc" break; - case 414: // act: "ACTION_TRANSFORMATION_URL_ENCODE" -#line 2925 "seclang-parser.yy" + case 414: +#line 2936 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlEncode(yystack_[0].value.as < std::string > ())); } -#line 5429 "seclang-parser.cc" +#line 5471 "seclang-parser.cc" break; - case 415: // act: "ACTION_TRANSFORMATION_NONE" -#line 2929 "seclang-parser.yy" + case 415: +#line 2940 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::None(yystack_[0].value.as < std::string > ())); } -#line 5437 "seclang-parser.cc" +#line 5479 "seclang-parser.cc" break; - case 416: // act: "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" -#line 2933 "seclang-parser.yy" + case 416: +#line 2944 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CompressWhitespace(yystack_[0].value.as < std::string > ())); } -#line 5445 "seclang-parser.cc" +#line 5487 "seclang-parser.cc" break; - case 417: // act: "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" -#line 2937 "seclang-parser.yy" + case 417: +#line 2948 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveWhitespace(yystack_[0].value.as < std::string > ())); } -#line 5453 "seclang-parser.cc" +#line 5495 "seclang-parser.cc" break; - case 418: // act: "ACTION_TRANSFORMATION_REPLACE_NULLS" -#line 2941 "seclang-parser.yy" + case 418: +#line 2952 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceNulls(yystack_[0].value.as < std::string > ())); } -#line 5461 "seclang-parser.cc" +#line 5503 "seclang-parser.cc" break; - case 419: // act: "ACTION_TRANSFORMATION_REMOVE_NULLS" -#line 2945 "seclang-parser.yy" + case 419: +#line 2956 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveNulls(yystack_[0].value.as < std::string > ())); } -#line 5469 "seclang-parser.cc" +#line 5511 "seclang-parser.cc" break; - case 420: // act: "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" -#line 2949 "seclang-parser.yy" + case 420: +#line 2960 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HtmlEntityDecode(yystack_[0].value.as < std::string > ())); } -#line 5477 "seclang-parser.cc" +#line 5519 "seclang-parser.cc" break; - case 421: // act: "ACTION_TRANSFORMATION_JS_DECODE" -#line 2953 "seclang-parser.yy" + case 421: +#line 2964 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::JsDecode(yystack_[0].value.as < std::string > ())); } -#line 5485 "seclang-parser.cc" +#line 5527 "seclang-parser.cc" break; - case 422: // act: "ACTION_TRANSFORMATION_CSS_DECODE" -#line 2957 "seclang-parser.yy" + case 422: +#line 2968 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CssDecode(yystack_[0].value.as < std::string > ())); } -#line 5493 "seclang-parser.cc" +#line 5535 "seclang-parser.cc" break; - case 423: // act: "ACTION_TRANSFORMATION_TRIM" -#line 2961 "seclang-parser.yy" + case 423: +#line 2972 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Trim(yystack_[0].value.as < std::string > ())); } -#line 5501 "seclang-parser.cc" +#line 5543 "seclang-parser.cc" break; - case 424: // act: "ACTION_TRANSFORMATION_TRIM_LEFT" -#line 2965 "seclang-parser.yy" + case 424: +#line 2976 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimLeft(yystack_[0].value.as < std::string > ())); } -#line 5509 "seclang-parser.cc" +#line 5551 "seclang-parser.cc" break; - case 425: // act: "ACTION_TRANSFORMATION_TRIM_RIGHT" -#line 2969 "seclang-parser.yy" + case 425: +#line 2980 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimRight(yystack_[0].value.as < std::string > ())); } -#line 5517 "seclang-parser.cc" +#line 5559 "seclang-parser.cc" break; - case 426: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" -#line 2973 "seclang-parser.yy" + case 426: +#line 2984 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePathWin(yystack_[0].value.as < std::string > ())); } -#line 5525 "seclang-parser.cc" +#line 5567 "seclang-parser.cc" break; - case 427: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH" -#line 2977 "seclang-parser.yy" + case 427: +#line 2988 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePath(yystack_[0].value.as < std::string > ())); } -#line 5533 "seclang-parser.cc" +#line 5575 "seclang-parser.cc" break; - case 428: // act: "ACTION_TRANSFORMATION_LENGTH" -#line 2981 "seclang-parser.yy" + case 428: +#line 2992 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Length(yystack_[0].value.as < std::string > ())); } -#line 5541 "seclang-parser.cc" +#line 5583 "seclang-parser.cc" break; - case 429: // act: "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" -#line 2985 "seclang-parser.yy" + case 429: +#line 2996 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Utf8ToUnicode(yystack_[0].value.as < std::string > ())); } -#line 5549 "seclang-parser.cc" +#line 5591 "seclang-parser.cc" break; - case 430: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" -#line 2989 "seclang-parser.yy" + case 430: +#line 3000 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveCommentsChar(yystack_[0].value.as < std::string > ())); } -#line 5557 "seclang-parser.cc" +#line 5599 "seclang-parser.cc" break; - case 431: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS" -#line 2993 "seclang-parser.yy" + case 431: +#line 3004 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveComments(yystack_[0].value.as < std::string > ())); } -#line 5565 "seclang-parser.cc" +#line 5607 "seclang-parser.cc" break; - case 432: // act: "ACTION_TRANSFORMATION_REPLACE_COMMENTS" -#line 2997 "seclang-parser.yy" + case 432: +#line 3008 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceComments(yystack_[0].value.as < std::string > ())); } -#line 5573 "seclang-parser.cc" +#line 5615 "seclang-parser.cc" break; - case 433: // setvar_action: "NOT" var -#line 3004 "seclang-parser.yy" + case 433: +#line 3015 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5581 "seclang-parser.cc" +#line 5623 "seclang-parser.cc" break; - case 434: // setvar_action: var -#line 3008 "seclang-parser.yy" + case 434: +#line 3019 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5589 "seclang-parser.cc" +#line 5631 "seclang-parser.cc" break; - case 435: // setvar_action: var SETVAR_OPERATION_EQUALS run_time_string -#line 3012 "seclang-parser.yy" + case 435: +#line 3023 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5597 "seclang-parser.cc" +#line 5639 "seclang-parser.cc" break; - case 436: // setvar_action: var SETVAR_OPERATION_EQUALS_PLUS run_time_string -#line 3016 "seclang-parser.yy" + case 436: +#line 3027 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5605 "seclang-parser.cc" +#line 5647 "seclang-parser.cc" break; - case 437: // setvar_action: var SETVAR_OPERATION_EQUALS_MINUS run_time_string -#line 3020 "seclang-parser.yy" + case 437: +#line 3031 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5613 "seclang-parser.cc" +#line 5655 "seclang-parser.cc" break; - case 438: // run_time_string: run_time_string "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3027 "seclang-parser.yy" + case 438: +#line 3038 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendText(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5622 "seclang-parser.cc" +#line 5664 "seclang-parser.cc" break; - case 439: // run_time_string: run_time_string var -#line 3032 "seclang-parser.yy" + case 439: +#line 3043 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5631 "seclang-parser.cc" +#line 5673 "seclang-parser.cc" break; - case 440: // run_time_string: "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3037 "seclang-parser.yy" + case 440: +#line 3048 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendText(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5641 "seclang-parser.cc" +#line 5683 "seclang-parser.cc" break; - case 441: // run_time_string: var -#line 3043 "seclang-parser.yy" + case 441: +#line 3054 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5651 "seclang-parser.cc" +#line 5693 "seclang-parser.cc" break; -#line 5655 "seclang-parser.cc" +#line 5697 "seclang-parser.cc" default: break; @@ -5668,6 +5710,7 @@ namespace yy { YY_SYMBOL_PRINT ("-> $$ =", yylhs); yypop_ (yylen); yylen = 0; + YY_STACK_PRINT (); // Shift the result of the reduction. yypush_ (YY_NULLPTR, YY_MOVE (yylhs)); @@ -5683,9 +5726,7 @@ namespace yy { if (!yyerrstatus_) { ++yynerrs_; - context yyctx (*this, yyla); - std::string msg = yysyntax_error_ (yyctx); - error (yyla.location, YY_MOVE (msg)); + error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla)); } @@ -5696,7 +5737,7 @@ namespace yy { error, discard it. */ // Return failure if at end of input. - if (yyla.kind () == symbol_kind::S_YYEOF) + if (yyla.type_get () == yyeof_) YYABORT; else if (!yyla.empty ()) { @@ -5722,7 +5763,6 @@ namespace yy { this YYERROR. */ yypop_ (yylen); yylen = 0; - YY_STACK_PRINT (); goto yyerrlab1; @@ -5731,33 +5771,31 @@ namespace yy { `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus_ = 3; // Each real token shifted decrements this. - // Pop stack until we find a state that shifts the error token. - for (;;) - { - yyn = yypact_[+yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - yyn += symbol_kind::S_YYerror; - if (0 <= yyn && yyn <= yylast_ - && yycheck_[yyn] == symbol_kind::S_YYerror) - { - yyn = yytable_[yyn]; - if (0 < yyn) - break; - } - } - - // Pop the current state because it cannot handle the error token. - if (yystack_.size () == 1) - YYABORT; - - yyerror_range[1].location = yystack_[0].location; - yy_destroy_ ("Error: popping", yystack_[0]); - yypop_ (); - YY_STACK_PRINT (); - } { stack_symbol_type error_token; + for (;;) + { + yyn = yypact_[+yystack_[0].state]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yy_error_token_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + // Pop the current state because it cannot handle the error token. + if (yystack_.size () == 1) + YYABORT; + + yyerror_range[1].location = yystack_[0].location; + yy_destroy_ ("Error: popping", yystack_[0]); + yypop_ (); + YY_STACK_PRINT (); + } yyerror_range[2].location = yyla.location; YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); @@ -5795,7 +5833,6 @@ namespace yy { /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ yypop_ (yylen); - YY_STACK_PRINT (); while (1 < yystack_.size ()) { yy_destroy_ ("Cleanup: popping", yystack_[0]); @@ -5829,100 +5866,18 @@ namespace yy { error (yyexc.location, yyexc.what ()); } - /* Return YYSTR after stripping away unnecessary quotes and - backslashes, so that it's suitable for yyerror. The heuristic is - that double-quoting is unnecessary unless the string contains an - apostrophe, a comma, or backslash (other than backslash-backslash). - YYSTR is taken from yytname. */ - std::string - seclang_parser::yytnamerr_ (const char *yystr) - { - if (*yystr == '"') - { - std::string yyr; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - yyr += *yyp; - break; - - case '"': - return yyr; - } - do_not_strip_quotes: ; - } - - return yystr; - } - + // Generate an error message. std::string - seclang_parser::symbol_name (symbol_kind_type yysymbol) - { - return yytnamerr_ (yytname_[yysymbol]); - } - - - - // seclang_parser::context. - seclang_parser::context::context (const seclang_parser& yyparser, const symbol_type& yyla) - : yyparser_ (yyparser) - , yyla_ (yyla) - {} - - int - seclang_parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const + seclang_parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const { - // Actual number of expected tokens - int yycount = 0; - - int yyn = yypact_[+yyparser_.yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - // Stay within bounds of both yycheck and yytname. - int yychecklim = yylast_ - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - for (int yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror - && !yy_table_value_is_error_ (yytable_[yyx + yyn])) - { - if (!yyarg) - ++yycount; - else if (yycount == yyargn) - return 0; - else - yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx); - } - } - - if (yyarg && yycount == 0 && 0 < yyargn) - yyarg[0] = symbol_kind::S_YYEMPTY; - return yycount; - } - - + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + std::ptrdiff_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - int - seclang_parser::yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const - { /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action @@ -5947,26 +5902,35 @@ namespace yy { one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ - - if (!yyctx.lookahead ().empty ()) + if (!yyla.empty ()) { - if (yyarg) - yyarg[0] = yyctx.token (); - int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); - return yyn + 1; - } - return 0; - } + symbol_number_type yytoken = yyla.type_get (); + yyarg[yycount++] = yytname_[yytoken]; - // Generate an error message. - std::string - seclang_parser::yysyntax_error_ (const context& yyctx) const - { - // Its maximum. - enum { YYARGS_MAX = 5 }; - // Arguments of yyformat. - symbol_kind_type yyarg[YYARGS_MAX]; - int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX); + int yyn = yypact_[+yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + // Stay within bounds of both yycheck and yytname. + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } char const* yyformat = YY_NULLPTR; switch (yycount) @@ -5991,7 +5955,7 @@ namespace yy { for (char const* yyp = yyformat; *yyp; ++yyp) if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) { - yyres += symbol_name (yyarg[yyi++]); + yyres += yytnamerr_ (yyarg[yyi++]); ++yyp; } else @@ -6959,13 +6923,13 @@ namespace yy { }; -#if YYDEBUG || 1 + // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - // First, the terminals, then, starting at \a YYNTOKENS, nonterminals. + // First, the terminals, then, starting at \a yyntokens_, nonterminals. const char* const seclang_parser::yytname_[] = { - "\"end of file\"", "error", "\"invalid token\"", "\",\"", + "\"end of file\"", "error", "$undefined", "\",\"", "\"CONFIG_CONTENT_INJECTION\"", "\"CONGIG_DIR_RESPONSE_BODY_MP_CLEAR\"", "PIPE", "NEW_LINE", "VAR_COUNT", "VAR_EXCLUSION", "VARIABLE_ARGS", "VARIABLE_ARGS_POST", "VARIABLE_ARGS_GET", "VARIABLE_FILES_SIZES", @@ -7140,8 +7104,6 @@ namespace yy { "variables_may_be_quoted", "var", "act", "setvar_action", "run_time_string", YY_NULLPTR }; -#endif - #if YYDEBUG const short @@ -7154,48 +7116,49 @@ namespace yy { 925, 929, 933, 937, 941, 945, 949, 954, 958, 962, 966, 970, 974, 979, 984, 988, 992, 996, 1000, 1004, 1008, 1012, 1016, 1020, 1024, 1028, 1032, 1036, 1040, 1044, - 1048, 1052, 1056, 1060, 1074, 1075, 1105, 1124, 1143, 1171, - 1228, 1235, 1239, 1243, 1247, 1251, 1255, 1259, 1263, 1272, - 1276, 1281, 1284, 1289, 1294, 1299, 1304, 1307, 1312, 1315, - 1320, 1325, 1328, 1333, 1338, 1343, 1348, 1353, 1358, 1363, - 1366, 1371, 1376, 1381, 1386, 1389, 1394, 1399, 1404, 1417, - 1430, 1443, 1456, 1469, 1495, 1523, 1535, 1555, 1582, 1588, - 1593, 1598, 1607, 1612, 1616, 1620, 1624, 1628, 1632, 1636, - 1641, 1646, 1658, 1664, 1668, 1672, 1683, 1692, 1693, 1700, - 1705, 1710, 1764, 1771, 1779, 1816, 1820, 1827, 1832, 1838, - 1844, 1850, 1857, 1867, 1871, 1875, 1879, 1883, 1887, 1891, - 1895, 1899, 1903, 1907, 1911, 1915, 1919, 1923, 1927, 1931, - 1935, 1939, 1943, 1947, 1951, 1955, 1959, 1963, 1967, 1971, - 1975, 1979, 1983, 1987, 1991, 1995, 1999, 2003, 2007, 2011, - 2015, 2019, 2023, 2027, 2031, 2035, 2039, 2043, 2047, 2051, - 2055, 2059, 2063, 2067, 2071, 2075, 2079, 2083, 2087, 2091, - 2095, 2099, 2103, 2107, 2111, 2115, 2119, 2123, 2127, 2131, - 2135, 2139, 2143, 2147, 2151, 2155, 2159, 2163, 2167, 2171, - 2175, 2179, 2183, 2187, 2191, 2195, 2199, 2203, 2207, 2211, - 2215, 2219, 2223, 2228, 2232, 2236, 2241, 2245, 2249, 2254, - 2259, 2263, 2267, 2271, 2275, 2279, 2283, 2287, 2291, 2295, - 2299, 2303, 2307, 2311, 2315, 2319, 2323, 2327, 2331, 2335, - 2339, 2343, 2347, 2351, 2355, 2359, 2363, 2367, 2371, 2375, - 2379, 2383, 2387, 2391, 2395, 2399, 2403, 2407, 2411, 2415, - 2419, 2423, 2427, 2431, 2435, 2439, 2443, 2447, 2451, 2455, - 2459, 2463, 2467, 2471, 2475, 2479, 2483, 2487, 2491, 2495, - 2499, 2507, 2514, 2521, 2528, 2535, 2542, 2549, 2556, 2563, - 2570, 2577, 2584, 2594, 2598, 2602, 2606, 2610, 2614, 2618, - 2622, 2627, 2632, 2637, 2641, 2645, 2649, 2653, 2658, 2663, - 2667, 2671, 2675, 2679, 2683, 2687, 2691, 2695, 2699, 2703, - 2707, 2711, 2715, 2720, 2724, 2728, 2732, 2736, 2740, 2744, - 2748, 2752, 2756, 2760, 2764, 2768, 2772, 2776, 2780, 2784, - 2788, 2792, 2796, 2800, 2804, 2808, 2812, 2816, 2820, 2824, - 2828, 2832, 2836, 2840, 2844, 2848, 2852, 2856, 2860, 2864, - 2868, 2872, 2876, 2880, 2884, 2888, 2892, 2896, 2900, 2904, - 2908, 2912, 2916, 2920, 2924, 2928, 2932, 2936, 2940, 2944, - 2948, 2952, 2956, 2960, 2964, 2968, 2972, 2976, 2980, 2984, - 2988, 2992, 2996, 3003, 3007, 3011, 3015, 3019, 3026, 3031, - 3036, 3042 + 1048, 1052, 1056, 1060, 1074, 1075, 1107, 1126, 1147, 1177, + 1239, 1246, 1250, 1254, 1258, 1262, 1266, 1270, 1274, 1283, + 1287, 1292, 1295, 1300, 1305, 1310, 1315, 1318, 1323, 1326, + 1331, 1336, 1339, 1344, 1349, 1354, 1359, 1364, 1369, 1374, + 1377, 1382, 1387, 1392, 1397, 1400, 1405, 1410, 1415, 1428, + 1441, 1454, 1467, 1480, 1506, 1534, 1546, 1566, 1593, 1599, + 1604, 1609, 1618, 1623, 1627, 1631, 1635, 1639, 1643, 1647, + 1652, 1657, 1669, 1675, 1679, 1683, 1694, 1703, 1704, 1711, + 1716, 1721, 1775, 1782, 1790, 1827, 1831, 1838, 1843, 1849, + 1855, 1861, 1868, 1878, 1882, 1886, 1890, 1894, 1898, 1902, + 1906, 1910, 1914, 1918, 1922, 1926, 1930, 1934, 1938, 1942, + 1946, 1950, 1954, 1958, 1962, 1966, 1970, 1974, 1978, 1982, + 1986, 1990, 1994, 1998, 2002, 2006, 2010, 2014, 2018, 2022, + 2026, 2030, 2034, 2038, 2042, 2046, 2050, 2054, 2058, 2062, + 2066, 2070, 2074, 2078, 2082, 2086, 2090, 2094, 2098, 2102, + 2106, 2110, 2114, 2118, 2122, 2126, 2130, 2134, 2138, 2142, + 2146, 2150, 2154, 2158, 2162, 2166, 2170, 2174, 2178, 2182, + 2186, 2190, 2194, 2198, 2202, 2206, 2210, 2214, 2218, 2222, + 2226, 2230, 2234, 2239, 2243, 2247, 2252, 2256, 2260, 2265, + 2270, 2274, 2278, 2282, 2286, 2290, 2294, 2298, 2302, 2306, + 2310, 2314, 2318, 2322, 2326, 2330, 2334, 2338, 2342, 2346, + 2350, 2354, 2358, 2362, 2366, 2370, 2374, 2378, 2382, 2386, + 2390, 2394, 2398, 2402, 2406, 2410, 2414, 2418, 2422, 2426, + 2430, 2434, 2438, 2442, 2446, 2450, 2454, 2458, 2462, 2466, + 2470, 2474, 2478, 2482, 2486, 2490, 2494, 2498, 2502, 2506, + 2510, 2518, 2525, 2532, 2539, 2546, 2553, 2560, 2567, 2574, + 2581, 2588, 2595, 2605, 2609, 2613, 2617, 2621, 2625, 2629, + 2633, 2638, 2643, 2648, 2652, 2656, 2660, 2664, 2669, 2674, + 2678, 2682, 2686, 2690, 2694, 2698, 2702, 2706, 2710, 2714, + 2718, 2722, 2726, 2731, 2735, 2739, 2743, 2747, 2751, 2755, + 2759, 2763, 2767, 2771, 2775, 2779, 2783, 2787, 2791, 2795, + 2799, 2803, 2807, 2811, 2815, 2819, 2823, 2827, 2831, 2835, + 2839, 2843, 2847, 2851, 2855, 2859, 2863, 2867, 2871, 2875, + 2879, 2883, 2887, 2891, 2895, 2899, 2903, 2907, 2911, 2915, + 2919, 2923, 2927, 2931, 2935, 2939, 2943, 2947, 2951, 2955, + 2959, 2963, 2967, 2971, 2975, 2979, 2983, 2987, 2991, 2995, + 2999, 3003, 3007, 3014, 3018, 3022, 3026, 3030, 3037, 3042, + 3047, 3053 }; + // Print the state stack on the debug stream. void - seclang_parser::yy_stack_print_ () const + seclang_parser::yystack_print_ () { *yycdebug_ << "Stack now"; for (stack_type::const_iterator @@ -7206,8 +7169,9 @@ namespace yy { *yycdebug_ << '\n'; } + // Report on the debug stream that the rule \a yyrule is going to be reduced. void - seclang_parser::yy_reduce_print_ (int yyrule) const + seclang_parser::yy_reduce_print_ (int yyrule) { int yylno = yyrline_[yyrule]; int yynrhs = yyr2_[yyrule]; @@ -7223,9 +7187,9 @@ namespace yy { } // yy -#line 7227 "seclang-parser.cc" +#line 7191 "seclang-parser.cc" -#line 3049 "seclang-parser.yy" +#line 3060 "seclang-parser.yy" void yy::seclang_parser::error (const location_type& l, const std::string& m) { diff --git a/src/parser/seclang-parser.hh b/src/parser/seclang-parser.hh index 1db831f2f6..a06db34e86 100644 --- a/src/parser/seclang-parser.hh +++ b/src/parser/seclang-parser.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Skeleton interface for Bison LALR(1) parsers in C++ @@ -38,9 +38,8 @@ // C++ LALR(1) parser skeleton written by Akim Demaille. -// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, -// especially those whose name start with YY_ or yy_. They are -// private implementation details that can be changed or removed. +// Undocumented macros, especially those whose name start with YY_, +// are private implementation details. Do not rely on them. #ifndef YY_YY_SECLANG_PARSER_HH_INCLUDED # define YY_YY_SECLANG_PARSER_HH_INCLUDED @@ -351,7 +350,7 @@ using namespace modsecurity::operators; a = std::move(c); -#line 355 "seclang-parser.hh" +#line 354 "seclang-parser.hh" # include # include // std::abort @@ -485,7 +484,7 @@ using namespace modsecurity::operators; #endif namespace yy { -#line 489 "seclang-parser.hh" +#line 488 "seclang-parser.hh" @@ -521,13 +520,6 @@ namespace yy { new (yyas_ ()) T (YY_MOVE (t)); } -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - semantic_type (const self_type&) = delete; - /// Non copyable. - self_type& operator= (const self_type&) = delete; -#endif - /// Destruction, allowed only if empty. ~semantic_type () YY_NOEXCEPT { @@ -671,12 +663,9 @@ namespace yy { } private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. - semantic_type (const self_type&); - /// Non copyable. + /// Prohibit blind copies. self_type& operator= (const self_type&); -#endif + semantic_type (const self_type&); /// Accessor to raw memory as \a T. template @@ -963,747 +952,372 @@ namespace yy { location_type location; }; - /// Token kinds. + /// Tokens. struct token { - enum token_kind_type - { - TOK_YYEMPTY = -2, - TOK_END = 0, // "end of file" - TOK_YYerror = 256, // error - TOK_YYUNDEF = 257, // "invalid token" - TOK_COMMA = 258, // "," - TOK_CONFIG_CONTENT_INJECTION = 259, // "CONFIG_CONTENT_INJECTION" - TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR = 260, // "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" - TOK_PIPE = 261, // PIPE - TOK_NEW_LINE = 262, // NEW_LINE - TOK_VAR_COUNT = 263, // VAR_COUNT - TOK_VAR_EXCLUSION = 264, // VAR_EXCLUSION - TOK_VARIABLE_ARGS = 265, // VARIABLE_ARGS - TOK_VARIABLE_ARGS_POST = 266, // VARIABLE_ARGS_POST - TOK_VARIABLE_ARGS_GET = 267, // VARIABLE_ARGS_GET - TOK_VARIABLE_FILES_SIZES = 268, // VARIABLE_FILES_SIZES - TOK_VARIABLE_FILES_NAMES = 269, // VARIABLE_FILES_NAMES - TOK_VARIABLE_FILES_TMP_CONTENT = 270, // VARIABLE_FILES_TMP_CONTENT - TOK_VARIABLE_MULTIPART_FILENAME = 271, // VARIABLE_MULTIPART_FILENAME - TOK_VARIABLE_MULTIPART_NAME = 272, // VARIABLE_MULTIPART_NAME - TOK_VARIABLE_MATCHED_VARS_NAMES = 273, // VARIABLE_MATCHED_VARS_NAMES - TOK_VARIABLE_MATCHED_VARS = 274, // VARIABLE_MATCHED_VARS - TOK_VARIABLE_FILES = 275, // VARIABLE_FILES - TOK_VARIABLE_REQUEST_COOKIES = 276, // VARIABLE_REQUEST_COOKIES - TOK_VARIABLE_REQUEST_HEADERS = 277, // VARIABLE_REQUEST_HEADERS - TOK_VARIABLE_RESPONSE_HEADERS = 278, // VARIABLE_RESPONSE_HEADERS - TOK_VARIABLE_GEO = 279, // VARIABLE_GEO - TOK_VARIABLE_REQUEST_COOKIES_NAMES = 280, // VARIABLE_REQUEST_COOKIES_NAMES - TOK_VARIABLE_ARGS_COMBINED_SIZE = 281, // VARIABLE_ARGS_COMBINED_SIZE - TOK_VARIABLE_ARGS_GET_NAMES = 282, // VARIABLE_ARGS_GET_NAMES - TOK_VARIABLE_RULE = 283, // VARIABLE_RULE - TOK_VARIABLE_ARGS_NAMES = 284, // "Variable ARGS_NAMES" - TOK_VARIABLE_ARGS_POST_NAMES = 285, // VARIABLE_ARGS_POST_NAMES - TOK_VARIABLE_AUTH_TYPE = 286, // "AUTH_TYPE" - TOK_VARIABLE_FILES_COMBINED_SIZE = 287, // "FILES_COMBINED_SIZE" - TOK_VARIABLE_FILES_TMP_NAMES = 288, // "FILES_TMPNAMES" - TOK_VARIABLE_FULL_REQUEST = 289, // "FULL_REQUEST" - TOK_VARIABLE_FULL_REQUEST_LENGTH = 290, // "FULL_REQUEST_LENGTH" - TOK_VARIABLE_INBOUND_DATA_ERROR = 291, // "INBOUND_DATA_ERROR" - TOK_VARIABLE_MATCHED_VAR = 292, // "MATCHED_VAR" - TOK_VARIABLE_MATCHED_VAR_NAME = 293, // "MATCHED_VAR_NAME" - TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED = 294, // VARIABLE_MULTIPART_BOUNDARY_QUOTED - TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE = 295, // VARIABLE_MULTIPART_BOUNDARY_WHITESPACE - TOK_VARIABLE_MULTIPART_CRLF_LF_LINES = 296, // "MULTIPART_CRLF_LF_LINES" - TOK_VARIABLE_MULTIPART_DATA_AFTER = 297, // "MULTIPART_DATA_AFTER" - TOK_VARIABLE_MULTIPART_DATA_BEFORE = 298, // VARIABLE_MULTIPART_DATA_BEFORE - TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED = 299, // "MULTIPART_FILE_LIMIT_EXCEEDED" - TOK_VARIABLE_MULTIPART_HEADER_FOLDING = 300, // "MULTIPART_HEADER_FOLDING" - TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING = 301, // "MULTIPART_INVALID_HEADER_FOLDING" - TOK_VARIABLE_MULTIPART_INVALID_PART = 302, // VARIABLE_MULTIPART_INVALID_PART - TOK_VARIABLE_MULTIPART_INVALID_QUOTING = 303, // "MULTIPART_INVALID_QUOTING" - TOK_VARIABLE_MULTIPART_LF_LINE = 304, // VARIABLE_MULTIPART_LF_LINE - TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON = 305, // VARIABLE_MULTIPART_MISSING_SEMICOLON - TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING = 306, // VARIABLE_MULTIPART_SEMICOLON_MISSING - TOK_VARIABLE_MULTIPART_STRICT_ERROR = 307, // "MULTIPART_STRICT_ERROR" - TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY = 308, // "MULTIPART_UNMATCHED_BOUNDARY" - TOK_VARIABLE_OUTBOUND_DATA_ERROR = 309, // "OUTBOUND_DATA_ERROR" - TOK_VARIABLE_PATH_INFO = 310, // "PATH_INFO" - TOK_VARIABLE_QUERY_STRING = 311, // "QUERY_STRING" - TOK_VARIABLE_REMOTE_ADDR = 312, // "REMOTE_ADDR" - TOK_VARIABLE_REMOTE_HOST = 313, // "REMOTE_HOST" - TOK_VARIABLE_REMOTE_PORT = 314, // "REMOTE_PORT" - TOK_VARIABLE_REQBODY_ERROR_MSG = 315, // "REQBODY_ERROR_MSG" - TOK_VARIABLE_REQBODY_ERROR = 316, // "REQBODY_ERROR" - TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG = 317, // "REQBODY_PROCESSOR_ERROR_MSG" - TOK_VARIABLE_REQBODY_PROCESSOR_ERROR = 318, // "REQBODY_PROCESSOR_ERROR" - TOK_VARIABLE_REQBODY_PROCESSOR = 319, // "REQBODY_PROCESSOR" - TOK_VARIABLE_REQUEST_BASENAME = 320, // "REQUEST_BASENAME" - TOK_VARIABLE_REQUEST_BODY_LENGTH = 321, // "REQUEST_BODY_LENGTH" - TOK_VARIABLE_REQUEST_BODY = 322, // "REQUEST_BODY" - TOK_VARIABLE_REQUEST_FILE_NAME = 323, // "REQUEST_FILENAME" - TOK_VARIABLE_REQUEST_HEADERS_NAMES = 324, // VARIABLE_REQUEST_HEADERS_NAMES - TOK_VARIABLE_REQUEST_LINE = 325, // "REQUEST_LINE" - TOK_VARIABLE_REQUEST_METHOD = 326, // "REQUEST_METHOD" - TOK_VARIABLE_REQUEST_PROTOCOL = 327, // "REQUEST_PROTOCOL" - TOK_VARIABLE_REQUEST_URI_RAW = 328, // "REQUEST_URI_RAW" - TOK_VARIABLE_REQUEST_URI = 329, // "REQUEST_URI" - TOK_VARIABLE_RESOURCE = 330, // "RESOURCE" - TOK_VARIABLE_RESPONSE_BODY = 331, // "RESPONSE_BODY" - TOK_VARIABLE_RESPONSE_CONTENT_LENGTH = 332, // "RESPONSE_CONTENT_LENGTH" - TOK_VARIABLE_RESPONSE_CONTENT_TYPE = 333, // VARIABLE_RESPONSE_CONTENT_TYPE - TOK_VARIABLE_RESPONSE_HEADERS_NAMES = 334, // VARIABLE_RESPONSE_HEADERS_NAMES - TOK_VARIABLE_RESPONSE_PROTOCOL = 335, // "RESPONSE_PROTOCOL" - TOK_VARIABLE_RESPONSE_STATUS = 336, // "RESPONSE_STATUS" - TOK_VARIABLE_SERVER_ADDR = 337, // "SERVER_ADDR" - TOK_VARIABLE_SERVER_NAME = 338, // "SERVER_NAME" - TOK_VARIABLE_SERVER_PORT = 339, // "SERVER_PORT" - TOK_VARIABLE_SESSION_ID = 340, // "SESSIONID" - TOK_VARIABLE_UNIQUE_ID = 341, // "UNIQUE_ID" - TOK_VARIABLE_URL_ENCODED_ERROR = 342, // "URLENCODED_ERROR" - TOK_VARIABLE_USER_ID = 343, // "USERID" - TOK_VARIABLE_WEB_APP_ID = 344, // "WEBAPPID" - TOK_VARIABLE_STATUS = 345, // "VARIABLE_STATUS" - TOK_VARIABLE_STATUS_LINE = 346, // "VARIABLE_STATUS_LINE" - TOK_VARIABLE_IP = 347, // "VARIABLE_IP" - TOK_VARIABLE_GLOBAL = 348, // "VARIABLE_GLOBAL" - TOK_VARIABLE_TX = 349, // "VARIABLE_TX" - TOK_VARIABLE_SESSION = 350, // "VARIABLE_SESSION" - TOK_VARIABLE_USER = 351, // "VARIABLE_USER" - TOK_RUN_TIME_VAR_ENV = 352, // "RUN_TIME_VAR_ENV" - TOK_RUN_TIME_VAR_XML = 353, // "RUN_TIME_VAR_XML" - TOK_ACTION_SETVAR = 354, // "SetVar" - TOK_SETVAR_OPERATION_EQUALS = 355, // SETVAR_OPERATION_EQUALS - TOK_SETVAR_OPERATION_EQUALS_PLUS = 356, // SETVAR_OPERATION_EQUALS_PLUS - TOK_SETVAR_OPERATION_EQUALS_MINUS = 357, // SETVAR_OPERATION_EQUALS_MINUS - TOK_NOT = 358, // "NOT" - TOK_OPERATOR_BEGINS_WITH = 359, // "OPERATOR_BEGINS_WITH" - TOK_OPERATOR_CONTAINS = 360, // "OPERATOR_CONTAINS" - TOK_OPERATOR_CONTAINS_WORD = 361, // "OPERATOR_CONTAINS_WORD" - TOK_OPERATOR_DETECT_SQLI = 362, // "OPERATOR_DETECT_SQLI" - TOK_OPERATOR_DETECT_XSS = 363, // "OPERATOR_DETECT_XSS" - TOK_OPERATOR_ENDS_WITH = 364, // "OPERATOR_ENDS_WITH" - TOK_OPERATOR_EQ = 365, // "OPERATOR_EQ" - TOK_OPERATOR_FUZZY_HASH = 366, // "OPERATOR_FUZZY_HASH" - TOK_OPERATOR_GEOLOOKUP = 367, // "OPERATOR_GEOLOOKUP" - TOK_OPERATOR_GE = 368, // "OPERATOR_GE" - TOK_OPERATOR_GSB_LOOKUP = 369, // "OPERATOR_GSB_LOOKUP" - TOK_OPERATOR_GT = 370, // "OPERATOR_GT" - TOK_OPERATOR_INSPECT_FILE = 371, // "OPERATOR_INSPECT_FILE" - TOK_OPERATOR_IP_MATCH_FROM_FILE = 372, // "OPERATOR_IP_MATCH_FROM_FILE" - TOK_OPERATOR_IP_MATCH = 373, // "OPERATOR_IP_MATCH" - TOK_OPERATOR_LE = 374, // "OPERATOR_LE" - TOK_OPERATOR_LT = 375, // "OPERATOR_LT" - TOK_OPERATOR_PM_FROM_FILE = 376, // "OPERATOR_PM_FROM_FILE" - TOK_OPERATOR_PM = 377, // "OPERATOR_PM" - TOK_OPERATOR_RBL = 378, // "OPERATOR_RBL" - TOK_OPERATOR_RSUB = 379, // "OPERATOR_RSUB" - TOK_OPERATOR_RX_CONTENT_ONLY = 380, // "Operator RX (content only)" - TOK_OPERATOR_RX = 381, // "OPERATOR_RX" - TOK_OPERATOR_RX_GLOBAL = 382, // "OPERATOR_RX_GLOBAL" - TOK_OPERATOR_STR_EQ = 383, // "OPERATOR_STR_EQ" - TOK_OPERATOR_STR_MATCH = 384, // "OPERATOR_STR_MATCH" - TOK_OPERATOR_UNCONDITIONAL_MATCH = 385, // "OPERATOR_UNCONDITIONAL_MATCH" - TOK_OPERATOR_VALIDATE_BYTE_RANGE = 386, // "OPERATOR_VALIDATE_BYTE_RANGE" - TOK_OPERATOR_VALIDATE_DTD = 387, // "OPERATOR_VALIDATE_DTD" - TOK_OPERATOR_VALIDATE_HASH = 388, // "OPERATOR_VALIDATE_HASH" - TOK_OPERATOR_VALIDATE_SCHEMA = 389, // "OPERATOR_VALIDATE_SCHEMA" - TOK_OPERATOR_VALIDATE_URL_ENCODING = 390, // "OPERATOR_VALIDATE_URL_ENCODING" - TOK_OPERATOR_VALIDATE_UTF8_ENCODING = 391, // "OPERATOR_VALIDATE_UTF8_ENCODING" - TOK_OPERATOR_VERIFY_CC = 392, // "OPERATOR_VERIFY_CC" - TOK_OPERATOR_VERIFY_CPF = 393, // "OPERATOR_VERIFY_CPF" - TOK_OPERATOR_VERIFY_SSN = 394, // "OPERATOR_VERIFY_SSN" - TOK_OPERATOR_VERIFY_SVNR = 395, // "OPERATOR_VERIFY_SVNR" - TOK_OPERATOR_WITHIN = 396, // "OPERATOR_WITHIN" - TOK_CONFIG_DIR_AUDIT_LOG_FMT = 397, // CONFIG_DIR_AUDIT_LOG_FMT - TOK_JSON = 398, // JSON - TOK_NATIVE = 399, // NATIVE - TOK_ACTION_CTL_RULE_ENGINE = 400, // "ACTION_CTL_RULE_ENGINE" - TOK_ACTION_ACCURACY = 401, // "Accuracy" - TOK_ACTION_ALLOW = 402, // "Allow" - TOK_ACTION_APPEND = 403, // "Append" - TOK_ACTION_AUDIT_LOG = 404, // "AuditLog" - TOK_ACTION_BLOCK = 405, // "Block" - TOK_ACTION_CAPTURE = 406, // "Capture" - TOK_ACTION_CHAIN = 407, // "Chain" - TOK_ACTION_CTL_AUDIT_ENGINE = 408, // "ACTION_CTL_AUDIT_ENGINE" - TOK_ACTION_CTL_AUDIT_LOG_PARTS = 409, // "ACTION_CTL_AUDIT_LOG_PARTS" - TOK_ACTION_CTL_BDY_JSON = 410, // "ACTION_CTL_BDY_JSON" - TOK_ACTION_CTL_BDY_XML = 411, // "ACTION_CTL_BDY_XML" - TOK_ACTION_CTL_BDY_URLENCODED = 412, // "ACTION_CTL_BDY_URLENCODED" - TOK_ACTION_CTL_FORCE_REQ_BODY_VAR = 413, // "ACTION_CTL_FORCE_REQ_BODY_VAR" - TOK_ACTION_CTL_REQUEST_BODY_ACCESS = 414, // "ACTION_CTL_REQUEST_BODY_ACCESS" - TOK_ACTION_CTL_RULE_REMOVE_BY_ID = 415, // "ACTION_CTL_RULE_REMOVE_BY_ID" - TOK_ACTION_CTL_RULE_REMOVE_BY_TAG = 416, // "ACTION_CTL_RULE_REMOVE_BY_TAG" - TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID = 417, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG = 418, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - TOK_ACTION_DENY = 419, // "Deny" - TOK_ACTION_DEPRECATE_VAR = 420, // "DeprecateVar" - TOK_ACTION_DROP = 421, // "Drop" - TOK_ACTION_EXEC = 422, // "Exec" - TOK_ACTION_EXPIRE_VAR = 423, // "ExpireVar" - TOK_ACTION_ID = 424, // "Id" - TOK_ACTION_INITCOL = 425, // "InitCol" - TOK_ACTION_LOG = 426, // "Log" - TOK_ACTION_LOG_DATA = 427, // "LogData" - TOK_ACTION_MATURITY = 428, // "Maturity" - TOK_ACTION_MSG = 429, // "Msg" - TOK_ACTION_MULTI_MATCH = 430, // "MultiMatch" - TOK_ACTION_NO_AUDIT_LOG = 431, // "NoAuditLog" - TOK_ACTION_NO_LOG = 432, // "NoLog" - TOK_ACTION_PASS = 433, // "Pass" - TOK_ACTION_PAUSE = 434, // "Pause" - TOK_ACTION_PHASE = 435, // "Phase" - TOK_ACTION_PREPEND = 436, // "Prepend" - TOK_ACTION_PROXY = 437, // "Proxy" - TOK_ACTION_REDIRECT = 438, // "Redirect" - TOK_ACTION_REV = 439, // "Rev" - TOK_ACTION_SANITISE_ARG = 440, // "SanitiseArg" - TOK_ACTION_SANITISE_MATCHED = 441, // "SanitiseMatched" - TOK_ACTION_SANITISE_MATCHED_BYTES = 442, // "SanitiseMatchedBytes" - TOK_ACTION_SANITISE_REQUEST_HEADER = 443, // "SanitiseRequestHeader" - TOK_ACTION_SANITISE_RESPONSE_HEADER = 444, // "SanitiseResponseHeader" - TOK_ACTION_SETENV = 445, // "SetEnv" - TOK_ACTION_SETRSC = 446, // "SetRsc" - TOK_ACTION_SETSID = 447, // "SetSid" - TOK_ACTION_SETUID = 448, // "SetUID" - TOK_ACTION_SEVERITY = 449, // "Severity" - TOK_ACTION_SKIP = 450, // "Skip" - TOK_ACTION_SKIP_AFTER = 451, // "SkipAfter" - TOK_ACTION_STATUS = 452, // "Status" - TOK_ACTION_TAG = 453, // "Tag" - TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE = 454, // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - TOK_ACTION_TRANSFORMATION_BASE_64_DECODE = 455, // "ACTION_TRANSFORMATION_BASE_64_DECODE" - TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT = 456, // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - TOK_ACTION_TRANSFORMATION_CMD_LINE = 457, // "ACTION_TRANSFORMATION_CMD_LINE" - TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE = 458, // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - TOK_ACTION_TRANSFORMATION_CSS_DECODE = 459, // "ACTION_TRANSFORMATION_CSS_DECODE" - TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE = 460, // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - TOK_ACTION_TRANSFORMATION_HEX_ENCODE = 461, // "ACTION_TRANSFORMATION_HEX_ENCODE" - TOK_ACTION_TRANSFORMATION_HEX_DECODE = 462, // "ACTION_TRANSFORMATION_HEX_DECODE" - TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE = 463, // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - TOK_ACTION_TRANSFORMATION_JS_DECODE = 464, // "ACTION_TRANSFORMATION_JS_DECODE" - TOK_ACTION_TRANSFORMATION_LENGTH = 465, // "ACTION_TRANSFORMATION_LENGTH" - TOK_ACTION_TRANSFORMATION_LOWERCASE = 466, // "ACTION_TRANSFORMATION_LOWERCASE" - TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES = 467, // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - TOK_ACTION_TRANSFORMATION_MD5 = 468, // "ACTION_TRANSFORMATION_MD5" - TOK_ACTION_TRANSFORMATION_NONE = 469, // "ACTION_TRANSFORMATION_NONE" - TOK_ACTION_TRANSFORMATION_NORMALISE_PATH = 470, // "ACTION_TRANSFORMATION_NORMALISE_PATH" - TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 471, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 472, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 473, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 474, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 475, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 476, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - TOK_ACTION_TRANSFORMATION_REMOVE_NULLS = 477, // "ACTION_TRANSFORMATION_REMOVE_NULLS" - TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 478, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 479, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - TOK_ACTION_TRANSFORMATION_REPLACE_NULLS = 480, // "ACTION_TRANSFORMATION_REPLACE_NULLS" - TOK_ACTION_TRANSFORMATION_SHA1 = 481, // "ACTION_TRANSFORMATION_SHA1" - TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 482, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - TOK_ACTION_TRANSFORMATION_TRIM = 483, // "ACTION_TRANSFORMATION_TRIM" - TOK_ACTION_TRANSFORMATION_TRIM_LEFT = 484, // "ACTION_TRANSFORMATION_TRIM_LEFT" - TOK_ACTION_TRANSFORMATION_TRIM_RIGHT = 485, // "ACTION_TRANSFORMATION_TRIM_RIGHT" - TOK_ACTION_TRANSFORMATION_UPPERCASE = 486, // "ACTION_TRANSFORMATION_UPPERCASE" - TOK_ACTION_TRANSFORMATION_URL_ENCODE = 487, // "ACTION_TRANSFORMATION_URL_ENCODE" - TOK_ACTION_TRANSFORMATION_URL_DECODE = 488, // "ACTION_TRANSFORMATION_URL_DECODE" - TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI = 489, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 490, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - TOK_ACTION_VER = 491, // "Ver" - TOK_ACTION_XMLNS = 492, // "xmlns" - TOK_CONFIG_COMPONENT_SIG = 493, // "CONFIG_COMPONENT_SIG" - TOK_CONFIG_CONN_ENGINE = 494, // "CONFIG_CONN_ENGINE" - TOK_CONFIG_SEC_ARGUMENT_SEPARATOR = 495, // "CONFIG_SEC_ARGUMENT_SEPARATOR" - TOK_CONFIG_SEC_WEB_APP_ID = 496, // "CONFIG_SEC_WEB_APP_ID" - TOK_CONFIG_SEC_SERVER_SIG = 497, // "CONFIG_SEC_SERVER_SIG" - TOK_CONFIG_DIR_AUDIT_DIR = 498, // "CONFIG_DIR_AUDIT_DIR" - TOK_CONFIG_DIR_AUDIT_DIR_MOD = 499, // "CONFIG_DIR_AUDIT_DIR_MOD" - TOK_CONFIG_DIR_AUDIT_ENG = 500, // "CONFIG_DIR_AUDIT_ENG" - TOK_CONFIG_DIR_AUDIT_FLE_MOD = 501, // "CONFIG_DIR_AUDIT_FLE_MOD" - TOK_CONFIG_DIR_AUDIT_LOG = 502, // "CONFIG_DIR_AUDIT_LOG" - TOK_CONFIG_DIR_AUDIT_LOG2 = 503, // "CONFIG_DIR_AUDIT_LOG2" - TOK_CONFIG_DIR_AUDIT_LOG_P = 504, // "CONFIG_DIR_AUDIT_LOG_P" - TOK_CONFIG_DIR_AUDIT_STS = 505, // "CONFIG_DIR_AUDIT_STS" - TOK_CONFIG_DIR_AUDIT_TPE = 506, // "CONFIG_DIR_AUDIT_TPE" - TOK_CONFIG_DIR_DEBUG_LOG = 507, // "CONFIG_DIR_DEBUG_LOG" - TOK_CONFIG_DIR_DEBUG_LVL = 508, // "CONFIG_DIR_DEBUG_LVL" - TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS = 509, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 510, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - TOK_CONFIG_SEC_HASH_ENGINE = 511, // "CONFIG_SEC_HASH_ENGINE" - TOK_CONFIG_SEC_HASH_KEY = 512, // "CONFIG_SEC_HASH_KEY" - TOK_CONFIG_SEC_HASH_PARAM = 513, // "CONFIG_SEC_HASH_PARAM" - TOK_CONFIG_SEC_HASH_METHOD_RX = 514, // "CONFIG_SEC_HASH_METHOD_RX" - TOK_CONFIG_SEC_HASH_METHOD_PM = 515, // "CONFIG_SEC_HASH_METHOD_PM" - TOK_CONFIG_SEC_CHROOT_DIR = 516, // "CONFIG_SEC_CHROOT_DIR" - TOK_CONFIG_DIR_GEO_DB = 517, // "CONFIG_DIR_GEO_DB" - TOK_CONFIG_DIR_GSB_DB = 518, // "CONFIG_DIR_GSB_DB" - TOK_CONFIG_SEC_GUARDIAN_LOG = 519, // "CONFIG_SEC_GUARDIAN_LOG" - TOK_CONFIG_DIR_PCRE_MATCH_LIMIT = 520, // "CONFIG_DIR_PCRE_MATCH_LIMIT" - TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 521, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - TOK_CONFIG_SEC_CONN_R_STATE_LIMIT = 522, // "CONFIG_SEC_CONN_R_STATE_LIMIT" - TOK_CONFIG_SEC_CONN_W_STATE_LIMIT = 523, // "CONFIG_SEC_CONN_W_STATE_LIMIT" - TOK_CONFIG_SEC_SENSOR_ID = 524, // "CONFIG_SEC_SENSOR_ID" - TOK_CONFIG_DIR_ARGS_LIMIT = 525, // "CONFIG_DIR_ARGS_LIMIT" - TOK_CONFIG_DIR_REQ_BODY = 526, // "CONFIG_DIR_REQ_BODY" - TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 527, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - TOK_CONFIG_DIR_REQ_BODY_LIMIT = 528, // "CONFIG_DIR_REQ_BODY_LIMIT" - TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 529, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 530, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - TOK_CONFIG_DIR_RES_BODY = 531, // "CONFIG_DIR_RES_BODY" - TOK_CONFIG_DIR_RES_BODY_LIMIT = 532, // "CONFIG_DIR_RES_BODY_LIMIT" - TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 533, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - TOK_CONFIG_SEC_RULE_INHERITANCE = 534, // "CONFIG_SEC_RULE_INHERITANCE" - TOK_CONFIG_SEC_RULE_PERF_TIME = 535, // "CONFIG_SEC_RULE_PERF_TIME" - TOK_CONFIG_DIR_RULE_ENG = 536, // "CONFIG_DIR_RULE_ENG" - TOK_CONFIG_DIR_SEC_ACTION = 537, // "CONFIG_DIR_SEC_ACTION" - TOK_CONFIG_DIR_SEC_DEFAULT_ACTION = 538, // "CONFIG_DIR_SEC_DEFAULT_ACTION" - TOK_CONFIG_DIR_SEC_MARKER = 539, // "CONFIG_DIR_SEC_MARKER" - TOK_CONFIG_DIR_UNICODE_MAP_FILE = 540, // "CONFIG_DIR_UNICODE_MAP_FILE" - TOK_CONFIG_DIR_UNICODE_CODE_PAGE = 541, // "CONFIG_DIR_UNICODE_CODE_PAGE" - TOK_CONFIG_SEC_COLLECTION_TIMEOUT = 542, // "CONFIG_SEC_COLLECTION_TIMEOUT" - TOK_CONFIG_SEC_HTTP_BLKEY = 543, // "CONFIG_SEC_HTTP_BLKEY" - TOK_CONFIG_SEC_INTERCEPT_ON_ERROR = 544, // "CONFIG_SEC_INTERCEPT_ON_ERROR" - TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 545, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - TOK_CONFIG_SEC_RULE_REMOVE_BY_ID = 546, // "CONFIG_SEC_RULE_REMOVE_BY_ID" - TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG = 547, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG = 548, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 549, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 550, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 551, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 552, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - TOK_CONFIG_UPDLOAD_KEEP_FILES = 553, // "CONFIG_UPDLOAD_KEEP_FILES" - TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES = 554, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - TOK_CONFIG_UPLOAD_DIR = 555, // "CONFIG_UPLOAD_DIR" - TOK_CONFIG_UPLOAD_FILE_LIMIT = 556, // "CONFIG_UPLOAD_FILE_LIMIT" - TOK_CONFIG_UPLOAD_FILE_MODE = 557, // "CONFIG_UPLOAD_FILE_MODE" - TOK_CONFIG_VALUE_ABORT = 558, // "CONFIG_VALUE_ABORT" - TOK_CONFIG_VALUE_DETC = 559, // "CONFIG_VALUE_DETC" - TOK_CONFIG_VALUE_HTTPS = 560, // "CONFIG_VALUE_HTTPS" - TOK_CONFIG_VALUE_OFF = 561, // "CONFIG_VALUE_OFF" - TOK_CONFIG_VALUE_ON = 562, // "CONFIG_VALUE_ON" - TOK_CONFIG_VALUE_PARALLEL = 563, // "CONFIG_VALUE_PARALLEL" - TOK_CONFIG_VALUE_PROCESS_PARTIAL = 564, // "CONFIG_VALUE_PROCESS_PARTIAL" - TOK_CONFIG_VALUE_REJECT = 565, // "CONFIG_VALUE_REJECT" - TOK_CONFIG_VALUE_RELEVANT_ONLY = 566, // "CONFIG_VALUE_RELEVANT_ONLY" - TOK_CONFIG_VALUE_SERIAL = 567, // "CONFIG_VALUE_SERIAL" - TOK_CONFIG_VALUE_WARN = 568, // "CONFIG_VALUE_WARN" - TOK_CONFIG_XML_EXTERNAL_ENTITY = 569, // "CONFIG_XML_EXTERNAL_ENTITY" - TOK_CONGIG_DIR_RESPONSE_BODY_MP = 570, // "CONGIG_DIR_RESPONSE_BODY_MP" - TOK_CONGIG_DIR_SEC_ARG_SEP = 571, // "CONGIG_DIR_SEC_ARG_SEP" - TOK_CONGIG_DIR_SEC_COOKIE_FORMAT = 572, // "CONGIG_DIR_SEC_COOKIE_FORMAT" - TOK_CONFIG_SEC_COOKIEV0_SEPARATOR = 573, // "CONFIG_SEC_COOKIEV0_SEPARATOR" - TOK_CONGIG_DIR_SEC_DATA_DIR = 574, // "CONGIG_DIR_SEC_DATA_DIR" - TOK_CONGIG_DIR_SEC_STATUS_ENGINE = 575, // "CONGIG_DIR_SEC_STATUS_ENGINE" - TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 576, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 577, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - TOK_CONGIG_DIR_SEC_TMP_DIR = 578, // "CONGIG_DIR_SEC_TMP_DIR" - TOK_DIRECTIVE = 579, // "DIRECTIVE" - TOK_DIRECTIVE_SECRULESCRIPT = 580, // "DIRECTIVE_SECRULESCRIPT" - TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION = 581, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - TOK_QUOTATION_MARK = 582, // "QUOTATION_MARK" - TOK_RUN_TIME_VAR_BLD = 583, // "RUN_TIME_VAR_BLD" - TOK_RUN_TIME_VAR_DUR = 584, // "RUN_TIME_VAR_DUR" - TOK_RUN_TIME_VAR_HSV = 585, // "RUN_TIME_VAR_HSV" - TOK_RUN_TIME_VAR_REMOTE_USER = 586, // "RUN_TIME_VAR_REMOTE_USER" - TOK_RUN_TIME_VAR_TIME = 587, // "RUN_TIME_VAR_TIME" - TOK_RUN_TIME_VAR_TIME_DAY = 588, // "RUN_TIME_VAR_TIME_DAY" - TOK_RUN_TIME_VAR_TIME_EPOCH = 589, // "RUN_TIME_VAR_TIME_EPOCH" - TOK_RUN_TIME_VAR_TIME_HOUR = 590, // "RUN_TIME_VAR_TIME_HOUR" - TOK_RUN_TIME_VAR_TIME_MIN = 591, // "RUN_TIME_VAR_TIME_MIN" - TOK_RUN_TIME_VAR_TIME_MON = 592, // "RUN_TIME_VAR_TIME_MON" - TOK_RUN_TIME_VAR_TIME_SEC = 593, // "RUN_TIME_VAR_TIME_SEC" - TOK_RUN_TIME_VAR_TIME_WDAY = 594, // "RUN_TIME_VAR_TIME_WDAY" - TOK_RUN_TIME_VAR_TIME_YEAR = 595, // "RUN_TIME_VAR_TIME_YEAR" - TOK_VARIABLE = 596, // "VARIABLE" - TOK_DICT_ELEMENT = 597, // "Dictionary element" - TOK_DICT_ELEMENT_REGEXP = 598 // "Dictionary element, selected by regexp" + enum yytokentype + { + TOK_END = 0, + TOK_COMMA = 258, + TOK_CONFIG_CONTENT_INJECTION = 259, + TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR = 260, + TOK_PIPE = 261, + TOK_NEW_LINE = 262, + TOK_VAR_COUNT = 263, + TOK_VAR_EXCLUSION = 264, + TOK_VARIABLE_ARGS = 265, + TOK_VARIABLE_ARGS_POST = 266, + TOK_VARIABLE_ARGS_GET = 267, + TOK_VARIABLE_FILES_SIZES = 268, + TOK_VARIABLE_FILES_NAMES = 269, + TOK_VARIABLE_FILES_TMP_CONTENT = 270, + TOK_VARIABLE_MULTIPART_FILENAME = 271, + TOK_VARIABLE_MULTIPART_NAME = 272, + TOK_VARIABLE_MATCHED_VARS_NAMES = 273, + TOK_VARIABLE_MATCHED_VARS = 274, + TOK_VARIABLE_FILES = 275, + TOK_VARIABLE_REQUEST_COOKIES = 276, + TOK_VARIABLE_REQUEST_HEADERS = 277, + TOK_VARIABLE_RESPONSE_HEADERS = 278, + TOK_VARIABLE_GEO = 279, + TOK_VARIABLE_REQUEST_COOKIES_NAMES = 280, + TOK_VARIABLE_ARGS_COMBINED_SIZE = 281, + TOK_VARIABLE_ARGS_GET_NAMES = 282, + TOK_VARIABLE_RULE = 283, + TOK_VARIABLE_ARGS_NAMES = 284, + TOK_VARIABLE_ARGS_POST_NAMES = 285, + TOK_VARIABLE_AUTH_TYPE = 286, + TOK_VARIABLE_FILES_COMBINED_SIZE = 287, + TOK_VARIABLE_FILES_TMP_NAMES = 288, + TOK_VARIABLE_FULL_REQUEST = 289, + TOK_VARIABLE_FULL_REQUEST_LENGTH = 290, + TOK_VARIABLE_INBOUND_DATA_ERROR = 291, + TOK_VARIABLE_MATCHED_VAR = 292, + TOK_VARIABLE_MATCHED_VAR_NAME = 293, + TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED = 294, + TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE = 295, + TOK_VARIABLE_MULTIPART_CRLF_LF_LINES = 296, + TOK_VARIABLE_MULTIPART_DATA_AFTER = 297, + TOK_VARIABLE_MULTIPART_DATA_BEFORE = 298, + TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED = 299, + TOK_VARIABLE_MULTIPART_HEADER_FOLDING = 300, + TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING = 301, + TOK_VARIABLE_MULTIPART_INVALID_PART = 302, + TOK_VARIABLE_MULTIPART_INVALID_QUOTING = 303, + TOK_VARIABLE_MULTIPART_LF_LINE = 304, + TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON = 305, + TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING = 306, + TOK_VARIABLE_MULTIPART_STRICT_ERROR = 307, + TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY = 308, + TOK_VARIABLE_OUTBOUND_DATA_ERROR = 309, + TOK_VARIABLE_PATH_INFO = 310, + TOK_VARIABLE_QUERY_STRING = 311, + TOK_VARIABLE_REMOTE_ADDR = 312, + TOK_VARIABLE_REMOTE_HOST = 313, + TOK_VARIABLE_REMOTE_PORT = 314, + TOK_VARIABLE_REQBODY_ERROR_MSG = 315, + TOK_VARIABLE_REQBODY_ERROR = 316, + TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG = 317, + TOK_VARIABLE_REQBODY_PROCESSOR_ERROR = 318, + TOK_VARIABLE_REQBODY_PROCESSOR = 319, + TOK_VARIABLE_REQUEST_BASENAME = 320, + TOK_VARIABLE_REQUEST_BODY_LENGTH = 321, + TOK_VARIABLE_REQUEST_BODY = 322, + TOK_VARIABLE_REQUEST_FILE_NAME = 323, + TOK_VARIABLE_REQUEST_HEADERS_NAMES = 324, + TOK_VARIABLE_REQUEST_LINE = 325, + TOK_VARIABLE_REQUEST_METHOD = 326, + TOK_VARIABLE_REQUEST_PROTOCOL = 327, + TOK_VARIABLE_REQUEST_URI_RAW = 328, + TOK_VARIABLE_REQUEST_URI = 329, + TOK_VARIABLE_RESOURCE = 330, + TOK_VARIABLE_RESPONSE_BODY = 331, + TOK_VARIABLE_RESPONSE_CONTENT_LENGTH = 332, + TOK_VARIABLE_RESPONSE_CONTENT_TYPE = 333, + TOK_VARIABLE_RESPONSE_HEADERS_NAMES = 334, + TOK_VARIABLE_RESPONSE_PROTOCOL = 335, + TOK_VARIABLE_RESPONSE_STATUS = 336, + TOK_VARIABLE_SERVER_ADDR = 337, + TOK_VARIABLE_SERVER_NAME = 338, + TOK_VARIABLE_SERVER_PORT = 339, + TOK_VARIABLE_SESSION_ID = 340, + TOK_VARIABLE_UNIQUE_ID = 341, + TOK_VARIABLE_URL_ENCODED_ERROR = 342, + TOK_VARIABLE_USER_ID = 343, + TOK_VARIABLE_WEB_APP_ID = 344, + TOK_VARIABLE_STATUS = 345, + TOK_VARIABLE_STATUS_LINE = 346, + TOK_VARIABLE_IP = 347, + TOK_VARIABLE_GLOBAL = 348, + TOK_VARIABLE_TX = 349, + TOK_VARIABLE_SESSION = 350, + TOK_VARIABLE_USER = 351, + TOK_RUN_TIME_VAR_ENV = 352, + TOK_RUN_TIME_VAR_XML = 353, + TOK_ACTION_SETVAR = 354, + TOK_SETVAR_OPERATION_EQUALS = 355, + TOK_SETVAR_OPERATION_EQUALS_PLUS = 356, + TOK_SETVAR_OPERATION_EQUALS_MINUS = 357, + TOK_NOT = 358, + TOK_OPERATOR_BEGINS_WITH = 359, + TOK_OPERATOR_CONTAINS = 360, + TOK_OPERATOR_CONTAINS_WORD = 361, + TOK_OPERATOR_DETECT_SQLI = 362, + TOK_OPERATOR_DETECT_XSS = 363, + TOK_OPERATOR_ENDS_WITH = 364, + TOK_OPERATOR_EQ = 365, + TOK_OPERATOR_FUZZY_HASH = 366, + TOK_OPERATOR_GEOLOOKUP = 367, + TOK_OPERATOR_GE = 368, + TOK_OPERATOR_GSB_LOOKUP = 369, + TOK_OPERATOR_GT = 370, + TOK_OPERATOR_INSPECT_FILE = 371, + TOK_OPERATOR_IP_MATCH_FROM_FILE = 372, + TOK_OPERATOR_IP_MATCH = 373, + TOK_OPERATOR_LE = 374, + TOK_OPERATOR_LT = 375, + TOK_OPERATOR_PM_FROM_FILE = 376, + TOK_OPERATOR_PM = 377, + TOK_OPERATOR_RBL = 378, + TOK_OPERATOR_RSUB = 379, + TOK_OPERATOR_RX_CONTENT_ONLY = 380, + TOK_OPERATOR_RX = 381, + TOK_OPERATOR_RX_GLOBAL = 382, + TOK_OPERATOR_STR_EQ = 383, + TOK_OPERATOR_STR_MATCH = 384, + TOK_OPERATOR_UNCONDITIONAL_MATCH = 385, + TOK_OPERATOR_VALIDATE_BYTE_RANGE = 386, + TOK_OPERATOR_VALIDATE_DTD = 387, + TOK_OPERATOR_VALIDATE_HASH = 388, + TOK_OPERATOR_VALIDATE_SCHEMA = 389, + TOK_OPERATOR_VALIDATE_URL_ENCODING = 390, + TOK_OPERATOR_VALIDATE_UTF8_ENCODING = 391, + TOK_OPERATOR_VERIFY_CC = 392, + TOK_OPERATOR_VERIFY_CPF = 393, + TOK_OPERATOR_VERIFY_SSN = 394, + TOK_OPERATOR_VERIFY_SVNR = 395, + TOK_OPERATOR_WITHIN = 396, + TOK_CONFIG_DIR_AUDIT_LOG_FMT = 397, + TOK_JSON = 398, + TOK_NATIVE = 399, + TOK_ACTION_CTL_RULE_ENGINE = 400, + TOK_ACTION_ACCURACY = 401, + TOK_ACTION_ALLOW = 402, + TOK_ACTION_APPEND = 403, + TOK_ACTION_AUDIT_LOG = 404, + TOK_ACTION_BLOCK = 405, + TOK_ACTION_CAPTURE = 406, + TOK_ACTION_CHAIN = 407, + TOK_ACTION_CTL_AUDIT_ENGINE = 408, + TOK_ACTION_CTL_AUDIT_LOG_PARTS = 409, + TOK_ACTION_CTL_BDY_JSON = 410, + TOK_ACTION_CTL_BDY_XML = 411, + TOK_ACTION_CTL_BDY_URLENCODED = 412, + TOK_ACTION_CTL_FORCE_REQ_BODY_VAR = 413, + TOK_ACTION_CTL_REQUEST_BODY_ACCESS = 414, + TOK_ACTION_CTL_RULE_REMOVE_BY_ID = 415, + TOK_ACTION_CTL_RULE_REMOVE_BY_TAG = 416, + TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID = 417, + TOK_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG = 418, + TOK_ACTION_DENY = 419, + TOK_ACTION_DEPRECATE_VAR = 420, + TOK_ACTION_DROP = 421, + TOK_ACTION_EXEC = 422, + TOK_ACTION_EXPIRE_VAR = 423, + TOK_ACTION_ID = 424, + TOK_ACTION_INITCOL = 425, + TOK_ACTION_LOG = 426, + TOK_ACTION_LOG_DATA = 427, + TOK_ACTION_MATURITY = 428, + TOK_ACTION_MSG = 429, + TOK_ACTION_MULTI_MATCH = 430, + TOK_ACTION_NO_AUDIT_LOG = 431, + TOK_ACTION_NO_LOG = 432, + TOK_ACTION_PASS = 433, + TOK_ACTION_PAUSE = 434, + TOK_ACTION_PHASE = 435, + TOK_ACTION_PREPEND = 436, + TOK_ACTION_PROXY = 437, + TOK_ACTION_REDIRECT = 438, + TOK_ACTION_REV = 439, + TOK_ACTION_SANITISE_ARG = 440, + TOK_ACTION_SANITISE_MATCHED = 441, + TOK_ACTION_SANITISE_MATCHED_BYTES = 442, + TOK_ACTION_SANITISE_REQUEST_HEADER = 443, + TOK_ACTION_SANITISE_RESPONSE_HEADER = 444, + TOK_ACTION_SETENV = 445, + TOK_ACTION_SETRSC = 446, + TOK_ACTION_SETSID = 447, + TOK_ACTION_SETUID = 448, + TOK_ACTION_SEVERITY = 449, + TOK_ACTION_SKIP = 450, + TOK_ACTION_SKIP_AFTER = 451, + TOK_ACTION_STATUS = 452, + TOK_ACTION_TAG = 453, + TOK_ACTION_TRANSFORMATION_BASE_64_ENCODE = 454, + TOK_ACTION_TRANSFORMATION_BASE_64_DECODE = 455, + TOK_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT = 456, + TOK_ACTION_TRANSFORMATION_CMD_LINE = 457, + TOK_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE = 458, + TOK_ACTION_TRANSFORMATION_CSS_DECODE = 459, + TOK_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE = 460, + TOK_ACTION_TRANSFORMATION_HEX_ENCODE = 461, + TOK_ACTION_TRANSFORMATION_HEX_DECODE = 462, + TOK_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE = 463, + TOK_ACTION_TRANSFORMATION_JS_DECODE = 464, + TOK_ACTION_TRANSFORMATION_LENGTH = 465, + TOK_ACTION_TRANSFORMATION_LOWERCASE = 466, + TOK_ACTION_TRANSFORMATION_PHP_ARGS_NAMES = 467, + TOK_ACTION_TRANSFORMATION_MD5 = 468, + TOK_ACTION_TRANSFORMATION_NONE = 469, + TOK_ACTION_TRANSFORMATION_NORMALISE_PATH = 470, + TOK_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 471, + TOK_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 472, + TOK_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 473, + TOK_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 474, + TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 475, + TOK_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 476, + TOK_ACTION_TRANSFORMATION_REMOVE_NULLS = 477, + TOK_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 478, + TOK_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 479, + TOK_ACTION_TRANSFORMATION_REPLACE_NULLS = 480, + TOK_ACTION_TRANSFORMATION_SHA1 = 481, + TOK_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 482, + TOK_ACTION_TRANSFORMATION_TRIM = 483, + TOK_ACTION_TRANSFORMATION_TRIM_LEFT = 484, + TOK_ACTION_TRANSFORMATION_TRIM_RIGHT = 485, + TOK_ACTION_TRANSFORMATION_UPPERCASE = 486, + TOK_ACTION_TRANSFORMATION_URL_ENCODE = 487, + TOK_ACTION_TRANSFORMATION_URL_DECODE = 488, + TOK_ACTION_TRANSFORMATION_URL_DECODE_UNI = 489, + TOK_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 490, + TOK_ACTION_VER = 491, + TOK_ACTION_XMLNS = 492, + TOK_CONFIG_COMPONENT_SIG = 493, + TOK_CONFIG_CONN_ENGINE = 494, + TOK_CONFIG_SEC_ARGUMENT_SEPARATOR = 495, + TOK_CONFIG_SEC_WEB_APP_ID = 496, + TOK_CONFIG_SEC_SERVER_SIG = 497, + TOK_CONFIG_DIR_AUDIT_DIR = 498, + TOK_CONFIG_DIR_AUDIT_DIR_MOD = 499, + TOK_CONFIG_DIR_AUDIT_ENG = 500, + TOK_CONFIG_DIR_AUDIT_FLE_MOD = 501, + TOK_CONFIG_DIR_AUDIT_LOG = 502, + TOK_CONFIG_DIR_AUDIT_LOG2 = 503, + TOK_CONFIG_DIR_AUDIT_LOG_P = 504, + TOK_CONFIG_DIR_AUDIT_STS = 505, + TOK_CONFIG_DIR_AUDIT_TPE = 506, + TOK_CONFIG_DIR_DEBUG_LOG = 507, + TOK_CONFIG_DIR_DEBUG_LVL = 508, + TOK_CONFIG_SEC_CACHE_TRANSFORMATIONS = 509, + TOK_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 510, + TOK_CONFIG_SEC_HASH_ENGINE = 511, + TOK_CONFIG_SEC_HASH_KEY = 512, + TOK_CONFIG_SEC_HASH_PARAM = 513, + TOK_CONFIG_SEC_HASH_METHOD_RX = 514, + TOK_CONFIG_SEC_HASH_METHOD_PM = 515, + TOK_CONFIG_SEC_CHROOT_DIR = 516, + TOK_CONFIG_DIR_GEO_DB = 517, + TOK_CONFIG_DIR_GSB_DB = 518, + TOK_CONFIG_SEC_GUARDIAN_LOG = 519, + TOK_CONFIG_DIR_PCRE_MATCH_LIMIT = 520, + TOK_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 521, + TOK_CONFIG_SEC_CONN_R_STATE_LIMIT = 522, + TOK_CONFIG_SEC_CONN_W_STATE_LIMIT = 523, + TOK_CONFIG_SEC_SENSOR_ID = 524, + TOK_CONFIG_DIR_ARGS_LIMIT = 525, + TOK_CONFIG_DIR_REQ_BODY = 526, + TOK_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 527, + TOK_CONFIG_DIR_REQ_BODY_LIMIT = 528, + TOK_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 529, + TOK_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 530, + TOK_CONFIG_DIR_RES_BODY = 531, + TOK_CONFIG_DIR_RES_BODY_LIMIT = 532, + TOK_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 533, + TOK_CONFIG_SEC_RULE_INHERITANCE = 534, + TOK_CONFIG_SEC_RULE_PERF_TIME = 535, + TOK_CONFIG_DIR_RULE_ENG = 536, + TOK_CONFIG_DIR_SEC_ACTION = 537, + TOK_CONFIG_DIR_SEC_DEFAULT_ACTION = 538, + TOK_CONFIG_DIR_SEC_MARKER = 539, + TOK_CONFIG_DIR_UNICODE_MAP_FILE = 540, + TOK_CONFIG_DIR_UNICODE_CODE_PAGE = 541, + TOK_CONFIG_SEC_COLLECTION_TIMEOUT = 542, + TOK_CONFIG_SEC_HTTP_BLKEY = 543, + TOK_CONFIG_SEC_INTERCEPT_ON_ERROR = 544, + TOK_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 545, + TOK_CONFIG_SEC_RULE_REMOVE_BY_ID = 546, + TOK_CONFIG_SEC_RULE_REMOVE_BY_MSG = 547, + TOK_CONFIG_SEC_RULE_REMOVE_BY_TAG = 548, + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 549, + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 550, + TOK_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 551, + TOK_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 552, + TOK_CONFIG_UPDLOAD_KEEP_FILES = 553, + TOK_CONFIG_UPDLOAD_SAVE_TMP_FILES = 554, + TOK_CONFIG_UPLOAD_DIR = 555, + TOK_CONFIG_UPLOAD_FILE_LIMIT = 556, + TOK_CONFIG_UPLOAD_FILE_MODE = 557, + TOK_CONFIG_VALUE_ABORT = 558, + TOK_CONFIG_VALUE_DETC = 559, + TOK_CONFIG_VALUE_HTTPS = 560, + TOK_CONFIG_VALUE_OFF = 561, + TOK_CONFIG_VALUE_ON = 562, + TOK_CONFIG_VALUE_PARALLEL = 563, + TOK_CONFIG_VALUE_PROCESS_PARTIAL = 564, + TOK_CONFIG_VALUE_REJECT = 565, + TOK_CONFIG_VALUE_RELEVANT_ONLY = 566, + TOK_CONFIG_VALUE_SERIAL = 567, + TOK_CONFIG_VALUE_WARN = 568, + TOK_CONFIG_XML_EXTERNAL_ENTITY = 569, + TOK_CONGIG_DIR_RESPONSE_BODY_MP = 570, + TOK_CONGIG_DIR_SEC_ARG_SEP = 571, + TOK_CONGIG_DIR_SEC_COOKIE_FORMAT = 572, + TOK_CONFIG_SEC_COOKIEV0_SEPARATOR = 573, + TOK_CONGIG_DIR_SEC_DATA_DIR = 574, + TOK_CONGIG_DIR_SEC_STATUS_ENGINE = 575, + TOK_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 576, + TOK_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 577, + TOK_CONGIG_DIR_SEC_TMP_DIR = 578, + TOK_DIRECTIVE = 579, + TOK_DIRECTIVE_SECRULESCRIPT = 580, + TOK_FREE_TEXT_QUOTE_MACRO_EXPANSION = 581, + TOK_QUOTATION_MARK = 582, + TOK_RUN_TIME_VAR_BLD = 583, + TOK_RUN_TIME_VAR_DUR = 584, + TOK_RUN_TIME_VAR_HSV = 585, + TOK_RUN_TIME_VAR_REMOTE_USER = 586, + TOK_RUN_TIME_VAR_TIME = 587, + TOK_RUN_TIME_VAR_TIME_DAY = 588, + TOK_RUN_TIME_VAR_TIME_EPOCH = 589, + TOK_RUN_TIME_VAR_TIME_HOUR = 590, + TOK_RUN_TIME_VAR_TIME_MIN = 591, + TOK_RUN_TIME_VAR_TIME_MON = 592, + TOK_RUN_TIME_VAR_TIME_SEC = 593, + TOK_RUN_TIME_VAR_TIME_WDAY = 594, + TOK_RUN_TIME_VAR_TIME_YEAR = 595, + TOK_VARIABLE = 596, + TOK_DICT_ELEMENT = 597, + TOK_DICT_ELEMENT_REGEXP = 598 }; - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type yytokentype; }; - /// Token kind, as returned by yylex. - typedef token::yytokentype token_kind_type; + /// (External) token type, as returned by yylex. + typedef token::yytokentype token_type; - /// Backward compatibility alias (Bison 3.6). - typedef token_kind_type token_type; + /// Symbol type: an internal symbol number. + typedef int symbol_number_type; - /// Symbol kinds. - struct symbol_kind - { - enum symbol_kind_type - { - YYNTOKENS = 344, ///< Number of tokens. - S_YYEMPTY = -2, - S_YYEOF = 0, // "end of file" - S_YYerror = 1, // error - S_YYUNDEF = 2, // "invalid token" - S_COMMA = 3, // "," - S_CONFIG_CONTENT_INJECTION = 4, // "CONFIG_CONTENT_INJECTION" - S_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR = 5, // "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" - S_PIPE = 6, // PIPE - S_NEW_LINE = 7, // NEW_LINE - S_VAR_COUNT = 8, // VAR_COUNT - S_VAR_EXCLUSION = 9, // VAR_EXCLUSION - S_VARIABLE_ARGS = 10, // VARIABLE_ARGS - S_VARIABLE_ARGS_POST = 11, // VARIABLE_ARGS_POST - S_VARIABLE_ARGS_GET = 12, // VARIABLE_ARGS_GET - S_VARIABLE_FILES_SIZES = 13, // VARIABLE_FILES_SIZES - S_VARIABLE_FILES_NAMES = 14, // VARIABLE_FILES_NAMES - S_VARIABLE_FILES_TMP_CONTENT = 15, // VARIABLE_FILES_TMP_CONTENT - S_VARIABLE_MULTIPART_FILENAME = 16, // VARIABLE_MULTIPART_FILENAME - S_VARIABLE_MULTIPART_NAME = 17, // VARIABLE_MULTIPART_NAME - S_VARIABLE_MATCHED_VARS_NAMES = 18, // VARIABLE_MATCHED_VARS_NAMES - S_VARIABLE_MATCHED_VARS = 19, // VARIABLE_MATCHED_VARS - S_VARIABLE_FILES = 20, // VARIABLE_FILES - S_VARIABLE_REQUEST_COOKIES = 21, // VARIABLE_REQUEST_COOKIES - S_VARIABLE_REQUEST_HEADERS = 22, // VARIABLE_REQUEST_HEADERS - S_VARIABLE_RESPONSE_HEADERS = 23, // VARIABLE_RESPONSE_HEADERS - S_VARIABLE_GEO = 24, // VARIABLE_GEO - S_VARIABLE_REQUEST_COOKIES_NAMES = 25, // VARIABLE_REQUEST_COOKIES_NAMES - S_VARIABLE_ARGS_COMBINED_SIZE = 26, // VARIABLE_ARGS_COMBINED_SIZE - S_VARIABLE_ARGS_GET_NAMES = 27, // VARIABLE_ARGS_GET_NAMES - S_VARIABLE_RULE = 28, // VARIABLE_RULE - S_VARIABLE_ARGS_NAMES = 29, // "Variable ARGS_NAMES" - S_VARIABLE_ARGS_POST_NAMES = 30, // VARIABLE_ARGS_POST_NAMES - S_VARIABLE_AUTH_TYPE = 31, // "AUTH_TYPE" - S_VARIABLE_FILES_COMBINED_SIZE = 32, // "FILES_COMBINED_SIZE" - S_VARIABLE_FILES_TMP_NAMES = 33, // "FILES_TMPNAMES" - S_VARIABLE_FULL_REQUEST = 34, // "FULL_REQUEST" - S_VARIABLE_FULL_REQUEST_LENGTH = 35, // "FULL_REQUEST_LENGTH" - S_VARIABLE_INBOUND_DATA_ERROR = 36, // "INBOUND_DATA_ERROR" - S_VARIABLE_MATCHED_VAR = 37, // "MATCHED_VAR" - S_VARIABLE_MATCHED_VAR_NAME = 38, // "MATCHED_VAR_NAME" - S_VARIABLE_MULTIPART_BOUNDARY_QUOTED = 39, // VARIABLE_MULTIPART_BOUNDARY_QUOTED - S_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE = 40, // VARIABLE_MULTIPART_BOUNDARY_WHITESPACE - S_VARIABLE_MULTIPART_CRLF_LF_LINES = 41, // "MULTIPART_CRLF_LF_LINES" - S_VARIABLE_MULTIPART_DATA_AFTER = 42, // "MULTIPART_DATA_AFTER" - S_VARIABLE_MULTIPART_DATA_BEFORE = 43, // VARIABLE_MULTIPART_DATA_BEFORE - S_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED = 44, // "MULTIPART_FILE_LIMIT_EXCEEDED" - S_VARIABLE_MULTIPART_HEADER_FOLDING = 45, // "MULTIPART_HEADER_FOLDING" - S_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING = 46, // "MULTIPART_INVALID_HEADER_FOLDING" - S_VARIABLE_MULTIPART_INVALID_PART = 47, // VARIABLE_MULTIPART_INVALID_PART - S_VARIABLE_MULTIPART_INVALID_QUOTING = 48, // "MULTIPART_INVALID_QUOTING" - S_VARIABLE_MULTIPART_LF_LINE = 49, // VARIABLE_MULTIPART_LF_LINE - S_VARIABLE_MULTIPART_MISSING_SEMICOLON = 50, // VARIABLE_MULTIPART_MISSING_SEMICOLON - S_VARIABLE_MULTIPART_SEMICOLON_MISSING = 51, // VARIABLE_MULTIPART_SEMICOLON_MISSING - S_VARIABLE_MULTIPART_STRICT_ERROR = 52, // "MULTIPART_STRICT_ERROR" - S_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY = 53, // "MULTIPART_UNMATCHED_BOUNDARY" - S_VARIABLE_OUTBOUND_DATA_ERROR = 54, // "OUTBOUND_DATA_ERROR" - S_VARIABLE_PATH_INFO = 55, // "PATH_INFO" - S_VARIABLE_QUERY_STRING = 56, // "QUERY_STRING" - S_VARIABLE_REMOTE_ADDR = 57, // "REMOTE_ADDR" - S_VARIABLE_REMOTE_HOST = 58, // "REMOTE_HOST" - S_VARIABLE_REMOTE_PORT = 59, // "REMOTE_PORT" - S_VARIABLE_REQBODY_ERROR_MSG = 60, // "REQBODY_ERROR_MSG" - S_VARIABLE_REQBODY_ERROR = 61, // "REQBODY_ERROR" - S_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG = 62, // "REQBODY_PROCESSOR_ERROR_MSG" - S_VARIABLE_REQBODY_PROCESSOR_ERROR = 63, // "REQBODY_PROCESSOR_ERROR" - S_VARIABLE_REQBODY_PROCESSOR = 64, // "REQBODY_PROCESSOR" - S_VARIABLE_REQUEST_BASENAME = 65, // "REQUEST_BASENAME" - S_VARIABLE_REQUEST_BODY_LENGTH = 66, // "REQUEST_BODY_LENGTH" - S_VARIABLE_REQUEST_BODY = 67, // "REQUEST_BODY" - S_VARIABLE_REQUEST_FILE_NAME = 68, // "REQUEST_FILENAME" - S_VARIABLE_REQUEST_HEADERS_NAMES = 69, // VARIABLE_REQUEST_HEADERS_NAMES - S_VARIABLE_REQUEST_LINE = 70, // "REQUEST_LINE" - S_VARIABLE_REQUEST_METHOD = 71, // "REQUEST_METHOD" - S_VARIABLE_REQUEST_PROTOCOL = 72, // "REQUEST_PROTOCOL" - S_VARIABLE_REQUEST_URI_RAW = 73, // "REQUEST_URI_RAW" - S_VARIABLE_REQUEST_URI = 74, // "REQUEST_URI" - S_VARIABLE_RESOURCE = 75, // "RESOURCE" - S_VARIABLE_RESPONSE_BODY = 76, // "RESPONSE_BODY" - S_VARIABLE_RESPONSE_CONTENT_LENGTH = 77, // "RESPONSE_CONTENT_LENGTH" - S_VARIABLE_RESPONSE_CONTENT_TYPE = 78, // VARIABLE_RESPONSE_CONTENT_TYPE - S_VARIABLE_RESPONSE_HEADERS_NAMES = 79, // VARIABLE_RESPONSE_HEADERS_NAMES - S_VARIABLE_RESPONSE_PROTOCOL = 80, // "RESPONSE_PROTOCOL" - S_VARIABLE_RESPONSE_STATUS = 81, // "RESPONSE_STATUS" - S_VARIABLE_SERVER_ADDR = 82, // "SERVER_ADDR" - S_VARIABLE_SERVER_NAME = 83, // "SERVER_NAME" - S_VARIABLE_SERVER_PORT = 84, // "SERVER_PORT" - S_VARIABLE_SESSION_ID = 85, // "SESSIONID" - S_VARIABLE_UNIQUE_ID = 86, // "UNIQUE_ID" - S_VARIABLE_URL_ENCODED_ERROR = 87, // "URLENCODED_ERROR" - S_VARIABLE_USER_ID = 88, // "USERID" - S_VARIABLE_WEB_APP_ID = 89, // "WEBAPPID" - S_VARIABLE_STATUS = 90, // "VARIABLE_STATUS" - S_VARIABLE_STATUS_LINE = 91, // "VARIABLE_STATUS_LINE" - S_VARIABLE_IP = 92, // "VARIABLE_IP" - S_VARIABLE_GLOBAL = 93, // "VARIABLE_GLOBAL" - S_VARIABLE_TX = 94, // "VARIABLE_TX" - S_VARIABLE_SESSION = 95, // "VARIABLE_SESSION" - S_VARIABLE_USER = 96, // "VARIABLE_USER" - S_RUN_TIME_VAR_ENV = 97, // "RUN_TIME_VAR_ENV" - S_RUN_TIME_VAR_XML = 98, // "RUN_TIME_VAR_XML" - S_ACTION_SETVAR = 99, // "SetVar" - S_SETVAR_OPERATION_EQUALS = 100, // SETVAR_OPERATION_EQUALS - S_SETVAR_OPERATION_EQUALS_PLUS = 101, // SETVAR_OPERATION_EQUALS_PLUS - S_SETVAR_OPERATION_EQUALS_MINUS = 102, // SETVAR_OPERATION_EQUALS_MINUS - S_NOT = 103, // "NOT" - S_OPERATOR_BEGINS_WITH = 104, // "OPERATOR_BEGINS_WITH" - S_OPERATOR_CONTAINS = 105, // "OPERATOR_CONTAINS" - S_OPERATOR_CONTAINS_WORD = 106, // "OPERATOR_CONTAINS_WORD" - S_OPERATOR_DETECT_SQLI = 107, // "OPERATOR_DETECT_SQLI" - S_OPERATOR_DETECT_XSS = 108, // "OPERATOR_DETECT_XSS" - S_OPERATOR_ENDS_WITH = 109, // "OPERATOR_ENDS_WITH" - S_OPERATOR_EQ = 110, // "OPERATOR_EQ" - S_OPERATOR_FUZZY_HASH = 111, // "OPERATOR_FUZZY_HASH" - S_OPERATOR_GEOLOOKUP = 112, // "OPERATOR_GEOLOOKUP" - S_OPERATOR_GE = 113, // "OPERATOR_GE" - S_OPERATOR_GSB_LOOKUP = 114, // "OPERATOR_GSB_LOOKUP" - S_OPERATOR_GT = 115, // "OPERATOR_GT" - S_OPERATOR_INSPECT_FILE = 116, // "OPERATOR_INSPECT_FILE" - S_OPERATOR_IP_MATCH_FROM_FILE = 117, // "OPERATOR_IP_MATCH_FROM_FILE" - S_OPERATOR_IP_MATCH = 118, // "OPERATOR_IP_MATCH" - S_OPERATOR_LE = 119, // "OPERATOR_LE" - S_OPERATOR_LT = 120, // "OPERATOR_LT" - S_OPERATOR_PM_FROM_FILE = 121, // "OPERATOR_PM_FROM_FILE" - S_OPERATOR_PM = 122, // "OPERATOR_PM" - S_OPERATOR_RBL = 123, // "OPERATOR_RBL" - S_OPERATOR_RSUB = 124, // "OPERATOR_RSUB" - S_OPERATOR_RX_CONTENT_ONLY = 125, // "Operator RX (content only)" - S_OPERATOR_RX = 126, // "OPERATOR_RX" - S_OPERATOR_RX_GLOBAL = 127, // "OPERATOR_RX_GLOBAL" - S_OPERATOR_STR_EQ = 128, // "OPERATOR_STR_EQ" - S_OPERATOR_STR_MATCH = 129, // "OPERATOR_STR_MATCH" - S_OPERATOR_UNCONDITIONAL_MATCH = 130, // "OPERATOR_UNCONDITIONAL_MATCH" - S_OPERATOR_VALIDATE_BYTE_RANGE = 131, // "OPERATOR_VALIDATE_BYTE_RANGE" - S_OPERATOR_VALIDATE_DTD = 132, // "OPERATOR_VALIDATE_DTD" - S_OPERATOR_VALIDATE_HASH = 133, // "OPERATOR_VALIDATE_HASH" - S_OPERATOR_VALIDATE_SCHEMA = 134, // "OPERATOR_VALIDATE_SCHEMA" - S_OPERATOR_VALIDATE_URL_ENCODING = 135, // "OPERATOR_VALIDATE_URL_ENCODING" - S_OPERATOR_VALIDATE_UTF8_ENCODING = 136, // "OPERATOR_VALIDATE_UTF8_ENCODING" - S_OPERATOR_VERIFY_CC = 137, // "OPERATOR_VERIFY_CC" - S_OPERATOR_VERIFY_CPF = 138, // "OPERATOR_VERIFY_CPF" - S_OPERATOR_VERIFY_SSN = 139, // "OPERATOR_VERIFY_SSN" - S_OPERATOR_VERIFY_SVNR = 140, // "OPERATOR_VERIFY_SVNR" - S_OPERATOR_WITHIN = 141, // "OPERATOR_WITHIN" - S_CONFIG_DIR_AUDIT_LOG_FMT = 142, // CONFIG_DIR_AUDIT_LOG_FMT - S_JSON = 143, // JSON - S_NATIVE = 144, // NATIVE - S_ACTION_CTL_RULE_ENGINE = 145, // "ACTION_CTL_RULE_ENGINE" - S_ACTION_ACCURACY = 146, // "Accuracy" - S_ACTION_ALLOW = 147, // "Allow" - S_ACTION_APPEND = 148, // "Append" - S_ACTION_AUDIT_LOG = 149, // "AuditLog" - S_ACTION_BLOCK = 150, // "Block" - S_ACTION_CAPTURE = 151, // "Capture" - S_ACTION_CHAIN = 152, // "Chain" - S_ACTION_CTL_AUDIT_ENGINE = 153, // "ACTION_CTL_AUDIT_ENGINE" - S_ACTION_CTL_AUDIT_LOG_PARTS = 154, // "ACTION_CTL_AUDIT_LOG_PARTS" - S_ACTION_CTL_BDY_JSON = 155, // "ACTION_CTL_BDY_JSON" - S_ACTION_CTL_BDY_XML = 156, // "ACTION_CTL_BDY_XML" - S_ACTION_CTL_BDY_URLENCODED = 157, // "ACTION_CTL_BDY_URLENCODED" - S_ACTION_CTL_FORCE_REQ_BODY_VAR = 158, // "ACTION_CTL_FORCE_REQ_BODY_VAR" - S_ACTION_CTL_REQUEST_BODY_ACCESS = 159, // "ACTION_CTL_REQUEST_BODY_ACCESS" - S_ACTION_CTL_RULE_REMOVE_BY_ID = 160, // "ACTION_CTL_RULE_REMOVE_BY_ID" - S_ACTION_CTL_RULE_REMOVE_BY_TAG = 161, // "ACTION_CTL_RULE_REMOVE_BY_TAG" - S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID = 162, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG = 163, // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - S_ACTION_DENY = 164, // "Deny" - S_ACTION_DEPRECATE_VAR = 165, // "DeprecateVar" - S_ACTION_DROP = 166, // "Drop" - S_ACTION_EXEC = 167, // "Exec" - S_ACTION_EXPIRE_VAR = 168, // "ExpireVar" - S_ACTION_ID = 169, // "Id" - S_ACTION_INITCOL = 170, // "InitCol" - S_ACTION_LOG = 171, // "Log" - S_ACTION_LOG_DATA = 172, // "LogData" - S_ACTION_MATURITY = 173, // "Maturity" - S_ACTION_MSG = 174, // "Msg" - S_ACTION_MULTI_MATCH = 175, // "MultiMatch" - S_ACTION_NO_AUDIT_LOG = 176, // "NoAuditLog" - S_ACTION_NO_LOG = 177, // "NoLog" - S_ACTION_PASS = 178, // "Pass" - S_ACTION_PAUSE = 179, // "Pause" - S_ACTION_PHASE = 180, // "Phase" - S_ACTION_PREPEND = 181, // "Prepend" - S_ACTION_PROXY = 182, // "Proxy" - S_ACTION_REDIRECT = 183, // "Redirect" - S_ACTION_REV = 184, // "Rev" - S_ACTION_SANITISE_ARG = 185, // "SanitiseArg" - S_ACTION_SANITISE_MATCHED = 186, // "SanitiseMatched" - S_ACTION_SANITISE_MATCHED_BYTES = 187, // "SanitiseMatchedBytes" - S_ACTION_SANITISE_REQUEST_HEADER = 188, // "SanitiseRequestHeader" - S_ACTION_SANITISE_RESPONSE_HEADER = 189, // "SanitiseResponseHeader" - S_ACTION_SETENV = 190, // "SetEnv" - S_ACTION_SETRSC = 191, // "SetRsc" - S_ACTION_SETSID = 192, // "SetSid" - S_ACTION_SETUID = 193, // "SetUID" - S_ACTION_SEVERITY = 194, // "Severity" - S_ACTION_SKIP = 195, // "Skip" - S_ACTION_SKIP_AFTER = 196, // "SkipAfter" - S_ACTION_STATUS = 197, // "Status" - S_ACTION_TAG = 198, // "Tag" - S_ACTION_TRANSFORMATION_BASE_64_ENCODE = 199, // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - S_ACTION_TRANSFORMATION_BASE_64_DECODE = 200, // "ACTION_TRANSFORMATION_BASE_64_DECODE" - S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT = 201, // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - S_ACTION_TRANSFORMATION_CMD_LINE = 202, // "ACTION_TRANSFORMATION_CMD_LINE" - S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE = 203, // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - S_ACTION_TRANSFORMATION_CSS_DECODE = 204, // "ACTION_TRANSFORMATION_CSS_DECODE" - S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE = 205, // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - S_ACTION_TRANSFORMATION_HEX_ENCODE = 206, // "ACTION_TRANSFORMATION_HEX_ENCODE" - S_ACTION_TRANSFORMATION_HEX_DECODE = 207, // "ACTION_TRANSFORMATION_HEX_DECODE" - S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE = 208, // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - S_ACTION_TRANSFORMATION_JS_DECODE = 209, // "ACTION_TRANSFORMATION_JS_DECODE" - S_ACTION_TRANSFORMATION_LENGTH = 210, // "ACTION_TRANSFORMATION_LENGTH" - S_ACTION_TRANSFORMATION_LOWERCASE = 211, // "ACTION_TRANSFORMATION_LOWERCASE" - S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES = 212, // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - S_ACTION_TRANSFORMATION_MD5 = 213, // "ACTION_TRANSFORMATION_MD5" - S_ACTION_TRANSFORMATION_NONE = 214, // "ACTION_TRANSFORMATION_NONE" - S_ACTION_TRANSFORMATION_NORMALISE_PATH = 215, // "ACTION_TRANSFORMATION_NORMALISE_PATH" - S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN = 216, // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT = 217, // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT = 218, // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT = 219, // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - S_ACTION_TRANSFORMATION_REMOVE_COMMENTS = 220, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR = 221, // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - S_ACTION_TRANSFORMATION_REMOVE_NULLS = 222, // "ACTION_TRANSFORMATION_REMOVE_NULLS" - S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE = 223, // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - S_ACTION_TRANSFORMATION_REPLACE_COMMENTS = 224, // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - S_ACTION_TRANSFORMATION_REPLACE_NULLS = 225, // "ACTION_TRANSFORMATION_REPLACE_NULLS" - S_ACTION_TRANSFORMATION_SHA1 = 226, // "ACTION_TRANSFORMATION_SHA1" - S_ACTION_TRANSFORMATION_SQL_HEX_DECODE = 227, // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - S_ACTION_TRANSFORMATION_TRIM = 228, // "ACTION_TRANSFORMATION_TRIM" - S_ACTION_TRANSFORMATION_TRIM_LEFT = 229, // "ACTION_TRANSFORMATION_TRIM_LEFT" - S_ACTION_TRANSFORMATION_TRIM_RIGHT = 230, // "ACTION_TRANSFORMATION_TRIM_RIGHT" - S_ACTION_TRANSFORMATION_UPPERCASE = 231, // "ACTION_TRANSFORMATION_UPPERCASE" - S_ACTION_TRANSFORMATION_URL_ENCODE = 232, // "ACTION_TRANSFORMATION_URL_ENCODE" - S_ACTION_TRANSFORMATION_URL_DECODE = 233, // "ACTION_TRANSFORMATION_URL_DECODE" - S_ACTION_TRANSFORMATION_URL_DECODE_UNI = 234, // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE = 235, // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - S_ACTION_VER = 236, // "Ver" - S_ACTION_XMLNS = 237, // "xmlns" - S_CONFIG_COMPONENT_SIG = 238, // "CONFIG_COMPONENT_SIG" - S_CONFIG_CONN_ENGINE = 239, // "CONFIG_CONN_ENGINE" - S_CONFIG_SEC_ARGUMENT_SEPARATOR = 240, // "CONFIG_SEC_ARGUMENT_SEPARATOR" - S_CONFIG_SEC_WEB_APP_ID = 241, // "CONFIG_SEC_WEB_APP_ID" - S_CONFIG_SEC_SERVER_SIG = 242, // "CONFIG_SEC_SERVER_SIG" - S_CONFIG_DIR_AUDIT_DIR = 243, // "CONFIG_DIR_AUDIT_DIR" - S_CONFIG_DIR_AUDIT_DIR_MOD = 244, // "CONFIG_DIR_AUDIT_DIR_MOD" - S_CONFIG_DIR_AUDIT_ENG = 245, // "CONFIG_DIR_AUDIT_ENG" - S_CONFIG_DIR_AUDIT_FLE_MOD = 246, // "CONFIG_DIR_AUDIT_FLE_MOD" - S_CONFIG_DIR_AUDIT_LOG = 247, // "CONFIG_DIR_AUDIT_LOG" - S_CONFIG_DIR_AUDIT_LOG2 = 248, // "CONFIG_DIR_AUDIT_LOG2" - S_CONFIG_DIR_AUDIT_LOG_P = 249, // "CONFIG_DIR_AUDIT_LOG_P" - S_CONFIG_DIR_AUDIT_STS = 250, // "CONFIG_DIR_AUDIT_STS" - S_CONFIG_DIR_AUDIT_TPE = 251, // "CONFIG_DIR_AUDIT_TPE" - S_CONFIG_DIR_DEBUG_LOG = 252, // "CONFIG_DIR_DEBUG_LOG" - S_CONFIG_DIR_DEBUG_LVL = 253, // "CONFIG_DIR_DEBUG_LVL" - S_CONFIG_SEC_CACHE_TRANSFORMATIONS = 254, // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS = 255, // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - S_CONFIG_SEC_HASH_ENGINE = 256, // "CONFIG_SEC_HASH_ENGINE" - S_CONFIG_SEC_HASH_KEY = 257, // "CONFIG_SEC_HASH_KEY" - S_CONFIG_SEC_HASH_PARAM = 258, // "CONFIG_SEC_HASH_PARAM" - S_CONFIG_SEC_HASH_METHOD_RX = 259, // "CONFIG_SEC_HASH_METHOD_RX" - S_CONFIG_SEC_HASH_METHOD_PM = 260, // "CONFIG_SEC_HASH_METHOD_PM" - S_CONFIG_SEC_CHROOT_DIR = 261, // "CONFIG_SEC_CHROOT_DIR" - S_CONFIG_DIR_GEO_DB = 262, // "CONFIG_DIR_GEO_DB" - S_CONFIG_DIR_GSB_DB = 263, // "CONFIG_DIR_GSB_DB" - S_CONFIG_SEC_GUARDIAN_LOG = 264, // "CONFIG_SEC_GUARDIAN_LOG" - S_CONFIG_DIR_PCRE_MATCH_LIMIT = 265, // "CONFIG_DIR_PCRE_MATCH_LIMIT" - S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION = 266, // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - S_CONFIG_SEC_CONN_R_STATE_LIMIT = 267, // "CONFIG_SEC_CONN_R_STATE_LIMIT" - S_CONFIG_SEC_CONN_W_STATE_LIMIT = 268, // "CONFIG_SEC_CONN_W_STATE_LIMIT" - S_CONFIG_SEC_SENSOR_ID = 269, // "CONFIG_SEC_SENSOR_ID" - S_CONFIG_DIR_ARGS_LIMIT = 270, // "CONFIG_DIR_ARGS_LIMIT" - S_CONFIG_DIR_REQ_BODY = 271, // "CONFIG_DIR_REQ_BODY" - S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT = 272, // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - S_CONFIG_DIR_REQ_BODY_LIMIT = 273, // "CONFIG_DIR_REQ_BODY_LIMIT" - S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION = 274, // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT = 275, // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - S_CONFIG_DIR_RES_BODY = 276, // "CONFIG_DIR_RES_BODY" - S_CONFIG_DIR_RES_BODY_LIMIT = 277, // "CONFIG_DIR_RES_BODY_LIMIT" - S_CONFIG_DIR_RES_BODY_LIMIT_ACTION = 278, // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - S_CONFIG_SEC_RULE_INHERITANCE = 279, // "CONFIG_SEC_RULE_INHERITANCE" - S_CONFIG_SEC_RULE_PERF_TIME = 280, // "CONFIG_SEC_RULE_PERF_TIME" - S_CONFIG_DIR_RULE_ENG = 281, // "CONFIG_DIR_RULE_ENG" - S_CONFIG_DIR_SEC_ACTION = 282, // "CONFIG_DIR_SEC_ACTION" - S_CONFIG_DIR_SEC_DEFAULT_ACTION = 283, // "CONFIG_DIR_SEC_DEFAULT_ACTION" - S_CONFIG_DIR_SEC_MARKER = 284, // "CONFIG_DIR_SEC_MARKER" - S_CONFIG_DIR_UNICODE_MAP_FILE = 285, // "CONFIG_DIR_UNICODE_MAP_FILE" - S_CONFIG_DIR_UNICODE_CODE_PAGE = 286, // "CONFIG_DIR_UNICODE_CODE_PAGE" - S_CONFIG_SEC_COLLECTION_TIMEOUT = 287, // "CONFIG_SEC_COLLECTION_TIMEOUT" - S_CONFIG_SEC_HTTP_BLKEY = 288, // "CONFIG_SEC_HTTP_BLKEY" - S_CONFIG_SEC_INTERCEPT_ON_ERROR = 289, // "CONFIG_SEC_INTERCEPT_ON_ERROR" - S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION = 290, // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - S_CONFIG_SEC_RULE_REMOVE_BY_ID = 291, // "CONFIG_SEC_RULE_REMOVE_BY_ID" - S_CONFIG_SEC_RULE_REMOVE_BY_MSG = 292, // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - S_CONFIG_SEC_RULE_REMOVE_BY_TAG = 293, // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG = 294, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG = 295, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID = 296, // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID = 297, // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - S_CONFIG_UPDLOAD_KEEP_FILES = 298, // "CONFIG_UPDLOAD_KEEP_FILES" - S_CONFIG_UPDLOAD_SAVE_TMP_FILES = 299, // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - S_CONFIG_UPLOAD_DIR = 300, // "CONFIG_UPLOAD_DIR" - S_CONFIG_UPLOAD_FILE_LIMIT = 301, // "CONFIG_UPLOAD_FILE_LIMIT" - S_CONFIG_UPLOAD_FILE_MODE = 302, // "CONFIG_UPLOAD_FILE_MODE" - S_CONFIG_VALUE_ABORT = 303, // "CONFIG_VALUE_ABORT" - S_CONFIG_VALUE_DETC = 304, // "CONFIG_VALUE_DETC" - S_CONFIG_VALUE_HTTPS = 305, // "CONFIG_VALUE_HTTPS" - S_CONFIG_VALUE_OFF = 306, // "CONFIG_VALUE_OFF" - S_CONFIG_VALUE_ON = 307, // "CONFIG_VALUE_ON" - S_CONFIG_VALUE_PARALLEL = 308, // "CONFIG_VALUE_PARALLEL" - S_CONFIG_VALUE_PROCESS_PARTIAL = 309, // "CONFIG_VALUE_PROCESS_PARTIAL" - S_CONFIG_VALUE_REJECT = 310, // "CONFIG_VALUE_REJECT" - S_CONFIG_VALUE_RELEVANT_ONLY = 311, // "CONFIG_VALUE_RELEVANT_ONLY" - S_CONFIG_VALUE_SERIAL = 312, // "CONFIG_VALUE_SERIAL" - S_CONFIG_VALUE_WARN = 313, // "CONFIG_VALUE_WARN" - S_CONFIG_XML_EXTERNAL_ENTITY = 314, // "CONFIG_XML_EXTERNAL_ENTITY" - S_CONGIG_DIR_RESPONSE_BODY_MP = 315, // "CONGIG_DIR_RESPONSE_BODY_MP" - S_CONGIG_DIR_SEC_ARG_SEP = 316, // "CONGIG_DIR_SEC_ARG_SEP" - S_CONGIG_DIR_SEC_COOKIE_FORMAT = 317, // "CONGIG_DIR_SEC_COOKIE_FORMAT" - S_CONFIG_SEC_COOKIEV0_SEPARATOR = 318, // "CONFIG_SEC_COOKIEV0_SEPARATOR" - S_CONGIG_DIR_SEC_DATA_DIR = 319, // "CONGIG_DIR_SEC_DATA_DIR" - S_CONGIG_DIR_SEC_STATUS_ENGINE = 320, // "CONGIG_DIR_SEC_STATUS_ENGINE" - S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION = 321, // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION = 322, // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - S_CONGIG_DIR_SEC_TMP_DIR = 323, // "CONGIG_DIR_SEC_TMP_DIR" - S_DIRECTIVE = 324, // "DIRECTIVE" - S_DIRECTIVE_SECRULESCRIPT = 325, // "DIRECTIVE_SECRULESCRIPT" - S_FREE_TEXT_QUOTE_MACRO_EXPANSION = 326, // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - S_QUOTATION_MARK = 327, // "QUOTATION_MARK" - S_RUN_TIME_VAR_BLD = 328, // "RUN_TIME_VAR_BLD" - S_RUN_TIME_VAR_DUR = 329, // "RUN_TIME_VAR_DUR" - S_RUN_TIME_VAR_HSV = 330, // "RUN_TIME_VAR_HSV" - S_RUN_TIME_VAR_REMOTE_USER = 331, // "RUN_TIME_VAR_REMOTE_USER" - S_RUN_TIME_VAR_TIME = 332, // "RUN_TIME_VAR_TIME" - S_RUN_TIME_VAR_TIME_DAY = 333, // "RUN_TIME_VAR_TIME_DAY" - S_RUN_TIME_VAR_TIME_EPOCH = 334, // "RUN_TIME_VAR_TIME_EPOCH" - S_RUN_TIME_VAR_TIME_HOUR = 335, // "RUN_TIME_VAR_TIME_HOUR" - S_RUN_TIME_VAR_TIME_MIN = 336, // "RUN_TIME_VAR_TIME_MIN" - S_RUN_TIME_VAR_TIME_MON = 337, // "RUN_TIME_VAR_TIME_MON" - S_RUN_TIME_VAR_TIME_SEC = 338, // "RUN_TIME_VAR_TIME_SEC" - S_RUN_TIME_VAR_TIME_WDAY = 339, // "RUN_TIME_VAR_TIME_WDAY" - S_RUN_TIME_VAR_TIME_YEAR = 340, // "RUN_TIME_VAR_TIME_YEAR" - S_VARIABLE = 341, // "VARIABLE" - S_DICT_ELEMENT = 342, // "Dictionary element" - S_DICT_ELEMENT_REGEXP = 343, // "Dictionary element, selected by regexp" - S_YYACCEPT = 344, // $accept - S_input = 345, // input - S_line = 346, // line - S_audit_log = 347, // audit_log - S_actions = 348, // actions - S_actions_may_quoted = 349, // actions_may_quoted - S_op = 350, // op - S_op_before_init = 351, // op_before_init - S_expression = 352, // expression - S_variables = 353, // variables - S_variables_pre_process = 354, // variables_pre_process - S_variables_may_be_quoted = 355, // variables_may_be_quoted - S_var = 356, // var - S_act = 357, // act - S_setvar_action = 358, // setvar_action - S_run_time_string = 359 // run_time_string - }; - }; + /// The symbol type number to denote an empty symbol. + enum { empty_symbol = -2 }; - /// (Internal) symbol kind. - typedef symbol_kind::symbol_kind_type symbol_kind_type; - - /// The number of tokens. - static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS; + /// Internal symbol number for tokens (subsumed by symbol_number_type). + typedef short token_number_type; /// A complete symbol. /// - /// Expects its Base type to provide access to the symbol kind - /// via kind (). + /// Expects its Base type to provide access to the symbol type + /// via type_get (). /// /// Provide access to semantic value and location. template @@ -1720,248 +1334,7 @@ namespace yy { #if 201103L <= YY_CPLUSPLUS /// Move constructor. - basic_symbol (basic_symbol&& that) - : Base (std::move (that)) - , value () - , location (std::move (that.location)) - { - switch (this->kind ()) - { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" - value.move< std::string > (std::move (that.value)); - break; - - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_run_time_string: // run_time_string - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_var: // var - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action - value.move< std::unique_ptr > (std::move (that.value)); - break; - - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted - value.move< std::unique_ptr > > > (std::move (that.value)); - break; - - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted - value.move< std::unique_ptr > > > (std::move (that.value)); - break; - - default: - break; - } - - } + basic_symbol (basic_symbol&& that); #endif /// Copy constructor. @@ -2081,245 +1454,245 @@ namespace yy { void clear () { // User destructor. - symbol_kind_type yykind = this->kind (); + symbol_number_type yytype = this->type_get (); basic_symbol& yysym = *this; (void) yysym; - switch (yykind) + switch (yytype) { default: break; } - // Value type destructor. -switch (yykind) + // Type destructor. +switch (yytype) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.template destroy< std::string > (); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_var: // var + case 356: // var value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.template destroy< std::unique_ptr > (); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.template destroy< std::unique_ptr > > > (); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.template destroy< std::unique_ptr > > > (); break; @@ -2330,15 +1703,6 @@ switch (yykind) Base::clear (); } - /// The user-facing name of this symbol. - std::string name () const YY_NOEXCEPT - { - return seclang_parser::symbol_name (this->kind ()); - } - - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; - /// Whether empty. bool empty () const YY_NOEXCEPT; @@ -2359,51 +1723,46 @@ switch (yykind) }; /// Type access provider for token (enum) based symbols. - struct by_kind + struct by_type { /// Default constructor. - by_kind (); + by_type (); #if 201103L <= YY_CPLUSPLUS /// Move constructor. - by_kind (by_kind&& that); + by_type (by_type&& that); #endif /// Copy constructor. - by_kind (const by_kind& that); + by_type (const by_type& that); - /// The symbol kind as needed by the constructor. - typedef token_kind_type kind_type; + /// The symbol type as needed by the constructor. + typedef token_type kind_type; /// Constructor from (external) token numbers. - by_kind (kind_type t); + by_type (kind_type t); /// Record that this symbol is empty. void clear (); - /// Steal the symbol kind from \a that. - void move (by_kind& that); + /// Steal the symbol type from \a that. + void move (by_type& that); /// The (internal) type number (corresponding to \a type). /// \a empty when empty. - symbol_kind_type kind () const YY_NOEXCEPT; - - /// Backward compatibility (Bison 3.6). - symbol_kind_type type_get () const YY_NOEXCEPT; + symbol_number_type type_get () const YY_NOEXCEPT; - /// The symbol kind. - /// \a S_YYEMPTY when empty. - symbol_kind_type kind_; + /// The symbol type. + /// \a empty_symbol when empty. + /// An int, not token_number_type, to be able to store empty_symbol. + int type; }; - /// Backward compatibility for a private implementation detail (Bison 3.6). - typedef by_kind by_type; - /// "External" symbols: returned by the scanner. - struct symbol_type : basic_symbol + struct symbol_type : basic_symbol { /// Superclass. - typedef basic_symbol super_type; + typedef basic_symbol super_type; /// Empty symbol. symbol_type () {} @@ -2413,13 +1772,13 @@ switch (yykind) symbol_type (int tok, location_type l) : super_type(token_type (tok), std::move (l)) { - YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); + YY_ASSERT (tok == token::TOK_END || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); } #else symbol_type (int tok, const location_type& l) : super_type(token_type (tok), l) { - YY_ASSERT (tok == token::TOK_END || tok == token::TOK_YYerror || tok == token::TOK_YYUNDEF || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); + YY_ASSERT (tok == token::TOK_END || tok == token::TOK_COMMA || tok == token::TOK_CONFIG_CONTENT_INJECTION || tok == token::TOK_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR || tok == token::TOK_PIPE || tok == token::TOK_NEW_LINE || tok == token::TOK_VAR_COUNT || tok == token::TOK_VAR_EXCLUSION || tok == token::TOK_VARIABLE_ARGS || tok == token::TOK_VARIABLE_ARGS_POST || tok == token::TOK_VARIABLE_ARGS_GET || tok == token::TOK_VARIABLE_FILES_SIZES || tok == token::TOK_VARIABLE_FILES_NAMES || tok == token::TOK_VARIABLE_FILES_TMP_CONTENT || tok == token::TOK_VARIABLE_MULTIPART_FILENAME || tok == token::TOK_VARIABLE_MULTIPART_NAME || tok == token::TOK_VARIABLE_MATCHED_VARS_NAMES || tok == token::TOK_VARIABLE_MATCHED_VARS || tok == token::TOK_VARIABLE_FILES || tok == token::TOK_VARIABLE_REQUEST_COOKIES || tok == token::TOK_VARIABLE_REQUEST_HEADERS || tok == token::TOK_VARIABLE_RESPONSE_HEADERS || tok == token::TOK_VARIABLE_GEO || tok == token::TOK_VARIABLE_REQUEST_COOKIES_NAMES || tok == token::TOK_VARIABLE_ARGS_COMBINED_SIZE || tok == token::TOK_VARIABLE_ARGS_GET_NAMES || tok == token::TOK_VARIABLE_RULE || tok == token::TOK_VARIABLE_ARGS_NAMES || tok == token::TOK_VARIABLE_ARGS_POST_NAMES || tok == token::TOK_VARIABLE_AUTH_TYPE || tok == token::TOK_VARIABLE_FILES_COMBINED_SIZE || tok == token::TOK_VARIABLE_FILES_TMP_NAMES || tok == token::TOK_VARIABLE_FULL_REQUEST || tok == token::TOK_VARIABLE_FULL_REQUEST_LENGTH || tok == token::TOK_VARIABLE_INBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_MATCHED_VAR || tok == token::TOK_VARIABLE_MATCHED_VAR_NAME || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_QUOTED || tok == token::TOK_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE || tok == token::TOK_VARIABLE_MULTIPART_CRLF_LF_LINES || tok == token::TOK_VARIABLE_MULTIPART_DATA_AFTER || tok == token::TOK_VARIABLE_MULTIPART_DATA_BEFORE || tok == token::TOK_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED || tok == token::TOK_VARIABLE_MULTIPART_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING || tok == token::TOK_VARIABLE_MULTIPART_INVALID_PART || tok == token::TOK_VARIABLE_MULTIPART_INVALID_QUOTING || tok == token::TOK_VARIABLE_MULTIPART_LF_LINE || tok == token::TOK_VARIABLE_MULTIPART_MISSING_SEMICOLON || tok == token::TOK_VARIABLE_MULTIPART_SEMICOLON_MISSING || tok == token::TOK_VARIABLE_MULTIPART_STRICT_ERROR || tok == token::TOK_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY || tok == token::TOK_VARIABLE_OUTBOUND_DATA_ERROR || tok == token::TOK_VARIABLE_PATH_INFO || tok == token::TOK_VARIABLE_QUERY_STRING || tok == token::TOK_VARIABLE_REMOTE_ADDR || tok == token::TOK_VARIABLE_REMOTE_HOST || tok == token::TOK_VARIABLE_REMOTE_PORT || tok == token::TOK_VARIABLE_REQBODY_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR_ERROR || tok == token::TOK_VARIABLE_REQBODY_PROCESSOR || tok == token::TOK_VARIABLE_REQUEST_BASENAME || tok == token::TOK_VARIABLE_REQUEST_BODY_LENGTH || tok == token::TOK_VARIABLE_REQUEST_BODY || tok == token::TOK_VARIABLE_REQUEST_FILE_NAME || tok == token::TOK_VARIABLE_REQUEST_HEADERS_NAMES || tok == token::TOK_VARIABLE_REQUEST_LINE || tok == token::TOK_VARIABLE_REQUEST_METHOD || tok == token::TOK_VARIABLE_REQUEST_PROTOCOL || tok == token::TOK_VARIABLE_REQUEST_URI_RAW || tok == token::TOK_VARIABLE_REQUEST_URI || tok == token::TOK_VARIABLE_RESOURCE || tok == token::TOK_VARIABLE_RESPONSE_BODY || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_LENGTH || tok == token::TOK_VARIABLE_RESPONSE_CONTENT_TYPE || tok == token::TOK_VARIABLE_RESPONSE_HEADERS_NAMES || tok == token::TOK_VARIABLE_RESPONSE_PROTOCOL || tok == token::TOK_VARIABLE_RESPONSE_STATUS || tok == token::TOK_VARIABLE_SERVER_ADDR || tok == token::TOK_VARIABLE_SERVER_NAME || tok == token::TOK_VARIABLE_SERVER_PORT || tok == token::TOK_VARIABLE_SESSION_ID || tok == token::TOK_VARIABLE_UNIQUE_ID || tok == token::TOK_VARIABLE_URL_ENCODED_ERROR || tok == token::TOK_VARIABLE_USER_ID || tok == token::TOK_VARIABLE_WEB_APP_ID || tok == token::TOK_VARIABLE_STATUS || tok == token::TOK_VARIABLE_STATUS_LINE || tok == token::TOK_VARIABLE_IP || tok == token::TOK_VARIABLE_GLOBAL || tok == token::TOK_VARIABLE_TX || tok == token::TOK_VARIABLE_SESSION || tok == token::TOK_VARIABLE_USER || tok == token::TOK_RUN_TIME_VAR_ENV || tok == token::TOK_RUN_TIME_VAR_XML || tok == token::TOK_ACTION_SETVAR || tok == token::TOK_SETVAR_OPERATION_EQUALS || tok == token::TOK_SETVAR_OPERATION_EQUALS_PLUS || tok == token::TOK_SETVAR_OPERATION_EQUALS_MINUS || tok == token::TOK_NOT || tok == token::TOK_OPERATOR_BEGINS_WITH || tok == token::TOK_OPERATOR_CONTAINS || tok == token::TOK_OPERATOR_CONTAINS_WORD || tok == token::TOK_OPERATOR_DETECT_SQLI || tok == token::TOK_OPERATOR_DETECT_XSS || tok == token::TOK_OPERATOR_ENDS_WITH || tok == token::TOK_OPERATOR_EQ || tok == token::TOK_OPERATOR_FUZZY_HASH || tok == token::TOK_OPERATOR_GEOLOOKUP || tok == token::TOK_OPERATOR_GE || tok == token::TOK_OPERATOR_GSB_LOOKUP || tok == token::TOK_OPERATOR_GT || tok == token::TOK_OPERATOR_INSPECT_FILE || tok == token::TOK_OPERATOR_IP_MATCH_FROM_FILE || tok == token::TOK_OPERATOR_IP_MATCH || tok == token::TOK_OPERATOR_LE || tok == token::TOK_OPERATOR_LT || tok == token::TOK_OPERATOR_PM_FROM_FILE || tok == token::TOK_OPERATOR_PM || tok == token::TOK_OPERATOR_RBL || tok == token::TOK_OPERATOR_RSUB || tok == token::TOK_OPERATOR_RX_CONTENT_ONLY || tok == token::TOK_OPERATOR_RX || tok == token::TOK_OPERATOR_RX_GLOBAL || tok == token::TOK_OPERATOR_STR_EQ || tok == token::TOK_OPERATOR_STR_MATCH || tok == token::TOK_OPERATOR_UNCONDITIONAL_MATCH || tok == token::TOK_OPERATOR_VALIDATE_BYTE_RANGE || tok == token::TOK_OPERATOR_VALIDATE_DTD || tok == token::TOK_OPERATOR_VALIDATE_HASH || tok == token::TOK_OPERATOR_VALIDATE_SCHEMA || tok == token::TOK_OPERATOR_VALIDATE_URL_ENCODING || tok == token::TOK_OPERATOR_VALIDATE_UTF8_ENCODING || tok == token::TOK_OPERATOR_VERIFY_CC || tok == token::TOK_OPERATOR_VERIFY_CPF || tok == token::TOK_OPERATOR_VERIFY_SSN || tok == token::TOK_OPERATOR_VERIFY_SVNR || tok == token::TOK_OPERATOR_WITHIN || tok == token::TOK_CONFIG_DIR_AUDIT_LOG_FMT || tok == token::TOK_JSON || tok == token::TOK_NATIVE || tok == token::TOK_ACTION_CTL_RULE_ENGINE); } #endif #if 201103L <= YY_CPLUSPLUS @@ -2441,13 +1800,6 @@ switch (yykind) seclang_parser (modsecurity::Parser::Driver& driver_yyarg); virtual ~seclang_parser (); -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - seclang_parser (const seclang_parser&) = delete; - /// Non copyable. - seclang_parser& operator= (const seclang_parser&) = delete; -#endif - /// Parse. An alias for parse (). /// \returns 0 iff parsing succeeded. int operator() (); @@ -2478,10 +1830,6 @@ switch (yykind) /// Report a syntax error. void error (const syntax_error& err); - /// The user-facing name of the symbol whose (internal) number is - /// YYSYMBOL. No bounds checking. - static std::string symbol_name (symbol_kind_type yysymbol); - // Implementation of make_symbol for each symbol type. #if 201103L <= YY_CPLUSPLUS static @@ -2498,36 +1846,6 @@ switch (yykind) return symbol_type (token::TOK_END, l); } #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_YYerror (location_type l) - { - return symbol_type (token::TOK_YYerror, std::move (l)); - } -#else - static - symbol_type - make_YYerror (const location_type& l) - { - return symbol_type (token::TOK_YYerror, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_YYUNDEF (location_type l) - { - return symbol_type (token::TOK_YYUNDEF, std::move (l)); - } -#else - static - symbol_type - make_YYUNDEF (const location_type& l) - { - return symbol_type (token::TOK_YYUNDEF, l); - } -#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -7645,43 +6963,20 @@ switch (yykind) #endif - class context - { - public: - context (const seclang_parser& yyparser, const symbol_type& yyla); - const symbol_type& lookahead () const { return yyla_; } - symbol_kind_type token () const { return yyla_.kind (); } - const location_type& location () const { return yyla_.location; } - - /// Put in YYARG at most YYARGN of the expected tokens, and return the - /// number of tokens stored in YYARG. If YYARG is null, return the - /// number of expected tokens (guaranteed to be less than YYNTOKENS). - int expected_tokens (symbol_kind_type yyarg[], int yyargn) const; - - private: - const seclang_parser& yyparser_; - const symbol_type& yyla_; - }; - private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. + /// This class is not copyable. seclang_parser (const seclang_parser&); - /// Non copyable. seclang_parser& operator= (const seclang_parser&); -#endif - /// Stored state numbers (used for stacks). typedef short state_type; - /// The arguments of the error message. - int yy_syntax_error_arguments_ (const context& yyctx, - symbol_kind_type yyarg[], int yyargn) const; - /// Generate an error message. - /// \param yyctx the context in which the error occurred. - virtual std::string yysyntax_error_ (const context& yyctx) const; + /// \param yystate the state where the error occurred. + /// \param yyla the lookahead token. + virtual std::string yysyntax_error_ (state_type yystate, + const symbol_type& yyla) const; + /// Compute post-reduction state. /// \param yystate the current state /// \param yysym the nonterminal to push on the stack @@ -7698,17 +6993,10 @@ switch (yykind) static const short yypact_ninf_; static const signed char yytable_ninf_; - /// Convert a scanner token kind \a t to a symbol kind. - /// In theory \a t should be a token_kind_type, but character literals + /// Convert a scanner token number \a t to a symbol number. + /// In theory \a t should be a token_type, but character literals /// are valid, yet not members of the token_type enum. - static symbol_kind_type yytranslate_ (int t); - - /// Convert the symbol name \a n to a form suitable for a diagnostic. - static std::string yytnamerr_ (const char *yystr); - - /// For a symbol, its name in clear. - static const char* const yytname_[]; - + static token_number_type yytranslate_ (int t); // Tables. // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -7744,20 +7032,26 @@ switch (yykind) static const signed char yyr2_[]; + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; #if YYDEBUG // YYRLINE[YYN] -- Source line where rule number YYN was defined. static const short yyrline_[]; /// Report on the debug stream that the rule \a r is going to be reduced. - virtual void yy_reduce_print_ (int r) const; + virtual void yy_reduce_print_ (int r); /// Print the state stack on the debug stream. - virtual void yy_stack_print_ () const; + virtual void yystack_print_ (); /// Debugging level. int yydebug_; /// Debug stream. std::ostream* yycdebug_; - /// \brief Display a symbol kind, value and location. + /// \brief Display a symbol type, value and location. /// \param yyo The output stream. /// \param yysym The symbol. template @@ -7778,7 +7072,7 @@ switch (yykind) /// Default constructor. by_state () YY_NOEXCEPT; - /// The symbol kind as needed by the constructor. + /// The symbol type as needed by the constructor. typedef state_type kind_type; /// Constructor. @@ -7790,12 +7084,12 @@ switch (yykind) /// Record that this symbol is empty. void clear () YY_NOEXCEPT; - /// Steal the symbol kind from \a that. + /// Steal the symbol type from \a that. void move (by_state& that); - /// The symbol kind (corresponding to \a state). - /// \a symbol_kind::S_YYEMPTY when empty. - symbol_kind_type kind () const YY_NOEXCEPT; + /// The (internal) type number (corresponding to \a state). + /// \a empty_symbol when empty. + symbol_number_type type_get () const YY_NOEXCEPT; /// The state number used to denote an empty symbol. /// We use the initial state, as it does not have a value. @@ -7834,8 +7128,8 @@ switch (yykind) { public: // Hide our reversed order. - typedef typename S::iterator iterator; - typedef typename S::const_iterator const_iterator; + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; @@ -7843,13 +7137,6 @@ switch (yykind) : seq_ (n) {} -#if 201103L <= YY_CPLUSPLUS - /// Non copyable. - stack (const stack&) = delete; - /// Non copyable. - stack& operator= (const stack&) = delete; -#endif - /// Random access. /// /// Index 0 returns the topmost element. @@ -7900,18 +7187,24 @@ switch (yykind) return index_type (seq_.size ()); } + std::ptrdiff_t + ssize () const YY_NOEXCEPT + { + return std::ptrdiff_t (size ()); + } + /// Iterator on top of the stack (going downwards). const_iterator begin () const YY_NOEXCEPT { - return seq_.begin (); + return seq_.rbegin (); } /// Bottom of the stack. const_iterator end () const YY_NOEXCEPT { - return seq_.end (); + return seq_.rend (); } /// Present a slice of the top of a stack. @@ -7935,12 +7228,8 @@ switch (yykind) }; private: -#if YY_CPLUSPLUS < 201103L - /// Non copyable. stack (const stack&); - /// Non copyable. stack& operator= (const stack&); -#endif /// The wrapped container. S seq_; }; @@ -7970,28 +7259,33 @@ switch (yykind) /// Pop \a n symbols from the stack. void yypop_ (int n = 1); + /// Some specific tokens. + static const token_number_type yy_error_token_ = 1; + static const token_number_type yy_undef_token_ = 2; + /// Constants. enum { + yyeof_ = 0, yylast_ = 3276, ///< Last index in yytable_. yynnts_ = 16, ///< Number of nonterminal symbols. - yyfinal_ = 338 ///< Termination state number. + yyfinal_ = 338, ///< Termination state number. + yyntokens_ = 344 ///< Number of tokens. }; // User arguments. modsecurity::Parser::Driver& driver; - }; inline - seclang_parser::symbol_kind_type + seclang_parser::token_number_type seclang_parser::yytranslate_ (int t) { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. static - const short + const token_number_type translate_table[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -8055,253 +7349,498 @@ switch (yykind) 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343 }; - // Last valid token kind. - const int code_max = 598; + const int user_token_number_max_ = 598; if (t <= 0) - return symbol_kind::S_YYEOF; - else if (t <= code_max) - return YY_CAST (symbol_kind_type, translate_table[t]); + return yyeof_; + else if (t <= user_token_number_max_) + return translate_table[t]; else - return symbol_kind::S_YYUNDEF; + return yy_undef_token_; } // basic_symbol. +#if 201103L <= YY_CPLUSPLUS + template + seclang_parser::basic_symbol::basic_symbol (basic_symbol&& that) + : Base (std::move (that)) + , value () + , location (std::move (that.location)) + { + switch (this->type_get ()) + { + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" + value.move< std::string > (std::move (that.value)); + break; + + case 350: // op + case 351: // op_before_init + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 359: // run_time_string + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 356: // var + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 357: // act + case 358: // setvar_action + value.move< std::unique_ptr > (std::move (that.value)); + break; + + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted + value.move< std::unique_ptr > > > (std::move (that.value)); + break; + + case 348: // actions + case 349: // actions_may_quoted + value.move< std::unique_ptr > > > (std::move (that.value)); + break; + + default: + break; + } + + } +#endif + template seclang_parser::basic_symbol::basic_symbol (const basic_symbol& that) : Base (that) , value () , location (that.location) { - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.copy< std::string > (YY_MOVE (that.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.copy< std::unique_ptr > (YY_MOVE (that.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.copy< std::unique_ptr > > > (YY_MOVE (that.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.copy< std::unique_ptr > > > (YY_MOVE (that.value)); break; @@ -8313,18 +7852,11 @@ switch (yykind) - template - seclang_parser::symbol_kind_type - seclang_parser::basic_symbol::type_get () const YY_NOEXCEPT - { - return this->kind (); - } - template bool seclang_parser::basic_symbol::empty () const YY_NOEXCEPT { - return this->kind () == symbol_kind::S_YYEMPTY; + return Base::type_get () == empty_symbol; } template @@ -8332,235 +7864,235 @@ switch (yykind) seclang_parser::basic_symbol::move (basic_symbol& s) { super_type::move (s); - switch (this->kind ()) + switch (this->type_get ()) { - case symbol_kind::S_ACTION_ACCURACY: // "Accuracy" - case symbol_kind::S_ACTION_ALLOW: // "Allow" - case symbol_kind::S_ACTION_APPEND: // "Append" - case symbol_kind::S_ACTION_AUDIT_LOG: // "AuditLog" - case symbol_kind::S_ACTION_BLOCK: // "Block" - case symbol_kind::S_ACTION_CAPTURE: // "Capture" - case symbol_kind::S_ACTION_CHAIN: // "Chain" - case symbol_kind::S_ACTION_CTL_AUDIT_ENGINE: // "ACTION_CTL_AUDIT_ENGINE" - case symbol_kind::S_ACTION_CTL_AUDIT_LOG_PARTS: // "ACTION_CTL_AUDIT_LOG_PARTS" - case symbol_kind::S_ACTION_CTL_BDY_JSON: // "ACTION_CTL_BDY_JSON" - case symbol_kind::S_ACTION_CTL_BDY_XML: // "ACTION_CTL_BDY_XML" - case symbol_kind::S_ACTION_CTL_BDY_URLENCODED: // "ACTION_CTL_BDY_URLENCODED" - case symbol_kind::S_ACTION_CTL_FORCE_REQ_BODY_VAR: // "ACTION_CTL_FORCE_REQ_BODY_VAR" - case symbol_kind::S_ACTION_CTL_REQUEST_BODY_ACCESS: // "ACTION_CTL_REQUEST_BODY_ACCESS" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_ID: // "ACTION_CTL_RULE_REMOVE_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_BY_TAG: // "ACTION_CTL_RULE_REMOVE_BY_TAG" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" - case symbol_kind::S_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" - case symbol_kind::S_ACTION_DENY: // "Deny" - case symbol_kind::S_ACTION_DEPRECATE_VAR: // "DeprecateVar" - case symbol_kind::S_ACTION_DROP: // "Drop" - case symbol_kind::S_ACTION_EXEC: // "Exec" - case symbol_kind::S_ACTION_EXPIRE_VAR: // "ExpireVar" - case symbol_kind::S_ACTION_ID: // "Id" - case symbol_kind::S_ACTION_INITCOL: // "InitCol" - case symbol_kind::S_ACTION_LOG: // "Log" - case symbol_kind::S_ACTION_LOG_DATA: // "LogData" - case symbol_kind::S_ACTION_MATURITY: // "Maturity" - case symbol_kind::S_ACTION_MSG: // "Msg" - case symbol_kind::S_ACTION_MULTI_MATCH: // "MultiMatch" - case symbol_kind::S_ACTION_NO_AUDIT_LOG: // "NoAuditLog" - case symbol_kind::S_ACTION_NO_LOG: // "NoLog" - case symbol_kind::S_ACTION_PASS: // "Pass" - case symbol_kind::S_ACTION_PAUSE: // "Pause" - case symbol_kind::S_ACTION_PHASE: // "Phase" - case symbol_kind::S_ACTION_PREPEND: // "Prepend" - case symbol_kind::S_ACTION_PROXY: // "Proxy" - case symbol_kind::S_ACTION_REDIRECT: // "Redirect" - case symbol_kind::S_ACTION_REV: // "Rev" - case symbol_kind::S_ACTION_SANITISE_ARG: // "SanitiseArg" - case symbol_kind::S_ACTION_SANITISE_MATCHED: // "SanitiseMatched" - case symbol_kind::S_ACTION_SANITISE_MATCHED_BYTES: // "SanitiseMatchedBytes" - case symbol_kind::S_ACTION_SANITISE_REQUEST_HEADER: // "SanitiseRequestHeader" - case symbol_kind::S_ACTION_SANITISE_RESPONSE_HEADER: // "SanitiseResponseHeader" - case symbol_kind::S_ACTION_SETENV: // "SetEnv" - case symbol_kind::S_ACTION_SETRSC: // "SetRsc" - case symbol_kind::S_ACTION_SETSID: // "SetSid" - case symbol_kind::S_ACTION_SETUID: // "SetUID" - case symbol_kind::S_ACTION_SEVERITY: // "Severity" - case symbol_kind::S_ACTION_SKIP: // "Skip" - case symbol_kind::S_ACTION_SKIP_AFTER: // "SkipAfter" - case symbol_kind::S_ACTION_STATUS: // "Status" - case symbol_kind::S_ACTION_TAG: // "Tag" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_ENCODE: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE: // "ACTION_TRANSFORMATION_BASE_64_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" - case symbol_kind::S_ACTION_TRANSFORMATION_CMD_LINE: // "ACTION_TRANSFORMATION_CMD_LINE" - case symbol_kind::S_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_CSS_DECODE: // "ACTION_TRANSFORMATION_CSS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_ENCODE: // "ACTION_TRANSFORMATION_HEX_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HEX_DECODE: // "ACTION_TRANSFORMATION_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_JS_DECODE: // "ACTION_TRANSFORMATION_JS_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_LENGTH: // "ACTION_TRANSFORMATION_LENGTH" - case symbol_kind::S_ACTION_TRANSFORMATION_LOWERCASE: // "ACTION_TRANSFORMATION_LOWERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_PHP_ARGS_NAMES: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" - case symbol_kind::S_ACTION_TRANSFORMATION_MD5: // "ACTION_TRANSFORMATION_MD5" - case symbol_kind::S_ACTION_TRANSFORMATION_NONE: // "ACTION_TRANSFORMATION_NONE" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH: // "ACTION_TRANSFORMATION_NORMALISE_PATH" - case symbol_kind::S_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_NULLS: // "ACTION_TRANSFORMATION_REMOVE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_REMOVE_WHITESPACE: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_COMMENTS: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" - case symbol_kind::S_ACTION_TRANSFORMATION_REPLACE_NULLS: // "ACTION_TRANSFORMATION_REPLACE_NULLS" - case symbol_kind::S_ACTION_TRANSFORMATION_SHA1: // "ACTION_TRANSFORMATION_SHA1" - case symbol_kind::S_ACTION_TRANSFORMATION_SQL_HEX_DECODE: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM: // "ACTION_TRANSFORMATION_TRIM" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_LEFT: // "ACTION_TRANSFORMATION_TRIM_LEFT" - case symbol_kind::S_ACTION_TRANSFORMATION_TRIM_RIGHT: // "ACTION_TRANSFORMATION_TRIM_RIGHT" - case symbol_kind::S_ACTION_TRANSFORMATION_UPPERCASE: // "ACTION_TRANSFORMATION_UPPERCASE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_ENCODE: // "ACTION_TRANSFORMATION_URL_ENCODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE: // "ACTION_TRANSFORMATION_URL_DECODE" - case symbol_kind::S_ACTION_TRANSFORMATION_URL_DECODE_UNI: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" - case symbol_kind::S_ACTION_TRANSFORMATION_UTF8_TO_UNICODE: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" - case symbol_kind::S_ACTION_VER: // "Ver" - case symbol_kind::S_ACTION_XMLNS: // "xmlns" - case symbol_kind::S_CONFIG_COMPONENT_SIG: // "CONFIG_COMPONENT_SIG" - case symbol_kind::S_CONFIG_CONN_ENGINE: // "CONFIG_CONN_ENGINE" - case symbol_kind::S_CONFIG_SEC_ARGUMENT_SEPARATOR: // "CONFIG_SEC_ARGUMENT_SEPARATOR" - case symbol_kind::S_CONFIG_SEC_WEB_APP_ID: // "CONFIG_SEC_WEB_APP_ID" - case symbol_kind::S_CONFIG_SEC_SERVER_SIG: // "CONFIG_SEC_SERVER_SIG" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR: // "CONFIG_DIR_AUDIT_DIR" - case symbol_kind::S_CONFIG_DIR_AUDIT_DIR_MOD: // "CONFIG_DIR_AUDIT_DIR_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_ENG: // "CONFIG_DIR_AUDIT_ENG" - case symbol_kind::S_CONFIG_DIR_AUDIT_FLE_MOD: // "CONFIG_DIR_AUDIT_FLE_MOD" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG: // "CONFIG_DIR_AUDIT_LOG" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG2: // "CONFIG_DIR_AUDIT_LOG2" - case symbol_kind::S_CONFIG_DIR_AUDIT_LOG_P: // "CONFIG_DIR_AUDIT_LOG_P" - case symbol_kind::S_CONFIG_DIR_AUDIT_STS: // "CONFIG_DIR_AUDIT_STS" - case symbol_kind::S_CONFIG_DIR_AUDIT_TPE: // "CONFIG_DIR_AUDIT_TPE" - case symbol_kind::S_CONFIG_DIR_DEBUG_LOG: // "CONFIG_DIR_DEBUG_LOG" - case symbol_kind::S_CONFIG_DIR_DEBUG_LVL: // "CONFIG_DIR_DEBUG_LVL" - case symbol_kind::S_CONFIG_SEC_CACHE_TRANSFORMATIONS: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" - case symbol_kind::S_CONFIG_SEC_DISABLE_BACKEND_COMPRESS: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" - case symbol_kind::S_CONFIG_SEC_HASH_ENGINE: // "CONFIG_SEC_HASH_ENGINE" - case symbol_kind::S_CONFIG_SEC_HASH_KEY: // "CONFIG_SEC_HASH_KEY" - case symbol_kind::S_CONFIG_SEC_HASH_PARAM: // "CONFIG_SEC_HASH_PARAM" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_RX: // "CONFIG_SEC_HASH_METHOD_RX" - case symbol_kind::S_CONFIG_SEC_HASH_METHOD_PM: // "CONFIG_SEC_HASH_METHOD_PM" - case symbol_kind::S_CONFIG_SEC_CHROOT_DIR: // "CONFIG_SEC_CHROOT_DIR" - case symbol_kind::S_CONFIG_DIR_GEO_DB: // "CONFIG_DIR_GEO_DB" - case symbol_kind::S_CONFIG_DIR_GSB_DB: // "CONFIG_DIR_GSB_DB" - case symbol_kind::S_CONFIG_SEC_GUARDIAN_LOG: // "CONFIG_SEC_GUARDIAN_LOG" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT: // "CONFIG_DIR_PCRE_MATCH_LIMIT" - case symbol_kind::S_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" - case symbol_kind::S_CONFIG_SEC_CONN_R_STATE_LIMIT: // "CONFIG_SEC_CONN_R_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_CONN_W_STATE_LIMIT: // "CONFIG_SEC_CONN_W_STATE_LIMIT" - case symbol_kind::S_CONFIG_SEC_SENSOR_ID: // "CONFIG_SEC_SENSOR_ID" - case symbol_kind::S_CONFIG_DIR_ARGS_LIMIT: // "CONFIG_DIR_ARGS_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY: // "CONFIG_DIR_REQ_BODY" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT: // "CONFIG_DIR_REQ_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_LIMIT_ACTION: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY: // "CONFIG_DIR_RES_BODY" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT: // "CONFIG_DIR_RES_BODY_LIMIT" - case symbol_kind::S_CONFIG_DIR_RES_BODY_LIMIT_ACTION: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_INHERITANCE: // "CONFIG_SEC_RULE_INHERITANCE" - case symbol_kind::S_CONFIG_SEC_RULE_PERF_TIME: // "CONFIG_SEC_RULE_PERF_TIME" - case symbol_kind::S_CONFIG_DIR_RULE_ENG: // "CONFIG_DIR_RULE_ENG" - case symbol_kind::S_CONFIG_DIR_SEC_ACTION: // "CONFIG_DIR_SEC_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_DEFAULT_ACTION: // "CONFIG_DIR_SEC_DEFAULT_ACTION" - case symbol_kind::S_CONFIG_DIR_SEC_MARKER: // "CONFIG_DIR_SEC_MARKER" - case symbol_kind::S_CONFIG_DIR_UNICODE_MAP_FILE: // "CONFIG_DIR_UNICODE_MAP_FILE" - case symbol_kind::S_CONFIG_DIR_UNICODE_CODE_PAGE: // "CONFIG_DIR_UNICODE_CODE_PAGE" - case symbol_kind::S_CONFIG_SEC_COLLECTION_TIMEOUT: // "CONFIG_SEC_COLLECTION_TIMEOUT" - case symbol_kind::S_CONFIG_SEC_HTTP_BLKEY: // "CONFIG_SEC_HTTP_BLKEY" - case symbol_kind::S_CONFIG_SEC_INTERCEPT_ON_ERROR: // "CONFIG_SEC_INTERCEPT_ON_ERROR" - case symbol_kind::S_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_ID: // "CONFIG_SEC_RULE_REMOVE_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_MSG: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_REMOVE_BY_TAG: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" - case symbol_kind::S_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" - case symbol_kind::S_CONFIG_UPDLOAD_KEEP_FILES: // "CONFIG_UPDLOAD_KEEP_FILES" - case symbol_kind::S_CONFIG_UPDLOAD_SAVE_TMP_FILES: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" - case symbol_kind::S_CONFIG_UPLOAD_DIR: // "CONFIG_UPLOAD_DIR" - case symbol_kind::S_CONFIG_UPLOAD_FILE_LIMIT: // "CONFIG_UPLOAD_FILE_LIMIT" - case symbol_kind::S_CONFIG_UPLOAD_FILE_MODE: // "CONFIG_UPLOAD_FILE_MODE" - case symbol_kind::S_CONFIG_VALUE_ABORT: // "CONFIG_VALUE_ABORT" - case symbol_kind::S_CONFIG_VALUE_DETC: // "CONFIG_VALUE_DETC" - case symbol_kind::S_CONFIG_VALUE_HTTPS: // "CONFIG_VALUE_HTTPS" - case symbol_kind::S_CONFIG_VALUE_OFF: // "CONFIG_VALUE_OFF" - case symbol_kind::S_CONFIG_VALUE_ON: // "CONFIG_VALUE_ON" - case symbol_kind::S_CONFIG_VALUE_PARALLEL: // "CONFIG_VALUE_PARALLEL" - case symbol_kind::S_CONFIG_VALUE_PROCESS_PARTIAL: // "CONFIG_VALUE_PROCESS_PARTIAL" - case symbol_kind::S_CONFIG_VALUE_REJECT: // "CONFIG_VALUE_REJECT" - case symbol_kind::S_CONFIG_VALUE_RELEVANT_ONLY: // "CONFIG_VALUE_RELEVANT_ONLY" - case symbol_kind::S_CONFIG_VALUE_SERIAL: // "CONFIG_VALUE_SERIAL" - case symbol_kind::S_CONFIG_VALUE_WARN: // "CONFIG_VALUE_WARN" - case symbol_kind::S_CONFIG_XML_EXTERNAL_ENTITY: // "CONFIG_XML_EXTERNAL_ENTITY" - case symbol_kind::S_CONGIG_DIR_RESPONSE_BODY_MP: // "CONGIG_DIR_RESPONSE_BODY_MP" - case symbol_kind::S_CONGIG_DIR_SEC_ARG_SEP: // "CONGIG_DIR_SEC_ARG_SEP" - case symbol_kind::S_CONGIG_DIR_SEC_COOKIE_FORMAT: // "CONGIG_DIR_SEC_COOKIE_FORMAT" - case symbol_kind::S_CONFIG_SEC_COOKIEV0_SEPARATOR: // "CONFIG_SEC_COOKIEV0_SEPARATOR" - case symbol_kind::S_CONGIG_DIR_SEC_DATA_DIR: // "CONGIG_DIR_SEC_DATA_DIR" - case symbol_kind::S_CONGIG_DIR_SEC_STATUS_ENGINE: // "CONGIG_DIR_SEC_STATUS_ENGINE" - case symbol_kind::S_CONFIG_SEC_STREAM_IN_BODY_INSPECTION: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" - case symbol_kind::S_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" - case symbol_kind::S_CONGIG_DIR_SEC_TMP_DIR: // "CONGIG_DIR_SEC_TMP_DIR" - case symbol_kind::S_DIRECTIVE: // "DIRECTIVE" - case symbol_kind::S_DIRECTIVE_SECRULESCRIPT: // "DIRECTIVE_SECRULESCRIPT" - case symbol_kind::S_FREE_TEXT_QUOTE_MACRO_EXPANSION: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" - case symbol_kind::S_QUOTATION_MARK: // "QUOTATION_MARK" - case symbol_kind::S_RUN_TIME_VAR_BLD: // "RUN_TIME_VAR_BLD" - case symbol_kind::S_RUN_TIME_VAR_DUR: // "RUN_TIME_VAR_DUR" - case symbol_kind::S_RUN_TIME_VAR_HSV: // "RUN_TIME_VAR_HSV" - case symbol_kind::S_RUN_TIME_VAR_REMOTE_USER: // "RUN_TIME_VAR_REMOTE_USER" - case symbol_kind::S_RUN_TIME_VAR_TIME: // "RUN_TIME_VAR_TIME" - case symbol_kind::S_RUN_TIME_VAR_TIME_DAY: // "RUN_TIME_VAR_TIME_DAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_EPOCH: // "RUN_TIME_VAR_TIME_EPOCH" - case symbol_kind::S_RUN_TIME_VAR_TIME_HOUR: // "RUN_TIME_VAR_TIME_HOUR" - case symbol_kind::S_RUN_TIME_VAR_TIME_MIN: // "RUN_TIME_VAR_TIME_MIN" - case symbol_kind::S_RUN_TIME_VAR_TIME_MON: // "RUN_TIME_VAR_TIME_MON" - case symbol_kind::S_RUN_TIME_VAR_TIME_SEC: // "RUN_TIME_VAR_TIME_SEC" - case symbol_kind::S_RUN_TIME_VAR_TIME_WDAY: // "RUN_TIME_VAR_TIME_WDAY" - case symbol_kind::S_RUN_TIME_VAR_TIME_YEAR: // "RUN_TIME_VAR_TIME_YEAR" - case symbol_kind::S_VARIABLE: // "VARIABLE" - case symbol_kind::S_DICT_ELEMENT: // "Dictionary element" - case symbol_kind::S_DICT_ELEMENT_REGEXP: // "Dictionary element, selected by regexp" + case 146: // "Accuracy" + case 147: // "Allow" + case 148: // "Append" + case 149: // "AuditLog" + case 150: // "Block" + case 151: // "Capture" + case 152: // "Chain" + case 153: // "ACTION_CTL_AUDIT_ENGINE" + case 154: // "ACTION_CTL_AUDIT_LOG_PARTS" + case 155: // "ACTION_CTL_BDY_JSON" + case 156: // "ACTION_CTL_BDY_XML" + case 157: // "ACTION_CTL_BDY_URLENCODED" + case 158: // "ACTION_CTL_FORCE_REQ_BODY_VAR" + case 159: // "ACTION_CTL_REQUEST_BODY_ACCESS" + case 160: // "ACTION_CTL_RULE_REMOVE_BY_ID" + case 161: // "ACTION_CTL_RULE_REMOVE_BY_TAG" + case 162: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" + case 163: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" + case 164: // "Deny" + case 165: // "DeprecateVar" + case 166: // "Drop" + case 167: // "Exec" + case 168: // "ExpireVar" + case 169: // "Id" + case 170: // "InitCol" + case 171: // "Log" + case 172: // "LogData" + case 173: // "Maturity" + case 174: // "Msg" + case 175: // "MultiMatch" + case 176: // "NoAuditLog" + case 177: // "NoLog" + case 178: // "Pass" + case 179: // "Pause" + case 180: // "Phase" + case 181: // "Prepend" + case 182: // "Proxy" + case 183: // "Redirect" + case 184: // "Rev" + case 185: // "SanitiseArg" + case 186: // "SanitiseMatched" + case 187: // "SanitiseMatchedBytes" + case 188: // "SanitiseRequestHeader" + case 189: // "SanitiseResponseHeader" + case 190: // "SetEnv" + case 191: // "SetRsc" + case 192: // "SetSid" + case 193: // "SetUID" + case 194: // "Severity" + case 195: // "Skip" + case 196: // "SkipAfter" + case 197: // "Status" + case 198: // "Tag" + case 199: // "ACTION_TRANSFORMATION_BASE_64_ENCODE" + case 200: // "ACTION_TRANSFORMATION_BASE_64_DECODE" + case 201: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" + case 202: // "ACTION_TRANSFORMATION_CMD_LINE" + case 203: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" + case 204: // "ACTION_TRANSFORMATION_CSS_DECODE" + case 205: // "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" + case 206: // "ACTION_TRANSFORMATION_HEX_ENCODE" + case 207: // "ACTION_TRANSFORMATION_HEX_DECODE" + case 208: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" + case 209: // "ACTION_TRANSFORMATION_JS_DECODE" + case 210: // "ACTION_TRANSFORMATION_LENGTH" + case 211: // "ACTION_TRANSFORMATION_LOWERCASE" + case 212: // "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" + case 213: // "ACTION_TRANSFORMATION_MD5" + case 214: // "ACTION_TRANSFORMATION_NONE" + case 215: // "ACTION_TRANSFORMATION_NORMALISE_PATH" + case 216: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" + case 217: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" + case 218: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" + case 219: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" + case 220: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS" + case 221: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" + case 222: // "ACTION_TRANSFORMATION_REMOVE_NULLS" + case 223: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" + case 224: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS" + case 225: // "ACTION_TRANSFORMATION_REPLACE_NULLS" + case 226: // "ACTION_TRANSFORMATION_SHA1" + case 227: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE" + case 228: // "ACTION_TRANSFORMATION_TRIM" + case 229: // "ACTION_TRANSFORMATION_TRIM_LEFT" + case 230: // "ACTION_TRANSFORMATION_TRIM_RIGHT" + case 231: // "ACTION_TRANSFORMATION_UPPERCASE" + case 232: // "ACTION_TRANSFORMATION_URL_ENCODE" + case 233: // "ACTION_TRANSFORMATION_URL_DECODE" + case 234: // "ACTION_TRANSFORMATION_URL_DECODE_UNI" + case 235: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" + case 236: // "Ver" + case 237: // "xmlns" + case 238: // "CONFIG_COMPONENT_SIG" + case 239: // "CONFIG_CONN_ENGINE" + case 240: // "CONFIG_SEC_ARGUMENT_SEPARATOR" + case 241: // "CONFIG_SEC_WEB_APP_ID" + case 242: // "CONFIG_SEC_SERVER_SIG" + case 243: // "CONFIG_DIR_AUDIT_DIR" + case 244: // "CONFIG_DIR_AUDIT_DIR_MOD" + case 245: // "CONFIG_DIR_AUDIT_ENG" + case 246: // "CONFIG_DIR_AUDIT_FLE_MOD" + case 247: // "CONFIG_DIR_AUDIT_LOG" + case 248: // "CONFIG_DIR_AUDIT_LOG2" + case 249: // "CONFIG_DIR_AUDIT_LOG_P" + case 250: // "CONFIG_DIR_AUDIT_STS" + case 251: // "CONFIG_DIR_AUDIT_TPE" + case 252: // "CONFIG_DIR_DEBUG_LOG" + case 253: // "CONFIG_DIR_DEBUG_LVL" + case 254: // "CONFIG_SEC_CACHE_TRANSFORMATIONS" + case 255: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" + case 256: // "CONFIG_SEC_HASH_ENGINE" + case 257: // "CONFIG_SEC_HASH_KEY" + case 258: // "CONFIG_SEC_HASH_PARAM" + case 259: // "CONFIG_SEC_HASH_METHOD_RX" + case 260: // "CONFIG_SEC_HASH_METHOD_PM" + case 261: // "CONFIG_SEC_CHROOT_DIR" + case 262: // "CONFIG_DIR_GEO_DB" + case 263: // "CONFIG_DIR_GSB_DB" + case 264: // "CONFIG_SEC_GUARDIAN_LOG" + case 265: // "CONFIG_DIR_PCRE_MATCH_LIMIT" + case 266: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION" + case 267: // "CONFIG_SEC_CONN_R_STATE_LIMIT" + case 268: // "CONFIG_SEC_CONN_W_STATE_LIMIT" + case 269: // "CONFIG_SEC_SENSOR_ID" + case 270: // "CONFIG_DIR_ARGS_LIMIT" + case 271: // "CONFIG_DIR_REQ_BODY" + case 272: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" + case 273: // "CONFIG_DIR_REQ_BODY_LIMIT" + case 274: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" + case 275: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" + case 276: // "CONFIG_DIR_RES_BODY" + case 277: // "CONFIG_DIR_RES_BODY_LIMIT" + case 278: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION" + case 279: // "CONFIG_SEC_RULE_INHERITANCE" + case 280: // "CONFIG_SEC_RULE_PERF_TIME" + case 281: // "CONFIG_DIR_RULE_ENG" + case 282: // "CONFIG_DIR_SEC_ACTION" + case 283: // "CONFIG_DIR_SEC_DEFAULT_ACTION" + case 284: // "CONFIG_DIR_SEC_MARKER" + case 285: // "CONFIG_DIR_UNICODE_MAP_FILE" + case 286: // "CONFIG_DIR_UNICODE_CODE_PAGE" + case 287: // "CONFIG_SEC_COLLECTION_TIMEOUT" + case 288: // "CONFIG_SEC_HTTP_BLKEY" + case 289: // "CONFIG_SEC_INTERCEPT_ON_ERROR" + case 290: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" + case 291: // "CONFIG_SEC_RULE_REMOVE_BY_ID" + case 292: // "CONFIG_SEC_RULE_REMOVE_BY_MSG" + case 293: // "CONFIG_SEC_RULE_REMOVE_BY_TAG" + case 294: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" + case 295: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" + case 296: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" + case 297: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" + case 298: // "CONFIG_UPDLOAD_KEEP_FILES" + case 299: // "CONFIG_UPDLOAD_SAVE_TMP_FILES" + case 300: // "CONFIG_UPLOAD_DIR" + case 301: // "CONFIG_UPLOAD_FILE_LIMIT" + case 302: // "CONFIG_UPLOAD_FILE_MODE" + case 303: // "CONFIG_VALUE_ABORT" + case 304: // "CONFIG_VALUE_DETC" + case 305: // "CONFIG_VALUE_HTTPS" + case 306: // "CONFIG_VALUE_OFF" + case 307: // "CONFIG_VALUE_ON" + case 308: // "CONFIG_VALUE_PARALLEL" + case 309: // "CONFIG_VALUE_PROCESS_PARTIAL" + case 310: // "CONFIG_VALUE_REJECT" + case 311: // "CONFIG_VALUE_RELEVANT_ONLY" + case 312: // "CONFIG_VALUE_SERIAL" + case 313: // "CONFIG_VALUE_WARN" + case 314: // "CONFIG_XML_EXTERNAL_ENTITY" + case 315: // "CONGIG_DIR_RESPONSE_BODY_MP" + case 316: // "CONGIG_DIR_SEC_ARG_SEP" + case 317: // "CONGIG_DIR_SEC_COOKIE_FORMAT" + case 318: // "CONFIG_SEC_COOKIEV0_SEPARATOR" + case 319: // "CONGIG_DIR_SEC_DATA_DIR" + case 320: // "CONGIG_DIR_SEC_STATUS_ENGINE" + case 321: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" + case 322: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" + case 323: // "CONGIG_DIR_SEC_TMP_DIR" + case 324: // "DIRECTIVE" + case 325: // "DIRECTIVE_SECRULESCRIPT" + case 326: // "FREE_TEXT_QUOTE_MACRO_EXPANSION" + case 327: // "QUOTATION_MARK" + case 328: // "RUN_TIME_VAR_BLD" + case 329: // "RUN_TIME_VAR_DUR" + case 330: // "RUN_TIME_VAR_HSV" + case 331: // "RUN_TIME_VAR_REMOTE_USER" + case 332: // "RUN_TIME_VAR_TIME" + case 333: // "RUN_TIME_VAR_TIME_DAY" + case 334: // "RUN_TIME_VAR_TIME_EPOCH" + case 335: // "RUN_TIME_VAR_TIME_HOUR" + case 336: // "RUN_TIME_VAR_TIME_MIN" + case 337: // "RUN_TIME_VAR_TIME_MON" + case 338: // "RUN_TIME_VAR_TIME_SEC" + case 339: // "RUN_TIME_VAR_TIME_WDAY" + case 340: // "RUN_TIME_VAR_TIME_YEAR" + case 341: // "VARIABLE" + case 342: // "Dictionary element" + case 343: // "Dictionary element, selected by regexp" value.move< std::string > (YY_MOVE (s.value)); break; - case symbol_kind::S_op: // op - case symbol_kind::S_op_before_init: // op_before_init + case 350: // op + case 351: // op_before_init value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_run_time_string: // run_time_string + case 359: // run_time_string value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_var: // var + case 356: // var value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_act: // act - case symbol_kind::S_setvar_action: // setvar_action + case 357: // act + case 358: // setvar_action value.move< std::unique_ptr > (YY_MOVE (s.value)); break; - case symbol_kind::S_variables: // variables - case symbol_kind::S_variables_pre_process: // variables_pre_process - case symbol_kind::S_variables_may_be_quoted: // variables_may_be_quoted + case 353: // variables + case 354: // variables_pre_process + case 355: // variables_may_be_quoted value.move< std::unique_ptr > > > (YY_MOVE (s.value)); break; - case symbol_kind::S_actions: // actions - case symbol_kind::S_actions_may_quoted: // actions_may_quoted + case 348: // actions + case 349: // actions_may_quoted value.move< std::unique_ptr > > > (YY_MOVE (s.value)); break; @@ -8571,62 +8103,56 @@ switch (yykind) location = YY_MOVE (s.location); } - // by_kind. + // by_type. inline - seclang_parser::by_kind::by_kind () - : kind_ (symbol_kind::S_YYEMPTY) + seclang_parser::by_type::by_type () + : type (empty_symbol) {} #if 201103L <= YY_CPLUSPLUS inline - seclang_parser::by_kind::by_kind (by_kind&& that) - : kind_ (that.kind_) + seclang_parser::by_type::by_type (by_type&& that) + : type (that.type) { that.clear (); } #endif inline - seclang_parser::by_kind::by_kind (const by_kind& that) - : kind_ (that.kind_) + seclang_parser::by_type::by_type (const by_type& that) + : type (that.type) {} inline - seclang_parser::by_kind::by_kind (token_kind_type t) - : kind_ (yytranslate_ (t)) + seclang_parser::by_type::by_type (token_type t) + : type (yytranslate_ (t)) {} inline void - seclang_parser::by_kind::clear () + seclang_parser::by_type::clear () { - kind_ = symbol_kind::S_YYEMPTY; + type = empty_symbol; } inline void - seclang_parser::by_kind::move (by_kind& that) + seclang_parser::by_type::move (by_type& that) { - kind_ = that.kind_; + type = that.type; that.clear (); } inline - seclang_parser::symbol_kind_type - seclang_parser::by_kind::kind () const YY_NOEXCEPT + int + seclang_parser::by_type::type_get () const YY_NOEXCEPT { - return kind_; - } - - inline - seclang_parser::symbol_kind_type - seclang_parser::by_kind::type_get () const YY_NOEXCEPT - { - return this->kind (); + return type; } } // yy -#line 8630 "seclang-parser.hh" +#line 8155 "seclang-parser.hh" + diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index 6f49bbe321..99d626be25 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -1075,10 +1075,12 @@ expression: | DIRECTIVE variables op actions { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *$4.get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -1124,10 +1126,12 @@ expression: | CONFIG_DIR_SEC_ACTION actions { std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *$2.get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -1144,10 +1148,12 @@ expression: { std::string err; std::vector *a = new std::vector(); - std::vector *t = new std::vector(); + std::vector > *t = new std::vector >(); for (auto &i : *$2.get()) { if (dynamic_cast(i.get())) { - t->push_back(dynamic_cast(i.release())); + std::shared_ptr at = std::move(i); + std::shared_ptr t2 = std::static_pointer_cast(std::move(at)); + t->push_back(std::move(t2)); } else { a->push_back(i.release()); } @@ -1219,8 +1225,13 @@ expression: } for (actions::Action *a : checkedActions) { - driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back( - std::unique_ptr(a)); + if (dynamic_cast(a)) { + driver.m_rulesSetPhases[definedPhase]->m_defaultTransformations.push_back( + std::shared_ptr( + dynamic_cast(a))); + } else { + driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back(std::unique_ptr(a)); + } } delete actions; diff --git a/src/parser/seclang-scanner.cc b/src/parser/seclang-scanner.cc index 5cbf5a6293..4ca393766f 100644 --- a/src/parser/seclang-scanner.cc +++ b/src/parser/seclang-scanner.cc @@ -1,5 +1,5 @@ -#line 2 "seclang-scanner.cc" +#line 3 "seclang-scanner.cc" #define YY_INT_ALIGNED short int @@ -5160,15 +5160,15 @@ static std::stack YY_PREVIOUS_STATE; #define BEGIN_PREVIOUS() { BEGIN(YY_PREVIOUS_STATE.top()); YY_PREVIOUS_STATE.pop(); } // The location of the current token. -#line 5163 "seclang-scanner.cc" +#line 5164 "seclang-scanner.cc" #define YY_NO_INPUT 1 #line 493 "seclang-scanner.ll" // Code run each time a pattern is matched. # define YY_USER_ACTION driver.loc.back()->columns (yyleng); -#line 5170 "seclang-scanner.cc" #line 5171 "seclang-scanner.cc" +#line 5172 "seclang-scanner.cc" #define INITIAL 0 #define EXPECTING_ACTION_PREDICATE_VARIABLE 1 @@ -5490,7 +5490,7 @@ YY_DECL // Code run each time yylex is called. driver.loc.back()->step(); -#line 5493 "seclang-scanner.cc" +#line 5494 "seclang-scanner.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -8587,7 +8587,7 @@ YY_RULE_SETUP #line 1334 "seclang-scanner.ll" ECHO; YY_BREAK -#line 8590 "seclang-scanner.cc" +#line 8591 "seclang-scanner.cc" case YY_END_OF_BUFFER: { diff --git a/src/parser/stack.hh b/src/parser/stack.hh index 8a74ee5c1b..c15d84c73d 100644 --- a/src/parser/stack.hh +++ b/src/parser/stack.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.2. +// A Bison parser, made by GNU Bison 3.5.1. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined with the parser itself. diff --git a/src/rule_message.cc b/src/rule_message.cc index eb67955487..593c06ad93 100644 --- a/src/rule_message.cc +++ b/src/rule_message.cc @@ -26,27 +26,25 @@ namespace modsecurity { std::string RuleMessage::_details(const RuleMessage *rm) { std::string msg; - msg.append(" [file \"" + std::string(*rm->m_ruleFile.get()) + "\"]"); - msg.append(" [line \"" + std::to_string(rm->m_ruleLine) + "\"]"); - msg.append(" [id \"" + std::to_string(rm->m_ruleId) + "\"]"); - msg.append(" [rev \"" + rm->m_rev + "\"]"); + msg.append(" [file \"" + rm->getFileName() + "\"]"); + msg.append(" [line \"" + std::to_string(rm->getLineNumber()) + "\"]"); + msg.append(" [id \"" + std::to_string(rm->getRuleId()) + "\"]"); + msg.append(" [rev \"" + rm->getRev() + "\"]"); msg.append(" [msg \"" + rm->m_message + "\"]"); msg.append(" [data \"" + utils::string::limitTo(200, rm->m_data) + "\"]"); msg.append(" [severity \"" + std::to_string(rm->m_severity) + "\"]"); - msg.append(" [ver \"" + rm->m_ver + "\"]"); - msg.append(" [maturity \"" + std::to_string(rm->m_maturity) + "\"]"); - msg.append(" [accuracy \"" + std::to_string(rm->m_accuracy) + "\"]"); + msg.append(" [ver \"" + rm->getVer() + "\"]"); + msg.append(" [maturity \"" + std::to_string(rm->getMaturity()) + "\"]"); + msg.append(" [accuracy \"" + std::to_string(rm->getAccuracy()) + "\"]"); for (auto &a : rm->m_tags) { msg.append(" [tag \"" + a + "\"]"); } - - msg.append(" [hostname \"" + *rm->m_serverIpAddress.get() \ - + "\"]"); - msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]"); - msg.append(" [unique_id \"" + *rm->m_id + "\"]"); - msg.append(" [ref \"" + utils::string::limitTo(200, rm->m_reference) + "\"]"); + msg.append(" [hostname \"" + rm->getServerIpAddress() + "\"]"); + msg.append(" [uri \"" + utils::string::limitTo(200, rm->getUri()) + "\"]"); + msg.append(" [unique_id \"" + rm->getRequestId() + "\"]"); + msg.append(" [ref \"" + rm->m_reference + "\"]"); return msg; } @@ -55,9 +53,9 @@ std::string RuleMessage::_details(const RuleMessage *rm) { std::string RuleMessage::_errorLogTail(const RuleMessage *rm) { std::string msg; - msg.append("[hostname \"" + *rm->m_serverIpAddress.get() + "\"]"); - msg.append(" [uri \"" + utils::string::limitTo(200, *rm->m_uriNoQueryStringDecoded.get()) + "\"]"); - msg.append(" [unique_id \"" + *rm->m_id + "\"]"); + msg.append("[hostname \"" + rm->getServerIpAddress() + "\"]"); + msg.append(" [uri \"" + rm->getUri() + "\"]"); + msg.append(" [unique_id \"" + rm->getRequestId() + "\"]"); return msg; } @@ -68,10 +66,11 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) { msg.reserve(2048); if (props & ClientLogMessageInfo) { - msg.append("[client " + std::string(*rm->m_clientIpAddress.get()) + "] "); + msg.append("[client " + rm->getClientIpAddress() + "] "); } - if (rm->m_isDisruptive) { + if (rm->isDisruptive() + && (rm->m_transaction->getRuleEngineState() == RulesSet::EnabledRuleEngine)) { msg.append("ModSecurity: Access denied with code "); if (code == -1) { msg.append("%d"); @@ -79,7 +78,7 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) { msg.append(std::to_string(code)); } msg.append(" (phase "); - msg.append(std::to_string(rm->m_rule->getPhase() - 1) + "). "); + msg.append(std::to_string(rm->getPhase() - 1) + "). "); } else { msg.append("ModSecurity: Warning. "); } diff --git a/src/rule_script.cc b/src/rule_script.cc index c74497d3fd..74663a4391 100644 --- a/src/rule_script.cc +++ b/src/rule_script.cc @@ -19,23 +19,22 @@ namespace modsecurity { bool RuleScript::init(std::string *err) { - return m_lua.load(m_name, err); + return m_lua->load(m_name, err); } -bool RuleScript::evaluate(Transaction *trans, - std::shared_ptr ruleMessage) { +bool RuleScript::evaluate(Transaction *trans) { ms_dbg_a(trans, 4, " Executing script: " + m_name + "."); bool containsDisruptive = false; executeActionsIndependentOfChainedRuleResult(trans, - &containsDisruptive, ruleMessage); + &containsDisruptive); - bool ret = m_lua.run(trans); + bool ret = m_lua->run(trans); if (ret) { - executeActionsAfterFullMatch(trans, containsDisruptive, ruleMessage); + executeActionsAfterFullMatch(trans, containsDisruptive); } return ret; diff --git a/src/rule_script.h b/src/rule_script.h index 237ad6ab80..476e17ff0b 100644 --- a/src/rule_script.h +++ b/src/rule_script.h @@ -51,17 +51,19 @@ class RuleScript : public RuleWithActions { int lineNumber) : RuleWithActions(actions, t, std::move(fileName), lineNumber), m_name(name), - m_lua() { } + m_lua(std::unique_ptr(new engine::Lua())) { } - RuleScript(const RuleWithActions& r) = delete; + RuleScript(const RuleScript &rs) + : RuleWithActions(rs), + m_name(rs.m_name), + m_lua(rs.m_lua) { } - bool init(std::string *err); - bool evaluate(Transaction *trans, - std::shared_ptr ruleMessage) override; + bool init(std::string *err); + bool evaluate(Transaction *trans) override; std::string m_name; - engine::Lua m_lua; + std::shared_ptr m_lua; }; } // namespace modsecurity diff --git a/src/rule_unconditional.cc b/src/rule_unconditional.cc index e6bacd666a..22d52d7519 100644 --- a/src/rule_unconditional.cc +++ b/src/rule_unconditional.cc @@ -19,9 +19,8 @@ namespace modsecurity { -bool RuleUnconditional::evaluate(Transaction *trans, - std::shared_ptr ruleMessage) { - RuleWithActions::evaluate(trans, ruleMessage); +bool RuleUnconditional::evaluate(Transaction *trans) { + RuleWithActions::evaluate(trans); // FIXME: This needs to be romeved on the runtime exeption review. bool containsBlock = false; @@ -30,11 +29,11 @@ bool RuleUnconditional::evaluate(Transaction *trans, + ") Executing unconditional rule..."); executeActionsIndependentOfChainedRuleResult(trans, - &containsBlock, ruleMessage); + &containsBlock); - executeActionsAfterFullMatch(trans, containsBlock, ruleMessage); + executeActionsAfterFullMatch(trans, containsBlock); - performLogging(trans, ruleMessage); + trans->logMatchLastRuleOnTheChain(this); return true; } diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 69445e29f3..e69f9bce8a 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -34,8 +34,13 @@ #include "src/utils/string.h" #include "modsecurity/rule_message.h" #include "modsecurity/rule_with_actions.h" +#include "src/actions/accuracy.h" +#include "src/actions/maturity.h" #include "src/actions/msg.h" +#include "src/actions/log.h" +#include "src/actions/no_log.h" #include "src/actions/log_data.h" +#include "src/actions/rev.h" #include "src/actions/severity.h" #include "src/actions/capture.h" #include "src/actions/multi_match.h" @@ -60,126 +65,182 @@ RuleWithActions::RuleWithActions( std::unique_ptr fileName, int lineNumber) : Rule(std::move(fileName), lineNumber), - m_rev(""), - m_ver(""), - m_accuracy(0), - m_maturity(0), m_ruleId(0), m_chainedRuleChild(nullptr), m_chainedRuleParent(nullptr), m_disruptiveAction(nullptr), m_logData(nullptr), m_msg(nullptr), - m_severity(nullptr), m_actionsRuntimePos(), m_actionsSetVar(), m_actionsTag(), - m_transformations(transformations != NULL ? *transformations : Transformations()), + m_defaultActionDisruptiveAction(nullptr), + m_defaultActionLogData(nullptr), + m_defaultActionMsg(nullptr), + m_defaultActionActionsRuntimePos(), + m_defaultActionActionsSetVar(), + m_defaultActionActionsTag(), + m_transformations(transformations != nullptr ? *transformations : Transformations()), + m_defaultTransformations(), + m_severity(SEVERITY_NOT_SET), + m_revision(""), + m_version(""), + m_accuracy(ACCURACY_NOT_SET), + m_maturity(MATURITY_NOT_SET), m_containsCaptureAction(false), + m_containsLogAction(false), + m_containsNoLogAction(false), m_containsMultiMatchAction(false), m_containsStaticBlockAction(false), + m_defaultSeverity(SEVERITY_NOT_SET), + m_defaultRevision(""), + m_defaultVersion(""), + m_defaultAccuracy(ACCURACY_NOT_SET), + m_defaultMaturity(MATURITY_NOT_SET), + m_defaultContainsCaptureAction(false), + m_defaultContainsLogAction(false), + m_defaultContainsNoLogAction(false), + m_defaultContainsMultiMatchAction(false), + m_defaultContainsStaticBlockAction(false), m_isChained(false) { if (actions) { - for (Action *a : *actions) { - if (a->action_kind == Action::ConfigurationKind) { - a->evaluate(this, NULL); - delete a; - - } else if (a->action_kind == Action::RunTimeOnlyIfMatchKind) { - if (dynamic_cast(a)) { - m_containsCaptureAction = true; - delete a; - } else if (dynamic_cast(a)) { - m_containsMultiMatchAction = true; - delete a; - } else if (dynamic_cast(a)) { - m_severity = dynamic_cast(a); - } else if (dynamic_cast(a)) { - m_logData = dynamic_cast(a); - } else if (dynamic_cast(a)) { - m_msg = dynamic_cast(a); - } else if (dynamic_cast(a)) { - m_actionsSetVar.push_back( - dynamic_cast(a)); - } else if (dynamic_cast(a)) { - m_actionsTag.push_back(dynamic_cast(a)); - } else if (dynamic_cast(a)) { - m_actionsRuntimePos.push_back(a); - m_containsStaticBlockAction = true; - } else if (a->isDisruptive() == true) { - if (m_disruptiveAction != nullptr) { - delete m_disruptiveAction; - m_disruptiveAction = nullptr; - } - m_disruptiveAction = a; - } else { - m_actionsRuntimePos.push_back(a); - } - } else { - delete a; - std::cout << "General failure, action: " << a->m_name; - std::cout << " has an unknown type." << std::endl; - throw std::runtime_error("Unexpected condition. Action without a type.\n"); - } + for (actions::Action *a : *actions) { + addAction(a); } - delete actions; } } -RuleWithActions::~RuleWithActions() { - if (m_severity) { - delete m_severity; - m_severity = nullptr; - } - if (m_logData) { - delete m_logData; - m_logData = nullptr; - } - if (m_msg) { - delete m_msg; - m_msg = nullptr; - } - while (m_transformations.empty() == false) { - auto *a = m_transformations.back(); - m_transformations.pop_back(); - delete a; +void RuleWithActions::addDefaultAction(std::shared_ptr a) { + if (a->action_kind == Action::ConfigurationKind) { + a->evaluate(this, NULL); + return; } - while (m_actionsRuntimePos.empty() == false) { - auto *a = m_actionsRuntimePos.back(); - m_actionsRuntimePos.pop_back(); - delete a; + + if (a->action_kind == Action::ConfigurationKind) { + if (dynamic_cast(a.get())) { + actions::Accuracy *accuracy = dynamic_cast(a.get()); + m_defaultAccuracy = accuracy->getAccuracy(); + } else if (dynamic_cast(a.get())) { + actions::Rev *rev = dynamic_cast(a.get()); + m_defaultRevision = rev->getRevision(); + } else { + a->evaluate(this, NULL); + } + return; } - while (m_actionsSetVar.empty() == false) { - auto *a = m_actionsSetVar.back(); - m_actionsSetVar.pop_back(); - delete a; + + if (a->action_kind == Action::RunTimeOnlyIfMatchKind) { + if (dynamic_cast(a.get())) { + m_defaultContainsCaptureAction = true; + } else if (dynamic_cast(a.get())) { + m_defaultContainsMultiMatchAction = true; + } else if (dynamic_cast(a.get())) { + actions::Severity *severity = dynamic_cast(a.get()); + setDefaultActionSeverity(severity->m_severity); + } else if (dynamic_cast(a.get())) { + actions::Maturity *maturity = dynamic_cast(a.get()); + setDefaultActionMaturity(maturity->getMaturity()); + } else if (dynamic_cast(a.get())) { + m_defaultActionLogData = std::static_pointer_cast(a); + } else if (dynamic_cast(a.get())) { + m_defaultActionMsg = std::static_pointer_cast(a); + } else if (dynamic_cast(a.get())) { + m_defaultActionActionsSetVar.push_back(std::static_pointer_cast(a)); + } else if (dynamic_cast(a.get())) { + m_defaultActionActionsTag.push_back(std::static_pointer_cast(a)); + } else if (dynamic_cast(a.get())) { + m_defaultContainsLogAction = true; + } else if (dynamic_cast(a.get())) { + m_defaultContainsNoLogAction = true; + } else if (dynamic_cast(a.get())) { + m_defaultActionActionsRuntimePos.push_back(a); + m_defaultContainsStaticBlockAction = true; + } else if (a->isDisruptive() == true) { + m_defaultActionDisruptiveAction = a; + } else { + m_defaultActionActionsRuntimePos.push_back(a); + } + return; } - while (m_actionsTag.empty() == false) { - auto *a = m_actionsTag.back(); - m_actionsTag.pop_back(); + + std::cout << "General failure, action: " << *a->m_name; + std::cout << " has an unknown type." << std::endl; + throw std::invalid_argument("action type not found."); + +} + +void RuleWithActions::addAction(actions::Action *a) { + if (a->action_kind == Action::ConfigurationKind) { + if (dynamic_cast(a)) { + actions::Accuracy *accuracy = dynamic_cast(a); + m_accuracy = accuracy->getAccuracy(); + } else if (dynamic_cast(a)) { + actions::Rev *rev = dynamic_cast(a); + m_revision = rev->getRevision(); + } else { + a->evaluate(this, NULL); + } delete a; + return; } - if (m_disruptiveAction != nullptr) { - delete m_disruptiveAction; - m_disruptiveAction = nullptr; + + if (a->action_kind == Action::RunTimeOnlyIfMatchKind) { + if (dynamic_cast(a)) { + m_containsCaptureAction = true; + delete a; + } else if (dynamic_cast(a)) { + m_containsMultiMatchAction = true; + delete a; + } else if (dynamic_cast(a)) { + actions::Severity *severity = dynamic_cast(a); + setSeverity(severity->m_severity); + delete a; + } else if (dynamic_cast(a)) { + m_logData = std::unique_ptr(dynamic_cast(a)); + } else if (dynamic_cast(a)) { + m_msg = std::unique_ptr(dynamic_cast(a)); + } else if (dynamic_cast(a)) { + m_actionsSetVar.push_back(std::unique_ptr(dynamic_cast(a))); + } else if (dynamic_cast(a)) { + actions::Maturity *maturity = dynamic_cast(a); + m_maturity = maturity->getMaturity(); + delete a; + } else if (dynamic_cast(a)) { + m_containsLogAction = true; + delete a; + } else if (dynamic_cast(a)) { + m_containsNoLogAction = true; + delete a; + } else if (dynamic_cast(a)) { + m_actionsTag.push_back(std::unique_ptr(dynamic_cast(a))); + } else if (dynamic_cast(a)) { + m_actionsRuntimePos.push_back(std::unique_ptr(dynamic_cast(a))); + m_containsStaticBlockAction = true; + } else if (a->isDisruptive() == true) { + m_disruptiveAction = std::unique_ptr(a); + } else { + m_actionsRuntimePos.push_back(std::unique_ptr(a)); + } + return; } -} + std::cout << "General failure, action: " << *a->m_name; + std::cout << " has an unknown type." << std::endl; + delete a; + throw std::invalid_argument("action type not found."); -bool RuleWithActions::evaluate(Transaction *transaction) { - RuleMessage rm(this, transaction); - std::shared_ptr rm2 = std::make_shared(&rm); - return evaluate(transaction, rm2); } -bool RuleWithActions::evaluate(Transaction *transaction, - std::shared_ptr ruleMessage) { +RuleWithActions::~RuleWithActions() { } + + +bool RuleWithActions::evaluate(Transaction *transaction) { /* Rule evaluate is pure virtual. * - * Rule::evaluate(transaction, ruleMessage); + * Rule::evaluate(transaction); */ /* Matched vars needs to be clear at every new rule execution */ @@ -190,9 +251,9 @@ bool RuleWithActions::evaluate(Transaction *transaction, void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction *trans, - bool *containsBlock, std::shared_ptr ruleMessage) { + bool *containsBlock) { - for (actions::SetVar *a : m_actionsSetVar) { + for (actions::SetVar *a : getSetVarsActionsPtr()) { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); @@ -211,30 +272,31 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * } else if (*a->m_name.get() == "setvar") { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans, ruleMessage); + a->evaluate(this, trans, *trans->messageGetLast()); } } - } void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, - bool containsBlock, std::shared_ptr ruleMessage) { + bool containsBlock) { bool disruptiveAlreadyExecuted = false; - for (auto &a : trans->m_rules->m_rulesSetPhases[getPhase()]->m_defaultActions) { +#if 0 + for (auto &a : trans->m_rules->m_defaultActions[getPhase()]) { if (a.get()->action_kind != actions::Action::RunTimeOnlyIfMatchKind) { continue; } if (!a.get()->isDisruptive()) { - executeAction(trans, containsBlock, ruleMessage, a.get(), true); + executeAction(trans, containsBlock, a.get(), true); } } +#endif - for (actions::Tag *a : this->m_actionsTag) { + for (actions::Tag *a : getTagsActionPtr()) { ms_dbg_a(trans, 4, "Running (non-disruptive) action: " \ + *a->m_name.get()); - a->evaluate(this, trans, ruleMessage); + a->evaluate(this, trans, *trans->messageGetLast()); } for (auto &b : @@ -243,41 +305,47 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, continue; } actions::Action *a = dynamic_cast(b.second.get()); - executeAction(trans, containsBlock, ruleMessage, a, false); + executeAction(trans, containsBlock, a, false); disruptiveAlreadyExecuted = true; } - if (m_severity) { - m_severity->evaluate(this, trans, ruleMessage); - } if (m_logData) { - m_logData->evaluate(this, trans, ruleMessage); + m_logData->evaluate(this, trans, *trans->messageGetLast()); + } else if (m_defaultActionLogData) { + m_defaultActionLogData->evaluate(this, trans, *trans->messageGetLast()); } if (m_msg) { - m_msg->evaluate(this, trans, ruleMessage); + m_msg->evaluate(this, trans, *trans->messageGetLast()); + } else if (m_defaultActionMsg) { + m_defaultActionMsg->evaluate(this, trans, *trans->messageGetLast()); } - for (Action *a : this->m_actionsRuntimePos) { + + for (auto &a : getMatchActionsPtr()) { if (!a->isDisruptive() && !(disruptiveAlreadyExecuted && dynamic_cast(a))) { - executeAction(trans, containsBlock, ruleMessage, a, false); + executeAction(trans, containsBlock, a, false); } } if (!disruptiveAlreadyExecuted && m_disruptiveAction != nullptr) { - executeAction(trans, containsBlock, ruleMessage, - m_disruptiveAction, false); + executeAction(trans, containsBlock, + m_disruptiveAction.get(), false); + } else if (!disruptiveAlreadyExecuted && hasBlockAction() + && m_defaultActionDisruptiveAction != nullptr) { + executeAction(trans, containsBlock, + m_defaultActionDisruptiveAction.get(), false); } } void RuleWithActions::executeAction(Transaction *trans, - bool containsBlock, std::shared_ptr ruleMessage, + bool containsBlock, Action *a, bool defaultContext) { if (a->isDisruptive() == false && *a->m_name.get() != "block") { ms_dbg_a(trans, 9, "Running " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans, ruleMessage); + a->evaluate(this, trans, *trans->messageGetLast()); return; } @@ -290,7 +358,7 @@ void RuleWithActions::executeAction(Transaction *trans, if (trans->getRuleEngineState() == RulesSet::EnabledRuleEngine) { ms_dbg_a(trans, 4, "Running (disruptive) action: " + *a->m_name.get() + \ "."); - a->evaluate(this, trans, ruleMessage); + a->evaluate(this, trans, *trans->messageGetLast()); return; } @@ -339,37 +407,20 @@ void RuleWithActions::executeTransformations( std::shared_ptr value = std::shared_ptr(new std::string(in)); - if (m_containsMultiMatchAction == true) { + if (hasMultimatchAction()) { /* keep the original value */ ret.push_back(std::make_pair( std::shared_ptr(new std::string(*value)), std::shared_ptr(new std::string(path)))); } - for (Action *a : m_transformations) { + for (Action *a : getTransformationPtr()) { if (a->m_isNone) { none++; } } - // Check for transformations on the SecDefaultAction - // Notice that first we make sure that won't be a t:none - // on the target rule. - if (none == 0) { - for (auto &a : trans->m_rules->m_rulesSetPhases[getPhase()]->m_defaultActions) { - if (a->action_kind \ - != actions::Action::RunTimeBeforeMatchAttemptKind) { - continue; - } - - // FIXME: here the object needs to be a transformation already. - Transformation *t = dynamic_cast(a.get()); - executeTransformation(t, &value, trans, &ret, &path, - &transformations); - } - } - - for (Transformation *a : m_transformations) { + for (Transformation *a : getTransformationPtr()) { if (none == 0) { Transformation *t = dynamic_cast(a); executeTransformation(t, &value, trans, &ret, &path, @@ -423,8 +474,8 @@ void RuleWithActions::executeTransformations( } -bool RuleWithActions::containsTag(const std::string& name, Transaction *t) { - for (auto &tag : m_actionsTag) { +bool RuleWithActions::containsTag(const std::string& name, Transaction *t) const { + for (auto &tag : getTagsAction()) { if (tag != NULL && tag->getName(t) == name) { return true; } @@ -441,12 +492,12 @@ bool RuleWithActions::containsMsg(const std::string& name, Transaction *t) { std::vector RuleWithActions::getActionsByName(const std::string& name, Transaction *trans) { std::vector ret; - for (auto &z : m_actionsRuntimePos) { + for (auto &z : getMatchActionsPtr()) { if (*z->m_name.get() == name) { ret.push_back(z); } } - for (auto &z : m_transformations) { + for (auto &z : getTransformationPtr()) { if (*z->m_name.get() == name) { ret.push_back(z); } @@ -474,76 +525,9 @@ std::vector RuleWithActions::getActionsByName(const std::stri return ret; } -void RuleWithActions::performLogging(Transaction *trans, - std::shared_ptr ruleMessage, - bool lastLog, - bool chainedParentNull) { - - /* last rule in the chain. */ - bool isItToBeLogged = ruleMessage->m_saveMessage; - - /** - * - * RuleMessage is stacked allocated for the rule execution, - * anything beyond this may lead to invalid pointer access. - * - * In case of a warning, o set of messages is saved to be read - * at audit log generation. Therefore demands a copy here. - * - * FIXME: Study an way to avoid the copy. - * - **/ - if (lastLog) { - if (chainedParentNull) { - isItToBeLogged = (ruleMessage->m_saveMessage && (m_chainedRuleParent == nullptr)); - if (isItToBeLogged && !hasMultimatch()) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage); - - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - } - } else if (hasBlockAction() && !hasMultimatch()) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage); - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - } else { - if (isItToBeLogged && !hasMultimatch() - && !ruleMessage->m_message.empty()) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage); - - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - } - } - } else { - if (hasMultimatch() && isItToBeLogged) { - /* warn */ - trans->m_rulesMessages.push_back(*ruleMessage.get()); - - /* error */ - if (!ruleMessage->m_isDisruptive) { - trans->serverLog(ruleMessage); - } - - RuleMessage *rm = new RuleMessage(this, trans); - rm->m_saveMessage = ruleMessage->m_saveMessage; - ruleMessage.reset(rm); - } - } -} +std::string RuleWithActions::getLogData(Transaction *t) { return m_logData->data(t); } +std::string RuleWithActions::getMessage(Transaction *t) { return m_msg->data(t); } -std::string RuleWithActions::logData(Transaction *t) { return m_logData->data(t); } -std::string RuleWithActions::msg(Transaction *t) { return m_msg->data(t); } -int RuleWithActions::severity() const { return m_severity->m_severity; } } // namespace modsecurity diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index 8cb322e678..aeb740e8d4 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -58,24 +58,13 @@ RuleWithOperator::RuleWithOperator(Operator *op, std::unique_ptr fileName, int lineNumber) : RuleWithActions(actions, transformations, std::move(fileName), lineNumber), - m_variables(_variables), - m_operator(op) { /* */ } + m_variables(std::unique_ptr(_variables)), + m_operator(std::unique_ptr(op)) { /* */ } -RuleWithOperator::~RuleWithOperator() { - if (m_operator != NULL) { - delete m_operator; - } - while (m_variables != NULL && m_variables->empty() == false) { - auto *a = m_variables->back(); - m_variables->pop_back(); - delete a; - } - if (m_variables != NULL) { - delete m_variables; - } +RuleWithOperator::~RuleWithOperator() { } @@ -101,7 +90,7 @@ void RuleWithOperator::cleanMatchedVars(Transaction *trans) { bool RuleWithOperator::executeOperatorAt(Transaction *trans, const std::string &key, - std::string value, std::shared_ptr ruleMessage) { + std::string value) { #if MSC_EXEC_CLOCK_ENABLED clock_t begin = clock(); clock_t end; @@ -113,7 +102,7 @@ bool RuleWithOperator::executeOperatorAt(Transaction *trans, const std::string & utils::string::toHexIfNeeded(value)) \ + "\" (Variable: " + key + ")"); - ret = this->m_operator->evaluateInternal(trans, this, value, ruleMessage); + ret = m_operator->evaluateInternal(trans, this, value, trans->messageGetLast()); if (ret == false) { return false; @@ -213,10 +202,9 @@ inline void RuleWithOperator::getFinalVars(variables::Variables *vars, } -bool RuleWithOperator::evaluate(Transaction *trans, - std::shared_ptr ruleMessage) { +bool RuleWithOperator::evaluate(Transaction *trans) { bool globalRet = false; - variables::Variables *variables = this->m_variables; + variables::Variables *variables = m_variables.get(); bool recursiveGlobalRet; bool containsBlock = hasBlockAction(); std::string eparam; @@ -224,8 +212,7 @@ bool RuleWithOperator::evaluate(Transaction *trans, vars.reserve(4); variables::Variables exclusion; - RuleWithActions::evaluate(trans, ruleMessage); - + RuleWithActions::evaluate(trans); // FIXME: Make a class runTimeException to handle this cases. for (auto &i : trans->m_ruleRemoveById) { @@ -311,21 +298,21 @@ bool RuleWithOperator::evaluate(Transaction *trans, bool ret; std::string valueAfterTrans = std::move(*valueTemp.first); - ret = executeOperatorAt(trans, key, valueAfterTrans, ruleMessage); + ret = executeOperatorAt(trans, key, valueAfterTrans); if (ret == true) { - ruleMessage->m_match = m_operator->resolveMatchMessage(trans, + trans->messageGetLast()->m_match = m_operator->resolveMatchMessage(trans, key, value); + for (auto &i : v->getOrigin()) { - ruleMessage->m_reference.append(i->toText()); + trans->messageGetLast()->m_reference.append(i->toText()); } - ruleMessage->m_reference.append(*valueTemp.second); + trans->messageGetLast()->m_reference.append(*valueTemp.second); + updateMatchedVars(trans, key, valueAfterTrans); executeActionsIndependentOfChainedRuleResult(trans, - &containsBlock, ruleMessage); - - performLogging(trans, ruleMessage, false); + &containsBlock); globalRet = true; } @@ -344,7 +331,7 @@ bool RuleWithOperator::evaluate(Transaction *trans, } ms_dbg_a(trans, 4, "Rule returned 1."); - if (this->isChained() == false) { + if (this->hasChainAction() == false) { goto end_exec; } @@ -356,7 +343,7 @@ bool RuleWithOperator::evaluate(Transaction *trans, } ms_dbg_a(trans, 4, "Executing chained rule."); - recursiveGlobalRet = m_chainedRuleChild->evaluate(trans, ruleMessage); + recursiveGlobalRet = m_chainedRuleChild->evaluate(trans); if (recursiveGlobalRet == true) { goto end_exec; @@ -366,10 +353,21 @@ bool RuleWithOperator::evaluate(Transaction *trans, return false; end_exec: - executeActionsAfterFullMatch(trans, containsBlock, ruleMessage); + executeActionsAfterFullMatch(trans, containsBlock); /* last rule in the chain. */ - performLogging(trans, ruleMessage, true, true); + trans->logMatchLastRuleOnTheChain(this); + + if (hasSeverityAction()) { + ms_dbg_a(trans, 9, "This rule severity is: " + \ + std::to_string(getSeverity()) + " current transaction is: " + \ + std::to_string(trans->m_highestSeverityAction)); + + if (trans->m_highestSeverityAction > getSeverity()) { + trans->m_highestSeverityAction = getSeverity(); + } + } + return true; } diff --git a/src/rules_set.cc b/src/rules_set.cc index 40d26e05db..6344186993 100644 --- a/src/rules_set.cc +++ b/src/rules_set.cc @@ -31,6 +31,46 @@ using modsecurity::Utils::HttpsClient; namespace modsecurity { + void Rules::fixDefaultActions() { + for (size_t i = 0; i < m_rules.size(); i++) { + auto &rule = m_rules[i]; + + RuleWithActions *r = dynamic_cast(rule.get()); + if (!r) { + continue; + } + + if (dynamic_cast(rule.get())) { + RuleWithOperator *op = new RuleWithOperator(*dynamic_cast(rule.get())); + std::unique_ptr nrp(op); + m_rules[i] = std::move(nrp); + } else if (dynamic_cast(rule.get())) { + RuleUnconditional *un = new RuleUnconditional(*dynamic_cast(rule.get())); + std::unique_ptr nrp(un); + m_rules[i] = std::move(nrp); + } else if (dynamic_cast(rule.get())) { + RuleScript *rs = new RuleScript(*dynamic_cast(rule.get())); + std::unique_ptr nrp(rs); + m_rules[i] = std::move(nrp); + } else { + RuleWithActions *nr = new RuleWithActions(*dynamic_cast(rule.get())); + std::unique_ptr nrp(nr); + m_rules[i] = std::move(nrp); + } + + RuleWithActions *nr = dynamic_cast(m_rules[i].get()); + nr->clearDefaultActions(); + for (auto a : m_defaultActions) { + nr->addDefaultAction(a); + } + for (auto a : m_defaultTransformations) { + nr->addDefaultTransformation(a); + } + + + } + } + /** * @name loadFromUri diff --git a/src/rules_set_phases.cc b/src/rules_set_phases.cc index f0d572cb3e..e962945e3d 100644 --- a/src/rules_set_phases.cc +++ b/src/rules_set_phases.cc @@ -62,11 +62,27 @@ int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { } amount_of_rules = amount_of_rules + res; - std::vector > *actions_from = &from->at(phase)->m_defaultActions; + + /** + * An action set in a child will overwrite an action set on a parent. + * + */ std::vector > *actions_to = &at(phase)->m_defaultActions; + std::vector > *actions_t_to = &at(phase)->m_defaultTransformations; + if (actions_to->size() == 0 || actions_t_to->size() == 0) { + std::vector > *actions_from = &from->at(phase)->m_defaultActions; + + actions_to->clear(); + for (size_t j = 0; j < actions_from->size(); j++) { + actions_to->push_back(actions_from->at(j)); + } - for (size_t j = 0; j < actions_from->size(); j++) { - actions_to->push_back(actions_from->at(j)); + std::vector > *actions_t_from = &from->at(phase)->m_defaultTransformations; + actions_t_to->clear(); + for (size_t j = 0; j < actions_t_from->size(); j++) { + actions_t_to->push_back(actions_t_from->at(j)); + } + at(phase)->fixDefaultActions(); } } diff --git a/src/transaction.cc b/src/transaction.cc index bae7c4ca7d..91d73f3ee9 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -61,6 +61,33 @@ using modsecurity::RequestBodyProcessor::XML; namespace modsecurity { + +RuleMessage *TransactionRuleMessageManagement::messageGetLast() { + return m_rulesMessages.back(); +} + +void TransactionRuleMessageManagement::logMatchLastRuleOnTheChain(RuleWithActions *rule) { + RuleMessage *rm = m_rulesMessages.back(); + + rm->setRule(rule); + + if (rule->hasDisruptiveAction() && + (m_transaction->getRuleEngineState() == RulesSet::DetectionOnlyRuleEngine)) { + /* error */ + // The error goes over the disruptive massage. We don't need it here. + //m_transaction->serverLog(rm); + } else if (rule->hasBlockAction() && (!rule->hasNoLogAction()) || rule->hasLogAction()) { + /* Log as warning. */ + m_transaction->serverLog(rm); + messageNew(); + } +} + +void TransactionRuleMessageManagement::messageNew() { + m_rulesMessages.push_back(new RuleMessage(m_transaction)); +} + + /** * @name Transaction * @brief Represents the inspection on an entire request. @@ -122,7 +149,6 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, void *logCbData) m_ruleRemoveTargetById(), m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean), m_auditLogModifier(), - m_rulesMessages(), m_requestBody(), m_responseBody(), /* m_id(), */ @@ -160,7 +186,8 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, void *logCbData) m_variableTimeWDay(""), m_variableTimeYear(""), m_logCbData(logCbData), - TransactionAnchoredVariables(this) { + TransactionAnchoredVariables(this), + TransactionRuleMessageManagement(this) { m_id = std::unique_ptr( new std::string( std::to_string(m_timeStamp))); @@ -195,7 +222,6 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, char *id, void *logCb m_ruleRemoveTargetById(), m_requestBodyAccess(RulesSet::PropertyNotSetConfigBoolean), m_auditLogModifier(), - m_rulesMessages(), m_requestBody(), m_responseBody(), m_id(std::unique_ptr(new std::string(id))), @@ -233,7 +259,8 @@ Transaction::Transaction(ModSecurity *ms, RulesSet *rules, char *id, void *logCb m_variableTimeWDay(""), m_variableTimeYear(""), m_logCbData(logCbData), - TransactionAnchoredVariables(this) { + TransactionAnchoredVariables(this), + TransactionRuleMessageManagement(this) { m_variableUrlEncodedError.set("0", 0); @@ -250,7 +277,7 @@ Transaction::~Transaction() { m_requestBody.str(std::string()); m_requestBody.clear(); - m_rulesMessages.clear(); + messageClear(); intervention::free(&m_it); intervention::clean(&m_it); @@ -1593,8 +1620,8 @@ std::string Transaction::toOldAuditLogFormat(int parts, } if (parts & audit_log::AuditLog::HAuditLogPart) { audit_log << "--" << trailer << "-" << "H--" << std::endl; - for (auto a : m_rulesMessages) { - audit_log << a.log(0, m_httpCodeReturned) << std::endl; + for (auto a : messageGetAll()) { + audit_log << a->log(0, m_httpCodeReturned) << std::endl; } audit_log << std::endl; /** TODO: write audit_log H part. */ @@ -1756,36 +1783,36 @@ std::string Transaction::toJSON(int parts) { reinterpret_cast("messages"), strlen("messages")); yajl_gen_array_open(g); - for (auto a : m_rulesMessages) { + for (auto a : messageGetAll()) { yajl_gen_map_open(g); - LOGFY_ADD("message", a.m_message.c_str()); + LOGFY_ADD("message", a->m_message.c_str()); yajl_gen_string(g, reinterpret_cast("details"), strlen("details")); yajl_gen_map_open(g); - LOGFY_ADD("match", a.m_match.c_str()); - LOGFY_ADD("reference", a.m_reference.c_str()); - LOGFY_ADD("ruleId", std::to_string(a.m_ruleId).c_str()); - LOGFY_ADD("file", a.m_ruleFile->c_str()); - LOGFY_ADD("lineNumber", std::to_string(a.m_ruleLine).c_str()); - LOGFY_ADD("data", a.m_data.c_str()); - LOGFY_ADD("severity", std::to_string(a.m_severity).c_str()); - LOGFY_ADD("ver", a.m_ver.c_str()); - LOGFY_ADD("rev", a.m_rev.c_str()); + LOGFY_ADD("match", a->m_match.c_str()); + LOGFY_ADD("reference", a->m_reference.c_str()); + LOGFY_ADD("ruleId", std::to_string(a->getRuleId()).c_str()); + LOGFY_ADD("file", a->getFileName().c_str()); + LOGFY_ADD("lineNumber", std::to_string(a->getLineNumber()).c_str()); + LOGFY_ADD("data", a->m_data.c_str()); + LOGFY_ADD("severity", std::to_string(a->m_severity).c_str()); + LOGFY_ADD("ver", a->getVer().c_str()); + LOGFY_ADD("rev", a->getRev().c_str()); yajl_gen_string(g, reinterpret_cast("tags"), strlen("tags")); yajl_gen_array_open(g); - for (auto b : a.m_tags) { + for (auto b : a->m_tags) { yajl_gen_string(g, reinterpret_cast(b.c_str()), strlen(b.c_str())); } yajl_gen_array_close(g); - LOGFY_ADD("maturity", std::to_string(a.m_maturity).c_str()); - LOGFY_ADD("accuracy", std::to_string(a.m_accuracy).c_str()); + LOGFY_ADD("maturity", std::to_string(a->getMaturity()).c_str()); + LOGFY_ADD("accuracy", std::to_string(a->getAccuracy()).c_str()); yajl_gen_map_close(g); yajl_gen_map_close(g); } @@ -1814,7 +1841,7 @@ std::string Transaction::toJSON(int parts) { } -void Transaction::serverLog(std::shared_ptr rm) { +void Transaction::serverLog(RuleMessage *rm) { m_ms->serverLog(m_logCbData, rm); } diff --git a/src/variables/rule.h b/src/variables/rule.h index f9e2f989d2..9667d24a8f 100644 --- a/src/variables/rule.h +++ b/src/variables/rule.h @@ -42,10 +42,6 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && r->m_ruleId == 0) { - r = r->m_chainedRuleParent; - } - if (!r || r->m_ruleId == 0) { return; } @@ -67,24 +63,22 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && r->m_rev.empty()) { - r = r->m_chainedRuleParent; - } - if (!r) { return; } - std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(r->m_rev); - VariableValue *var = new VariableValue(&m_rule, &m_rule_rev, - a - ); - delete a; - origin->m_offset = 0; - origin->m_length = 0; - var->addOrigin(std::move(origin)); - l->push_back(var); + if (r->hasRevisionAction()) { + std::unique_ptr origin(new VariableOrigin()); + std::string *a = new std::string(r->getRevision()); + VariableValue *var = new VariableValue(&m_rule, &m_rule_rev, + a + ); + delete a; + origin->m_offset = 0; + origin->m_length = 0; + var->addOrigin(std::move(origin)); + l->push_back(var); + } } @@ -93,13 +87,13 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && !r->hasSeverity()) { - r = r->m_chainedRuleParent; + if (!r) { + return; } - if (r && r->hasSeverity()) { + if (r->hasSeverityAction()) { std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(std::to_string(r->severity())); + std::string *a = new std::string(std::to_string(r->getSeverity())); VariableValue *var = new VariableValue(&m_rule, &m_rule_severity, a ); @@ -117,13 +111,13 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && !r->hasLogData()) { - r = r->m_chainedRuleParent; + if (!r) { + return; } - if (r && r->hasLogData()) { + if (r->hasLogDataAction()) { std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(r->logData(t)); + std::string *a = new std::string(r->getLogData(t)); VariableValue *var = new VariableValue(&m_rule, &m_rule_logdata, a ); @@ -140,13 +134,13 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - while (r && !r->hasMsg()) { - r = r->m_chainedRuleParent; + if (!r) { + return; } - if (r && r->hasMsg()) { + if (r->hasMessageAction()) { std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(r->msg(t)); + std::string *a = new std::string(r->getMessage(t)); VariableValue *var = new VariableValue(&m_rule, &m_rule_msg, a ); @@ -165,11 +159,11 @@ class Rule_DictElement : public VariableDictElement { \ id(t, rule, l); return; } - if (rule && m_dictElement == "rev") { + if (m_dictElement == "rev") { rev(t, rule, l); return; } - if (rule && m_dictElement == "severity") { + if (m_dictElement == "severity") { severity(t, rule, l); return; } diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index 175097931d..66cd89b02b 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -27,6 +27,8 @@ shiftNegative:src/utils/msc_tree.cc *:src/utils/msc_tree.cc invalidScanfArgType_int:src/rules_set_properties.cc:101 invalidScanfArgType_int:src/rules_set_properties.cc:102 +redundantAssignment:src/operators/pm.cc:94 + // @@ -36,6 +38,7 @@ unmatchedSuppression:src/utils/geo_lookup.cc:82 useInitializationList:src/utils/shared_files.h:87 unmatchedSuppression:src/utils/msc_tree.cc functionStatic:headers/modsecurity/transaction.h:407 +functionStatic:headers/modsecurity/transaction.h:456 duplicateBranch:src/audit_log/audit_log.cc:223 unreadVariable:src/request_body_processor/multipart.cc:435 stlcstrParam:src/audit_log/writer/parallel.cc:145 diff --git a/test/test-cases/regression/config-update-action-by-id.json b/test/test-cases/regression/config-update-action-by-id.json index 4e1a3fc24e..6e343be5fb 100644 --- a/test/test-cases/regression/config-update-action-by-id.json +++ b/test/test-cases/regression/config-update-action-by-id.json @@ -122,7 +122,7 @@ }, "expected":{ "http_code": 200, - "debug_log": "Running action: log" + "debug_log": "Rule returned 1" }, "rules":[ "SecRuleEngine On", @@ -167,7 +167,7 @@ }, "expected":{ "http_code": 200, - "debug_log": "Running action: log" + "debug_log": "Rule returned 1" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/issue-1528.json b/test/test-cases/regression/issue-1528.json index f2257055c2..74f2c3db9e 100644 --- a/test/test-cases/regression/issue-1528.json +++ b/test/test-cases/regression/issue-1528.json @@ -31,8 +31,8 @@ }, "rules": [ "SecRuleEngine On", - "SecAction \"id:1, nolog, setvar:tx.bad_value=attack\"", - "SecRule ARGS:param \"@rx ^%{tx.bad_value}$\" \"id:2,block\"" + "SecAction \"id:1, setvar:tx.bad_value=attack\"", + "SecRule ARGS:param \"@rx ^%{tx.bad_value}$\" \"id:2,log\"" ] } ] diff --git a/test/test-cases/regression/issue-1844.json b/test/test-cases/regression/issue-1844.json index 6ccb1f5e8a..df1a4ec624 100644 --- a/test/test-cases/regression/issue-1844.json +++ b/test/test-cases/regression/issue-1844.json @@ -37,10 +37,12 @@ ] }, "expected":{ - "error_log":"line \"29\"" + "error_log":"line \"29\"", + "http_code": 403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test1\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/big-file.conf" ] @@ -129,10 +131,12 @@ ] }, "expected":{ - "error_log":"line \"84\"" + "error_log":"line \"84\"", + "http_code": 403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/big-file.conf" ] @@ -175,11 +179,13 @@ ] }, "expected":{ - "error_log":"line \"116\"" + "error_log":"line \"116\"", + "http_code":403 }, "rules":[ "SecRuleEngine On", - "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", + "SecDefaultAction \"phase:request,deny\"", + "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,deny,t:trim\"", "Include test-cases/data/big-file.conf" ] }, @@ -221,10 +227,12 @@ ] }, "expected":{ - "error_log":"line \"174\"" + "error_log":"line \"174\"", + "http_code":403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/big-file.conf" ] @@ -267,10 +275,12 @@ ] }, "expected":{ - "error_log":"line \"174\"" + "error_log":"line \"174\"", + "http_code":403 }, "rules":[ "SecRuleEngine On", + "SecDefaultAction \"phase:request,deny\"", "SecRule WEBAPPID \"@contains test3\" \"id:1,phase:3,pass,t:trim\"", "Include test-cases/data/not-so-big-file.conf" ] diff --git a/test/test-cases/regression/issue-2296.json b/test/test-cases/regression/issue-2296.json index bc64d19bd2..bfb0356ab6 100644 --- a/test/test-cases/regression/issue-2296.json +++ b/test/test-cases/regression/issue-2296.json @@ -33,13 +33,13 @@ ] }, "expected":{ - "http_code":200, + "http_code":300, "debug_log":"Target value: \"is a simple test\"", "error_log":"Operator `Rx' with parameter `test' against variable `ARGS:THIS'" }, "rules":[ "SecRuleEngine On", - "SecRule ARGS:/^ThIs$/ \"test\" \"id:1\"" + "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,deny,status:300\"" ] }, { @@ -119,13 +119,13 @@ ] }, "expected":{ - "http_code":200, + "http_code":300, "debug_log":"Target value: \"is a simple test\"", "error_log":"msg \"Testing is a simple test\"" }, "rules":[ "SecRuleEngine On", - "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}'\"" + "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}',deny,status:300\"" ] }, { @@ -162,13 +162,13 @@ ] }, "expected":{ - "http_code":200, + "http_code":300, "debug_log":"Target value: \"is a simple test\"", "error_log":"msg \"Testing is a simple test\"" }, "rules":[ "SecRuleEngine On", - "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}',chain\"", + "SecRule ARGS:/^ThIs$/ \"test\" \"id:1,msg:'Testing %{ARGS:/^ThIs$/}',chain,deny,status:300\"", "SecRule MATCHED_VARS:/thIs/ \"is a simple test\" \"log\"" ] }, diff --git a/test/test-cases/regression/offset-variable.json b/test/test-cases/regression/offset-variable.json index de633167d6..bd7b3803a2 100644 --- a/test/test-cases/regression/offset-variable.json +++ b/test/test-cases/regression/offset-variable.json @@ -22,10 +22,12 @@ ] }, "expected":{ - "error_log":"o0,3v23,6t:trim" + "error_log":"o0,3v23,6t:trim", + "http_code": 403 }, "rules":[ - "SecRule ARGS \"@rx val\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS \"@rx val\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny,log\"" ] }, { @@ -51,10 +53,12 @@ ] }, "expected":{ - "error_log":"o3,3v37,6t:trim" + "error_log":"o3,3v37,6t:trim", + "http_code":403 }, "rules":[ - "SecRule ARGS_GET \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_GET \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -83,11 +87,13 @@ ] }, "expected":{ - "error_log":"o3,3v142,6t:trim" + "error_log":"o3,3v142,6t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_POST \"@rx ue1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_POST \"@rx ue1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -116,11 +122,13 @@ ] }, "expected":{ - "error_log":"o3,3v156,6t:trim" + "error_log":"o3,3v156,6t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_POST \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_POST \"@rx ue2\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -149,11 +157,13 @@ ] }, "expected":{ - "error_log":"o0,6v17,6t:trim" + "error_log":"o0,6v17,6t:trim", + "http_code":403 }, "rules":[ + "SecRuleEngine On", "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -182,11 +192,13 @@ ] }, "expected":{ - "error_log":"o0,6v31,6t:trim" + "error_log":"o0,6v31,6t:trim", + "http_code":403 }, "rules":[ + "SecRuleEngine On", "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx param2\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx param2\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -219,7 +231,7 @@ }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx am1 par\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx am1 par\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -252,7 +264,7 @@ }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_GET_NAMES \"@rx am1 param2 par\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRule ARGS_GET_NAMES \"@rx am1 param2 par\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -281,11 +293,13 @@ ] }, "expected":{ - "error_log": "0,6v149,6t:trim" + "error_log": "0,6v149,6t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_POST_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_POST_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -314,11 +328,13 @@ ] }, "expected":{ - "error_log":"o0,6v17,6t:trim" + "error_log":"o0,6v17,6t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_NAMES \"@rx param1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -344,11 +360,13 @@ ] }, "expected":{ - "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim" + "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -374,11 +392,13 @@ ] }, "expected":{ - "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim" + "error_log":"v16,6v23,6v30,6v37,6v44,6v51,6t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule ARGS_COMBINED_SIZE \"@gt 1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -405,11 +425,13 @@ ] }, "expected":{ - "error_log":"o23,6v0,63t:trim" + "error_log":"o23,6v0,63t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_LINE \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_LINE \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -437,11 +459,13 @@ ] }, "expected":{ - "error_log":"o0,3v0,3t:trim" + "error_log":"o0,3v0,3t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_METHOD \"GET\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_METHOD \"GET\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -469,11 +493,13 @@ ] }, "expected":{ - "error_log":"o5,3v58,8t:trim" + "error_log":"o5,3v58,8t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_PROTOCOL \"1.1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_PROTOCOL \"1.1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -501,11 +527,13 @@ ] }, "expected":{ - "error_log":"o1,5v4,11t:trim" + "error_log":"o1,5v4,11t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule PATH_INFO \"index\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule PATH_INFO \"index\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -533,11 +561,13 @@ ] }, "expected":{ - "error_log":"o7,6v16,41t:trim" + "error_log":"o7,6v16,41t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule QUERY_STRING \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule QUERY_STRING \"value1\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -565,11 +595,13 @@ ] }, "expected":{ - "error_log":"o6,4v5,10t:trim" + "error_log":"o6,4v5,10t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BASENAME \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_BASENAME \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -597,11 +629,13 @@ ] }, "expected":{ - "error_log":"o7,4v4,59t:trim" + "error_log":"o7,4v4,59t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_URI \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_URI \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -629,11 +663,14 @@ ] }, "expected":{ - "error_log":"o7,4v4,59t:trim" + "error_log":"o7,4v4,59t:trim", + "http_code": 403 + }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_URI_RAW \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_URI_RAW \"html\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, @@ -661,11 +698,13 @@ ] }, "expected":{ - "error_log":"o0,9v89,9t:trim" + "error_log":"o0,9v89,9t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_HEADERS \"localhost\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_HEADERS \"localhost\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, @@ -693,11 +732,13 @@ ] }, "expected":{ - "error_log":"o14,3v163,33t:trim" + "error_log":"o14,3v163,33t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_HEADERS \"www\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_HEADERS \"www\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -724,11 +765,13 @@ ] }, "expected":{ - "error_log":"o0,5v162,5t:trim" + "error_log":"o0,5v162,5t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -755,11 +798,13 @@ ] }, "expected":{ - "error_log":"o0,5v79,5t:trim" + "error_log":"o0,5v79,5t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule AUTH_TYPE \"Basic\" \"id:1,phase:2,pass,t:trim,msg:'ops',deny\"" ] }, { @@ -786,11 +831,13 @@ ] }, "expected":{ - "error_log":"o0,4v64,13t:lowercase" + "error_log":"o0,4v64,13t:lowercase", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_HEADERS_NAMES \"auth\" \"id:1,phase:2,pass,t:lowercase,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_HEADERS_NAMES \"auth\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -818,11 +865,13 @@ ] }, "expected":{ - "error_log":"o1,2v216,3t:lowercase" + "error_log":"o1,2v216,3t:lowercase", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES \"es\" \"id:1,phase:2,pass,t:lowercase,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES \"es\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -850,11 +899,13 @@ ] }, "expected":{ - "error_log":"o0,1v223,1t:lowercase" + "error_log":"o0,1v223,1t:lowercase", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES \"z\" \"id:1,phase:2,pass,t:lowercase,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES \"z\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -882,11 +933,13 @@ ] }, "expected":{ - "error_log":"o0,1v228,1t:lowercase,t:trim" + "error_log":"o0,1v228,1t:lowercase", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES \"b\" \"id:1,phase:2,pass,t:lowercase,t:trim,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES \"b\" \"id:1,phase:2,pass,t:lowercase,msg:'ops',deny\"" ] }, { @@ -914,11 +967,13 @@ ] }, "expected":{ - "error_log":"o0,1v226,1" + "error_log":"o0,1v226,1", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_COOKIES_NAMES \"t\" \"id:1,phase:2,pass,msg:'ops'\"" + "SecRuleEngine On", + "SecRule REQUEST_COOKIES_NAMES \"t\" \"id:1,phase:2,pass,msg:'ops',deny\"" ] }, { @@ -956,11 +1011,12 @@ ] }, "expected":{ - "error_log":"o0,7v198,30t:trim" + "error_log":"o0,7v198,30t:trim", + "http_code":403 }, "rules":[ "SecRuleEngine On", - "SecRule REMOTE_USER \"Aladdin\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule REMOTE_USER \"Aladdin\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1005,11 +1061,13 @@ ] }, "expected":{ - "error_log":"o45,30v193,516t:trim" + "error_log":"o45,30v193,516t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1054,11 +1112,13 @@ ] }, "expected":{ - "error_log":"o45,30v193,516t:trim" + "error_log":"o45,30v193,516t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_BODY \"Content-Disposition: form-data\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1103,11 +1163,13 @@ ] }, "expected":{ - "error_log":"v193,516t:trim" + "error_log":"v193,516t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_BODY_LENGTH \"@gt 5\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_BODY_LENGTH \"@gt 5\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1152,11 +1214,13 @@ ] }, "expected":{ - "error_log":"o6,5v5,11t:trim" + "error_log":"o6,5v5,11t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_FILENAME \"/file\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_FILENAME \"/file\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1201,11 +1265,13 @@ ] }, "expected":{ - "error_log":"o6,8v5,23t:trim" + "error_log":"o6,8v5,23t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1250,11 +1316,13 @@ ] }, "expected":{ - "error_log":"o6,8v5,23t:trim" + "error_log":"o6,8v5,23t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule REQUEST_FILENAME \"/f i l e\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1299,11 +1367,13 @@ ] }, "expected":{ - "error_log":"o0,4v306,4t:trim" + "error_log":"o0,4v306,4t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS \"test\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule ARGS \"test\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1352,11 +1422,13 @@ ] }, "expected":{ - "error_log":"o0,5v402,5t:trim" + "error_log":"o0,5v402,5t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule ARGS \"test2\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule ARGS \"test2\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1405,11 +1477,13 @@ ] }, "expected":{ - "error_log":"o0,16v680,20t:trim" + "error_log":"o0,16v680,20t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES \"small_text_file2\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES \"small_text_file2\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1458,11 +1532,13 @@ ] }, "expected":{ - "error_log":"o0,16v512,20t:trim" + "error_log":"o0,16v512,20t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES \"small_text_file1\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES \"small_text_file1\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1511,11 +1587,13 @@ ] }, "expected":{ - "error_log":"o0,8o0,8v491,8t:trimo0,16o0,16v709,16t:trim" + "error_log":"o0,8o0,8v491,8t:trimo0,16o0,16v709,16t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_NAMES \"(fiasdfasdfledata|filedata)\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_NAMES \"(fiasdfasdfledata|filedata)\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1564,11 +1642,13 @@ ] }, "expected":{ - "error_log":"v560,32t:trim" + "error_log":"v560,32t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_SIZES:filedata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_SIZES:filedata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1617,11 +1697,13 @@ ] }, "expected":{ - "error_log":"v754,38t:trim" + "error_log":"v754,38t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_SIZES:fiasdfasdfledata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_SIZES:fiasdfasdfledata \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1670,11 +1752,13 @@ ] }, "expected":{ - "error_log":"v560,32v754,38t:trim" + "error_log":"v560,32v754,38t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", - "SecRule FILES_COMBINED_SIZE \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRuleEngine On", + "SecRule FILES_COMBINED_SIZE \"@gt 0\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1723,13 +1807,15 @@ ] }, "expected":{ - "error_log":"o8,7v754,38t:trim" + "error_log":"o8,7v754,38t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule FILES_TMP_CONTENT \"another\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule FILES_TMP_CONTENT \"another\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1778,13 +1864,15 @@ ] }, "expected":{ - "error_log":"o15,5v560,32t:trim" + "error_log":"o15,5v560,32t:trim", + "http_code": 403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule FILES_TMP_CONTENT:small_text_file1.txt \"small\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule FILES_TMP_CONTENT:small_text_file1.txt \"small\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1833,13 +1921,15 @@ ] }, "expected":{ - "error_log":"o6,4v5,23t:trim" + "error_log":"o6,4v5,23t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule PATH_INFO \"/f i\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule PATH_INFO \"/f i\" \"id:1,phase:3,t:trim,msg:'s',deny\"" ] }, { @@ -1888,13 +1978,15 @@ ] }, "expected":{ - "error_log":"o0,20v680,20t:trim" + "error_log":"o0,20v680,20t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule MULTIPART_FILENAME \"small_text_file2.txt\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule MULTIPART_FILENAME \"small_text_file2.txt\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { @@ -1943,13 +2035,15 @@ ] }, "expected":{ - "error_log":"o0,16v709,16t:trim" + "error_log":"o0,16v709,16t:trim", + "http_code":403 }, "rules":[ "SecRequestBodyAccess On", "SecUploadKeepFiles On", + "SecRuleEngine On", "SecUploadDir /tmp", - "SecRule MULTIPART_NAME \"fiasdfasdfledata\" \"id:1,phase:3,pass,t:trim,msg:'s'\"" + "SecRule MULTIPART_NAME \"fiasdfasdfledata\" \"id:1,phase:3,pass,t:trim,msg:'s',deny\"" ] }, { diff --git a/test/test-cases/regression/operator-rx.json b/test/test-cases/regression/operator-rx.json index d6b9839fe5..e077157341 100644 --- a/test/test-cases/regression/operator-rx.json +++ b/test/test-cases/regression/operator-rx.json @@ -79,11 +79,12 @@ }, "expected":{ "debug_log":"Executing operator \"Rx\" with param \"\\^0\\$\"", - "error_log":"Matched \"Operator `Rx' with parameter `\\^0\\$'" + "error_log":"Matched \"Operator `Rx' with parameter `\\^0\\$'", + "http_code": 403 }, "rules":[ "SecRuleEngine On", - "SecRule REQUEST_HEADERS:Content-Length \"!^0$\" \"id:1,phase:2,pass,t:trim,block\"" + "SecRule REQUEST_HEADERS:Content-Length \"!^0$\" \"id:1,phase:2,pass,t:trim,deny\"" ] } ] diff --git a/test/test-cases/regression/variable-ARGS_POST_NAMES.json b/test/test-cases/regression/variable-ARGS_POST_NAMES.json index fb0964f35c..d6902826f3 100644 --- a/test/test-cases/regression/variable-ARGS_POST_NAMES.json +++ b/test/test-cases/regression/variable-ARGS_POST_NAMES.json @@ -183,12 +183,13 @@ ] }, "expected":{ + "http_code": 403, "error_log":"o0,5v206,5t:trim" }, "rules":[ "SecRuleEngine On", "SecRequestBodyAccess On", - "SecRule ARGS_POST_NAMES \"@contains name1\" \"id:1,phase:3,pass,t:trim\"" + "SecRule ARGS_POST_NAMES \"@contains name1\" \"id:1,phase:3,pass,t:trim,deny\"" ] } ] From 4669387d1fdfbbeb6630191e2d06ae9836d4a187 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Mon, 25 Feb 2019 11:32:43 -0300 Subject: [PATCH 05/16] Rule: isMarker is no longer necessary --- headers/modsecurity/rule.h | 3 --- headers/modsecurity/rule_marker.h | 4 +--- src/rules_set.cc | 15 +++++++++------ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/headers/modsecurity/rule.h b/headers/modsecurity/rule.h index 2805d5dea7..a397085fc6 100644 --- a/headers/modsecurity/rule.h +++ b/headers/modsecurity/rule.h @@ -110,9 +110,6 @@ class Rule { return "<>:" + std::to_string(m_lineNumber); } - - virtual bool isMarker() { return false; } - private: std::shared_ptr m_fileName; int m_lineNumber; diff --git a/headers/modsecurity/rule_marker.h b/headers/modsecurity/rule_marker.h index 6aa1205dde..f17ee828cb 100644 --- a/headers/modsecurity/rule_marker.h +++ b/headers/modsecurity/rule_marker.h @@ -68,12 +68,10 @@ class RuleMarker : public Rule { }; - std::shared_ptr getName() { + std::shared_ptr getName() const { return m_name; } - bool isMarker() override { return true; } - private: std::shared_ptr m_name; }; diff --git a/src/rules_set.cc b/src/rules_set.cc index 6344186993..cfc5a1e66b 100644 --- a/src/rules_set.cc +++ b/src/rules_set.cc @@ -20,6 +20,7 @@ #include #include "modsecurity/rules_set.h" +#include "modsecurity/rule_marker.h" #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/parser/driver.h" @@ -176,12 +177,14 @@ int RulesSet::evaluate(int phase, Transaction *t) { // FIXME: This is not meant to be here. At the end of this refactoring, // the shared pointer won't be used. auto rule = rules->at(i); - if (t->isInsideAMarker() && !rule->isMarker()) { - ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ - + "' due to a SecMarker: " + *t->getCurrentMarker()); - - } else if (rule->isMarker()) { - rule->evaluate(t); + if (t->isInsideAMarker()) { + RuleMarker *ruleMarker = dynamic_cast(rule.get()); + if (!ruleMarker) { + ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ + + "' due to a SecMarker: " + *t->getCurrentMarker()); + } else { + rule->evaluate(t); + } } else if (t->m_skip_next > 0) { t->m_skip_next--; ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ From 9c0d5d104de30edc4a8911a1cc81f5e184fcf96e Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Mon, 25 Feb 2019 20:22:38 -0300 Subject: [PATCH 06/16] Refactoring in the Rule class to make it more elegant --- headers/modsecurity/actions/action.h | 10 +- headers/modsecurity/rule.h | 28 ---- headers/modsecurity/rule_message.h | 4 +- headers/modsecurity/rule_with_actions.h | 88 +++++++++-- headers/modsecurity/rule_with_operator.h | 2 +- headers/modsecurity/rules.h | 8 +- src/actions/block.h | 3 + src/actions/rule_id.cc | 2 +- .../transformations/escape_seq_decode.h | 2 +- src/actions/transformations/url_encode.h | 2 +- src/parser/driver.cc | 42 +++--- src/rule_script.cc | 7 +- src/rule_unconditional.cc | 10 +- src/rule_with_actions.cc | 139 ++++++------------ src/rule_with_operator.cc | 28 ++-- src/rules_set.cc | 2 +- src/rules_set_phases.cc | 2 +- src/variables/rule.h | 4 +- src/variables/xml.cc | 5 +- test/cppcheck_suppressions.txt | 4 + test/test-cases/regression/actions.json | 12 +- test/test-cases/regression/auditlog.json | 6 +- ...llection-regular_expression_selection.json | 2 +- .../regression/config-response_type.json | 2 +- .../test-cases/regression/variable-FILES.json | 2 +- .../regression/variable-FILES_NAMES.json | 2 +- 26 files changed, 199 insertions(+), 219 deletions(-) diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index f5791e3926..88508de133 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -39,15 +39,7 @@ namespace actions { class Action { public: - explicit Action(const std::string& _action) - : m_isNone(false), - temporaryAction(false), - action_kind(2), - m_name(nullptr), - m_parser_payload("") { - set_name_and_payload(_action); - } - explicit Action(const std::string& _action, int kind) + Action(const std::string& _action, int kind = RunTimeOnlyIfMatchKind) : m_isNone(false), temporaryAction(false), action_kind(kind), diff --git a/headers/modsecurity/rule.h b/headers/modsecurity/rule.h index a397085fc6..4696f15637 100644 --- a/headers/modsecurity/rule.h +++ b/headers/modsecurity/rule.h @@ -36,38 +36,10 @@ namespace variables { class Variable; class Variables; } -namespace actions { -class Action; -class Severity; -class LogData; -class Msg; -class Rev; -class SetVar; -class Tag; -namespace transformations { -class Transformation; -} -} namespace operators { class Operator; } -using TransformationResult = std::pair, - std::shared_ptr>; -using TransformationResults = std::list; - -using Transformation = actions::transformations::Transformation; -using Transformations = std::vector >; -using TransformationsPtr = std::vector; - -using Actions = std::vector; - -using Tags = std::vector >; -using TagsPtr = std::vector; -using SetVars = std::vector >; -using SetVarsPtr = std::vector; -using MatchActions = std::vector >; -using MatchActionsPtr = std::vector; class Rule { public: diff --git a/headers/modsecurity/rule_message.h b/headers/modsecurity/rule_message.h index a529391d5c..c3d5b74950 100644 --- a/headers/modsecurity/rule_message.h +++ b/headers/modsecurity/rule_message.h @@ -136,7 +136,7 @@ class RuleMessage { int getRuleId() const { if (m_rule) { - return m_rule->m_ruleId; + return m_rule->getId(); } return -1; } @@ -171,7 +171,7 @@ class RuleMessage { std::string getVer() const { if (m_rule) { - return m_rule->getRevision(); + return m_rule->getVersion(); } return ""; } diff --git a/headers/modsecurity/rule_with_actions.h b/headers/modsecurity/rule_with_actions.h index a6731cb46f..06d5bb9016 100644 --- a/headers/modsecurity/rule_with_actions.h +++ b/headers/modsecurity/rule_with_actions.h @@ -30,10 +30,43 @@ #include "modsecurity/variable_value.h" #include "modsecurity/rule.h" + #ifdef __cplusplus namespace modsecurity { +namespace actions { +class Action; +class Severity; +class LogData; +class Msg; +class Rev; +class SetVar; +class Tag; +class XmlNS; +namespace transformations { +class Transformation; +} +} + +using TransformationResult = std::pair, + std::shared_ptr>; +using TransformationResults = std::list; +using Transformation = actions::transformations::Transformation; +using Transformations = std::vector >; +using TransformationsPtr = std::vector; +using Action = actions::Action; +using Actions = std::vector; +using Tags = std::vector >; +using TagsPtr = std::vector; +using SetVars = std::vector >; +using SetVarsPtr = std::vector; +using MatchActions = std::vector >; +using MatchActionsPtr = std::vector; + +using XmlNSs = std::vector >; +using XmlNSsPtr = std::vector; + class RuleWithActions : public Rule { public: @@ -41,12 +74,12 @@ class RuleWithActions : public Rule { int ACCURACY_NOT_SET = 10; int MATURITY_NOT_SET = 10; + RuleWithActions( Actions *a, Transformations *t, std::unique_ptr fileName, int lineNumber); - ~RuleWithActions(); RuleWithActions(const RuleWithActions &r) @@ -60,6 +93,7 @@ class RuleWithActions : public Rule { m_actionsRuntimePos(r.m_actionsRuntimePos), m_actionsSetVar(r.m_actionsSetVar), m_actionsTag(r.m_actionsTag), + m_XmlNSs(r.m_XmlNSs), m_defaultActionDisruptiveAction(r.m_defaultActionDisruptiveAction), m_defaultActionLogData(r.m_defaultActionLogData), m_defaultActionMsg(r.m_defaultActionMsg), @@ -127,29 +161,27 @@ class RuleWithActions : public Rule { */ void executeActionsIndependentOfChainedRuleResult( - Transaction *trasn, - bool *containsDisruptive); + Transaction *trasn); void executeActionsAfterFullMatch( - Transaction *trasn, - bool containsDisruptive); + Transaction *trasn); void executeAction(Transaction *trans, - bool containsBlock, - actions::Action *a, + Action *a, bool context); void executeTransformations( - Transaction *trasn, const std::string &value, TransformationResults &ret); + Transaction *transaction, + const std::string &value, + TransformationResults &ret); inline void executeTransformation( actions::transformations::Transformation *a, std::shared_ptr *value, Transaction *trans, TransformationResults *ret, - std::string *path, - int *nth) const; + std::string *path) const; void addAction(actions::Action *a); @@ -340,13 +372,46 @@ class RuleWithActions : public Rule { return dst; } + inline int64_t getId() const { return m_ruleId; } + void setId(int id) { + m_ruleId = id; + } + + void setChainedNext(std::unique_ptr r) { + m_chainedRuleChild = std::move(r); + } + + inline RuleWithActions *getChainedNext() const { + return m_chainedRuleChild.get(); + } + + void setChainedParent(RuleWithActions *r) { + m_chainedRuleParent = r; + } + + inline RuleWithActions *getChainedParent() { + return m_chainedRuleParent; + } + + XmlNSsPtr getXmlNSsPtr() const { + /** + * FIXME: this is not conteplating SecRuleUpdateActionBy* yet. + * + */ + XmlNSsPtr dst; + for (auto &a : m_XmlNSs) { + dst.push_back(a.get()); + } + + return dst; + } + private: int64_t m_ruleId; std::shared_ptr m_chainedRuleChild; RuleWithActions *m_chainedRuleParent; - private: /* actions */ std::shared_ptr m_disruptiveAction; std::shared_ptr m_logData; @@ -354,6 +419,7 @@ class RuleWithActions : public Rule { MatchActions m_actionsRuntimePos; SetVars m_actionsSetVar; Tags m_actionsTag; + XmlNSs m_XmlNSs; /* actions || SecDefaultAction */ std::shared_ptr m_defaultActionDisruptiveAction; diff --git a/headers/modsecurity/rule_with_operator.h b/headers/modsecurity/rule_with_operator.h index 059c71739f..bbac5cf3f6 100644 --- a/headers/modsecurity/rule_with_operator.h +++ b/headers/modsecurity/rule_with_operator.h @@ -70,7 +70,7 @@ class RuleWithOperator : public RuleWithActions { std::string getOperatorName() const; virtual std::string getReference() override { - return std::to_string(m_ruleId); + return std::to_string(getId()); } private: diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 79264b0866..6eef07058c 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -51,9 +51,9 @@ class Rules { size_t j = 0; for (; j < from->size(); j++) { RuleWithOperator *rule = dynamic_cast(from->at(j).get()); - if (rule && std::binary_search(ids.begin(), ids.end(), rule->m_ruleId)) { + if (rule && std::binary_search(ids.begin(), ids.end(), rule->getId())) { if (err != NULL) { - *err << "Rule id: " << std::to_string(rule->m_ruleId) \ + *err << "Rule id: " << std::to_string(rule->getId()) \ << " is duplicated" << std::endl; } return -1; @@ -69,9 +69,9 @@ class Rules { bool insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { RuleWithOperator *r = dynamic_cast(rule.get()); - if (r && ids != nullptr && std::binary_search(ids->begin(), ids->end(), r->m_ruleId)) { + if (r && ids != nullptr && std::binary_search(ids->begin(), ids->end(), r->getId())) { if (err != nullptr) { - *err << "Rule id: " << std::to_string(r->m_ruleId) \ + *err << "Rule id: " << std::to_string(r->getId()) \ << " is duplicated" << std::endl; } return false; diff --git a/src/actions/block.h b/src/actions/block.h index b32e864c19..b1e479433c 100644 --- a/src/actions/block.h +++ b/src/actions/block.h @@ -35,6 +35,9 @@ class Block : public Action { public: explicit Block(const std::string &action) : Action(action) { } + Block(const Block &a) = delete; + Block &operator=(const Block &a) = delete; + bool evaluate(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; }; diff --git a/src/actions/rule_id.cc b/src/actions/rule_id.cc index d16bf63bec..5520ab782f 100644 --- a/src/actions/rule_id.cc +++ b/src/actions/rule_id.cc @@ -49,7 +49,7 @@ bool RuleId::init(std::string *error) { bool RuleId::evaluate(RuleWithActions *rule, Transaction *transaction) { - rule->m_ruleId = m_ruleId; + rule->setId(m_ruleId); return true; } diff --git a/src/actions/transformations/escape_seq_decode.h b/src/actions/transformations/escape_seq_decode.h index d68f33b56f..8751a8b4eb 100644 --- a/src/actions/transformations/escape_seq_decode.h +++ b/src/actions/transformations/escape_seq_decode.h @@ -35,7 +35,7 @@ class EscapeSeqDecode : public Transformation { std::string evaluate(const std::string &exp, Transaction *transaction) override; - int ansi_c_sequences_decode_inplace(unsigned char *input, int input_len); + static int ansi_c_sequences_decode_inplace(unsigned char *input, int input_len); }; } // namespace transformations diff --git a/src/actions/transformations/url_encode.h b/src/actions/transformations/url_encode.h index a45be56402..24cf1272ae 100644 --- a/src/actions/transformations/url_encode.h +++ b/src/actions/transformations/url_encode.h @@ -36,7 +36,7 @@ class UrlEncode : public Transformation { std::string evaluate(const std::string &exp, Transaction *transaction) override; - std::string url_enc(const char *input, + static std::string url_enc(const char *input, unsigned int input_len, int *changed); }; diff --git a/src/parser/driver.cc b/src/parser/driver.cc index be63b43482..f1ddcef66d 100644 --- a/src/parser/driver.cc +++ b/src/parser/driver.cc @@ -88,77 +88,79 @@ int Driver::addSecRule(std::unique_ptr r) { m_parserError << " chain starter rules."; return false; } - m_lastRule->m_chainedRuleChild = std::move(r); - m_lastRule->m_chainedRuleChild->m_chainedRuleParent = m_lastRule; - m_lastRule = m_lastRule->m_chainedRuleChild.get(); + + m_lastRule->setChainedNext(std::move(r)); + m_lastRule->getChainedNext()->setChainedParent(m_lastRule); + m_lastRule = m_lastRule->getChainedNext(); /* Lets set all meta-data to the first rule */ RuleWithActions *firstRule = m_lastRule; if (!firstRule->hasChainAction()) { - while (firstRule->m_chainedRuleParent != nullptr) { + while (firstRule->getChainedParent() != nullptr) { if (firstRule->hasMessageAction()) { - firstRule->m_chainedRuleParent->setMessageAction( + firstRule->getChainedParent()->setMessageAction( firstRule->getMessageAction() ); firstRule->setMessageAction(nullptr); } if (firstRule->hasLogDataAction()) { - firstRule->m_chainedRuleParent->setLogDataAction( + firstRule->getChainedParent()->setLogDataAction( firstRule->getLogDataAction() ); firstRule->setLogDataAction(nullptr); } if (firstRule->hasSeverityAction()) { - firstRule->m_chainedRuleParent->setSeverity( + firstRule->getChainedParent()->setSeverity( firstRule->getSeverity() ); } if (firstRule->hasRevisionAction()) { - firstRule->m_chainedRuleParent->setRevision( + firstRule->getChainedParent()->setRevision( firstRule->getRevision() ); } if (firstRule->hasVersionAction()) { - firstRule->m_chainedRuleParent->setVersion( + firstRule->getChainedParent()->setVersion( firstRule->getVersion() ); } if (firstRule->hasAccuracyAction()) { - firstRule->m_chainedRuleParent->setAccuracy( + firstRule->getChainedParent()->setAccuracy( firstRule->getAccuracy() ); } if (firstRule->hasMaturityAction()) { - firstRule->m_chainedRuleParent->setMaturity( + firstRule->getChainedParent()->setMaturity( firstRule->getMaturity() ); } if (firstRule->hasTagAction()) { - firstRule->m_chainedRuleParent->setTags( + firstRule->getChainedParent()->setTags( firstRule->getTagsAction() ); firstRule->cleanTags(); } if (firstRule->hasDisruptiveAction()) { - firstRule->m_chainedRuleParent->setDisruptiveAction( + firstRule->getChainedParent()->setDisruptiveAction( firstRule->getDisruptiveAction() ); firstRule->setDisruptiveAction(nullptr); } - firstRule->m_chainedRuleParent->setHasBlockAction( + firstRule->getChainedParent()->setHasBlockAction( firstRule->hasBlockAction() ); - firstRule->m_chainedRuleParent->setHasLogAction( + firstRule->getChainedParent()->setHasLogAction( firstRule->hasLogAction() ); - firstRule->m_chainedRuleParent->setHasLogAction( + firstRule->getChainedParent()->setHasLogAction( firstRule->hasNoLogAction() ); - firstRule = firstRule->m_chainedRuleParent; + firstRule = firstRule->getChainedParent(); } } + return true; } @@ -167,7 +169,7 @@ int Driver::addSecRule(std::unique_ptr r) { * Checking if the rule has an ID and also checking if this ID is not used * by other rule */ - if (rule->m_ruleId == 0) { + if (rule->getId() == 0) { m_parserError << "Rules must have an ID. File: "; m_parserError << rule->getFileName() << " at line: "; m_parserError << std::to_string(rule->getLineNumber()) << std::endl; @@ -178,8 +180,8 @@ int Driver::addSecRule(std::unique_ptr r) { Rules *rules = m_rulesSetPhases[i]; for (int j = 0; j < rules->size(); j++) { RuleWithOperator *lr = dynamic_cast(rules->at(j).get()); - if (lr && lr->m_ruleId == rule->m_ruleId) { - m_parserError << "Rule id: " << std::to_string(rule->m_ruleId) \ + if (lr && lr->getId() == rule->getId()) { + m_parserError << "Rule id: " << std::to_string(rule->getId()) \ << " is duplicated" << std::endl; return false; } diff --git a/src/rule_script.cc b/src/rule_script.cc index 74663a4391..b4d2aa9413 100644 --- a/src/rule_script.cc +++ b/src/rule_script.cc @@ -26,15 +26,12 @@ bool RuleScript::evaluate(Transaction *trans) { ms_dbg_a(trans, 4, " Executing script: " + m_name + "."); - bool containsDisruptive = false; - - executeActionsIndependentOfChainedRuleResult(trans, - &containsDisruptive); + executeActionsIndependentOfChainedRuleResult(trans); bool ret = m_lua->run(trans); if (ret) { - executeActionsAfterFullMatch(trans, containsDisruptive); + executeActionsAfterFullMatch(trans); } return ret; diff --git a/src/rule_unconditional.cc b/src/rule_unconditional.cc index 22d52d7519..541dc41151 100644 --- a/src/rule_unconditional.cc +++ b/src/rule_unconditional.cc @@ -22,16 +22,12 @@ namespace modsecurity { bool RuleUnconditional::evaluate(Transaction *trans) { RuleWithActions::evaluate(trans); - // FIXME: This needs to be romeved on the runtime exeption review. - bool containsBlock = false; - - ms_dbg_a(trans, 4, "(Rule: " + std::to_string(m_ruleId) \ + ms_dbg_a(trans, 4, "(Rule: " + std::to_string(getId()) \ + ") Executing unconditional rule..."); - executeActionsIndependentOfChainedRuleResult(trans, - &containsBlock); + executeActionsIndependentOfChainedRuleResult(trans); - executeActionsAfterFullMatch(trans, containsBlock); + executeActionsAfterFullMatch(trans); trans->logMatchLastRuleOnTheChain(this); diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index e69f9bce8a..48e08ac019 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -18,47 +18,38 @@ #include #include -#include -#include #include +#include #include -#include #include +#include +#include -#include "modsecurity/rules_set.h" -#include "src/operators/operator.h" #include "modsecurity/actions/action.h" #include "modsecurity/modsecurity.h" -#include "src/actions/transformations/none.h" -#include "src/actions/tag.h" -#include "src/utils/string.h" #include "modsecurity/rule_message.h" +#include "modsecurity/rules_set.h" #include "modsecurity/rule_with_actions.h" #include "src/actions/accuracy.h" -#include "src/actions/maturity.h" +#include "src/actions/block.h" +#include "src/actions/capture.h" +#include "src/actions/log_data.h" #include "src/actions/msg.h" +#include "src/actions/maturity.h" +#include "src/actions/multi_match.h" +#include "src/actions/rev.h" #include "src/actions/log.h" #include "src/actions/no_log.h" -#include "src/actions/log_data.h" -#include "src/actions/rev.h" -#include "src/actions/severity.h" -#include "src/actions/capture.h" -#include "src/actions/multi_match.h" #include "src/actions/set_var.h" -#include "src/actions/block.h" -#include "src/variables/variable.h" +#include "src/actions/severity.h" +#include "src/actions/tag.h" +#include "src/actions/transformations/transformation.h" +#include "src/actions/xmlns.h" +#include "src/utils/string.h" namespace modsecurity { -using operators::Operator; -using actions::Action; -using variables::Variable; -using actions::transformations::None; -using actions::transformations::Transformation; - - - RuleWithActions::RuleWithActions( Actions *actions, Transformations *transformations, @@ -74,6 +65,7 @@ RuleWithActions::RuleWithActions( m_actionsRuntimePos(), m_actionsSetVar(), m_actionsTag(), + m_XmlNSs(), m_defaultActionDisruptiveAction(nullptr), m_defaultActionLogData(nullptr), m_defaultActionMsg(nullptr), @@ -215,8 +207,10 @@ void RuleWithActions::addAction(actions::Action *a) { } else if (dynamic_cast(a)) { m_actionsTag.push_back(std::unique_ptr(dynamic_cast(a))); } else if (dynamic_cast(a)) { - m_actionsRuntimePos.push_back(std::unique_ptr(dynamic_cast(a))); + m_actionsRuntimePos.push_back(std::unique_ptr(dynamic_cast(a))); m_containsStaticBlockAction = true; + } else if (dynamic_cast(a)) { + m_XmlNSs.push_back(std::unique_ptr(dynamic_cast(a))); } else if (a->isDisruptive() == true) { m_disruptiveAction = std::unique_ptr(a); } else { @@ -237,12 +231,6 @@ RuleWithActions::~RuleWithActions() { } bool RuleWithActions::evaluate(Transaction *transaction) { - - /* Rule evaluate is pure virtual. - * - * Rule::evaluate(transaction); - */ - /* Matched vars needs to be clear at every new rule execution */ transaction->m_matched.clear(); @@ -250,8 +238,7 @@ bool RuleWithActions::evaluate(Transaction *transaction) { } -void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction *trans, - bool *containsBlock) { +void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction *trans) { for (actions::SetVar *a : getSetVarsActionsPtr()) { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ @@ -268,7 +255,6 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * actions::Action *a = dynamic_cast(b.second.get()); if (a->isDisruptive() == true && *a->m_name.get() == "block") { ms_dbg_a(trans, 9, "Rule contains a `block' action"); - *containsBlock = true; } else if (*a->m_name.get() == "setvar") { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); @@ -278,8 +264,7 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * } -void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, - bool containsBlock) { +void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { bool disruptiveAlreadyExecuted = false; #if 0 @@ -288,7 +273,8 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, continue; } if (!a.get()->isDisruptive()) { - executeAction(trans, containsBlock, a.get(), true); + executeAction(trans, a.get(), true); + } } #endif @@ -299,13 +285,18 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, a->evaluate(this, trans, *trans->messageGetLast()); } + /** + * + * FIXME: SecRuleUpdateActionBy should be runtime + * + */ for (auto &b : trans->m_rules->m_exceptions.m_action_pos_update_target_by_id) { if (m_ruleId != b.first) { continue; } actions::Action *a = dynamic_cast(b.second.get()); - executeAction(trans, containsBlock, a, false); + executeAction(trans, a, false); disruptiveAlreadyExecuted = true; } @@ -325,22 +316,22 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans, if (!a->isDisruptive() && !(disruptiveAlreadyExecuted && dynamic_cast(a))) { - executeAction(trans, containsBlock, a, false); + executeAction(trans, a, false); } } + if (!disruptiveAlreadyExecuted && m_disruptiveAction != nullptr) { - executeAction(trans, containsBlock, + executeAction(trans, m_disruptiveAction.get(), false); } else if (!disruptiveAlreadyExecuted && hasBlockAction() && m_defaultActionDisruptiveAction != nullptr) { - executeAction(trans, containsBlock, + executeAction(trans, m_defaultActionDisruptiveAction.get(), false); } } void RuleWithActions::executeAction(Transaction *trans, - bool containsBlock, Action *a, bool defaultContext) { if (a->isDisruptive() == false && *a->m_name.get() != "block") { ms_dbg_a(trans, 9, "Running " \ @@ -349,15 +340,15 @@ void RuleWithActions::executeAction(Transaction *trans, return; } - if (defaultContext && !containsBlock) { + if (defaultContext && !hasBlockAction()) { ms_dbg_a(trans, 4, "Ignoring action: " + *a->m_name.get() + \ " (rule does not cotains block)"); return; } if (trans->getRuleEngineState() == RulesSet::EnabledRuleEngine) { - ms_dbg_a(trans, 4, "Running (disruptive) action: " + *a->m_name.get() + \ - "."); + ms_dbg_a(trans, 4, "Running (disruptive) action: " + + *a->m_name.get() + "."); a->evaluate(this, trans, *trans->messageGetLast()); return; } @@ -372,8 +363,7 @@ inline void RuleWithActions::executeTransformation( std::shared_ptr *value, Transaction *trans, TransformationResults *ret, - std::string *path, - int *nth) const { + std::string *path) const { std::string *oldValue = (*value).get(); std::string newValue = a->evaluate(*oldValue, trans); @@ -382,7 +372,6 @@ inline void RuleWithActions::executeTransformation( std::shared_ptr u(new std::string(newValue)); if (m_containsMultiMatchAction) { ret->push_back(std::make_pair(u, a->m_name)); - (*nth)++; } *value = u; } @@ -393,16 +382,16 @@ inline void RuleWithActions::executeTransformation( path->append("," + *a->m_name.get()); } - ms_dbg_a(trans, 9, " T (" + \ - std::to_string(*nth) + ") " + \ + ms_dbg_a(trans, 9, "Transformation " + \ *a->m_name.get() + ": \"" + \ - utils::string::limitTo(80, newValue) +"\""); + utils::string::limitTo(80, newValue) + "\""); } void RuleWithActions::executeTransformations( - Transaction *trans, const std::string &in, TransformationResults &ret) { + Transaction *trans, + const std::string &in, + TransformationResults &ret) { int none = 0; - int transformations = 0; std::string path(""); std::shared_ptr value = std::shared_ptr(new std::string(in)); @@ -422,9 +411,7 @@ void RuleWithActions::executeTransformations( for (Transformation *a : getTransformationPtr()) { if (none == 0) { - Transformation *t = dynamic_cast(a); - executeTransformation(t, &value, trans, &ret, &path, - &transformations); + executeTransformation(a, &value, trans, &ret, &path); } if (a->m_isNone) { none--; @@ -451,9 +438,7 @@ void RuleWithActions::executeTransformations( } Transformation *a = dynamic_cast(b.second.get()); if (none == 0) { - Transformation *t = dynamic_cast(a); - executeTransformation(t, &value, trans, &ret, &path, - &transformations); + executeTransformation(a, &value, trans, &ret, &path); } if (a->m_isNone) { none--; @@ -489,42 +474,6 @@ bool RuleWithActions::containsMsg(const std::string& name, Transaction *t) { } -std::vector RuleWithActions::getActionsByName(const std::string& name, - Transaction *trans) { - std::vector ret; - for (auto &z : getMatchActionsPtr()) { - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - for (auto &z : getTransformationPtr()) { - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - for (auto &b : - trans->m_rules->m_exceptions.m_action_pre_update_target_by_id) { - if (m_ruleId != b.first) { - continue; - } - actions::Action *z = dynamic_cast(b.second.get()); - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - for (auto &b : - trans->m_rules->m_exceptions.m_action_pos_update_target_by_id) { - if (m_ruleId != b.first) { - continue; - } - actions::Action *z = dynamic_cast(b.second.get()); - if (*z->m_name.get() == name) { - ret.push_back(z); - } - } - return ret; -} - std::string RuleWithActions::getLogData(Transaction *t) { return m_logData->data(t); } std::string RuleWithActions::getMessage(Transaction *t) { return m_msg->data(t); } diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index aeb740e8d4..a58d00ee52 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -150,7 +150,7 @@ void RuleWithOperator::getVariablesExceptions(Transaction *t, } for (auto &a : t->m_rules->m_exceptions.m_variable_update_target_by_id) { - if (m_ruleId != a.first) { + if (getId() != a.first) { continue; } Variable *b = a.second.get(); @@ -178,7 +178,7 @@ inline void RuleWithOperator::getFinalVars(variables::Variables *vars, if (std::find_if(trans->m_ruleRemoveTargetById.begin(), trans->m_ruleRemoveTargetById.end(), [&, variable, this](std::pair &m) -> bool { - return m.first == m_ruleId + return m.first == getId() && m.second == *variable->m_fullName.get(); }) != trans->m_ruleRemoveTargetById.end()) { continue; @@ -216,18 +216,18 @@ bool RuleWithOperator::evaluate(Transaction *trans) { // FIXME: Make a class runTimeException to handle this cases. for (auto &i : trans->m_ruleRemoveById) { - if (m_ruleId != i) { + if (getId() != i) { continue; } - ms_dbg_a(trans, 9, "Rule id: " + std::to_string(m_ruleId) + + ms_dbg_a(trans, 9, "Rule id: " + std::to_string(getId()) + " was skipped due to a ruleRemoveById action..."); return true; } for (auto &i : trans->m_ruleRemoveByIdRange) { - if (!(i.first <= m_ruleId && i.second >= m_ruleId)) { + if (!(i.first <= getId() && i.second >= getId())) { continue; } - ms_dbg_a(trans, 9, "Rule id: " + std::to_string(m_ruleId) + + ms_dbg_a(trans, 9, "Rule id: " + std::to_string(getId()) + " was skipped due to a ruleRemoveById action..."); return true; } @@ -241,14 +241,15 @@ bool RuleWithOperator::evaluate(Transaction *trans) { } else { eparam = "\"" + eparam + "\""; } - ms_dbg_a(trans, 4, "(Rule: " + std::to_string(m_ruleId) \ + ms_dbg_a(trans, 4, "(Rule: " + std::to_string(getId()) \ + ") Executing operator \"" + getOperatorName() \ + "\" with param " \ + eparam \ + " against " \ + variables + "."); } else { - ms_dbg_a(trans, 4, "(Rule: " + std::to_string(m_ruleId) \ + ms_dbg_a(trans, 4, "(Rule: " + std::to_string(getId() +) \ + ") Executing operator \"" + getOperatorName() \ + " against " \ + variables + "."); @@ -271,7 +272,7 @@ bool RuleWithOperator::evaluate(Transaction *trans) { std::find_if(trans->m_ruleRemoveTargetById.begin(), trans->m_ruleRemoveTargetById.end(), [&, v, this](std::pair &m) -> bool { - return m.first == m_ruleId && m.second == v->getKeyWithCollection(); + return m.first == getId() && m.second == v->getKeyWithCollection(); }) != trans->m_ruleRemoveTargetById.end() ) { delete v; @@ -311,8 +312,7 @@ bool RuleWithOperator::evaluate(Transaction *trans) { trans->messageGetLast()->m_reference.append(*valueTemp.second); updateMatchedVars(trans, key, valueAfterTrans); - executeActionsIndependentOfChainedRuleResult(trans, - &containsBlock); + executeActionsIndependentOfChainedRuleResult(trans); globalRet = true; } @@ -336,14 +336,14 @@ bool RuleWithOperator::evaluate(Transaction *trans) { } /* FIXME: this check should happens on the parser. */ - if (this->m_chainedRuleChild == nullptr) { + if (getChainedNext() == nullptr) { ms_dbg_a(trans, 4, "Rule is marked as chained but there " \ "isn't a subsequent rule."); goto end_clean; } ms_dbg_a(trans, 4, "Executing chained rule."); - recursiveGlobalRet = m_chainedRuleChild->evaluate(trans); + recursiveGlobalRet = getChainedNext()->evaluate(trans); if (recursiveGlobalRet == true) { goto end_exec; @@ -353,7 +353,7 @@ bool RuleWithOperator::evaluate(Transaction *trans) { return false; end_exec: - executeActionsAfterFullMatch(trans, containsBlock); + executeActionsAfterFullMatch(trans); /* last rule in the chain. */ trans->logMatchLastRuleOnTheChain(this); diff --git a/src/rules_set.cc b/src/rules_set.cc index cfc5a1e66b..b905ffa69d 100644 --- a/src/rules_set.cc +++ b/src/rules_set.cc @@ -198,7 +198,7 @@ int RulesSet::evaluate(int phase, Transaction *t) { Rule *base = rule.get(); RuleWithActions *ruleWithActions = dynamic_cast(base); // FIXME: Those should be treated inside the rule itself - if (ruleWithActions && m_exceptions.contains(ruleWithActions->m_ruleId)) { + if (ruleWithActions && m_exceptions.contains(ruleWithActions->getId())) { ms_dbg_a(t, 9, "Skipped rule id '" + rule->getReference() \ + "'. Removed by an SecRuleRemove directive."); continue; diff --git a/src/rules_set_phases.cc b/src/rules_set_phases.cc index e962945e3d..858da7268f 100644 --- a/src/rules_set_phases.cc +++ b/src/rules_set_phases.cc @@ -50,7 +50,7 @@ int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { if (!rule_ckc) { continue; } - v.push_back(rule_ckc->m_ruleId); + v.push_back(rule_ckc->getId()); } } std::sort (v.begin(), v.end()); diff --git a/src/variables/rule.h b/src/variables/rule.h index 9667d24a8f..a29cf54f3e 100644 --- a/src/variables/rule.h +++ b/src/variables/rule.h @@ -42,11 +42,11 @@ class Rule_DictElement : public VariableDictElement { \ std::vector *l) { RuleWithActions *r = rule; - if (!r || r->m_ruleId == 0) { + if (!r || r->getId() == 0) { return; } std::unique_ptr origin(new VariableOrigin()); - std::string *a = new std::string(std::to_string(r->m_ruleId)); + std::string *a = new std::string(std::to_string(r->getId())); VariableValue *var = new VariableValue(&m_rule, &m_rule_id, a ); diff --git a/src/variables/xml.cc b/src/variables/xml.cc index 9b3d8ff96e..9694b9e3b3 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -89,9 +89,8 @@ void XML::evaluate(Transaction *t, if (rule == NULL) { ms_dbg_a(t, 2, "XML: Can't look for xmlns, internal error."); } else { - std::vector acts = rule->getActionsByName("xmlns", t); - for (auto &x : acts) { - actions::XmlNS *z = (actions::XmlNS *)x; + std::vector acts = rule->getXmlNSsPtr(); + for (auto &z : acts) { if (xmlXPathRegisterNs(xpathCtx, (const xmlChar*)z->m_scope.c_str(), (const xmlChar*)z->m_href.c_str()) != 0) { ms_dbg_a(t, 1, "Failed to register XML namespace href \"" + \ diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index 66cd89b02b..ec5037d0e0 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -76,3 +76,7 @@ purgedConfiguration // Examples memleak:examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h:147 memleak:examples/using_bodies_in_chunks/simple_request.cc + + +// others +uninitDerivedMemberVar \ No newline at end of file diff --git a/test/test-cases/regression/actions.json b/test/test-cases/regression/actions.json index c69f1a7cb0..daa93c844e 100644 --- a/test/test-cases/regression/actions.json +++ b/test/test-cases/regression/actions.json @@ -49,7 +49,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 403 }, @@ -109,7 +109,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 302, "redirect_url": "http://www.google.com" @@ -169,7 +169,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 306, "redirect_url": "http://www.google.com" @@ -229,7 +229,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 500 }, @@ -288,7 +288,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 500 }, @@ -347,7 +347,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 500 }, diff --git a/test/test-cases/regression/auditlog.json b/test/test-cases/regression/auditlog.json index 33b6110111..860ba0ef2b 100644 --- a/test/test-cases/regression/auditlog.json +++ b/test/test-cases/regression/auditlog.json @@ -40,7 +40,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 403 }, @@ -97,7 +97,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 403 }, @@ -155,7 +155,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", + "debug_log": "\\[9\\] Transformation t:trim: \"test", "error_log": "", "http_code": 403 }, diff --git a/test/test-cases/regression/collection-regular_expression_selection.json b/test/test-cases/regression/collection-regular_expression_selection.json index cde06ac767..79f772b80b 100644 --- a/test/test-cases/regression/collection-regular_expression_selection.json +++ b/test/test-cases/regression/collection-regular_expression_selection.json @@ -48,7 +48,7 @@ }, "expected":{ "audit_log":"", - "debug_log":"T \\(0\\) t:lowercase: \"test2\"", + "debug_log":"Transformation t:lowercase: \"test2\"", "error_log":"" }, "rules":[ diff --git a/test/test-cases/regression/config-response_type.json b/test/test-cases/regression/config-response_type.json index 621ab38a20..c4ea1c4970 100644 --- a/test/test-cases/regression/config-response_type.json +++ b/test/test-cases/regression/config-response_type.json @@ -31,7 +31,7 @@ ] }, "expected":{ - "debug_log":"T \\(0\\) t:trim: \"no need.\"" + "debug_log":"Transformation t:trim: \"no need.\"" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/variable-FILES.json b/test/test-cases/regression/variable-FILES.json index 7f0f4dcf56..d7fd457e33 100644 --- a/test/test-cases/regression/variable-FILES.json +++ b/test/test-cases/regression/variable-FILES.json @@ -51,7 +51,7 @@ ] }, "expected":{ - "debug_log":"T \\(0\\) t:trim: \"small_text_file" + "debug_log":"Transformation t:trim: \"small_text_file" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/variable-FILES_NAMES.json b/test/test-cases/regression/variable-FILES_NAMES.json index fcf95ed972..48c6dc2193 100644 --- a/test/test-cases/regression/variable-FILES_NAMES.json +++ b/test/test-cases/regression/variable-FILES_NAMES.json @@ -51,7 +51,7 @@ ] }, "expected":{ - "debug_log":"T \\(0\\) t:trim: \"filedata" + "debug_log":"Transformation t:trim: \"filedata" }, "rules":[ "SecRuleEngine On", From 81b98f3e0c352de5db116bdae0adf8ea26c147d9 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Mon, 25 Feb 2019 21:47:51 -0300 Subject: [PATCH 07/16] Refactoring: rename evaluate to execute on actions --- headers/modsecurity/actions/action.h | 8 +- src/actions/accuracy.cc | 3 +- src/actions/accuracy.h | 2 +- src/actions/action.cc | 4 +- src/actions/audit_log.cc | 2 +- src/actions/audit_log.h | 2 +- src/actions/block.cc | 2 +- src/actions/block.h | 2 +- src/actions/capture.cc | 2 +- src/actions/capture.h | 2 +- src/actions/chain.cc | 2 +- src/actions/chain.h | 2 +- src/actions/ctl/audit_log_parts.cc | 2 +- src/actions/ctl/audit_log_parts.h | 2 +- src/actions/ctl/request_body_access.cc | 2 +- src/actions/ctl/request_body_access.h | 2 +- .../ctl/request_body_processor_json.cc | 2 +- src/actions/ctl/request_body_processor_json.h | 2 +- .../ctl/request_body_processor_urlencoded.cc | 2 +- .../ctl/request_body_processor_urlencoded.h | 2 +- src/actions/ctl/request_body_processor_xml.cc | 2 +- src/actions/ctl/request_body_processor_xml.h | 2 +- src/actions/ctl/rule_engine.cc | 2 +- src/actions/ctl/rule_engine.h | 2 +- src/actions/ctl/rule_remove_by_id.cc | 2 +- src/actions/ctl/rule_remove_by_id.h | 2 +- src/actions/ctl/rule_remove_by_tag.cc | 2 +- src/actions/ctl/rule_remove_by_tag.h | 2 +- src/actions/ctl/rule_remove_target_by_id.cc | 2 +- src/actions/ctl/rule_remove_target_by_id.h | 2 +- src/actions/ctl/rule_remove_target_by_tag.cc | 2 +- src/actions/ctl/rule_remove_target_by_tag.h | 2 +- src/actions/data/status.cc | 2 +- src/actions/data/status.h | 2 +- src/actions/disruptive/allow.cc | 2 +- src/actions/disruptive/allow.h | 2 +- src/actions/disruptive/deny.cc | 2 +- src/actions/disruptive/deny.h | 2 +- src/actions/disruptive/drop.cc | 2 +- src/actions/disruptive/drop.h | 2 +- src/actions/disruptive/pass.cc | 2 +- src/actions/disruptive/pass.h | 2 +- src/actions/disruptive/redirect.cc | 2 +- src/actions/disruptive/redirect.h | 2 +- src/actions/exec.cc | 2 +- src/actions/exec.h | 2 +- src/actions/init_col.cc | 2 +- src/actions/init_col.h | 2 +- src/actions/log.cc | 2 +- src/actions/log.h | 2 +- src/actions/log_data.cc | 2 +- src/actions/log_data.h | 2 +- src/actions/maturity.cc | 2 +- src/actions/maturity.h | 2 +- src/actions/msg.cc | 2 +- src/actions/msg.h | 2 +- src/actions/multi_match.cc | 2 +- src/actions/multi_match.h | 2 +- src/actions/no_audit_log.cc | 2 +- src/actions/no_audit_log.h | 2 +- src/actions/no_log.cc | 2 +- src/actions/no_log.h | 2 +- src/actions/phase.cc | 2 +- src/actions/phase.h | 2 +- src/actions/rev.cc | 2 +- src/actions/rev.h | 2 +- src/actions/rule_id.cc | 2 +- src/actions/rule_id.h | 2 +- src/actions/set_env.cc | 2 +- src/actions/set_env.h | 2 +- src/actions/set_rsc.cc | 2 +- src/actions/set_rsc.h | 2 +- src/actions/set_sid.cc | 2 +- src/actions/set_sid.h | 2 +- src/actions/set_uid.cc | 2 +- src/actions/set_uid.h | 2 +- src/actions/set_var.cc | 2 +- src/actions/set_var.h | 2 +- src/actions/severity.cc | 2 +- src/actions/severity.h | 2 +- src/actions/skip.cc | 2 +- src/actions/skip.h | 2 +- src/actions/skip_after.cc | 2 +- src/actions/skip_after.h | 2 +- src/actions/tag.cc | 2 +- src/actions/tag.h | 2 +- src/actions/transformations/base64_decode.cc | 2 +- src/actions/transformations/base64_decode.h | 2 +- .../transformations/base64_decode_ext.cc | 2 +- .../transformations/base64_decode_ext.h | 2 +- src/actions/transformations/base64_encode.cc | 2 +- src/actions/transformations/base64_encode.h | 2 +- src/actions/transformations/cmd_line.cc | 2 +- src/actions/transformations/cmd_line.h | 2 +- .../transformations/compress_whitespace.cc | 2 +- .../transformations/compress_whitespace.h | 3 +- src/actions/transformations/css_decode.cc | 2 +- src/actions/transformations/css_decode.h | 2 +- .../transformations/escape_seq_decode.cc | 2 +- .../transformations/escape_seq_decode.h | 4 +- src/actions/transformations/hex_decode.cc | 2 +- src/actions/transformations/hex_decode.h | 2 +- src/actions/transformations/hex_encode.cc | 2 +- src/actions/transformations/hex_encode.h | 3 +- .../transformations/html_entity_decode.cc | 2 +- .../transformations/html_entity_decode.h | 2 +- src/actions/transformations/js_decode.cc | 2 +- src/actions/transformations/js_decode.h | 2 +- src/actions/transformations/length.cc | 2 +- src/actions/transformations/length.h | 3 +- src/actions/transformations/lower_case.cc | 2 +- src/actions/transformations/lower_case.h | 2 +- src/actions/transformations/md5.cc | 2 +- src/actions/transformations/md5.h | 2 +- src/actions/transformations/none.cc | 2 +- src/actions/transformations/none.h | 2 +- src/actions/transformations/normalise_path.cc | 2 +- src/actions/transformations/normalise_path.h | 3 +- .../transformations/normalise_path_win.cc | 2 +- .../transformations/normalise_path_win.h | 2 +- .../transformations/parity_even_7bit.cc | 2 +- .../transformations/parity_even_7bit.h | 2 +- .../transformations/parity_odd_7bit.cc | 2 +- src/actions/transformations/parity_odd_7bit.h | 2 +- .../transformations/parity_zero_7bit.cc | 2 +- .../transformations/parity_zero_7bit.h | 2 +- src/actions/transformations/php_args_names.cc | 3 +- src/actions/transformations/php_args_names.h | 3 +- .../transformations/remove_comments.cc | 2 +- src/actions/transformations/remove_comments.h | 2 +- .../transformations/remove_comments_char.cc | 2 +- .../transformations/remove_comments_char.h | 2 +- src/actions/transformations/remove_nulls.cc | 2 +- src/actions/transformations/remove_nulls.h | 2 +- .../transformations/remove_whitespace.cc | 2 +- .../transformations/remove_whitespace.h | 2 +- .../transformations/replace_comments.cc | 2 +- .../transformations/replace_comments.h | 3 +- src/actions/transformations/replace_nulls.cc | 2 +- src/actions/transformations/replace_nulls.h | 3 +- src/actions/transformations/sha1.cc | 2 +- src/actions/transformations/sha1.h | 3 +- src/actions/transformations/sql_hex_decode.cc | 2 +- src/actions/transformations/sql_hex_decode.h | 2 +- src/actions/transformations/transformation.cc | 2 +- src/actions/transformations/transformation.h | 4 +- src/actions/transformations/trim.cc | 2 +- src/actions/transformations/trim.h | 3 +- src/actions/transformations/trim_left.cc | 2 +- src/actions/transformations/trim_left.h | 2 +- src/actions/transformations/trim_right.cc | 2 +- src/actions/transformations/trim_right.h | 2 +- src/actions/transformations/upper_case.cc | 2 +- src/actions/transformations/upper_case.h | 2 +- src/actions/transformations/url_decode.cc | 2 +- src/actions/transformations/url_decode.h | 3 +- src/actions/transformations/url_decode_uni.cc | 2 +- src/actions/transformations/url_decode_uni.h | 2 +- src/actions/transformations/url_encode.cc | 2 +- src/actions/transformations/url_encode.h | 3 +- .../transformations/utf8_to_unicode.cc | 2 +- src/actions/transformations/utf8_to_unicode.h | 2 +- src/actions/ver.cc | 2 +- src/actions/ver.h | 2 +- src/actions/xmlns.h | 2 +- src/engine/lua.cc | 4 +- src/modsecurity.cc | 2 +- src/rule_with_actions.cc | 28 ++++--- test/fuzzer/afl_fuzzer.cc | 80 +++++++++---------- test/unit/unit.cc | 2 +- 170 files changed, 233 insertions(+), 238 deletions(-) diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index 88508de133..2ce84ac6c7 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -66,12 +66,12 @@ class Action { virtual ~Action() { } - virtual std::string evaluate(const std::string &exp, + virtual std::string execute(const std::string &exp, Transaction *transaction); - virtual bool evaluate(RuleWithActions *rule, Transaction *transaction); - virtual bool evaluate(RuleWithActions *rule, Transaction *transaction, + virtual bool execute(RuleWithActions *rule, Transaction *transaction); + virtual bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &ruleMessage) { - return evaluate(rule, transaction); + return execute(rule, transaction); } virtual bool init(std::string *error) { return true; } virtual bool isDisruptive() { return false; } diff --git a/src/actions/accuracy.cc b/src/actions/accuracy.cc index 152ab05d16..49354780a5 100644 --- a/src/actions/accuracy.cc +++ b/src/actions/accuracy.cc @@ -39,7 +39,8 @@ bool Accuracy::init(std::string *error) { } -bool Accuracy::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Accuracy::execute(RuleWithActions *rule, Transaction *transaction) { + rule->setAccuracy(m_accuracy); return true; } diff --git a/src/actions/accuracy.h b/src/actions/accuracy.h index 0933f4f1e3..1ca9a299dc 100644 --- a/src/actions/accuracy.h +++ b/src/actions/accuracy.h @@ -33,7 +33,7 @@ class Accuracy : public Action { : Action(action, ConfigurationKind), m_accuracy(0) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; int getAccuracy() const { return m_accuracy; } diff --git a/src/actions/action.cc b/src/actions/action.cc index e58e2067e7..d5eb758c71 100644 --- a/src/actions/action.cc +++ b/src/actions/action.cc @@ -45,13 +45,13 @@ namespace modsecurity { namespace actions { -std::string Action::evaluate(const std::string &value, +std::string Action::execute(const std::string &value, Transaction *transaction) { return value; } -bool Action::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Action::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/audit_log.cc b/src/actions/audit_log.cc index 7b64ddcb8b..3d2ae2a625 100644 --- a/src/actions/audit_log.cc +++ b/src/actions/audit_log.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace actions { -bool AuditLog::evaluate(RuleWithActions *rule, Transaction *transaction, +bool AuditLog::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { transaction->messageSetNoAuditLog(false); return true; diff --git a/src/actions/audit_log.h b/src/actions/audit_log.h index 3a81496892..9cbd704c31 100644 --- a/src/actions/audit_log.h +++ b/src/actions/audit_log.h @@ -35,7 +35,7 @@ class AuditLog : public Action { explicit AuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; }; diff --git a/src/actions/block.cc b/src/actions/block.cc index 07d61643ca..01b6c37f07 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -29,7 +29,7 @@ namespace modsecurity { namespace actions { -bool Block::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Block::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { ms_dbg_a(transaction, 8, "Marking request as disruptive."); return true; diff --git a/src/actions/block.h b/src/actions/block.h index b1e479433c..4fe066355a 100644 --- a/src/actions/block.h +++ b/src/actions/block.h @@ -38,7 +38,7 @@ class Block : public Action { Block(const Block &a) = delete; Block &operator=(const Block &a) = delete; - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; }; diff --git a/src/actions/capture.cc b/src/actions/capture.cc index 62b86fc979..68f49b04a0 100644 --- a/src/actions/capture.cc +++ b/src/actions/capture.cc @@ -32,7 +32,7 @@ namespace modsecurity { namespace actions { -bool Capture::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Capture::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/capture.h b/src/actions/capture.h index 33207439c9..d7bd30e054 100644 --- a/src/actions/capture.h +++ b/src/actions/capture.h @@ -31,7 +31,7 @@ class Capture : public Action { explicit Capture(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/chain.cc b/src/actions/chain.cc index dddf8cce8e..d5851e1515 100644 --- a/src/actions/chain.cc +++ b/src/actions/chain.cc @@ -25,7 +25,7 @@ namespace modsecurity { namespace actions { -bool Chain::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Chain::execute(RuleWithActions *rule, Transaction *transaction) { rule->setHasChainAction(true); return true; } diff --git a/src/actions/chain.h b/src/actions/chain.h index c5642baa6e..8de292c076 100644 --- a/src/actions/chain.h +++ b/src/actions/chain.h @@ -35,7 +35,7 @@ class Chain : public Action { explicit Chain(const std::string &action) : Action(action, ConfigurationKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/ctl/audit_log_parts.cc b/src/actions/ctl/audit_log_parts.cc index 8420b4925c..335b2d2178 100644 --- a/src/actions/ctl/audit_log_parts.cc +++ b/src/actions/ctl/audit_log_parts.cc @@ -38,7 +38,7 @@ bool AuditLogParts::init(std::string *error) { return true; } -bool AuditLogParts::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool AuditLogParts::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_auditLogModifier.push_back( std::make_pair(mPartsAction, mParts)); return true; diff --git a/src/actions/ctl/audit_log_parts.h b/src/actions/ctl/audit_log_parts.h index f4980780ef..0e182a3149 100644 --- a/src/actions/ctl/audit_log_parts.h +++ b/src/actions/ctl/audit_log_parts.h @@ -33,7 +33,7 @@ class AuditLogParts : public Action { mPartsAction(0), mParts("") { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; protected: diff --git a/src/actions/ctl/request_body_access.cc b/src/actions/ctl/request_body_access.cc index 0d3415551f..72c5cd6d19 100644 --- a/src/actions/ctl/request_body_access.cc +++ b/src/actions/ctl/request_body_access.cc @@ -42,7 +42,7 @@ bool RequestBodyAccess::init(std::string *error) { return true; } -bool RequestBodyAccess::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RequestBodyAccess::execute(RuleWithActions *rule, Transaction *transaction) { if (m_request_body_access) { transaction->m_requestBodyAccess = RulesSetProperties::TrueConfigBoolean; } else { diff --git a/src/actions/ctl/request_body_access.h b/src/actions/ctl/request_body_access.h index afe3b3d489..a52fa3c95c 100644 --- a/src/actions/ctl/request_body_access.h +++ b/src/actions/ctl/request_body_access.h @@ -34,7 +34,7 @@ class RequestBodyAccess : public Action { m_request_body_access(false) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool m_request_body_access; }; diff --git a/src/actions/ctl/request_body_processor_json.cc b/src/actions/ctl/request_body_processor_json.cc index 5a9593a359..58bf8ec32c 100644 --- a/src/actions/ctl/request_body_processor_json.cc +++ b/src/actions/ctl/request_body_processor_json.cc @@ -25,7 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorJSON::evaluate(RuleWithActions *rule, +bool RequestBodyProcessorJSON::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_requestBodyProcessor = Transaction::JSONRequestBody; transaction->m_variableReqbodyProcessor.set("JSON", diff --git a/src/actions/ctl/request_body_processor_json.h b/src/actions/ctl/request_body_processor_json.h index 48125597e0..1d4d164500 100644 --- a/src/actions/ctl/request_body_processor_json.h +++ b/src/actions/ctl/request_body_processor_json.h @@ -31,7 +31,7 @@ class RequestBodyProcessorJSON : public Action { explicit RequestBodyProcessorJSON(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/ctl/request_body_processor_urlencoded.cc b/src/actions/ctl/request_body_processor_urlencoded.cc index 2fecee79c4..8a8dafd182 100644 --- a/src/actions/ctl/request_body_processor_urlencoded.cc +++ b/src/actions/ctl/request_body_processor_urlencoded.cc @@ -25,7 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorURLENCODED::evaluate(RuleWithActions *rule, +bool RequestBodyProcessorURLENCODED::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_requestBodyType = Transaction::WWWFormUrlEncoded; transaction->m_variableReqbodyProcessor.set("URLENCODED", diff --git a/src/actions/ctl/request_body_processor_urlencoded.h b/src/actions/ctl/request_body_processor_urlencoded.h index 5b5557d431..454212c05b 100644 --- a/src/actions/ctl/request_body_processor_urlencoded.h +++ b/src/actions/ctl/request_body_processor_urlencoded.h @@ -31,7 +31,7 @@ class RequestBodyProcessorURLENCODED : public Action { explicit RequestBodyProcessorURLENCODED(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/ctl/request_body_processor_xml.cc b/src/actions/ctl/request_body_processor_xml.cc index 02c41bb2ba..f45dcf962a 100644 --- a/src/actions/ctl/request_body_processor_xml.cc +++ b/src/actions/ctl/request_body_processor_xml.cc @@ -25,7 +25,7 @@ namespace actions { namespace ctl { -bool RequestBodyProcessorXML::evaluate(RuleWithActions *rule, +bool RequestBodyProcessorXML::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_requestBodyProcessor = Transaction::XMLRequestBody; transaction->m_variableReqbodyProcessor.set("XML", diff --git a/src/actions/ctl/request_body_processor_xml.h b/src/actions/ctl/request_body_processor_xml.h index 9084d1d98a..3be32ccfcd 100644 --- a/src/actions/ctl/request_body_processor_xml.h +++ b/src/actions/ctl/request_body_processor_xml.h @@ -31,7 +31,7 @@ class RequestBodyProcessorXML : public Action { explicit RequestBodyProcessorXML(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/ctl/rule_engine.cc b/src/actions/ctl/rule_engine.cc index 66809f4b1c..a143e68ac4 100644 --- a/src/actions/ctl/rule_engine.cc +++ b/src/actions/ctl/rule_engine.cc @@ -45,7 +45,7 @@ bool RuleEngine::init(std::string *error) { return true; } -bool RuleEngine::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleEngine::execute(RuleWithActions *rule, Transaction *transaction) { std::stringstream a; a << "Setting SecRuleEngine to "; a << modsecurity::RulesSetProperties::ruleEngineStateString(m_ruleEngine); diff --git a/src/actions/ctl/rule_engine.h b/src/actions/ctl/rule_engine.h index fca5d39b16..f9ac4db794 100644 --- a/src/actions/ctl/rule_engine.h +++ b/src/actions/ctl/rule_engine.h @@ -35,7 +35,7 @@ class RuleEngine : public Action { m_ruleEngine(RulesSetProperties::PropertyNotSetRuleEngine) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; RulesSetProperties::RuleEngine m_ruleEngine; }; diff --git a/src/actions/ctl/rule_remove_by_id.cc b/src/actions/ctl/rule_remove_by_id.cc index e76a3119d2..1dc1814a91 100644 --- a/src/actions/ctl/rule_remove_by_id.cc +++ b/src/actions/ctl/rule_remove_by_id.cc @@ -83,7 +83,7 @@ bool RuleRemoveById::init(std::string *error) { return false; } -bool RuleRemoveById::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveById::execute(RuleWithActions *rule, Transaction *transaction) { for (auto &i : m_ids) { transaction->m_ruleRemoveById.push_back(i); } diff --git a/src/actions/ctl/rule_remove_by_id.h b/src/actions/ctl/rule_remove_by_id.h index e0f0902b8a..58ed0519ca 100644 --- a/src/actions/ctl/rule_remove_by_id.h +++ b/src/actions/ctl/rule_remove_by_id.h @@ -33,7 +33,7 @@ class RuleRemoveById : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::list > m_ranges; std::list m_ids; diff --git a/src/actions/ctl/rule_remove_by_tag.cc b/src/actions/ctl/rule_remove_by_tag.cc index 76e7406fc2..e53a6f6d01 100644 --- a/src/actions/ctl/rule_remove_by_tag.cc +++ b/src/actions/ctl/rule_remove_by_tag.cc @@ -32,7 +32,7 @@ bool RuleRemoveByTag::init(std::string *error) { return true; } -bool RuleRemoveByTag::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveByTag::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_ruleRemoveByTag.push_back(m_tag); return true; } diff --git a/src/actions/ctl/rule_remove_by_tag.h b/src/actions/ctl/rule_remove_by_tag.h index 5689b7b166..35015eab7f 100644 --- a/src/actions/ctl/rule_remove_by_tag.h +++ b/src/actions/ctl/rule_remove_by_tag.h @@ -34,7 +34,7 @@ class RuleRemoveByTag : public Action { m_tag("") { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string m_tag; }; diff --git a/src/actions/ctl/rule_remove_target_by_id.cc b/src/actions/ctl/rule_remove_target_by_id.cc index 0776e34486..1eb668d6cb 100644 --- a/src/actions/ctl/rule_remove_target_by_id.cc +++ b/src/actions/ctl/rule_remove_target_by_id.cc @@ -51,7 +51,7 @@ bool RuleRemoveTargetById::init(std::string *error) { return true; } -bool RuleRemoveTargetById::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveTargetById::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_ruleRemoveTargetById.push_back( std::make_pair(m_id, m_target)); return true; diff --git a/src/actions/ctl/rule_remove_target_by_id.h b/src/actions/ctl/rule_remove_target_by_id.h index d71e4fc215..01a74907d8 100644 --- a/src/actions/ctl/rule_remove_target_by_id.h +++ b/src/actions/ctl/rule_remove_target_by_id.h @@ -35,7 +35,7 @@ class RuleRemoveTargetById : public Action { m_target("") { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_id; std::string m_target; diff --git a/src/actions/ctl/rule_remove_target_by_tag.cc b/src/actions/ctl/rule_remove_target_by_tag.cc index 1be6603fd8..5285b1619a 100644 --- a/src/actions/ctl/rule_remove_target_by_tag.cc +++ b/src/actions/ctl/rule_remove_target_by_tag.cc @@ -44,7 +44,7 @@ bool RuleRemoveTargetByTag::init(std::string *error) { return true; } -bool RuleRemoveTargetByTag::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleRemoveTargetByTag::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_ruleRemoveTargetByTag.push_back( std::make_pair(m_tag, m_target)); return true; diff --git a/src/actions/ctl/rule_remove_target_by_tag.h b/src/actions/ctl/rule_remove_target_by_tag.h index 7863e5a521..223816e147 100644 --- a/src/actions/ctl/rule_remove_target_by_tag.h +++ b/src/actions/ctl/rule_remove_target_by_tag.h @@ -33,7 +33,7 @@ class RuleRemoveTargetByTag : public Action { : Action(action, RunTimeOnlyIfMatchKind) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string m_tag; std::string m_target; diff --git a/src/actions/data/status.cc b/src/actions/data/status.cc index 5c2b862759..9d6d0b8c78 100644 --- a/src/actions/data/status.cc +++ b/src/actions/data/status.cc @@ -38,7 +38,7 @@ bool Status::init(std::string *error) { } -bool Status::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Status::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { transaction->m_it.status = m_status; return true; diff --git a/src/actions/data/status.h b/src/actions/data/status.h index b61b4a2ac2..4634e4b0d4 100644 --- a/src/actions/data/status.h +++ b/src/actions/data/status.h @@ -37,7 +37,7 @@ class Status : public Action { m_status(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; int m_status; diff --git a/src/actions/disruptive/allow.cc b/src/actions/disruptive/allow.cc index 59e17374a1..5f689a80e6 100644 --- a/src/actions/disruptive/allow.cc +++ b/src/actions/disruptive/allow.cc @@ -49,7 +49,7 @@ bool Allow::init(std::string *error) { } -bool Allow::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Allow::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 4, "Dropping the evaluation of upcoming rules " \ "in favor of an `allow' action of type: " \ + allowTypeToName(m_allowType)); diff --git a/src/actions/disruptive/allow.h b/src/actions/disruptive/allow.h index d9a716cec7..84d09e21ae 100644 --- a/src/actions/disruptive/allow.h +++ b/src/actions/disruptive/allow.h @@ -59,7 +59,7 @@ class Allow : public Action { bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } AllowType m_allowType; diff --git a/src/actions/disruptive/deny.cc b/src/actions/disruptive/deny.cc index 6dfe4245fe..1ce9b947e8 100644 --- a/src/actions/disruptive/deny.cc +++ b/src/actions/disruptive/deny.cc @@ -28,7 +28,7 @@ namespace actions { namespace disruptive { -bool Deny::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Deny::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { ms_dbg_a(transaction, 8, "Running action deny"); diff --git a/src/actions/disruptive/deny.h b/src/actions/disruptive/deny.h index a11d41bb27..db8c5e0ae4 100644 --- a/src/actions/disruptive/deny.h +++ b/src/actions/disruptive/deny.h @@ -33,7 +33,7 @@ class Deny : public Action { public: explicit Deny(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/drop.cc b/src/actions/disruptive/drop.cc index 5c7b04565d..a53cfa5bbd 100644 --- a/src/actions/disruptive/drop.cc +++ b/src/actions/disruptive/drop.cc @@ -32,7 +32,7 @@ namespace actions { namespace disruptive { -bool Drop::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Drop::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { ms_dbg_a(transaction, 8, "Running action drop " \ "[executing deny instead of drop.]"); diff --git a/src/actions/disruptive/drop.h b/src/actions/disruptive/drop.h index ebfc853b16..d25952a58d 100644 --- a/src/actions/disruptive/drop.h +++ b/src/actions/disruptive/drop.h @@ -32,7 +32,7 @@ class Drop : public Action { public: explicit Drop(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/pass.cc b/src/actions/disruptive/pass.cc index 2334ce2101..fd26f52a5e 100644 --- a/src/actions/disruptive/pass.cc +++ b/src/actions/disruptive/pass.cc @@ -29,7 +29,7 @@ namespace actions { namespace disruptive { -bool Pass::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Pass::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { intervention::free(&transaction->m_it); intervention::reset(&transaction->m_it); diff --git a/src/actions/disruptive/pass.h b/src/actions/disruptive/pass.h index 3abbe03f98..ba1f4d09bc 100644 --- a/src/actions/disruptive/pass.h +++ b/src/actions/disruptive/pass.h @@ -31,7 +31,7 @@ class Pass : public Action { public: explicit Pass(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/redirect.cc b/src/actions/disruptive/redirect.cc index ef3a3a433e..4d1f901b15 100644 --- a/src/actions/disruptive/redirect.cc +++ b/src/actions/disruptive/redirect.cc @@ -34,7 +34,7 @@ bool Redirect::init(std::string *error) { } -bool Redirect::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Redirect::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { std::string m_urlExpanded(m_string->evaluate(transaction)); /* if it was changed before, lets keep it. */ diff --git a/src/actions/disruptive/redirect.h b/src/actions/disruptive/redirect.h index 50022d0a7f..a7719b9999 100644 --- a/src/actions/disruptive/redirect.h +++ b/src/actions/disruptive/redirect.h @@ -46,7 +46,7 @@ class Redirect : public Action { m_status(0), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; bool init(std::string *error) override; bool isDisruptive() override { return true; } diff --git a/src/actions/exec.cc b/src/actions/exec.cc index 8ed21d73ea..ab2dd041d8 100644 --- a/src/actions/exec.cc +++ b/src/actions/exec.cc @@ -49,7 +49,7 @@ bool Exec::init(std::string *error) { } -bool Exec::evaluate(RuleWithActions *rule, Transaction *t) { +bool Exec::execute(RuleWithActions *rule, Transaction *t) { ms_dbg_a(t, 8, "Running script... " + m_script); m_lua.run(t); return true; diff --git a/src/actions/exec.h b/src/actions/exec.h index f899982182..f12ed2d5d2 100644 --- a/src/actions/exec.h +++ b/src/actions/exec.h @@ -36,7 +36,7 @@ class Exec : public Action { ~Exec() { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/init_col.cc b/src/actions/init_col.cc index fe80068c58..38021982bf 100644 --- a/src/actions/init_col.cc +++ b/src/actions/init_col.cc @@ -54,7 +54,7 @@ bool InitCol::init(std::string *error) { } -bool InitCol::evaluate(RuleWithActions *rule, Transaction *t) { +bool InitCol::execute(RuleWithActions *rule, Transaction *t) { std::string collectionName(m_string->evaluate(t)); if (m_collection_key == "ip") { diff --git a/src/actions/init_col.h b/src/actions/init_col.h index 5cd2f8bc5c..4da8b31f0f 100644 --- a/src/actions/init_col.h +++ b/src/actions/init_col.h @@ -38,7 +38,7 @@ class InitCol : public Action { : Action(action, RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: std::string m_collection_key; diff --git a/src/actions/log.cc b/src/actions/log.cc index 137a00d351..84a788d2bf 100644 --- a/src/actions/log.cc +++ b/src/actions/log.cc @@ -28,7 +28,7 @@ namespace modsecurity { namespace actions { -bool Log::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Log::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { return true; } diff --git a/src/actions/log.h b/src/actions/log.h index d6d5e46d41..edbe0b77b4 100644 --- a/src/actions/log.h +++ b/src/actions/log.h @@ -33,7 +33,7 @@ class Log : public Action { explicit Log(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; }; diff --git a/src/actions/log_data.cc b/src/actions/log_data.cc index 82549a3de1..6e1dc8f2e0 100644 --- a/src/actions/log_data.cc +++ b/src/actions/log_data.cc @@ -29,7 +29,7 @@ namespace modsecurity { namespace actions { -bool LogData::evaluate(RuleWithActions *rule, Transaction *transaction, +bool LogData::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { rm.m_data = data(transaction); diff --git a/src/actions/log_data.h b/src/actions/log_data.h index 44afb773d3..d5bb6cbdd4 100644 --- a/src/actions/log_data.h +++ b/src/actions/log_data.h @@ -39,7 +39,7 @@ class LogData : public Action { : Action("logdata", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; std::string data(Transaction *Transaction); diff --git a/src/actions/maturity.cc b/src/actions/maturity.cc index c125641a98..bd5c278591 100644 --- a/src/actions/maturity.cc +++ b/src/actions/maturity.cc @@ -39,7 +39,7 @@ bool Maturity::init(std::string *error) { } -bool Maturity::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Maturity::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/maturity.h b/src/actions/maturity.h index 1fe13533c1..3f77c2c18e 100644 --- a/src/actions/maturity.h +++ b/src/actions/maturity.h @@ -33,7 +33,7 @@ class Maturity : public Action { : Action(action, ConfigurationKind), m_maturity(0) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; int getMaturity() const { return m_maturity; } diff --git a/src/actions/msg.cc b/src/actions/msg.cc index 1cf0dfe754..b0cd98de0b 100644 --- a/src/actions/msg.cc +++ b/src/actions/msg.cc @@ -46,7 +46,7 @@ namespace modsecurity { namespace actions { -bool Msg::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Msg::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { std::string msg = data(transaction); rm.m_message = msg; diff --git a/src/actions/msg.h b/src/actions/msg.h index ddc67f738f..a2e200ed16 100644 --- a/src/actions/msg.h +++ b/src/actions/msg.h @@ -40,7 +40,7 @@ class Msg : public Action { : Action("msg", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; std::string data(Transaction *Transaction); diff --git a/src/actions/multi_match.cc b/src/actions/multi_match.cc index fb30f15516..3f6381ab99 100644 --- a/src/actions/multi_match.cc +++ b/src/actions/multi_match.cc @@ -25,7 +25,7 @@ namespace modsecurity { namespace actions { -bool MultiMatch::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool MultiMatch::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/multi_match.h b/src/actions/multi_match.h index b0fd2c767e..14a1751bdd 100644 --- a/src/actions/multi_match.h +++ b/src/actions/multi_match.h @@ -35,7 +35,7 @@ class MultiMatch : public Action { explicit MultiMatch(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/no_audit_log.cc b/src/actions/no_audit_log.cc index 8f7f538812..0e295ff8c0 100644 --- a/src/actions/no_audit_log.cc +++ b/src/actions/no_audit_log.cc @@ -26,7 +26,7 @@ namespace modsecurity { namespace actions { -bool NoAuditLog::evaluate(RuleWithActions *rule, Transaction *transaction, +bool NoAuditLog::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { transaction->messageSetNoAuditLog(true); return true; diff --git a/src/actions/no_audit_log.h b/src/actions/no_audit_log.h index 337e76f1f8..4b01dc743a 100644 --- a/src/actions/no_audit_log.h +++ b/src/actions/no_audit_log.h @@ -35,7 +35,7 @@ class NoAuditLog : public Action { explicit NoAuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; }; diff --git a/src/actions/no_log.cc b/src/actions/no_log.cc index 496e151554..c01a696f84 100644 --- a/src/actions/no_log.cc +++ b/src/actions/no_log.cc @@ -29,7 +29,7 @@ namespace modsecurity { namespace actions { -bool NoLog::evaluate(RuleWithActions *rule, Transaction *transaction, +bool NoLog::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { return true; } diff --git a/src/actions/no_log.h b/src/actions/no_log.h index 0d2f745deb..e6bc673cdd 100644 --- a/src/actions/no_log.h +++ b/src/actions/no_log.h @@ -33,7 +33,7 @@ class NoLog : public Action { explicit NoLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; }; diff --git a/src/actions/phase.cc b/src/actions/phase.cc index 2e9e727786..2fcc655edd 100644 --- a/src/actions/phase.cc +++ b/src/actions/phase.cc @@ -72,7 +72,7 @@ bool Phase::init(std::string *error) { } -bool Phase::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Phase::execute(RuleWithActions *rule, Transaction *transaction) { rule->setPhase(m_phase); return true; } diff --git a/src/actions/phase.h b/src/actions/phase.h index 0fada3c3c5..056d55deba 100644 --- a/src/actions/phase.h +++ b/src/actions/phase.h @@ -37,7 +37,7 @@ class Phase : public Action { m_secRulesPhase(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_phase; int m_secRulesPhase; diff --git a/src/actions/rev.cc b/src/actions/rev.cc index 400b31c354..54a74d4fe2 100644 --- a/src/actions/rev.cc +++ b/src/actions/rev.cc @@ -33,7 +33,7 @@ bool Rev::init(std::string *error) { } -bool Rev::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Rev::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/rev.h b/src/actions/rev.h index a5c95258ae..1556d76989 100644 --- a/src/actions/rev.h +++ b/src/actions/rev.h @@ -31,7 +31,7 @@ class Rev : public Action { public: explicit Rev(const std::string &action) : Action(action, ConfigurationKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; std::string getRevision() const { return m_rev; } diff --git a/src/actions/rule_id.cc b/src/actions/rule_id.cc index 5520ab782f..09a8616844 100644 --- a/src/actions/rule_id.cc +++ b/src/actions/rule_id.cc @@ -48,7 +48,7 @@ bool RuleId::init(std::string *error) { } -bool RuleId::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool RuleId::execute(RuleWithActions *rule, Transaction *transaction) { rule->setId(m_ruleId); return true; } diff --git a/src/actions/rule_id.h b/src/actions/rule_id.h index 2e26f87f52..4b5e2d0707 100644 --- a/src/actions/rule_id.h +++ b/src/actions/rule_id.h @@ -37,7 +37,7 @@ class RuleId : public Action { m_ruleId(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; private: double m_ruleId; diff --git a/src/actions/set_env.cc b/src/actions/set_env.cc index f3fcc104b0..ea58cdab13 100644 --- a/src/actions/set_env.cc +++ b/src/actions/set_env.cc @@ -31,7 +31,7 @@ bool SetENV::init(std::string *error) { } -bool SetENV::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetENV::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); auto pair = utils::string::ssplit_pair(colNameExpanded, '='); diff --git a/src/actions/set_env.h b/src/actions/set_env.h index d5284d42b4..7622e22fd4 100644 --- a/src/actions/set_env.h +++ b/src/actions/set_env.h @@ -39,7 +39,7 @@ class SetENV : public Action { : Action("setenv", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/set_rsc.cc b/src/actions/set_rsc.cc index 8464a9b688..e6bace3c72 100644 --- a/src/actions/set_rsc.cc +++ b/src/actions/set_rsc.cc @@ -31,7 +31,7 @@ bool SetRSC::init(std::string *error) { } -bool SetRSC::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetRSC::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); ms_dbg_a(t, 8, "RESOURCE initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_rsc.h b/src/actions/set_rsc.h index 41094f0e1c..d169c7cd24 100644 --- a/src/actions/set_rsc.h +++ b/src/actions/set_rsc.h @@ -39,7 +39,7 @@ class SetRSC : public Action { : Action("setsrc", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/set_sid.cc b/src/actions/set_sid.cc index c7a0db687a..2582cce13d 100644 --- a/src/actions/set_sid.cc +++ b/src/actions/set_sid.cc @@ -31,7 +31,7 @@ bool SetSID::init(std::string *error) { } -bool SetSID::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetSID::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); ms_dbg_a(t, 8, "Session ID initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_sid.h b/src/actions/set_sid.h index 78a2911a7a..dd9d108551 100644 --- a/src/actions/set_sid.h +++ b/src/actions/set_sid.h @@ -39,7 +39,7 @@ class SetSID : public Action { : Action("setsid", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/set_uid.cc b/src/actions/set_uid.cc index 997df77b63..9ce487b175 100644 --- a/src/actions/set_uid.cc +++ b/src/actions/set_uid.cc @@ -31,7 +31,7 @@ bool SetUID::init(std::string *error) { } -bool SetUID::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetUID::execute(RuleWithActions *rule, Transaction *t) { std::string colNameExpanded(m_string->evaluate(t)); ms_dbg_a(t, 8, "User collection initiated with value: \'" + colNameExpanded + "\'."); diff --git a/src/actions/set_uid.h b/src/actions/set_uid.h index 5cc96c6b25..7e3cdedc24 100644 --- a/src/actions/set_uid.h +++ b/src/actions/set_uid.h @@ -39,7 +39,7 @@ class SetUID : public Action { : Action("setuid", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/set_var.cc b/src/actions/set_var.cc index 6befdf0ccb..5ada6233c8 100644 --- a/src/actions/set_var.cc +++ b/src/actions/set_var.cc @@ -40,7 +40,7 @@ bool SetVar::init(std::string *error) { } -bool SetVar::evaluate(RuleWithActions *rule, Transaction *t) { +bool SetVar::execute(RuleWithActions *rule, Transaction *t) { std::string targetValue; std::string resolvedPre; diff --git a/src/actions/set_var.h b/src/actions/set_var.h index 51f596b481..7687d96d9a 100644 --- a/src/actions/set_var.h +++ b/src/actions/set_var.h @@ -58,7 +58,7 @@ class SetVar : public Action { m_operation(operation), m_variable(std::move(variable)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; private: diff --git a/src/actions/severity.cc b/src/actions/severity.cc index e1bc8239c5..297573c881 100644 --- a/src/actions/severity.cc +++ b/src/actions/severity.cc @@ -71,7 +71,7 @@ bool Severity::init(std::string *error) { } -bool Severity::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Severity::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { return true; } diff --git a/src/actions/severity.h b/src/actions/severity.h index eb3f0adadc..c9c656cbbb 100644 --- a/src/actions/severity.h +++ b/src/actions/severity.h @@ -35,7 +35,7 @@ class Severity : public Action { : Action(action), m_severity(0) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; bool init(std::string *error) override; diff --git a/src/actions/skip.cc b/src/actions/skip.cc index fd2abfe219..441b34f83d 100644 --- a/src/actions/skip.cc +++ b/src/actions/skip.cc @@ -38,7 +38,7 @@ bool Skip::init(std::string *error) { } -bool Skip::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Skip::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 5, "Skipping the next " + \ std::to_string(m_skip_next) + " rules."); diff --git a/src/actions/skip.h b/src/actions/skip.h index 71e5d7aa05..aaf356be27 100644 --- a/src/actions/skip.h +++ b/src/actions/skip.h @@ -34,7 +34,7 @@ class Skip : public Action { m_skip_next(0) { } bool init(std::string *error) override; - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_skip_next; }; diff --git a/src/actions/skip_after.cc b/src/actions/skip_after.cc index 64cccb48d0..a9fabc3d35 100644 --- a/src/actions/skip_after.cc +++ b/src/actions/skip_after.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace actions { -bool SkipAfter::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool SkipAfter::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 5, "Setting skipAfter for: " + *m_skipName); transaction->addMarker(m_skipName); return true; diff --git a/src/actions/skip_after.h b/src/actions/skip_after.h index f7e0680d72..ba9e12e9fb 100644 --- a/src/actions/skip_after.h +++ b/src/actions/skip_after.h @@ -34,7 +34,7 @@ class SkipAfter : public Action { : Action(action, RunTimeOnlyIfMatchKind), m_skipName(std::make_shared(m_parser_payload)) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; private: std::shared_ptr m_skipName; }; diff --git a/src/actions/tag.cc b/src/actions/tag.cc index 04d36afde4..e001280868 100644 --- a/src/actions/tag.cc +++ b/src/actions/tag.cc @@ -57,7 +57,7 @@ std::string Tag::getName(Transaction *transaction) { } -bool Tag::evaluate(RuleWithActions *rule, Transaction *transaction, +bool Tag::execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) { std::string tag = getName(transaction); ms_dbg_a(transaction, 9, "Rule tag: " + tag); diff --git a/src/actions/tag.h b/src/actions/tag.h index 38b069280f..e0af10128b 100644 --- a/src/actions/tag.h +++ b/src/actions/tag.h @@ -38,7 +38,7 @@ class Tag : public Action { std::string getName(Transaction *transaction); - bool evaluate(RuleWithActions *rule, Transaction *transaction, + bool execute(RuleWithActions *rule, Transaction *transaction, RuleMessage &rm) override; protected: diff --git a/src/actions/transformations/base64_decode.cc b/src/actions/transformations/base64_decode.cc index 8ddfe23525..282b619290 100644 --- a/src/actions/transformations/base64_decode.cc +++ b/src/actions/transformations/base64_decode.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string Base64Decode::evaluate(const std::string &value, +std::string Base64Decode::execute(const std::string &value, Transaction *transaction) { std::string ret = Utils::Base64::decode(value); diff --git a/src/actions/transformations/base64_decode.h b/src/actions/transformations/base64_decode.h index a82276990b..3a240b0839 100644 --- a/src/actions/transformations/base64_decode.h +++ b/src/actions/transformations/base64_decode.h @@ -32,7 +32,7 @@ class Base64Decode : public Transformation { public: explicit Base64Decode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/base64_decode_ext.cc b/src/actions/transformations/base64_decode_ext.cc index ee8e4b5b2c..c66353a36a 100644 --- a/src/actions/transformations/base64_decode_ext.cc +++ b/src/actions/transformations/base64_decode_ext.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string Base64DecodeExt::evaluate(const std::string &value, +std::string Base64DecodeExt::execute(const std::string &value, Transaction *transaction) { std::string ret = Utils::Base64::decode_forgiven(value); diff --git a/src/actions/transformations/base64_decode_ext.h b/src/actions/transformations/base64_decode_ext.h index ad0efbdc0e..0aa6428647 100644 --- a/src/actions/transformations/base64_decode_ext.h +++ b/src/actions/transformations/base64_decode_ext.h @@ -32,7 +32,7 @@ class Base64DecodeExt : public Transformation { public: explicit Base64DecodeExt(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/base64_encode.cc b/src/actions/transformations/base64_encode.cc index 8be748033c..3118544b19 100644 --- a/src/actions/transformations/base64_encode.cc +++ b/src/actions/transformations/base64_encode.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string Base64Encode::evaluate(const std::string &value, +std::string Base64Encode::execute(const std::string &value, Transaction *transaction) { std::string ret = Utils::Base64::encode(value); diff --git a/src/actions/transformations/base64_encode.h b/src/actions/transformations/base64_encode.h index 0f7fd1fe53..861cbfc664 100644 --- a/src/actions/transformations/base64_encode.h +++ b/src/actions/transformations/base64_encode.h @@ -32,7 +32,7 @@ class Base64Encode : public Transformation { public: explicit Base64Encode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/cmd_line.cc b/src/actions/transformations/cmd_line.cc index 72087e36b9..ea028e3af8 100644 --- a/src/actions/transformations/cmd_line.cc +++ b/src/actions/transformations/cmd_line.cc @@ -31,7 +31,7 @@ namespace actions { namespace transformations { -std::string CmdLine::evaluate(const std::string &value, +std::string CmdLine::execute(const std::string &value, Transaction *transaction) { std::string ret; int space = 0; diff --git a/src/actions/transformations/cmd_line.h b/src/actions/transformations/cmd_line.h index 851f29385f..19d8479bcf 100644 --- a/src/actions/transformations/cmd_line.h +++ b/src/actions/transformations/cmd_line.h @@ -33,7 +33,7 @@ class CmdLine : public Transformation { explicit CmdLine(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/compress_whitespace.cc b/src/actions/transformations/compress_whitespace.cc index 506de2483d..b1add934fe 100644 --- a/src/actions/transformations/compress_whitespace.cc +++ b/src/actions/transformations/compress_whitespace.cc @@ -35,7 +35,7 @@ CompressWhitespace::CompressWhitespace(const std::string &action) this->action_kind = 1; } -std::string CompressWhitespace::evaluate(const std::string &value, +std::string CompressWhitespace::execute(const std::string &value, Transaction *transaction) { std::string a; diff --git a/src/actions/transformations/compress_whitespace.h b/src/actions/transformations/compress_whitespace.h index 184ddcfab1..c558c4414c 100644 --- a/src/actions/transformations/compress_whitespace.h +++ b/src/actions/transformations/compress_whitespace.h @@ -30,10 +30,9 @@ namespace transformations { class CompressWhitespace : public Transformation { public: - explicit CompressWhitespace(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/css_decode.cc b/src/actions/transformations/css_decode.cc index f808512385..2bb752768f 100644 --- a/src/actions/transformations/css_decode.cc +++ b/src/actions/transformations/css_decode.cc @@ -34,7 +34,7 @@ namespace actions { namespace transformations { -std::string CssDecode::evaluate(const std::string &value, +std::string CssDecode::execute(const std::string &value, Transaction *transaction) { char *tmp = reinterpret_cast( diff --git a/src/actions/transformations/css_decode.h b/src/actions/transformations/css_decode.h index a6769bad39..0b52d73f24 100644 --- a/src/actions/transformations/css_decode.h +++ b/src/actions/transformations/css_decode.h @@ -33,7 +33,7 @@ class CssDecode : public Transformation { public: explicit CssDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static int css_decode_inplace(unsigned char *input, int64_t input_len); diff --git a/src/actions/transformations/escape_seq_decode.cc b/src/actions/transformations/escape_seq_decode.cc index 03303272ef..01c6d9fbf1 100644 --- a/src/actions/transformations/escape_seq_decode.cc +++ b/src/actions/transformations/escape_seq_decode.cc @@ -140,7 +140,7 @@ int EscapeSeqDecode::ansi_c_sequences_decode_inplace(unsigned char *input, } -std::string EscapeSeqDecode::evaluate(const std::string &value, +std::string EscapeSeqDecode::execute(const std::string &value, Transaction *transaction) { unsigned char *tmp = (unsigned char *) malloc(sizeof(char) diff --git a/src/actions/transformations/escape_seq_decode.h b/src/actions/transformations/escape_seq_decode.h index 8751a8b4eb..a2dd1578f4 100644 --- a/src/actions/transformations/escape_seq_decode.h +++ b/src/actions/transformations/escape_seq_decode.h @@ -30,10 +30,8 @@ namespace transformations { class EscapeSeqDecode : public Transformation { public: - explicit EscapeSeqDecode(const std::string &action) ; - - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static int ansi_c_sequences_decode_inplace(unsigned char *input, int input_len); }; diff --git a/src/actions/transformations/hex_decode.cc b/src/actions/transformations/hex_decode.cc index e626bc5f35..60b78a6324 100644 --- a/src/actions/transformations/hex_decode.cc +++ b/src/actions/transformations/hex_decode.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string HexDecode::evaluate(const std::string &value, +std::string HexDecode::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/hex_decode.h b/src/actions/transformations/hex_decode.h index a2f48c6d8f..cb026d6234 100644 --- a/src/actions/transformations/hex_decode.h +++ b/src/actions/transformations/hex_decode.h @@ -32,7 +32,7 @@ class HexDecode : public Transformation { public: explicit HexDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static int inplace(unsigned char *data, int len); diff --git a/src/actions/transformations/hex_encode.cc b/src/actions/transformations/hex_encode.cc index 4e6121df60..33f82290b7 100644 --- a/src/actions/transformations/hex_encode.cc +++ b/src/actions/transformations/hex_encode.cc @@ -36,7 +36,7 @@ HexEncode::HexEncode(const std::string &action) this->action_kind = 1; } -std::string HexEncode::evaluate(const std::string &value, +std::string HexEncode::execute(const std::string &value, Transaction *transaction) { std::stringstream result; diff --git a/src/actions/transformations/hex_encode.h b/src/actions/transformations/hex_encode.h index 1ba39c56a1..684de6a84b 100644 --- a/src/actions/transformations/hex_encode.h +++ b/src/actions/transformations/hex_encode.h @@ -30,10 +30,9 @@ namespace transformations { class HexEncode : public Transformation { public: - explicit HexEncode(const std::string &action); - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/html_entity_decode.cc b/src/actions/transformations/html_entity_decode.cc index b9268df55c..be914b0f7b 100644 --- a/src/actions/transformations/html_entity_decode.cc +++ b/src/actions/transformations/html_entity_decode.cc @@ -33,7 +33,7 @@ namespace actions { namespace transformations { -std::string HtmlEntityDecode::evaluate(const std::string &value, +std::string HtmlEntityDecode::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/html_entity_decode.h b/src/actions/transformations/html_entity_decode.h index 44fcc32319..019126e92e 100644 --- a/src/actions/transformations/html_entity_decode.h +++ b/src/actions/transformations/html_entity_decode.h @@ -36,7 +36,7 @@ class HtmlEntityDecode : public Transformation { explicit HtmlEntityDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static int inplace(unsigned char *input, uint64_t input_len); diff --git a/src/actions/transformations/js_decode.cc b/src/actions/transformations/js_decode.cc index 2f4cf8bb57..a46be0c049 100644 --- a/src/actions/transformations/js_decode.cc +++ b/src/actions/transformations/js_decode.cc @@ -34,7 +34,7 @@ namespace actions { namespace transformations { -std::string JsDecode::evaluate(const std::string &value, +std::string JsDecode::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/js_decode.h b/src/actions/transformations/js_decode.h index 60d6617b35..abacaf27dc 100644 --- a/src/actions/transformations/js_decode.h +++ b/src/actions/transformations/js_decode.h @@ -33,7 +33,7 @@ class JsDecode : public Transformation { explicit JsDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static int inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/length.cc b/src/actions/transformations/length.cc index 61015b82bf..3be2332dc4 100644 --- a/src/actions/transformations/length.cc +++ b/src/actions/transformations/length.cc @@ -35,7 +35,7 @@ Length::Length(const std::string &action) this->action_kind = 1; } -std::string Length::evaluate(const std::string &value, +std::string Length::execute(const std::string &value, Transaction *transaction) { return std::to_string(value.size()); diff --git a/src/actions/transformations/length.h b/src/actions/transformations/length.h index 8892a9dcd2..c0cd90e339 100644 --- a/src/actions/transformations/length.h +++ b/src/actions/transformations/length.h @@ -30,10 +30,9 @@ namespace transformations { class Length : public Transformation { public: - explicit Length(const std::string &action); - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/lower_case.cc b/src/actions/transformations/lower_case.cc index d00ab40cb6..5dfa341b37 100644 --- a/src/actions/transformations/lower_case.cc +++ b/src/actions/transformations/lower_case.cc @@ -31,7 +31,7 @@ LowerCase::LowerCase(const std::string &a) : Transformation(a) { } -std::string LowerCase::evaluate(const std::string &val, +std::string LowerCase::execute(const std::string &val, Transaction *transaction) { std::locale loc; std::string value(val); diff --git a/src/actions/transformations/lower_case.h b/src/actions/transformations/lower_case.h index 590498405b..a2799f1eab 100644 --- a/src/actions/transformations/lower_case.h +++ b/src/actions/transformations/lower_case.h @@ -33,7 +33,7 @@ namespace transformations { class LowerCase : public Transformation { public: explicit LowerCase(const std::string &action); - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/md5.cc b/src/actions/transformations/md5.cc index 71c36bc300..1952476713 100644 --- a/src/actions/transformations/md5.cc +++ b/src/actions/transformations/md5.cc @@ -31,7 +31,7 @@ namespace actions { namespace transformations { -std::string Md5::evaluate(const std::string &value, +std::string Md5::execute(const std::string &value, Transaction *transaction) { std::string ret = Utils::Md5::digest(value); diff --git a/src/actions/transformations/md5.h b/src/actions/transformations/md5.h index 37f22473fa..12ceed49a8 100644 --- a/src/actions/transformations/md5.h +++ b/src/actions/transformations/md5.h @@ -32,7 +32,7 @@ class Md5 : public Transformation { public: explicit Md5(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/none.cc b/src/actions/transformations/none.cc index f122bf035c..d3d0c610b1 100644 --- a/src/actions/transformations/none.cc +++ b/src/actions/transformations/none.cc @@ -31,7 +31,7 @@ namespace actions { namespace transformations { -std::string None::evaluate(const std::string &value, +std::string None::execute(const std::string &value, Transaction *transaction) { return value; } diff --git a/src/actions/transformations/none.h b/src/actions/transformations/none.h index e8a0e9d956..5e19d00563 100644 --- a/src/actions/transformations/none.h +++ b/src/actions/transformations/none.h @@ -34,7 +34,7 @@ class None : public Transformation { : Transformation(action) { m_isNone = true; } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/normalise_path.cc b/src/actions/transformations/normalise_path.cc index e75b984986..01d4da1469 100644 --- a/src/actions/transformations/normalise_path.cc +++ b/src/actions/transformations/normalise_path.cc @@ -37,7 +37,7 @@ NormalisePath::NormalisePath(const std::string &action) this->action_kind = 1; } -std::string NormalisePath::evaluate(const std::string &value, +std::string NormalisePath::execute(const std::string &value, Transaction *transaction) { int changed = 0; diff --git a/src/actions/transformations/normalise_path.h b/src/actions/transformations/normalise_path.h index b3869bea04..0e7ff53519 100644 --- a/src/actions/transformations/normalise_path.h +++ b/src/actions/transformations/normalise_path.h @@ -30,10 +30,9 @@ namespace transformations { class NormalisePath : public Transformation { public: - explicit NormalisePath(const std::string &action); - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static int normalize_path_inplace(unsigned char *input, int input_len, diff --git a/src/actions/transformations/normalise_path_win.cc b/src/actions/transformations/normalise_path_win.cc index 6c171a59c4..d5cab23de0 100644 --- a/src/actions/transformations/normalise_path_win.cc +++ b/src/actions/transformations/normalise_path_win.cc @@ -34,7 +34,7 @@ namespace actions { namespace transformations { -std::string NormalisePathWin::evaluate(const std::string &value, +std::string NormalisePathWin::execute(const std::string &value, Transaction *transaction) { int changed; diff --git a/src/actions/transformations/normalise_path_win.h b/src/actions/transformations/normalise_path_win.h index a1f8c5f746..2d2efb7578 100644 --- a/src/actions/transformations/normalise_path_win.h +++ b/src/actions/transformations/normalise_path_win.h @@ -33,7 +33,7 @@ class NormalisePathWin : public Transformation { explicit NormalisePathWin(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/parity_even_7bit.cc b/src/actions/transformations/parity_even_7bit.cc index 2c0be31cd4..f3c13657cf 100644 --- a/src/actions/transformations/parity_even_7bit.cc +++ b/src/actions/transformations/parity_even_7bit.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string ParityEven7bit::evaluate(const std::string &value, +std::string ParityEven7bit::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/parity_even_7bit.h b/src/actions/transformations/parity_even_7bit.h index 08aa88230a..4e763593e4 100644 --- a/src/actions/transformations/parity_even_7bit.h +++ b/src/actions/transformations/parity_even_7bit.h @@ -32,7 +32,7 @@ class ParityEven7bit : public Transformation { public: explicit ParityEven7bit(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, Transaction *transaction) override; + std::string execute(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_odd_7bit.cc b/src/actions/transformations/parity_odd_7bit.cc index 5ac38d20dc..75b1e7ee19 100644 --- a/src/actions/transformations/parity_odd_7bit.cc +++ b/src/actions/transformations/parity_odd_7bit.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string ParityOdd7bit::evaluate(const std::string &value, +std::string ParityOdd7bit::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/parity_odd_7bit.h b/src/actions/transformations/parity_odd_7bit.h index 8b7e34d289..7239349d73 100644 --- a/src/actions/transformations/parity_odd_7bit.h +++ b/src/actions/transformations/parity_odd_7bit.h @@ -32,7 +32,7 @@ class ParityOdd7bit : public Transformation { public: explicit ParityOdd7bit(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, Transaction *transaction) override; + std::string execute(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_zero_7bit.cc b/src/actions/transformations/parity_zero_7bit.cc index 7bb846362c..622399f355 100644 --- a/src/actions/transformations/parity_zero_7bit.cc +++ b/src/actions/transformations/parity_zero_7bit.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string ParityZero7bit::evaluate(const std::string &value, +std::string ParityZero7bit::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/parity_zero_7bit.h b/src/actions/transformations/parity_zero_7bit.h index 4b4ccd23e1..17d79ec8b9 100644 --- a/src/actions/transformations/parity_zero_7bit.h +++ b/src/actions/transformations/parity_zero_7bit.h @@ -32,7 +32,7 @@ class ParityZero7bit : public Transformation { public: explicit ParityZero7bit(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, Transaction *transaction) override; + std::string execute(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/php_args_names.cc b/src/actions/transformations/php_args_names.cc index f28d350dd0..e445f6b4e7 100644 --- a/src/actions/transformations/php_args_names.cc +++ b/src/actions/transformations/php_args_names.cc @@ -32,7 +32,8 @@ PhpArgsNames::PhpArgsNames(const std::string &a) : Transformation(a) { } -std::string PhpArgsNames::evaluate(const std::string &val, + +std::string PhpArgsNames::execute(const std::string &val, Transaction *transaction) { //Took the logic from php src code: //https://github.com/php/php-src/blob/master/main/php_variables.c diff --git a/src/actions/transformations/php_args_names.h b/src/actions/transformations/php_args_names.h index a286b8a1cb..2230171326 100644 --- a/src/actions/transformations/php_args_names.h +++ b/src/actions/transformations/php_args_names.h @@ -33,7 +33,8 @@ namespace transformations { class PhpArgsNames : public Transformation { public: explicit PhpArgsNames(const std::string &action); - std::string evaluate(const std::string &exp, + + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/remove_comments.cc b/src/actions/transformations/remove_comments.cc index 043dd9505a..ec146257d0 100644 --- a/src/actions/transformations/remove_comments.cc +++ b/src/actions/transformations/remove_comments.cc @@ -32,7 +32,7 @@ namespace actions { namespace transformations { -std::string RemoveComments::evaluate(const std::string &value, +std::string RemoveComments::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/remove_comments.h b/src/actions/transformations/remove_comments.h index 78dd213d69..5a19a404e5 100644 --- a/src/actions/transformations/remove_comments.h +++ b/src/actions/transformations/remove_comments.h @@ -33,7 +33,7 @@ class RemoveComments : public Transformation { public: explicit RemoveComments(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/remove_comments_char.cc b/src/actions/transformations/remove_comments_char.cc index 529f3a67f3..993f15696a 100644 --- a/src/actions/transformations/remove_comments_char.cc +++ b/src/actions/transformations/remove_comments_char.cc @@ -35,7 +35,7 @@ RemoveCommentsChar::RemoveCommentsChar(const std::string &action) this->action_kind = 1; } -std::string RemoveCommentsChar::evaluate(const std::string &val, +std::string RemoveCommentsChar::execute(const std::string &val, Transaction *transaction) { int64_t i; std::string value(val); diff --git a/src/actions/transformations/remove_comments_char.h b/src/actions/transformations/remove_comments_char.h index 722aba5926..806d81c0ab 100644 --- a/src/actions/transformations/remove_comments_char.h +++ b/src/actions/transformations/remove_comments_char.h @@ -32,7 +32,7 @@ class RemoveCommentsChar : public Transformation { public: explicit RemoveCommentsChar(const std::string &action); - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/remove_nulls.cc b/src/actions/transformations/remove_nulls.cc index 5dd576cb49..67b52f6d5c 100644 --- a/src/actions/transformations/remove_nulls.cc +++ b/src/actions/transformations/remove_nulls.cc @@ -33,7 +33,7 @@ namespace actions { namespace transformations { -std::string RemoveNulls::evaluate(const std::string &val, +std::string RemoveNulls::execute(const std::string &val, Transaction *transaction) { int64_t i; std::string value(val); diff --git a/src/actions/transformations/remove_nulls.h b/src/actions/transformations/remove_nulls.h index eeb33b363f..9266f2f76c 100644 --- a/src/actions/transformations/remove_nulls.h +++ b/src/actions/transformations/remove_nulls.h @@ -33,7 +33,7 @@ class RemoveNulls : public Transformation { explicit RemoveNulls(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/remove_whitespace.cc b/src/actions/transformations/remove_whitespace.cc index b9ffcc0649..b2eb166208 100644 --- a/src/actions/transformations/remove_whitespace.cc +++ b/src/actions/transformations/remove_whitespace.cc @@ -35,7 +35,7 @@ RemoveWhitespace::RemoveWhitespace(const std::string &action) this->action_kind = 1; } -std::string RemoveWhitespace::evaluate(const std::string &val, +std::string RemoveWhitespace::execute(const std::string &val, Transaction *transaction) { std::string value(val); diff --git a/src/actions/transformations/remove_whitespace.h b/src/actions/transformations/remove_whitespace.h index f977914cb0..4622e5fa57 100644 --- a/src/actions/transformations/remove_whitespace.h +++ b/src/actions/transformations/remove_whitespace.h @@ -32,7 +32,7 @@ class RemoveWhitespace : public Transformation { public: explicit RemoveWhitespace(const std::string &action); - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/replace_comments.cc b/src/actions/transformations/replace_comments.cc index 77e3e3b700..1929db742f 100644 --- a/src/actions/transformations/replace_comments.cc +++ b/src/actions/transformations/replace_comments.cc @@ -36,7 +36,7 @@ ReplaceComments::ReplaceComments(const std::string &action) this->action_kind = 1; } -std::string ReplaceComments::evaluate(const std::string &value, +std::string ReplaceComments::execute(const std::string &value, Transaction *transaction) { uint64_t i, j, incomment; diff --git a/src/actions/transformations/replace_comments.h b/src/actions/transformations/replace_comments.h index 6808f426c1..9c4f872225 100644 --- a/src/actions/transformations/replace_comments.h +++ b/src/actions/transformations/replace_comments.h @@ -30,10 +30,9 @@ namespace transformations { class ReplaceComments : public Transformation { public: - explicit ReplaceComments(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/replace_nulls.cc b/src/actions/transformations/replace_nulls.cc index 0a37149003..37b4cb5bd0 100644 --- a/src/actions/transformations/replace_nulls.cc +++ b/src/actions/transformations/replace_nulls.cc @@ -35,7 +35,7 @@ ReplaceNulls::ReplaceNulls(const std::string &action) this->action_kind = 1; } -std::string ReplaceNulls::evaluate(const std::string &val, +std::string ReplaceNulls::execute(const std::string &val, Transaction *transaction) { int64_t i; std::string value(val); diff --git a/src/actions/transformations/replace_nulls.h b/src/actions/transformations/replace_nulls.h index 8e2d315fc5..57b4bb1b8b 100644 --- a/src/actions/transformations/replace_nulls.h +++ b/src/actions/transformations/replace_nulls.h @@ -30,10 +30,9 @@ namespace transformations { class ReplaceNulls : public Transformation { public: - explicit ReplaceNulls(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/sha1.cc b/src/actions/transformations/sha1.cc index 9e0c7f53e7..ed2a8aec49 100644 --- a/src/actions/transformations/sha1.cc +++ b/src/actions/transformations/sha1.cc @@ -36,7 +36,7 @@ Sha1::Sha1(const std::string &action) this->action_kind = 1; } -std::string Sha1::evaluate(const std::string &value, +std::string Sha1::execute(const std::string &value, Transaction *transaction) { return Utils::Sha1::digest(value); diff --git a/src/actions/transformations/sha1.h b/src/actions/transformations/sha1.h index eb5fb3f135..d11286e61c 100644 --- a/src/actions/transformations/sha1.h +++ b/src/actions/transformations/sha1.h @@ -31,7 +31,8 @@ namespace transformations { class Sha1 : public Transformation { public: explicit Sha1(const std::string &action) ; - std::string evaluate(const std::string &exp, + + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/sql_hex_decode.cc b/src/actions/transformations/sql_hex_decode.cc index 8c8805ff67..6e8e042876 100644 --- a/src/actions/transformations/sql_hex_decode.cc +++ b/src/actions/transformations/sql_hex_decode.cc @@ -41,7 +41,7 @@ namespace transformations { #define ISODIGIT(X) ((X >= '0') && (X <= '7')) #endif -std::string SqlHexDecode::evaluate(const std::string &value, +std::string SqlHexDecode::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/sql_hex_decode.h b/src/actions/transformations/sql_hex_decode.h index 9a3afe0f5e..1f79a52002 100644 --- a/src/actions/transformations/sql_hex_decode.h +++ b/src/actions/transformations/sql_hex_decode.h @@ -32,7 +32,7 @@ class SqlHexDecode : public Transformation { public: explicit SqlHexDecode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static int inplace(unsigned char *data, int len); diff --git a/src/actions/transformations/transformation.cc b/src/actions/transformations/transformation.cc index cd14be790b..1fc2b4f731 100644 --- a/src/actions/transformations/transformation.cc +++ b/src/actions/transformations/transformation.cc @@ -70,7 +70,7 @@ namespace actions { namespace transformations { -std::string Transformation::evaluate(const std::string &value, +std::string Transformation::execute(const std::string &value, Transaction *transaction) { return value; } diff --git a/src/actions/transformations/transformation.h b/src/actions/transformations/transformation.h index f1d81503ec..851387793e 100644 --- a/src/actions/transformations/transformation.h +++ b/src/actions/transformations/transformation.h @@ -32,10 +32,10 @@ class Transformation : public Action { explicit Transformation(const std::string& _action) : Action(_action, RunTimeBeforeMatchAttemptKind) { } - explicit Transformation(const std::string& _action, int kind) + Transformation(const std::string& _action, int kind) : Action(_action, kind) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static Transformation* instantiate(std::string a); diff --git a/src/actions/transformations/trim.cc b/src/actions/transformations/trim.cc index 5902497f40..f291a7b2a2 100644 --- a/src/actions/transformations/trim.cc +++ b/src/actions/transformations/trim.cc @@ -67,7 +67,7 @@ Trim::Trim(const std::string &action) std::string -Trim::evaluate(const std::string &val, +Trim::execute(const std::string &val, Transaction *transaction) { std::string value(val); return *this->trim(&value); diff --git a/src/actions/transformations/trim.h b/src/actions/transformations/trim.h index ac16050cfd..c6b98f8b23 100644 --- a/src/actions/transformations/trim.h +++ b/src/actions/transformations/trim.h @@ -30,10 +30,9 @@ namespace transformations { class Trim : public Transformation { public: - explicit Trim(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; std::string *ltrim(std::string *s); diff --git a/src/actions/transformations/trim_left.cc b/src/actions/transformations/trim_left.cc index 50c0cc6aa5..786e6e89ed 100644 --- a/src/actions/transformations/trim_left.cc +++ b/src/actions/transformations/trim_left.cc @@ -38,7 +38,7 @@ TrimLeft::TrimLeft(const std::string &action) this->action_kind = 1; } -std::string TrimLeft::evaluate(const std::string &val, +std::string TrimLeft::execute(const std::string &val, Transaction *transaction) { std::string value(val); return *ltrim(&value); diff --git a/src/actions/transformations/trim_left.h b/src/actions/transformations/trim_left.h index 54e4885c05..61cbdda12a 100644 --- a/src/actions/transformations/trim_left.h +++ b/src/actions/transformations/trim_left.h @@ -33,7 +33,7 @@ class TrimLeft : public Trim { public: explicit TrimLeft(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/trim_right.cc b/src/actions/transformations/trim_right.cc index 92383f7e00..84569c233e 100644 --- a/src/actions/transformations/trim_right.cc +++ b/src/actions/transformations/trim_right.cc @@ -36,7 +36,7 @@ TrimRight::TrimRight(const std::string &action) this->action_kind = 1; } -std::string TrimRight::evaluate(const std::string &val, +std::string TrimRight::execute(const std::string &val, Transaction *transaction) { std::string value(val); return *this->rtrim(&value); diff --git a/src/actions/transformations/trim_right.h b/src/actions/transformations/trim_right.h index 9a96b4c5cc..8bb4a0132f 100644 --- a/src/actions/transformations/trim_right.h +++ b/src/actions/transformations/trim_right.h @@ -33,7 +33,7 @@ class TrimRight : public Trim { public: explicit TrimRight(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/upper_case.cc b/src/actions/transformations/upper_case.cc index 118696ad43..d908cb5e0a 100644 --- a/src/actions/transformations/upper_case.cc +++ b/src/actions/transformations/upper_case.cc @@ -31,7 +31,7 @@ UpperCase::UpperCase(const std::string &a) : Transformation(a) { } -std::string UpperCase::evaluate(const std::string &val, +std::string UpperCase::execute(const std::string &val, Transaction *transaction) { std::string value(val); std::locale loc; diff --git a/src/actions/transformations/upper_case.h b/src/actions/transformations/upper_case.h index f4a77220c6..15453b1b3a 100644 --- a/src/actions/transformations/upper_case.h +++ b/src/actions/transformations/upper_case.h @@ -34,7 +34,7 @@ class UpperCase : public Transformation { public: explicit UpperCase(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/url_decode.cc b/src/actions/transformations/url_decode.cc index 845c6a647a..f8b5d37e15 100644 --- a/src/actions/transformations/url_decode.cc +++ b/src/actions/transformations/url_decode.cc @@ -37,7 +37,7 @@ UrlDecode::UrlDecode(const std::string &action) this->action_kind = 1; } -std::string UrlDecode::evaluate(const std::string &value, +std::string UrlDecode::execute(const std::string &value, Transaction *transaction) { unsigned char *val(NULL); int invalid_count = 0; diff --git a/src/actions/transformations/url_decode.h b/src/actions/transformations/url_decode.h index e965dae7fe..1637bc5692 100644 --- a/src/actions/transformations/url_decode.h +++ b/src/actions/transformations/url_decode.h @@ -32,10 +32,9 @@ namespace transformations { class UrlDecode : public Transformation { public: - explicit UrlDecode(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; }; diff --git a/src/actions/transformations/url_decode_uni.cc b/src/actions/transformations/url_decode_uni.cc index ad5b8111c6..2e42f2bd51 100644 --- a/src/actions/transformations/url_decode_uni.cc +++ b/src/actions/transformations/url_decode_uni.cc @@ -38,7 +38,7 @@ namespace actions { namespace transformations { -std::string UrlDecodeUni::evaluate(const std::string &value, +std::string UrlDecodeUni::execute(const std::string &value, Transaction *t) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/url_decode_uni.h b/src/actions/transformations/url_decode_uni.h index d7b0dd2152..d5d46d6a90 100644 --- a/src/actions/transformations/url_decode_uni.h +++ b/src/actions/transformations/url_decode_uni.h @@ -33,7 +33,7 @@ class UrlDecodeUni : public Transformation { public: explicit UrlDecodeUni(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, Transaction *transaction) override; + std::string execute(const std::string &exp, Transaction *transaction) override; static int inplace(unsigned char *input, uint64_t input_len, Transaction *transaction); }; diff --git a/src/actions/transformations/url_encode.cc b/src/actions/transformations/url_encode.cc index 19ecb3349d..804bdcf4ff 100644 --- a/src/actions/transformations/url_encode.cc +++ b/src/actions/transformations/url_encode.cc @@ -87,7 +87,7 @@ std::string UrlEncode::url_enc(const char *input, } -std::string UrlEncode::evaluate(const std::string &value, +std::string UrlEncode::execute(const std::string &value, Transaction *transaction) { int changed; diff --git a/src/actions/transformations/url_encode.h b/src/actions/transformations/url_encode.h index 24cf1272ae..7be9067607 100644 --- a/src/actions/transformations/url_encode.h +++ b/src/actions/transformations/url_encode.h @@ -30,10 +30,9 @@ namespace transformations { class UrlEncode : public Transformation { public: - explicit UrlEncode(const std::string &action) ; - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static std::string url_enc(const char *input, diff --git a/src/actions/transformations/utf8_to_unicode.cc b/src/actions/transformations/utf8_to_unicode.cc index 70c1f9c8e1..b699705268 100644 --- a/src/actions/transformations/utf8_to_unicode.cc +++ b/src/actions/transformations/utf8_to_unicode.cc @@ -33,7 +33,7 @@ namespace actions { namespace transformations { -std::string Utf8ToUnicode::evaluate(const std::string &value, +std::string Utf8ToUnicode::execute(const std::string &value, Transaction *transaction) { std::string ret; unsigned char *input; diff --git a/src/actions/transformations/utf8_to_unicode.h b/src/actions/transformations/utf8_to_unicode.h index 4d488410e0..a13f38aece 100644 --- a/src/actions/transformations/utf8_to_unicode.h +++ b/src/actions/transformations/utf8_to_unicode.h @@ -37,7 +37,7 @@ class Utf8ToUnicode : public Transformation { public: explicit Utf8ToUnicode(const std::string &action) : Transformation(action) { } - std::string evaluate(const std::string &exp, + std::string execute(const std::string &exp, Transaction *transaction) override; static char *inplace(unsigned char *input, uint64_t input_len, diff --git a/src/actions/ver.cc b/src/actions/ver.cc index 8f1d1ef7cb..b7a002c2fd 100644 --- a/src/actions/ver.cc +++ b/src/actions/ver.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace actions { -bool Ver::evaluate(RuleWithActions *rule, Transaction *transaction) { +bool Ver::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/ver.h b/src/actions/ver.h index 364d567b31..024d946597 100644 --- a/src/actions/ver.h +++ b/src/actions/ver.h @@ -31,7 +31,7 @@ class Ver : public Action { public: explicit Ver(const std::string &action) : Action(action, ConfigurationKind) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; private: std::string m_ver; diff --git a/src/actions/xmlns.h b/src/actions/xmlns.h index 7b8e2f1e4b..677d84f7ee 100644 --- a/src/actions/xmlns.h +++ b/src/actions/xmlns.h @@ -31,7 +31,7 @@ class XmlNS : public Action { public: explicit XmlNS(const std::string &action) : Action(action) { } - bool evaluate(RuleWithActions *rule, Transaction *transaction) override { + bool execute(RuleWithActions *rule, Transaction *transaction) override { return true; } diff --git a/src/engine/lua.cc b/src/engine/lua.cc index 203e5c4d43..9bd6f946c8 100644 --- a/src/engine/lua.cc +++ b/src/engine/lua.cc @@ -439,7 +439,7 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, "t:" + std::string(name)); // FIXME: transformation is not yet returning null. if (tfn) { - newVar = tfn->evaluate(newVar, t); + newVar = tfn->execute(newVar, t); } else { ms_dbg_a(t, 1, "SecRuleScript: Invalid transformation function: " \ @@ -461,7 +461,7 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, // FIXME: transformation is not yet returning null. if (tfn) { - newVar = tfn->evaluate(newVar, t); + newVar = tfn->execute(newVar, t); delete tfn; } else { ms_dbg_a(t, 1, "SecRuleScript: Invalid transformation function: " \ diff --git a/src/modsecurity.cc b/src/modsecurity.cc index 101309cdd4..dba4fbf2c9 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -319,7 +319,7 @@ int ModSecurity::processContentOffset(const char *content, size_t len, t = modsecurity::actions::transformations::Transformation::instantiate( trans.back().str().c_str()); - varValueRes = t->evaluate(varValue, NULL); + varValueRes = t->execute(varValue, NULL); varValue.assign(varValueRes); trans.pop_back(); diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 48e08ac019..45af242ea1 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -105,7 +105,7 @@ RuleWithActions::RuleWithActions( void RuleWithActions::addDefaultAction(std::shared_ptr a) { if (a->action_kind == Action::ConfigurationKind) { - a->evaluate(this, NULL); + a->execute(this, NULL); return; } @@ -117,7 +117,7 @@ void RuleWithActions::addDefaultAction(std::shared_ptr a) { actions::Rev *rev = dynamic_cast(a.get()); m_defaultRevision = rev->getRevision(); } else { - a->evaluate(this, NULL); + a->execute(this, NULL); } return; } @@ -171,7 +171,7 @@ void RuleWithActions::addAction(actions::Action *a) { actions::Rev *rev = dynamic_cast(a); m_revision = rev->getRevision(); } else { - a->evaluate(this, NULL); + a->execute(this, NULL); } delete a; return; @@ -244,7 +244,7 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans); + a->execute(this, trans); } for (auto &b : @@ -258,7 +258,7 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * } else if (*a->m_name.get() == "setvar") { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans, *trans->messageGetLast()); + a->execute(this, trans, *trans->messageGetLast()); } } } @@ -282,7 +282,7 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { for (actions::Tag *a : getTagsActionPtr()) { ms_dbg_a(trans, 4, "Running (non-disruptive) action: " \ + *a->m_name.get()); - a->evaluate(this, trans, *trans->messageGetLast()); + a->execute(this, trans, *trans->messageGetLast()); } /** @@ -301,17 +301,18 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { } if (m_logData) { - m_logData->evaluate(this, trans, *trans->messageGetLast()); + m_logData->execute(this, trans, *trans->messageGetLast()); } else if (m_defaultActionLogData) { - m_defaultActionLogData->evaluate(this, trans, *trans->messageGetLast()); + m_defaultActionLogData->execute(this, trans, *trans->messageGetLast()); } if (m_msg) { - m_msg->evaluate(this, trans, *trans->messageGetLast()); + m_msg->execute(this, trans, *trans->messageGetLast()); } else if (m_defaultActionMsg) { - m_defaultActionMsg->evaluate(this, trans, *trans->messageGetLast()); + m_defaultActionMsg->execute(this, trans, *trans->messageGetLast()); } + for (auto &a : getMatchActionsPtr()) { if (!a->isDisruptive() && !(disruptiveAlreadyExecuted @@ -333,10 +334,11 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { void RuleWithActions::executeAction(Transaction *trans, Action *a, bool defaultContext) { + if (a->isDisruptive() == false && *a->m_name.get() != "block") { ms_dbg_a(trans, 9, "Running " \ "action: " + *a->m_name.get()); - a->evaluate(this, trans, *trans->messageGetLast()); + a->execute(this, trans, *trans->messageGetLast()); return; } @@ -349,7 +351,7 @@ void RuleWithActions::executeAction(Transaction *trans, if (trans->getRuleEngineState() == RulesSet::EnabledRuleEngine) { ms_dbg_a(trans, 4, "Running (disruptive) action: " + *a->m_name.get() + "."); - a->evaluate(this, trans, *trans->messageGetLast()); + a->execute(this, trans, *trans->messageGetLast()); return; } @@ -366,7 +368,7 @@ inline void RuleWithActions::executeTransformation( std::string *path) const { std::string *oldValue = (*value).get(); - std::string newValue = a->evaluate(*oldValue, trans); + std::string newValue = a->execute(*oldValue, trans); if (newValue != *oldValue) { std::shared_ptr u(new std::string(newValue)); diff --git a/test/fuzzer/afl_fuzzer.cc b/test/fuzzer/afl_fuzzer.cc index 6b19a18f09..f6b9ff4f07 100644 --- a/test/fuzzer/afl_fuzzer.cc +++ b/test/fuzzer/afl_fuzzer.cc @@ -121,7 +121,7 @@ using namespace modsecurity; inline void op_test(const std::string &opName, const std::string &s) { Operator *op = Operator::instantiate(opName, ""); op->init("", nullptr); - op->evaluate(nullptr, nullptr, s, nullptr); + op->execute(nullptr, nullptr, s, nullptr); delete op; } @@ -154,52 +154,52 @@ int main(int argc, char** argv) { /** * Transformations, generated by: * - * for i in $(grep "class " -Ri src/actions/transformations/* | grep " :" | grep -v "InstantCache" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\"\)\; $(echo $i | awk '{print tolower($0)}')-\>evaluate\(s, NULL\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; + * for i in $(grep "class " -Ri src/actions/transformations/* | grep " :" | grep -v "InstantCache" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\"\)\; $(echo $i | awk '{print tolower($0)}')-\>execute\(s, NULL\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; * */ -Base64Decode *base64decode = new Base64Decode("Base64Decode"); base64decode->evaluate(s, NULL); delete base64decode; -Base64DecodeExt *base64decodeext = new Base64DecodeExt("Base64DecodeExt"); base64decodeext->evaluate(s, NULL); delete base64decodeext; -Base64Encode *base64encode = new Base64Encode("Base64Encode"); base64encode->evaluate(s, NULL); delete base64encode; -CmdLine *cmdline = new CmdLine("CmdLine"); cmdline->evaluate(s, NULL); delete cmdline; -CompressWhitespace *compresswhitespace = new CompressWhitespace("CompressWhitespace"); compresswhitespace->evaluate(s, NULL); delete compresswhitespace; -CssDecode *cssdecode = new CssDecode("CssDecode"); cssdecode->evaluate(s, NULL); delete cssdecode; -EscapeSeqDecode *escapeseqdecode = new EscapeSeqDecode("EscapeSeqDecode"); escapeseqdecode->evaluate(s, NULL); delete escapeseqdecode; -HexDecode *hexdecode = new HexDecode("HexDecode"); hexdecode->evaluate(s, NULL); delete hexdecode; -HexEncode *hexencode = new HexEncode("HexEncode"); hexencode->evaluate(s, NULL); delete hexencode; -HtmlEntityDecode *htmlentitydecode = new HtmlEntityDecode("HtmlEntityDecode"); htmlentitydecode->evaluate(s, NULL); delete htmlentitydecode; -JsDecode *jsdecode = new JsDecode("JsDecode"); jsdecode->evaluate(s, NULL); delete jsdecode; -Length *length = new Length("Length"); length->evaluate(s, NULL); delete length; -LowerCase *lowercase = new LowerCase("LowerCase"); lowercase->evaluate(s, NULL); delete lowercase; -Md5 *md5 = new Md5("Md5"); md5->evaluate(s, NULL); delete md5; -None *none = new None("None"); none->evaluate(s, NULL); delete none; -NormalisePath *normalisepath = new NormalisePath("NormalisePath"); normalisepath->evaluate(s, NULL); delete normalisepath; -NormalisePathWin *normalisepathwin = new NormalisePathWin("NormalisePathWin"); normalisepathwin->evaluate(s, NULL); delete normalisepathwin; -ParityEven7bit *parityeven7bit = new ParityEven7bit("ParityEven7bit"); parityeven7bit->evaluate(s, NULL); delete parityeven7bit; -ParityOdd7bit *parityodd7bit = new ParityOdd7bit("ParityOdd7bit"); parityodd7bit->evaluate(s, NULL); delete parityodd7bit; -ParityZero7bit *parityzero7bit = new ParityZero7bit("ParityZero7bit"); parityzero7bit->evaluate(s, NULL); delete parityzero7bit; -RemoveComments *removecomments = new RemoveComments("RemoveComments"); removecomments->evaluate(s, NULL); delete removecomments; -RemoveCommentsChar *removecommentschar = new RemoveCommentsChar("RemoveCommentsChar"); removecommentschar->evaluate(s, NULL); delete removecommentschar; -RemoveNulls *removenulls = new RemoveNulls("RemoveNulls"); removenulls->evaluate(s, NULL); delete removenulls; -RemoveWhitespace *removewhitespace = new RemoveWhitespace("RemoveWhitespace"); removewhitespace->evaluate(s, NULL); delete removewhitespace; -ReplaceComments *replacecomments = new ReplaceComments("ReplaceComments"); replacecomments->evaluate(s, NULL); delete replacecomments; -ReplaceNulls *replacenulls = new ReplaceNulls("ReplaceNulls"); replacenulls->evaluate(s, NULL); delete replacenulls; -Sha1 *sha1 = new Sha1("Sha1"); sha1->evaluate(s, NULL); delete sha1; -SqlHexDecode *sqlhexdecode = new SqlHexDecode("SqlHexDecode"); sqlhexdecode->evaluate(s, NULL); delete sqlhexdecode; -Transformation *transformation = new Transformation("Transformation"); transformation->evaluate(s, NULL); delete transformation; -Trim *trim = new Trim("Trim"); trim->evaluate(s, NULL); delete trim; -TrimLeft *trimleft = new TrimLeft("TrimLeft"); trimleft->evaluate(s, NULL); delete trimleft; -TrimRight *trimright = new TrimRight("TrimRight"); trimright->evaluate(s, NULL); delete trimright; -UpperCase *uppercase = new UpperCase("UpperCase"); uppercase->evaluate(s, NULL); delete uppercase; -UrlDecode *urldecode = new UrlDecode("UrlDecode"); urldecode->evaluate(s, NULL); delete urldecode; -UrlDecodeUni *urldecodeuni = new UrlDecodeUni("UrlDecodeUni"); urldecodeuni->evaluate(s, NULL); delete urldecodeuni; -UrlEncode *urlencode = new UrlEncode("UrlEncode"); urlencode->evaluate(s, NULL); delete urlencode; -Utf8ToUnicode *utf8tounicode = new Utf8ToUnicode("Utf8ToUnicode"); utf8tounicode->evaluate(s, NULL); delete utf8tounicode; +Base64Decode *base64decode = new Base64Decode("Base64Decode"); base64decode->execute(s, NULL); delete base64decode; +Base64DecodeExt *base64decodeext = new Base64DecodeExt("Base64DecodeExt"); base64decodeext->execute(s, NULL); delete base64decodeext; +Base64Encode *base64encode = new Base64Encode("Base64Encode"); base64encode->execute(s, NULL); delete base64encode; +CmdLine *cmdline = new CmdLine("CmdLine"); cmdline->execute(s, NULL); delete cmdline; +CompressWhitespace *compresswhitespace = new CompressWhitespace("CompressWhitespace"); compresswhitespace->execute(s, NULL); delete compresswhitespace; +CssDecode *cssdecode = new CssDecode("CssDecode"); cssdecode->execute(s, NULL); delete cssdecode; +EscapeSeqDecode *escapeseqdecode = new EscapeSeqDecode("EscapeSeqDecode"); escapeseqdecode->execute(s, NULL); delete escapeseqdecode; +HexDecode *hexdecode = new HexDecode("HexDecode"); hexdecode->execute(s, NULL); delete hexdecode; +HexEncode *hexencode = new HexEncode("HexEncode"); hexencode->execute(s, NULL); delete hexencode; +HtmlEntityDecode *htmlentitydecode = new HtmlEntityDecode("HtmlEntityDecode"); htmlentitydecode->execute(s, NULL); delete htmlentitydecode; +JsDecode *jsdecode = new JsDecode("JsDecode"); jsdecode->execute(s, NULL); delete jsdecode; +Length *length = new Length("Length"); length->execute(s, NULL); delete length; +LowerCase *lowercase = new LowerCase("LowerCase"); lowercase->execute(s, NULL); delete lowercase; +Md5 *md5 = new Md5("Md5"); md5->execute(s, NULL); delete md5; +None *none = new None("None"); none->execute(s, NULL); delete none; +NormalisePath *normalisepath = new NormalisePath("NormalisePath"); normalisepath->execute(s, NULL); delete normalisepath; +NormalisePathWin *normalisepathwin = new NormalisePathWin("NormalisePathWin"); normalisepathwin->execute(s, NULL); delete normalisepathwin; +ParityEven7bit *parityeven7bit = new ParityEven7bit("ParityEven7bit"); parityeven7bit->execute(s, NULL); delete parityeven7bit; +ParityOdd7bit *parityodd7bit = new ParityOdd7bit("ParityOdd7bit"); parityodd7bit->execute(s, NULL); delete parityodd7bit; +ParityZero7bit *parityzero7bit = new ParityZero7bit("ParityZero7bit"); parityzero7bit->execute(s, NULL); delete parityzero7bit; +RemoveComments *removecomments = new RemoveComments("RemoveComments"); removecomments->execute(s, NULL); delete removecomments; +RemoveCommentsChar *removecommentschar = new RemoveCommentsChar("RemoveCommentsChar"); removecommentschar->execute(s, NULL); delete removecommentschar; +RemoveNulls *removenulls = new RemoveNulls("RemoveNulls"); removenulls->execute(s, NULL); delete removenulls; +RemoveWhitespace *removewhitespace = new RemoveWhitespace("RemoveWhitespace"); removewhitespace->execute(s, NULL); delete removewhitespace; +ReplaceComments *replacecomments = new ReplaceComments("ReplaceComments"); replacecomments->execute(s, NULL); delete replacecomments; +ReplaceNulls *replacenulls = new ReplaceNulls("ReplaceNulls"); replacenulls->execute(s, NULL); delete replacenulls; +Sha1 *sha1 = new Sha1("Sha1"); sha1->execute(s, NULL); delete sha1; +SqlHexDecode *sqlhexdecode = new SqlHexDecode("SqlHexDecode"); sqlhexdecode->execute(s, NULL); delete sqlhexdecode; +Transformation *transformation = new Transformation("Transformation"); transformation->execute(s, NULL); delete transformation; +Trim *trim = new Trim("Trim"); trim->execute(s, NULL); delete trim; +TrimLeft *trimleft = new TrimLeft("TrimLeft"); trimleft->execute(s, NULL); delete trimleft; +TrimRight *trimright = new TrimRight("TrimRight"); trimright->execute(s, NULL); delete trimright; +UpperCase *uppercase = new UpperCase("UpperCase"); uppercase->execute(s, NULL); delete uppercase; +UrlDecode *urldecode = new UrlDecode("UrlDecode"); urldecode->execute(s, NULL); delete urldecode; +UrlDecodeUni *urldecodeuni = new UrlDecodeUni("UrlDecodeUni"); urldecodeuni->execute(s, NULL); delete urldecodeuni; +UrlEncode *urlencode = new UrlEncode("UrlEncode"); urlencode->execute(s, NULL); delete urlencode; +Utf8ToUnicode *utf8tounicode = new Utf8ToUnicode("Utf8ToUnicode"); utf8tounicode->execute(s, NULL); delete utf8tounicode; /** * Operators, generated by: * - * for i in $(grep "class " -Ri src/operators/* | grep " :" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\", z, false\)\; $(echo $i | awk '{print tolower($0)}')-\>evaluate\(t, s\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; + * for i in $(grep "class " -Ri src/operators/* | grep " :" | awk {'print $2'}); do echo $i *$(echo $i | awk '{print tolower($0)}') = new $i\(\"$i\", z, false\)\; $(echo $i | awk '{print tolower($0)}')-\>execute\(t, s\)\; delete $(echo $i | awk '{print tolower($0)}')\;; done; * */ op_test("BeginsWith", s); diff --git a/test/unit/unit.cc b/test/unit/unit.cc index 49aeabd204..038d8aa127 100644 --- a/test/unit/unit.cc +++ b/test/unit/unit.cc @@ -91,7 +91,7 @@ void perform_unit_test(ModSecurityTest *test, UnitTest *t, delete op; } else if (t->type == "tfn") { Transformation *tfn = Transformation::instantiate("t:" + t->name); - std::string ret = tfn->evaluate(t->input, NULL); + std::string ret = tfn->execute(t->input, NULL); t->obtained = 1; t->obtainedOutput = ret; if (ret != t->output) { From d329d52cc344f778ca793949f57f82efd423ab94 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 26 Feb 2019 15:39:27 -0300 Subject: [PATCH 08/16] Refactoring: Makes transformations to work with new execute signature --- headers/modsecurity/actions/action.h | 14 +- headers/modsecurity/rule_message.h | 125 +++--------------- headers/modsecurity/rule_with_actions.h | 61 +++++++-- headers/modsecurity/rule_with_operator.h | 1 + src/actions/transformations/base64_decode.cc | 9 +- src/actions/transformations/base64_decode.h | 8 +- .../transformations/base64_decode_ext.cc | 10 +- .../transformations/base64_decode_ext.h | 8 +- src/actions/transformations/base64_encode.cc | 11 +- src/actions/transformations/base64_encode.h | 8 +- src/actions/transformations/cmd_line.cc | 18 ++- src/actions/transformations/cmd_line.h | 7 +- .../transformations/compress_whitespace.cc | 25 ++-- .../transformations/compress_whitespace.h | 8 +- src/actions/transformations/css_decode.cc | 17 ++- src/actions/transformations/css_decode.h | 8 +- .../transformations/escape_seq_decode.cc | 25 ++-- .../transformations/escape_seq_decode.h | 10 +- src/actions/transformations/hex_decode.cc | 18 ++- src/actions/transformations/hex_decode.h | 8 +- src/actions/transformations/hex_encode.cc | 17 +-- src/actions/transformations/hex_encode.h | 9 +- .../transformations/html_entity_decode.cc | 18 ++- .../transformations/html_entity_decode.h | 5 +- src/actions/transformations/js_decode.cc | 18 ++- src/actions/transformations/js_decode.h | 6 +- src/actions/transformations/length.cc | 12 +- src/actions/transformations/length.h | 8 +- src/actions/transformations/lower_case.cc | 19 +-- src/actions/transformations/lower_case.h | 9 +- src/actions/transformations/md5.cc | 9 +- src/actions/transformations/md5.h | 8 +- src/actions/transformations/none.cc | 7 +- src/actions/transformations/none.h | 5 +- src/actions/transformations/normalise_path.cc | 22 ++- src/actions/transformations/normalise_path.h | 8 +- .../transformations/normalise_path_win.cc | 18 ++- .../transformations/normalise_path_win.h | 5 +- .../transformations/parity_even_7bit.cc | 20 ++- .../transformations/parity_even_7bit.h | 8 +- .../transformations/parity_odd_7bit.cc | 19 ++- src/actions/transformations/parity_odd_7bit.h | 8 +- .../transformations/parity_zero_7bit.cc | 18 ++- .../transformations/parity_zero_7bit.h | 8 +- src/actions/transformations/php_args_names.cc | 17 ++- src/actions/transformations/php_args_names.h | 5 +- .../transformations/remove_comments.cc | 18 ++- src/actions/transformations/remove_comments.h | 8 +- .../transformations/remove_comments_char.cc | 61 ++++----- .../transformations/remove_comments_char.h | 8 +- src/actions/transformations/remove_nulls.cc | 15 +-- src/actions/transformations/remove_nulls.h | 5 +- .../transformations/remove_whitespace.cc | 25 ++-- .../transformations/remove_whitespace.h | 8 +- .../transformations/replace_comments.cc | 27 ++-- .../transformations/replace_comments.h | 8 +- src/actions/transformations/replace_nulls.cc | 22 ++- src/actions/transformations/replace_nulls.h | 8 +- src/actions/transformations/sha1.cc | 16 ++- src/actions/transformations/sha1.h | 8 +- src/actions/transformations/sql_hex_decode.cc | 18 ++- src/actions/transformations/sql_hex_decode.h | 8 +- src/actions/transformations/transformation.cc | 5 - src/actions/transformations/transformation.h | 11 +- src/actions/transformations/trim.cc | 32 ++--- src/actions/transformations/trim.h | 14 +- src/actions/transformations/trim_left.cc | 16 +-- src/actions/transformations/trim_left.h | 8 +- src/actions/transformations/trim_right.cc | 17 +-- src/actions/transformations/trim_right.h | 8 +- src/actions/transformations/upper_case.cc | 19 +-- src/actions/transformations/upper_case.h | 8 +- src/actions/transformations/url_decode.cc | 22 +-- src/actions/transformations/url_decode.h | 8 +- src/actions/transformations/url_decode_uni.cc | 18 ++- src/actions/transformations/url_decode_uni.h | 8 +- src/actions/transformations/url_encode.cc | 16 +-- src/actions/transformations/url_encode.h | 8 +- .../transformations/utf8_to_unicode.cc | 30 ++--- src/actions/transformations/utf8_to_unicode.h | 9 +- src/engine/lua.cc | 12 +- src/modsecurity.cc | 9 +- src/rule_message.cc | 124 ++++++++++++++++- src/rule_with_actions.cc | 112 ++++++++-------- src/rule_with_operator.cc | 37 ++++-- src/rules.cc | 84 ++++++++++++ test/test-cases/regression/actions.json | 12 +- test/test-cases/regression/auditlog.json | 6 +- ...llection-regular_expression_selection.json | 2 +- .../regression/config-response_type.json | 2 +- .../test-cases/regression/variable-FILES.json | 2 +- .../regression/variable-FILES_NAMES.json | 2 +- test/unit/unit.cc | 8 +- 93 files changed, 916 insertions(+), 721 deletions(-) create mode 100644 src/rules.cc diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index 2ce84ac6c7..3cbfc2571b 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -39,7 +39,8 @@ namespace actions { class Action { public: - Action(const std::string& _action, int kind = RunTimeOnlyIfMatchKind) + + explicit Action(const std::string& _action, int kind = RunTimeOnlyIfMatchKind) : m_isNone(false), temporaryAction(false), action_kind(kind), @@ -73,6 +74,17 @@ class Action { RuleMessage &ruleMessage) { return execute(rule, transaction); } + + /** + * This method is meant to be used by transformations — a particular + * type of action. + * + */ + virtual void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + }; + virtual bool init(std::string *error) { return true; } virtual bool isDisruptive() { return false; } diff --git a/headers/modsecurity/rule_message.h b/headers/modsecurity/rule_message.h index c3d5b74950..1111831050 100644 --- a/headers/modsecurity/rule_message.h +++ b/headers/modsecurity/rule_message.h @@ -26,14 +26,15 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_operator.h" #ifdef __cplusplus namespace modsecurity { - - +namespace actions { +class Tag; +}; +class RuleWithActions; class RuleMessage { public: @@ -122,108 +123,22 @@ class RuleMessage { static std::string _details(const RuleMessage *rm); static std::string _errorLogTail(const RuleMessage *rm); - RuleWithActions *getRule() const { - return m_rule; - } - - void setRule(RuleWithActions *rule) { - m_rule = rule; - } - - bool isSettle() const { - return m_rule != nullptr; - } - - int getRuleId() const { - if (m_rule) { - return m_rule->getId(); - } - return -1; - } - - int getPhase() const { - if (m_rule) { - return m_rule->getPhase(); - } - return 0; - } - - std::string getFileName() const { - if (m_rule) { - return *m_rule->getFileName().get(); - } - return ""; - } - - int getLineNumber() const { - if (m_rule) { - return m_rule->getLineNumber(); - } - return 0; - } - - std::string getRev() const { - if (m_rule) { - return m_rule->getRevision(); - } - return ""; - } - - std::string getVer() const { - if (m_rule) { - return m_rule->getVersion(); - } - return ""; - } - - int getMaturity() const { - if (m_rule) { - return m_rule->getMaturity(); - } - return 0; - } - - int getAccuracy() const { - if (m_rule) { - return m_rule->getAccuracy(); - } - return 0; - } - - std::string getClientIpAddress() const { - if (m_transaction) { - return *m_transaction->m_clientIpAddress.get(); - } - return ""; - } - - std::string getServerIpAddress() const { - if (m_transaction) { - return *m_transaction->m_serverIpAddress.get(); - } - return ""; - } - - std::string getRequestId() const { - if (m_transaction) { - return *m_transaction->m_id.get(); - } - return ""; - } - - std::string getUri() const { - if (m_transaction) { - return *m_transaction->m_uri_no_query_string_decoded.get(); - } - return ""; - } - - bool isDisruptive() const { - if (m_rule) { - return m_rule->hasDisruptiveAction(); - } - return 0; - } + RuleWithActions *getRule() const; + void setRule(RuleWithActions *rule); + bool isSettle() const; + int getRuleId() const; + int getPhase() const; + std::string getFileName() const; + int getLineNumber() const; + std::string getRev() const; + std::string getVer() const; + int getMaturity() const; + int getAccuracy() const; + std::string getClientIpAddress() const; + std::string getServerIpAddress() const; + std::string getRequestId() const; + std::string getUri() const; + bool isDisruptive() const; int m_severity; std::list m_tags; diff --git a/headers/modsecurity/rule_with_actions.h b/headers/modsecurity/rule_with_actions.h index 06d5bb9016..569f651e06 100644 --- a/headers/modsecurity/rule_with_actions.h +++ b/headers/modsecurity/rule_with_actions.h @@ -49,9 +49,6 @@ class Transformation; } } -using TransformationResult = std::pair, - std::shared_ptr>; -using TransformationResults = std::list; using Transformation = actions::transformations::Transformation; using Transformations = std::vector >; using TransformationsPtr = std::vector; @@ -67,6 +64,43 @@ using MatchActionsPtr = std::vector; using XmlNSs = std::vector >; using XmlNSsPtr = std::vector; +using ModSecStackString = std::basic_string, std::allocator >; + +class TransformationResult { + public: + TransformationResult( + ModSecStackString *after, + std::string *transformation) + : m_after(*after), + m_transformation(transformation) { }; + + explicit TransformationResult( + ModSecStackString *after) + : m_after(*after), + m_transformation(nullptr) { }; + + TransformationResult(const TransformationResult &t2) + : m_after(t2.m_after), + m_transformation(t2.m_transformation) { }; + + + ModSecStackString *getAfter() { + return &m_after; + } + + + std::string *getTransformationName() { + return m_transformation; + } + + + private: + ModSecStackString m_after; + std::string *m_transformation; +}; + +using TransformationsResults = std::list; + class RuleWithActions : public Rule { public: @@ -171,18 +205,21 @@ class RuleWithActions : public Rule { bool context); - void executeTransformations( + static void executeTransformation( Transaction *transaction, - const std::string &value, - TransformationResults &ret); + TransformationsResults *ret, + Transformation *transformation); - inline void executeTransformation( - actions::transformations::Transformation *a, - std::shared_ptr *value, - Transaction *trans, - TransformationResults *ret, - std::string *path) const; + static void executeTransformation( + Transaction *transaction, + ModSecStackString in, + TransformationsResults *ret, + Transformation *transformation); + void executeTransformations( + Transaction *transaction, + const std::string &value, + TransformationsResults &results); void addAction(actions::Action *a); void addTransformation(std::shared_ptr t) { diff --git a/headers/modsecurity/rule_with_operator.h b/headers/modsecurity/rule_with_operator.h index bbac5cf3f6..6d178eb470 100644 --- a/headers/modsecurity/rule_with_operator.h +++ b/headers/modsecurity/rule_with_operator.h @@ -35,6 +35,7 @@ namespace modsecurity { +using TransformationsResults = std::list; class RuleWithOperator : public RuleWithActions { public: diff --git a/src/actions/transformations/base64_decode.cc b/src/actions/transformations/base64_decode.cc index 282b619290..9af4cc2cdb 100644 --- a/src/actions/transformations/base64_decode.cc +++ b/src/actions/transformations/base64_decode.cc @@ -32,11 +32,12 @@ namespace actions { namespace transformations { -std::string Base64Decode::execute(const std::string &value, - Transaction *transaction) { +void Base64Decode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + std::string value(in.c_str(), in.size()); std::string ret = Utils::Base64::decode(value); - - return ret; + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/base64_decode.h b/src/actions/transformations/base64_decode.h index 3a240b0839..96bf35d923 100644 --- a/src/actions/transformations/base64_decode.h +++ b/src/actions/transformations/base64_decode.h @@ -30,10 +30,12 @@ namespace transformations { class Base64Decode : public Transformation { public: - explicit Base64Decode(const std::string &action) : Transformation(action) { } + explicit Base64Decode(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/base64_decode_ext.cc b/src/actions/transformations/base64_decode_ext.cc index c66353a36a..96158e9950 100644 --- a/src/actions/transformations/base64_decode_ext.cc +++ b/src/actions/transformations/base64_decode_ext.cc @@ -32,11 +32,11 @@ namespace actions { namespace transformations { -std::string Base64DecodeExt::execute(const std::string &value, - Transaction *transaction) { - std::string ret = Utils::Base64::decode_forgiven(value); - - return ret; +void Base64DecodeExt::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + std::string ret = Utils::Base64::decode_forgiven(in); + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/base64_decode_ext.h b/src/actions/transformations/base64_decode_ext.h index 0aa6428647..9e8c53357f 100644 --- a/src/actions/transformations/base64_decode_ext.h +++ b/src/actions/transformations/base64_decode_ext.h @@ -30,10 +30,12 @@ namespace transformations { class Base64DecodeExt : public Transformation { public: - explicit Base64DecodeExt(const std::string &action) : Transformation(action) { } + explicit Base64DecodeExt(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/base64_encode.cc b/src/actions/transformations/base64_encode.cc index 3118544b19..8e6634f63e 100644 --- a/src/actions/transformations/base64_encode.cc +++ b/src/actions/transformations/base64_encode.cc @@ -32,11 +32,12 @@ namespace actions { namespace transformations { -std::string Base64Encode::execute(const std::string &value, - Transaction *transaction) { - std::string ret = Utils::Base64::encode(value); - - return ret; +void Base64Encode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + std::string ret = Utils::Base64::encode( + std::string(in.c_str(), in.size())); + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/base64_encode.h b/src/actions/transformations/base64_encode.h index 861cbfc664..480ab6bcff 100644 --- a/src/actions/transformations/base64_encode.h +++ b/src/actions/transformations/base64_encode.h @@ -30,10 +30,12 @@ namespace transformations { class Base64Encode : public Transformation { public: - explicit Base64Encode(const std::string &action) : Transformation(action) { } + explicit Base64Encode(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/cmd_line.cc b/src/actions/transformations/cmd_line.cc index ea028e3af8..14ab766e54 100644 --- a/src/actions/transformations/cmd_line.cc +++ b/src/actions/transformations/cmd_line.cc @@ -31,12 +31,12 @@ namespace actions { namespace transformations { -std::string CmdLine::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void CmdLine::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int space = 0; - for (auto& a : value) { + for (auto& a : in) { switch (a) { /* remove some characters */ case '"': @@ -53,7 +53,7 @@ std::string CmdLine::execute(const std::string &value, case '\r': case '\n': if (space == 0) { - ret.append(" "); + out.append(" "); space++; } break; @@ -62,22 +62,20 @@ std::string CmdLine::execute(const std::string &value, case '/': case '(': if (space) { - ret.pop_back(); + out.pop_back(); } space = 0; - ret.append(&a, 1); + out.append(&a, 1); break; /* copy normal characters */ default : char b = std::tolower(a); - ret.append(&b, 1); + out.append(&b, 1); space = 0; break; } } - - return ret; } diff --git a/src/actions/transformations/cmd_line.h b/src/actions/transformations/cmd_line.h index 19d8479bcf..f4714b6c2a 100644 --- a/src/actions/transformations/cmd_line.h +++ b/src/actions/transformations/cmd_line.h @@ -30,11 +30,12 @@ namespace transformations { class CmdLine : public Transformation { public: - explicit CmdLine(const std::string &action) + explicit CmdLine(const std::string &action) : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/compress_whitespace.cc b/src/actions/transformations/compress_whitespace.cc index b1add934fe..ee96048753 100644 --- a/src/actions/transformations/compress_whitespace.cc +++ b/src/actions/transformations/compress_whitespace.cc @@ -30,37 +30,32 @@ namespace modsecurity { namespace actions { namespace transformations { -CompressWhitespace::CompressWhitespace(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string CompressWhitespace::execute(const std::string &value, - Transaction *transaction) { - std::string a; +void CompressWhitespace::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int inWhiteSpace = 0; - int i = 0; + size_t i = 0; + out.reserve(in.size()); - while (i < value.size()) { - if (isspace(value[i])) { + while (i < in.size()) { + if (isspace(in[i])) { if (inWhiteSpace) { i++; continue; } else { inWhiteSpace = 1; - a.append(" ", 1); + out.append(" ", 1); } } else { inWhiteSpace = 0; - a.append(&value.at(i), 1); + out.append(&in.at(i), 1); } i++; } - - return a; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/compress_whitespace.h b/src/actions/transformations/compress_whitespace.h index c558c4414c..69bb6d9f80 100644 --- a/src/actions/transformations/compress_whitespace.h +++ b/src/actions/transformations/compress_whitespace.h @@ -30,10 +30,12 @@ namespace transformations { class CompressWhitespace : public Transformation { public: - explicit CompressWhitespace(const std::string &action) ; + explicit CompressWhitespace(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/css_decode.cc b/src/actions/transformations/css_decode.cc index 2bb752768f..6829cc188a 100644 --- a/src/actions/transformations/css_decode.cc +++ b/src/actions/transformations/css_decode.cc @@ -34,20 +34,19 @@ namespace actions { namespace transformations { -std::string CssDecode::execute(const std::string &value, - Transaction *transaction) { - +void CssDecode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { char *tmp = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + malloc(sizeof(char) * in.size() + 1)); + memcpy(tmp, in.c_str(), in.size() + 1); + tmp[in.size()] = '\0'; CssDecode::css_decode_inplace(reinterpret_cast(tmp), - value.size()); + in.size()); - std::string ret(tmp, 0, value.size()); + out.assign(tmp, 0, in.size()); free(tmp); - return ret; } diff --git a/src/actions/transformations/css_decode.h b/src/actions/transformations/css_decode.h index 0b52d73f24..b35ff165f3 100644 --- a/src/actions/transformations/css_decode.h +++ b/src/actions/transformations/css_decode.h @@ -31,10 +31,12 @@ namespace transformations { class CssDecode : public Transformation { public: - explicit CssDecode(const std::string &action) + explicit CssDecode(const std::string &action) : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; static int css_decode_inplace(unsigned char *input, int64_t input_len); }; diff --git a/src/actions/transformations/escape_seq_decode.cc b/src/actions/transformations/escape_seq_decode.cc index 01c6d9fbf1..a9174fb0d7 100644 --- a/src/actions/transformations/escape_seq_decode.cc +++ b/src/actions/transformations/escape_seq_decode.cc @@ -31,11 +31,6 @@ namespace modsecurity { namespace actions { namespace transformations { -EscapeSeqDecode::EscapeSeqDecode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - int EscapeSeqDecode::ansi_c_sequences_decode_inplace(unsigned char *input, int input_len) { @@ -140,21 +135,17 @@ int EscapeSeqDecode::ansi_c_sequences_decode_inplace(unsigned char *input, } -std::string EscapeSeqDecode::execute(const std::string &value, - Transaction *transaction) { - +void EscapeSeqDecode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *tmp = (unsigned char *) malloc(sizeof(char) - * value.size() + 1); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + * in.size() + 1); + memcpy(tmp, in.c_str(), in.size() + 1); + tmp[in.size()] = '\0'; - int size = ansi_c_sequences_decode_inplace(tmp, value.size()); - - std::string ret(""); - ret.assign(reinterpret_cast(tmp), size); + int size = ansi_c_sequences_decode_inplace(tmp, in.size()); + out.assign(reinterpret_cast(tmp), size); free(tmp); - - return ret; } } // namespace transformations diff --git a/src/actions/transformations/escape_seq_decode.h b/src/actions/transformations/escape_seq_decode.h index a2dd1578f4..856fabac62 100644 --- a/src/actions/transformations/escape_seq_decode.h +++ b/src/actions/transformations/escape_seq_decode.h @@ -30,9 +30,13 @@ namespace transformations { class EscapeSeqDecode : public Transformation { public: - explicit EscapeSeqDecode(const std::string &action) ; - std::string execute(const std::string &exp, - Transaction *transaction) override; + explicit EscapeSeqDecode(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; + static int ansi_c_sequences_decode_inplace(unsigned char *input, int input_len); }; diff --git a/src/actions/transformations/hex_decode.cc b/src/actions/transformations/hex_decode.cc index 60b78a6324..a6b5130c05 100644 --- a/src/actions/transformations/hex_decode.cc +++ b/src/actions/transformations/hex_decode.cc @@ -32,27 +32,25 @@ namespace actions { namespace transformations { -std::string HexDecode::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void HexDecode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; int size = 0; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size = inplace(input, value.length()); + size = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), size); + out.assign(reinterpret_cast(input), size); free(input); - - return ret; } diff --git a/src/actions/transformations/hex_decode.h b/src/actions/transformations/hex_decode.h index cb026d6234..6f52d7975a 100644 --- a/src/actions/transformations/hex_decode.h +++ b/src/actions/transformations/hex_decode.h @@ -30,10 +30,12 @@ namespace transformations { class HexDecode : public Transformation { public: - explicit HexDecode(const std::string &action) : Transformation(action) { } + explicit HexDecode(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; static int inplace(unsigned char *data, int len); }; diff --git a/src/actions/transformations/hex_encode.cc b/src/actions/transformations/hex_encode.cc index 33f82290b7..06e0b8afef 100644 --- a/src/actions/transformations/hex_encode.cc +++ b/src/actions/transformations/hex_encode.cc @@ -31,23 +31,20 @@ namespace modsecurity { namespace actions { namespace transformations { -HexEncode::HexEncode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string HexEncode::execute(const std::string &value, - Transaction *transaction) { +void HexEncode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { std::stringstream result; - for (std::size_t i=0; i < value.length(); i++) { - unsigned int ii = (unsigned char)(value[i]); + for (std::size_t i=0; i < in.length(); i++) { + int ii = reinterpret_cast(in[i]); result << std::setw(2) << std::setfill('0') << std::hex << ii; } - return result.str(); + out.assign(result.str().c_str()); } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/hex_encode.h b/src/actions/transformations/hex_encode.h index 684de6a84b..fdec1e6178 100644 --- a/src/actions/transformations/hex_encode.h +++ b/src/actions/transformations/hex_encode.h @@ -30,10 +30,13 @@ namespace transformations { class HexEncode : public Transformation { public: - explicit HexEncode(const std::string &action); + explicit HexEncode(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; - std::string execute(const std::string &exp, - Transaction *transaction) override; }; } // namespace transformations diff --git a/src/actions/transformations/html_entity_decode.cc b/src/actions/transformations/html_entity_decode.cc index be914b0f7b..b583349bd6 100644 --- a/src/actions/transformations/html_entity_decode.cc +++ b/src/actions/transformations/html_entity_decode.cc @@ -33,26 +33,24 @@ namespace actions { namespace transformations { -std::string HtmlEntityDecode::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void HtmlEntityDecode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size_t i = inplace(input, value.length()); + size_t i = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), i); + out.assign(reinterpret_cast(input), i); free(input); - - return ret; } diff --git a/src/actions/transformations/html_entity_decode.h b/src/actions/transformations/html_entity_decode.h index 019126e92e..5469bec523 100644 --- a/src/actions/transformations/html_entity_decode.h +++ b/src/actions/transformations/html_entity_decode.h @@ -36,8 +36,9 @@ class HtmlEntityDecode : public Transformation { explicit HtmlEntityDecode(const std::string &action) : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; static int inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/js_decode.cc b/src/actions/transformations/js_decode.cc index a46be0c049..c20534e46d 100644 --- a/src/actions/transformations/js_decode.cc +++ b/src/actions/transformations/js_decode.cc @@ -34,26 +34,24 @@ namespace actions { namespace transformations { -std::string JsDecode::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void JsDecode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size_t i = inplace(input, value.length()); + size_t i = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), i); + out.assign(reinterpret_cast(input), i); free(input); - - return ret; } diff --git a/src/actions/transformations/js_decode.h b/src/actions/transformations/js_decode.h index abacaf27dc..a8b8cc3e36 100644 --- a/src/actions/transformations/js_decode.h +++ b/src/actions/transformations/js_decode.h @@ -33,8 +33,10 @@ class JsDecode : public Transformation { explicit JsDecode(const std::string &action) : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; + static int inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/length.cc b/src/actions/transformations/length.cc index 3be2332dc4..ee12043874 100644 --- a/src/actions/transformations/length.cc +++ b/src/actions/transformations/length.cc @@ -30,15 +30,11 @@ namespace modsecurity { namespace actions { namespace transformations { -Length::Length(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string Length::execute(const std::string &value, - Transaction *transaction) { - return std::to_string(value.size()); +void Length::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + out.assign(std::to_string(in.size()).c_str()); } } // namespace transformations diff --git a/src/actions/transformations/length.h b/src/actions/transformations/length.h index c0cd90e339..8f00e7ec92 100644 --- a/src/actions/transformations/length.h +++ b/src/actions/transformations/length.h @@ -30,10 +30,12 @@ namespace transformations { class Length : public Transformation { public: - explicit Length(const std::string &action); + explicit Length(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/lower_case.cc b/src/actions/transformations/lower_case.cc index 5dfa341b37..6e6c673298 100644 --- a/src/actions/transformations/lower_case.cc +++ b/src/actions/transformations/lower_case.cc @@ -27,22 +27,17 @@ namespace actions { namespace transformations { -LowerCase::LowerCase(const std::string &a) - : Transformation(a) { -} - -std::string LowerCase::execute(const std::string &val, - Transaction *transaction) { +void LowerCase::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { std::locale loc; - std::string value(val); - - for (std::string::size_type i=0; i < value.length(); ++i) { - value[i] = std::tolower(value[i], loc); + out.resize(in.size()); + for (std::string::size_type i=0; i < in.size(); ++i) { + out[i] = std::tolower(in[i], loc); } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/lower_case.h b/src/actions/transformations/lower_case.h index a2799f1eab..60aa5104eb 100644 --- a/src/actions/transformations/lower_case.h +++ b/src/actions/transformations/lower_case.h @@ -32,9 +32,12 @@ namespace transformations { class LowerCase : public Transformation { public: - explicit LowerCase(const std::string &action); - std::string execute(const std::string &exp, - Transaction *transaction) override; + explicit LowerCase(const std::string &action) + : Transformation(action) { }; + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/md5.cc b/src/actions/transformations/md5.cc index 1952476713..0535eb6db0 100644 --- a/src/actions/transformations/md5.cc +++ b/src/actions/transformations/md5.cc @@ -31,11 +31,12 @@ namespace actions { namespace transformations { -std::string Md5::execute(const std::string &value, - Transaction *transaction) { - std::string ret = Utils::Md5::digest(value); +void Md5::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + std::string ret = Utils::Md5::digest(std::string(in.c_str(), in.size())); - return ret; + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/md5.h b/src/actions/transformations/md5.h index 12ceed49a8..fc11fbdfbc 100644 --- a/src/actions/transformations/md5.h +++ b/src/actions/transformations/md5.h @@ -30,10 +30,12 @@ namespace transformations { class Md5 : public Transformation { public: - explicit Md5(const std::string &action) : Transformation(action) { } + explicit Md5(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/none.cc b/src/actions/transformations/none.cc index d3d0c610b1..ef3e6e7b94 100644 --- a/src/actions/transformations/none.cc +++ b/src/actions/transformations/none.cc @@ -31,10 +31,9 @@ namespace actions { namespace transformations { -std::string None::execute(const std::string &value, - Transaction *transaction) { - return value; -} +void None::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { } } // namespace transformations diff --git a/src/actions/transformations/none.h b/src/actions/transformations/none.h index 5e19d00563..102a07322a 100644 --- a/src/actions/transformations/none.h +++ b/src/actions/transformations/none.h @@ -34,8 +34,9 @@ class None : public Transformation { : Transformation(action) { m_isNone = true; } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/normalise_path.cc b/src/actions/transformations/normalise_path.cc index 01d4da1469..832e8b1072 100644 --- a/src/actions/transformations/normalise_path.cc +++ b/src/actions/transformations/normalise_path.cc @@ -32,28 +32,22 @@ namespace modsecurity { namespace actions { namespace transformations { -NormalisePath::NormalisePath(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string NormalisePath::execute(const std::string &value, - Transaction *transaction) { +void NormalisePath::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int changed = 0; char *tmp = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + malloc(sizeof(char) * in.size() + 1)); + memcpy(tmp, in.c_str(), in.size() + 1); + tmp[in.size()] = '\0'; int i = normalize_path_inplace((unsigned char *)tmp, - value.size(), 0, &changed); + in.size(), 0, &changed); - std::string ret(""); - ret.assign(tmp, i); + out.assign(tmp, i); free(tmp); - - return ret; } diff --git a/src/actions/transformations/normalise_path.h b/src/actions/transformations/normalise_path.h index 0e7ff53519..429d0ad69f 100644 --- a/src/actions/transformations/normalise_path.h +++ b/src/actions/transformations/normalise_path.h @@ -30,10 +30,12 @@ namespace transformations { class NormalisePath : public Transformation { public: - explicit NormalisePath(const std::string &action); + explicit NormalisePath(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; static int normalize_path_inplace(unsigned char *input, int input_len, int win, int *changed); diff --git a/src/actions/transformations/normalise_path_win.cc b/src/actions/transformations/normalise_path_win.cc index d5cab23de0..3c43e2b460 100644 --- a/src/actions/transformations/normalise_path_win.cc +++ b/src/actions/transformations/normalise_path_win.cc @@ -34,24 +34,22 @@ namespace actions { namespace transformations { -std::string NormalisePathWin::execute(const std::string &value, - Transaction *transaction) { +void NormalisePathWin::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int changed; char *tmp = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(tmp, value.c_str(), value.size() + 1); - tmp[value.size()] = '\0'; + malloc(sizeof(char) * in.size() + 1)); + memcpy(tmp, in.c_str(), in.size() + 1); + tmp[in.size()] = '\0'; int i = NormalisePath::normalize_path_inplace( reinterpret_cast(tmp), - value.size(), 1, &changed); + in.size(), 1, &changed); - std::string ret(""); - ret.assign(tmp, i); + out.assign(tmp, i); free(tmp); - - return ret; } diff --git a/src/actions/transformations/normalise_path_win.h b/src/actions/transformations/normalise_path_win.h index 2d2efb7578..8b27709387 100644 --- a/src/actions/transformations/normalise_path_win.h +++ b/src/actions/transformations/normalise_path_win.h @@ -33,8 +33,9 @@ class NormalisePathWin : public Transformation { explicit NormalisePathWin(const std::string &action) : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/parity_even_7bit.cc b/src/actions/transformations/parity_even_7bit.cc index f3c13657cf..64d640f342 100644 --- a/src/actions/transformations/parity_even_7bit.cc +++ b/src/actions/transformations/parity_even_7bit.cc @@ -32,28 +32,27 @@ namespace actions { namespace transformations { -std::string ParityEven7bit::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void ParityEven7bit::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - std::memcpy(input, value.c_str(), value.length()+1); + std::memcpy(input, in.c_str(), in.length()+1); - inplace(input, value.length()); + inplace(input, in.length()); - ret.assign(reinterpret_cast(input), value.length()); + out.assign(reinterpret_cast(input), in.length()); free(input); - - return ret; } + bool ParityEven7bit::inplace(unsigned char *input, uint64_t input_len) { uint64_t i; @@ -76,7 +75,6 @@ bool ParityEven7bit::inplace(unsigned char *input, uint64_t input_len) { } - } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/parity_even_7bit.h b/src/actions/transformations/parity_even_7bit.h index 4e763593e4..9ae23f4194 100644 --- a/src/actions/transformations/parity_even_7bit.h +++ b/src/actions/transformations/parity_even_7bit.h @@ -30,9 +30,13 @@ namespace transformations { class ParityEven7bit : public Transformation { public: - explicit ParityEven7bit(const std::string &action) : Transformation(action) { } + explicit ParityEven7bit(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; - std::string execute(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_odd_7bit.cc b/src/actions/transformations/parity_odd_7bit.cc index 75b1e7ee19..47b8e6fc37 100644 --- a/src/actions/transformations/parity_odd_7bit.cc +++ b/src/actions/transformations/parity_odd_7bit.cc @@ -32,28 +32,27 @@ namespace actions { namespace transformations { -std::string ParityOdd7bit::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void ParityOdd7bit::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - inplace(input, value.length()); + inplace(input, in.length()); - ret.assign(reinterpret_cast(input), value.length()); + out.assign(reinterpret_cast(input), in.length()); free(input); - - return ret; } + bool ParityOdd7bit::inplace(unsigned char *input, uint64_t input_len) { uint64_t i; diff --git a/src/actions/transformations/parity_odd_7bit.h b/src/actions/transformations/parity_odd_7bit.h index 7239349d73..eecdd9316b 100644 --- a/src/actions/transformations/parity_odd_7bit.h +++ b/src/actions/transformations/parity_odd_7bit.h @@ -30,9 +30,13 @@ namespace transformations { class ParityOdd7bit : public Transformation { public: - explicit ParityOdd7bit(const std::string &action) : Transformation(action) { } + explicit ParityOdd7bit(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; - std::string execute(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_zero_7bit.cc b/src/actions/transformations/parity_zero_7bit.cc index 622399f355..fe938d133b 100644 --- a/src/actions/transformations/parity_zero_7bit.cc +++ b/src/actions/transformations/parity_zero_7bit.cc @@ -32,26 +32,24 @@ namespace actions { namespace transformations { -std::string ParityZero7bit::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void ParityZero7bit::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - inplace(input, value.length()); + inplace(input, in.length()); - ret.assign(reinterpret_cast(input), value.length()); + out.assign(reinterpret_cast(input), in.length()); free(input); - - return ret; } diff --git a/src/actions/transformations/parity_zero_7bit.h b/src/actions/transformations/parity_zero_7bit.h index 17d79ec8b9..50c98c311f 100644 --- a/src/actions/transformations/parity_zero_7bit.h +++ b/src/actions/transformations/parity_zero_7bit.h @@ -30,9 +30,13 @@ namespace transformations { class ParityZero7bit : public Transformation { public: - explicit ParityZero7bit(const std::string &action) : Transformation(action) { } + explicit ParityZero7bit(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; - std::string execute(const std::string &exp, Transaction *transaction) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/php_args_names.cc b/src/actions/transformations/php_args_names.cc index e445f6b4e7..41e7912661 100644 --- a/src/actions/transformations/php_args_names.cc +++ b/src/actions/transformations/php_args_names.cc @@ -33,15 +33,17 @@ PhpArgsNames::PhpArgsNames(const std::string &a) } -std::string PhpArgsNames::execute(const std::string &val, - Transaction *transaction) { +void PhpArgsNames::execute(Transaction *t, + ModSecStackString &val, + ModSecStackString &out) { //Took the logic from php src code: //https://github.com/php/php-src/blob/master/main/php_variables.c //Function call PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *track_vars_array) std::string value(val); std::string ret = ""; if(value[0] == '[' || value[0] == '=') { - return ret; + out.assign(ret); + return; } std::string::size_type i = 0; while(value[i] == ' ') { @@ -74,7 +76,8 @@ std::string PhpArgsNames::execute(const std::string &val, char *tmp = &value[i]; char *close_bra = strchr(tmp, ']'); if(close_bra == NULL) { - return ret; + out.assign(ret); + return; } int array_size = (int)(close_bra - start) + 1; if(array_size - i == 3 && value[i+1] == ' ') { @@ -85,11 +88,13 @@ std::string PhpArgsNames::execute(const std::string &val, ret += value[i]; } if(i >= val_size || value[i] != '[') { - return ret; + out.assign(ret); + return; } } } - return ret; + out.assign(ret); + return; } diff --git a/src/actions/transformations/php_args_names.h b/src/actions/transformations/php_args_names.h index 2230171326..bf1383eea7 100644 --- a/src/actions/transformations/php_args_names.h +++ b/src/actions/transformations/php_args_names.h @@ -34,8 +34,9 @@ class PhpArgsNames : public Transformation { public: explicit PhpArgsNames(const std::string &action); - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_comments.cc b/src/actions/transformations/remove_comments.cc index ec146257d0..e26f7a47c6 100644 --- a/src/actions/transformations/remove_comments.cc +++ b/src/actions/transformations/remove_comments.cc @@ -32,21 +32,21 @@ namespace actions { namespace transformations { -std::string RemoveComments::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void RemoveComments::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - uint64_t input_len = value.size(); + uint64_t input_len = in.size(); uint64_t i, j, incomment; i = j = incomment = 0; @@ -100,10 +100,8 @@ std::string RemoveComments::execute(const std::string &value, input[j++] = ' '; } - ret.assign(reinterpret_cast(input), j); + out.assign(reinterpret_cast(input), j); free(input); - - return ret; } diff --git a/src/actions/transformations/remove_comments.h b/src/actions/transformations/remove_comments.h index 5a19a404e5..d0d7b0ba59 100644 --- a/src/actions/transformations/remove_comments.h +++ b/src/actions/transformations/remove_comments.h @@ -31,10 +31,12 @@ namespace transformations { class RemoveComments : public Transformation { public: - explicit RemoveComments(const std::string &action) : Transformation(action) { } + explicit RemoveComments(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override;; }; diff --git a/src/actions/transformations/remove_comments_char.cc b/src/actions/transformations/remove_comments_char.cc index 993f15696a..2f388a4bb0 100644 --- a/src/actions/transformations/remove_comments_char.cc +++ b/src/actions/transformations/remove_comments_char.cc @@ -30,48 +30,45 @@ namespace modsecurity { namespace actions { namespace transformations { -RemoveCommentsChar::RemoveCommentsChar(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string RemoveCommentsChar::execute(const std::string &val, - Transaction *transaction) { +void RemoveCommentsChar::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int64_t i; - std::string value(val); + out = in; i = 0; - while (i < value.size()) { - if (value.at(i) == '/' - && (i+1 < value.size()) && value.at(i+1) == '*') { - value.erase(i, 2); - } else if (value.at(i) == '*' - && (i+1 < value.size()) && value.at(i+1) == '/') { - value.erase(i, 2); - } else if (value.at(i) == '<' - && (i+1 < value.size()) - && value.at(i+1) == '!' - && (i+2 < value.size()) - && value.at(i+2) == '-' - && (i+3 < value.size()) - && value.at(i+3) == '-') { - value.erase(i, 4); - } else if (value.at(i) == '-' - && (i+1 < value.size()) && value.at(i+1) == '-' - && (i+2 < value.size()) && value.at(i+2) == '>') { - value.erase(i, 3); - } else if (value.at(i) == '-' - && (i+1 < value.size()) && value.at(i+1) == '-') { - value.erase(i, 2); - } else if (value.at(i) == '#') { - value.erase(i, 1); + while (i < out.size()) { + if (out.at(i) == '/' + && (i+1 < out.size()) && out.at(i+1) == '*') { + out.erase(i, 2); + } else if (out.at(i) == '*' + && (i+1 < out.size()) && out.at(i+1) == '/') { + out.erase(i, 2); + } else if (out.at(i) == '<' + && (i+1 < out.size()) + && out.at(i+1) == '!' + && (i+2 < out.size()) + && out.at(i+2) == '-' + && (i+3 < out.size()) + && out.at(i+3) == '-') { + out.erase(i, 4); + } else if (out.at(i) == '-' + && (i+1 < out.size()) && out.at(i+1) == '-' + && (i+2 < out.size()) && out.at(i+2) == '>') { + out.erase(i, 3); + } else if (out.at(i) == '-' + && (i+1 < out.size()) && out.at(i+1) == '-') { + out.erase(i, 2); + } else if (out.at(i) == '#') { + out.erase(i, 1); } else { i++; } } - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/remove_comments_char.h b/src/actions/transformations/remove_comments_char.h index 806d81c0ab..7edebdabfb 100644 --- a/src/actions/transformations/remove_comments_char.h +++ b/src/actions/transformations/remove_comments_char.h @@ -30,10 +30,12 @@ namespace transformations { class RemoveCommentsChar : public Transformation { public: - explicit RemoveCommentsChar(const std::string &action); + explicit RemoveCommentsChar(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_nulls.cc b/src/actions/transformations/remove_nulls.cc index 67b52f6d5c..bed3bb114e 100644 --- a/src/actions/transformations/remove_nulls.cc +++ b/src/actions/transformations/remove_nulls.cc @@ -33,21 +33,20 @@ namespace actions { namespace transformations { -std::string RemoveNulls::execute(const std::string &val, - Transaction *transaction) { +void RemoveNulls::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int64_t i; - std::string value(val); + out = in; i = 0; - while (i < value.size()) { - if (value.at(i) == '\0') { - value.erase(i, 1); + while (i < out.size()) { + if (out.at(i) == '\0') { + out.erase(i, 1); } else { i++; } } - - return value; } diff --git a/src/actions/transformations/remove_nulls.h b/src/actions/transformations/remove_nulls.h index 9266f2f76c..701e2c07db 100644 --- a/src/actions/transformations/remove_nulls.h +++ b/src/actions/transformations/remove_nulls.h @@ -33,8 +33,9 @@ class RemoveNulls : public Transformation { explicit RemoveNulls(const std::string &action) : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_whitespace.cc b/src/actions/transformations/remove_whitespace.cc index b2eb166208..fc3bd00db4 100644 --- a/src/actions/transformations/remove_whitespace.cc +++ b/src/actions/transformations/remove_whitespace.cc @@ -30,26 +30,22 @@ namespace modsecurity { namespace actions { namespace transformations { -RemoveWhitespace::RemoveWhitespace(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string RemoveWhitespace::execute(const std::string &val, - Transaction *transaction) { - std::string value(val); +void RemoveWhitespace::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + out = in; int64_t i = 0; const char nonBreakingSpaces = 0xa0; const char nonBreakingSpaces2 = 0xc2; // loop through all the chars - while (i < value.size()) { + while (i < out.size()) { // remove whitespaces and non breaking spaces (NBSP) - if (std::isspace(static_cast(value[i])) - || (value[i] == nonBreakingSpaces) - || value[i] == nonBreakingSpaces2) { - value.erase(i, 1); + if (std::isspace(static_cast(out[i])) + || (out[i] == nonBreakingSpaces) + || out[i] == nonBreakingSpaces2) { + out.erase(i, 1); } else { /* if the space is not a whitespace char, increment counter counter should not be incremented if a character is erased because @@ -57,10 +53,9 @@ std::string RemoveWhitespace::execute(const std::string &val, i++; } } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/remove_whitespace.h b/src/actions/transformations/remove_whitespace.h index 4622e5fa57..5a0bf8d033 100644 --- a/src/actions/transformations/remove_whitespace.h +++ b/src/actions/transformations/remove_whitespace.h @@ -30,10 +30,12 @@ namespace transformations { class RemoveWhitespace : public Transformation { public: - explicit RemoveWhitespace(const std::string &action); + explicit RemoveWhitespace(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/replace_comments.cc b/src/actions/transformations/replace_comments.cc index 1929db742f..0edd89c012 100644 --- a/src/actions/transformations/replace_comments.cc +++ b/src/actions/transformations/replace_comments.cc @@ -31,24 +31,21 @@ namespace modsecurity { namespace actions { namespace transformations { -ReplaceComments::ReplaceComments(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string ReplaceComments::execute(const std::string &value, - Transaction *transaction) { +void ReplaceComments::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { uint64_t i, j, incomment; char *input = reinterpret_cast( - malloc(sizeof(char) * value.size() + 1)); - memcpy(input, value.c_str(), value.size() + 1); - input[value.size()] = '\0'; + malloc(sizeof(char) * in.size() + 1)); + memcpy(input, in.c_str(), in.size() + 1); + input[in.size()] = '\0'; i = j = incomment = 0; - while (i < value.size()) { + while (i < in.size()) { if (incomment == 0) { - if ((input[i] == '/') && (i + 1 < value.size()) + if ((input[i] == '/') && (i + 1 < in.size()) && (input[i + 1] == '*')) { incomment = 1; i += 2; @@ -58,7 +55,7 @@ std::string ReplaceComments::execute(const std::string &value, j++; } } else { - if ((input[i] == '*') && (i + 1 < value.size()) + if ((input[i] == '*') && (i + 1 < in.size()) && (input[i + 1] == '/')) { incomment = 0; i += 2; @@ -74,13 +71,9 @@ std::string ReplaceComments::execute(const std::string &value, input[j++] = ' '; } - - std::string resp; - resp.append(reinterpret_cast(input), j); + out.append(reinterpret_cast(input), j); free(input); - - return resp; } } // namespace transformations diff --git a/src/actions/transformations/replace_comments.h b/src/actions/transformations/replace_comments.h index 9c4f872225..1ceea9da08 100644 --- a/src/actions/transformations/replace_comments.h +++ b/src/actions/transformations/replace_comments.h @@ -30,10 +30,12 @@ namespace transformations { class ReplaceComments : public Transformation { public: - explicit ReplaceComments(const std::string &action) ; + explicit ReplaceComments(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/replace_nulls.cc b/src/actions/transformations/replace_nulls.cc index 37b4cb5bd0..65d2e9206e 100644 --- a/src/actions/transformations/replace_nulls.cc +++ b/src/actions/transformations/replace_nulls.cc @@ -30,29 +30,25 @@ namespace modsecurity { namespace actions { namespace transformations { -ReplaceNulls::ReplaceNulls(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string ReplaceNulls::execute(const std::string &val, - Transaction *transaction) { +void ReplaceNulls::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int64_t i; - std::string value(val); + out = in; i = 0; - while (i < value.size()) { - if (value.at(i) == '\0') { - value.erase(i, 1); - value.insert(i, " ", 1); + while (i < out.size()) { + if (out.at(i) == '\0') { + out.erase(i, 1); + out.insert(i, " ", 1); } else { i++; } } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/replace_nulls.h b/src/actions/transformations/replace_nulls.h index 57b4bb1b8b..e6d3388e95 100644 --- a/src/actions/transformations/replace_nulls.h +++ b/src/actions/transformations/replace_nulls.h @@ -30,10 +30,12 @@ namespace transformations { class ReplaceNulls : public Transformation { public: - explicit ReplaceNulls(const std::string &action) ; + explicit ReplaceNulls(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/sha1.cc b/src/actions/transformations/sha1.cc index ed2a8aec49..adc8ee91e3 100644 --- a/src/actions/transformations/sha1.cc +++ b/src/actions/transformations/sha1.cc @@ -31,17 +31,19 @@ namespace modsecurity { namespace actions { namespace transformations { -Sha1::Sha1(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} -std::string Sha1::execute(const std::string &value, - Transaction *transaction) { +void Sha1::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + + auto a = Utils::Sha1::digest( + std::string(in.c_str(), in.size()) + ); - return Utils::Sha1::digest(value); + out.assign(a.c_str(), a.size()); } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/sha1.h b/src/actions/transformations/sha1.h index d11286e61c..4b8d7217d3 100644 --- a/src/actions/transformations/sha1.h +++ b/src/actions/transformations/sha1.h @@ -30,10 +30,12 @@ namespace transformations { class Sha1 : public Transformation { public: - explicit Sha1(const std::string &action) ; + explicit Sha1(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/sql_hex_decode.cc b/src/actions/transformations/sql_hex_decode.cc index 6e8e042876..a070149103 100644 --- a/src/actions/transformations/sql_hex_decode.cc +++ b/src/actions/transformations/sql_hex_decode.cc @@ -41,27 +41,25 @@ namespace transformations { #define ISODIGIT(X) ((X >= '0') && (X <= '7')) #endif -std::string SqlHexDecode::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void SqlHexDecode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; int size = 0; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size = inplace(input, value.length()); + size = inplace(input, in.length()); - ret.assign(reinterpret_cast(input), size); + out.assign(reinterpret_cast(input), size); free(input); - - return ret; } diff --git a/src/actions/transformations/sql_hex_decode.h b/src/actions/transformations/sql_hex_decode.h index 1f79a52002..de9563179c 100644 --- a/src/actions/transformations/sql_hex_decode.h +++ b/src/actions/transformations/sql_hex_decode.h @@ -30,10 +30,12 @@ namespace transformations { class SqlHexDecode : public Transformation { public: - explicit SqlHexDecode(const std::string &action) : Transformation(action) { } + explicit SqlHexDecode(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; static int inplace(unsigned char *data, int len); diff --git a/src/actions/transformations/transformation.cc b/src/actions/transformations/transformation.cc index 1fc2b4f731..9761043b68 100644 --- a/src/actions/transformations/transformation.cc +++ b/src/actions/transformations/transformation.cc @@ -70,11 +70,6 @@ namespace actions { namespace transformations { -std::string Transformation::execute(const std::string &value, - Transaction *transaction) { - return value; -} - Transformation* Transformation::instantiate(std::string a) { IF_MATCH(base64DecodeExt) { return new Base64DecodeExt(a); } IF_MATCH(base64Decode) { return new Base64Decode(a); } diff --git a/src/actions/transformations/transformation.h b/src/actions/transformations/transformation.h index 851387793e..4cba759fbe 100644 --- a/src/actions/transformations/transformation.h +++ b/src/actions/transformations/transformation.h @@ -32,11 +32,12 @@ class Transformation : public Action { explicit Transformation(const std::string& _action) : Action(_action, RunTimeBeforeMatchAttemptKind) { } - Transformation(const std::string& _action, int kind) - : Action(_action, kind) { } - - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override { + // FIXME: this should be remove as soon as #1974 got fixed. + out.assign(in.c_str(), in.length()); + } static Transformation* instantiate(std::string a); }; diff --git a/src/actions/transformations/trim.cc b/src/actions/transformations/trim.cc index f291a7b2a2..8dea1de1f8 100644 --- a/src/actions/transformations/trim.cc +++ b/src/actions/transformations/trim.cc @@ -31,47 +31,39 @@ namespace actions { namespace transformations { -std::string *Trim::ltrim(std::string *s) { + +void Trim::ltrim(ModSecStackString *s) { s->erase( s->begin(), std::find_if(s->begin(), s->end(), [](unsigned char c) { return !std::isspace(c); }) ); - - return s; } -std::string *Trim::rtrim(std::string *s) { +void Trim::rtrim(ModSecStackString *s) { s->erase( std::find_if(s->rbegin(), s->rend(), [](unsigned char c) { return !std::isspace(c); }).base(), s->end() ); - - return s; } -std::string *Trim::trim(std::string *s) { - return ltrim(rtrim(s)); +void Trim::trim(ModSecStackString *s) { + rtrim(s); + ltrim(s); } -Trim::Trim(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - - -std::string -Trim::execute(const std::string &val, - Transaction *transaction) { - std::string value(val); - return *this->trim(&value); -} +void Trim::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + out = in; + trim(&out); +}; } // namespace transformations diff --git a/src/actions/transformations/trim.h b/src/actions/transformations/trim.h index c6b98f8b23..0d165ab60f 100644 --- a/src/actions/transformations/trim.h +++ b/src/actions/transformations/trim.h @@ -30,14 +30,16 @@ namespace transformations { class Trim : public Transformation { public: - explicit Trim(const std::string &action) ; + explicit Trim(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; - std::string *ltrim(std::string *s); - std::string *rtrim(std::string *s); - std::string *trim(std::string *s); + static void ltrim(ModSecStackString *s); + static void rtrim(ModSecStackString *s); + static void trim(ModSecStackString *s); }; } // namespace transformations diff --git a/src/actions/transformations/trim_left.cc b/src/actions/transformations/trim_left.cc index 786e6e89ed..c73d9644cf 100644 --- a/src/actions/transformations/trim_left.cc +++ b/src/actions/transformations/trim_left.cc @@ -32,17 +32,13 @@ namespace actions { namespace transformations { +void TrimLeft::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + out = in; + ltrim(&out); +}; -TrimLeft::TrimLeft(const std::string &action) - : Trim(action) { - this->action_kind = 1; -} - -std::string TrimLeft::execute(const std::string &val, - Transaction *transaction) { - std::string value(val); - return *ltrim(&value); -} } // namespace transformations } // namespace actions diff --git a/src/actions/transformations/trim_left.h b/src/actions/transformations/trim_left.h index 61cbdda12a..3031d69677 100644 --- a/src/actions/transformations/trim_left.h +++ b/src/actions/transformations/trim_left.h @@ -31,10 +31,12 @@ namespace transformations { class TrimLeft : public Trim { public: - explicit TrimLeft(const std::string &action) ; + explicit TrimLeft(const std::string &action) + : Trim(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/trim_right.cc b/src/actions/transformations/trim_right.cc index 84569c233e..97ff9ecfea 100644 --- a/src/actions/transformations/trim_right.cc +++ b/src/actions/transformations/trim_right.cc @@ -31,16 +31,13 @@ namespace actions { namespace transformations { -TrimRight::TrimRight(const std::string &action) - : Trim(action) { - this->action_kind = 1; -} - -std::string TrimRight::execute(const std::string &val, - Transaction *transaction) { - std::string value(val); - return *this->rtrim(&value); -} +void TrimRight::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + out = in; + rtrim(&out); +}; + } // namespace transformations } // namespace actions diff --git a/src/actions/transformations/trim_right.h b/src/actions/transformations/trim_right.h index 8bb4a0132f..ba67d97531 100644 --- a/src/actions/transformations/trim_right.h +++ b/src/actions/transformations/trim_right.h @@ -31,10 +31,12 @@ namespace transformations { class TrimRight : public Trim { public: - explicit TrimRight(const std::string &action) ; + explicit TrimRight(const std::string &action) + : Trim(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/upper_case.cc b/src/actions/transformations/upper_case.cc index d908cb5e0a..83b9e29f55 100644 --- a/src/actions/transformations/upper_case.cc +++ b/src/actions/transformations/upper_case.cc @@ -27,22 +27,17 @@ namespace actions { namespace transformations { -UpperCase::UpperCase(const std::string &a) - : Transformation(a) { -} - -std::string UpperCase::execute(const std::string &val, - Transaction *transaction) { - std::string value(val); +void UpperCase::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { std::locale loc; - - for (std::string::size_type i=0; i < value.length(); ++i) { - value[i] = std::toupper(value[i], loc); + out.reserve(in.size()); + for (std::string::size_type i=0; i < in.size(); ++i) { + out += std::toupper(in[i], loc); } - - return value; } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/upper_case.h b/src/actions/transformations/upper_case.h index 15453b1b3a..83bd7fcfd6 100644 --- a/src/actions/transformations/upper_case.h +++ b/src/actions/transformations/upper_case.h @@ -32,10 +32,12 @@ namespace transformations { class UpperCase : public Transformation { public: - explicit UpperCase(const std::string &action) ; + explicit UpperCase(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/url_decode.cc b/src/actions/transformations/url_decode.cc index f8b5d37e15..7c0e17bc14 100644 --- a/src/actions/transformations/url_decode.cc +++ b/src/actions/transformations/url_decode.cc @@ -32,30 +32,22 @@ namespace actions { namespace transformations { -UrlDecode::UrlDecode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - -std::string UrlDecode::execute(const std::string &value, - Transaction *transaction) { +void UrlDecode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *val(NULL); int invalid_count = 0; int changed; - val = (unsigned char *) malloc(sizeof(char) * value.size() + 1); - memcpy(val, value.c_str(), value.size() + 1); - val[value.size()] = '\0'; + val = (unsigned char *) malloc(sizeof(char) * in.size() + 1); + memcpy(val, in.c_str(), in.size() + 1); + val[in.size()] = '\0'; - int size = utils::urldecode_nonstrict_inplace(val, value.size(), + int size = utils::urldecode_nonstrict_inplace(val, in.size(), &invalid_count, &changed); - std::string out; - out.append((const char *)val, size); free(val); - - return out; } diff --git a/src/actions/transformations/url_decode.h b/src/actions/transformations/url_decode.h index 1637bc5692..c305ba9133 100644 --- a/src/actions/transformations/url_decode.h +++ b/src/actions/transformations/url_decode.h @@ -32,10 +32,12 @@ namespace transformations { class UrlDecode : public Transformation { public: - explicit UrlDecode(const std::string &action) ; + explicit UrlDecode(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/url_decode_uni.cc b/src/actions/transformations/url_decode_uni.cc index 2e42f2bd51..fc67cb21e6 100644 --- a/src/actions/transformations/url_decode_uni.cc +++ b/src/actions/transformations/url_decode_uni.cc @@ -38,26 +38,24 @@ namespace actions { namespace transformations { -std::string UrlDecodeUni::execute(const std::string &value, - Transaction *t) { - std::string ret; +void UrlDecodeUni::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { unsigned char *input; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memcpy(input, in.c_str(), in.length()+1); - size_t i = inplace(input, value.length(), t); + size_t i = inplace(input, in.length(), t); - ret.assign(reinterpret_cast(input), i); + out.assign(reinterpret_cast(input), i); free(input); - - return ret; } diff --git a/src/actions/transformations/url_decode_uni.h b/src/actions/transformations/url_decode_uni.h index d5d46d6a90..74f8704909 100644 --- a/src/actions/transformations/url_decode_uni.h +++ b/src/actions/transformations/url_decode_uni.h @@ -31,9 +31,13 @@ namespace transformations { class UrlDecodeUni : public Transformation { public: - explicit UrlDecodeUni(const std::string &action) : Transformation(action) { } + explicit UrlDecodeUni(const std::string &action) + : Transformation(action) { } + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; - std::string execute(const std::string &exp, Transaction *transaction) override; static int inplace(unsigned char *input, uint64_t input_len, Transaction *transaction); }; diff --git a/src/actions/transformations/url_encode.cc b/src/actions/transformations/url_encode.cc index 804bdcf4ff..51103a9e41 100644 --- a/src/actions/transformations/url_encode.cc +++ b/src/actions/transformations/url_encode.cc @@ -31,12 +31,6 @@ namespace actions { namespace transformations { -UrlEncode::UrlEncode(const std::string &action) - : Transformation(action) { - this->action_kind = 1; -} - - std::string UrlEncode::url_enc(const char *input, unsigned int input_len, int *changed) { char *rval, *d; @@ -87,13 +81,13 @@ std::string UrlEncode::url_enc(const char *input, } -std::string UrlEncode::execute(const std::string &value, - Transaction *transaction) { +void UrlEncode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { int changed; - std::string ret = url_enc(value.c_str(), value.size(), &changed); - - return ret; + std::string ret = url_enc(in.c_str(), in.size(), &changed); + out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/url_encode.h b/src/actions/transformations/url_encode.h index 7be9067607..8a7401f0aa 100644 --- a/src/actions/transformations/url_encode.h +++ b/src/actions/transformations/url_encode.h @@ -30,10 +30,12 @@ namespace transformations { class UrlEncode : public Transformation { public: - explicit UrlEncode(const std::string &action) ; + explicit UrlEncode(const std::string &action) + : Transformation(action) { }; - std::string execute(const std::string &exp, - Transaction *transaction) override; + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; static std::string url_enc(const char *input, unsigned int input_len, int *changed); diff --git a/src/actions/transformations/utf8_to_unicode.cc b/src/actions/transformations/utf8_to_unicode.cc index b699705268..8018ea7bf9 100644 --- a/src/actions/transformations/utf8_to_unicode.cc +++ b/src/actions/transformations/utf8_to_unicode.cc @@ -33,31 +33,31 @@ namespace actions { namespace transformations { -std::string Utf8ToUnicode::execute(const std::string &value, - Transaction *transaction) { - std::string ret; +void Utf8ToUnicode::execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) { + unsigned char *input; int changed = 0; - char *out; + char *out2; input = reinterpret_cast - (malloc(sizeof(char) * value.length()+1)); + (malloc(sizeof(char) * in.length()+1)); if (input == NULL) { - return ""; + return; } - memcpy(input, value.c_str(), value.length()+1); + memset(input, '\0', in.length()+1); + memcpy(input, in.c_str(), in.length()+1); - out = inplace(input, value.size() + 1, &changed); - free(input); - if (out != NULL) { - ret.assign(reinterpret_cast(out), - strlen(reinterpret_cast(out))); - free(out); + out2 = inplace(input, in.size() + 1, &changed); + if (out2 != NULL) { + out.assign(reinterpret_cast(out2), + strlen(reinterpret_cast(out2))); + free(out2); } - - return ret; + free(input); } diff --git a/src/actions/transformations/utf8_to_unicode.h b/src/actions/transformations/utf8_to_unicode.h index a13f38aece..cc21ca60f3 100644 --- a/src/actions/transformations/utf8_to_unicode.h +++ b/src/actions/transformations/utf8_to_unicode.h @@ -35,10 +35,13 @@ namespace transformations { class Utf8ToUnicode : public Transformation { public: - explicit Utf8ToUnicode(const std::string &action) : Transformation(action) { } + explicit Utf8ToUnicode(const std::string &action) + : Transformation(action) { } - std::string execute(const std::string &exp, - Transaction *transaction) override; + + void execute(Transaction *t, + ModSecStackString &in, + ModSecStackString &out) override; static char *inplace(unsigned char *input, uint64_t input_len, int *changed); diff --git a/src/engine/lua.cc b/src/engine/lua.cc index 9bd6f946c8..5673b617ce 100644 --- a/src/engine/lua.cc +++ b/src/engine/lua.cc @@ -439,7 +439,11 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, "t:" + std::string(name)); // FIXME: transformation is not yet returning null. if (tfn) { - newVar = tfn->execute(newVar, t); + ModSecStackString in; + ModSecStackString out; + in.assign(newVar.c_str(), newVar.size()); + tfn->execute(t, in, out); + newVar.assign(out.c_str(), out.size()); } else { ms_dbg_a(t, 1, "SecRuleScript: Invalid transformation function: " \ @@ -461,7 +465,11 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, // FIXME: transformation is not yet returning null. if (tfn) { - newVar = tfn->execute(newVar, t); + ModSecStackString in; + ModSecStackString out; + in.assign(newVar.c_str(), newVar.size()); + tfn->execute(t, in, out); + newVar.assign(out.c_str(), out.size()); delete tfn; } else { ms_dbg_a(t, 1, "SecRuleScript: Invalid transformation function: " \ diff --git a/src/modsecurity.cc b/src/modsecurity.cc index dba4fbf2c9..9691162f2b 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -307,7 +307,9 @@ int ModSecurity::processContentOffset(const char *content, size_t len, while (!trans.empty()) { modsecurity::actions::transformations::Transformation *t; - std::string varValueRes; + ModSecStackString in; + ModSecStackString out; + yajl_gen_map_open(g); yajl_gen_string(g, reinterpret_cast("transformation"), @@ -319,8 +321,9 @@ int ModSecurity::processContentOffset(const char *content, size_t len, t = modsecurity::actions::transformations::Transformation::instantiate( trans.back().str().c_str()); - varValueRes = t->execute(varValue, NULL); - varValue.assign(varValueRes); + in.assign(varValue.c_str()); + t->execute(NULL, in, out); + varValue.assign(out.c_str()); trans.pop_back(); yajl_gen_string(g, reinterpret_cast("value"), diff --git a/src/rule_message.cc b/src/rule_message.cc index 593c06ad93..b54f97dbee 100644 --- a/src/rule_message.cc +++ b/src/rule_message.cc @@ -19,6 +19,9 @@ #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/utils/string.h" +#include "src/actions/tag.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { @@ -94,4 +97,123 @@ std::string RuleMessage::log(const RuleMessage *rm, int props, int code) { } -} // namespace modsecurity +RuleWithActions *RuleMessage::getRule() const { + return m_rule; +} + + +void RuleMessage::setRule(RuleWithActions *rule) { + m_rule = rule; +} + + +bool RuleMessage::isSettle() const { + return m_rule != nullptr; +} + + +int RuleMessage::getRuleId() const { + if (m_rule) { + return m_rule->getId(); + } + return -1; +} + + +int RuleMessage::getPhase() const { + if (m_rule) { + return m_rule->getPhase(); + } + return 0; +} + + +std::string RuleMessage::getFileName() const { + if (m_rule) { + return *m_rule->getFileName().get(); + } + return ""; +} + + +int RuleMessage::getLineNumber() const { + if (m_rule) { + return m_rule->getLineNumber(); + } + return 0; +} + + +std::string RuleMessage::getRev() const { + if (m_rule) { + return m_rule->getRevision(); + } + return ""; +} + + +std::string RuleMessage::getVer() const { + if (m_rule) { + return m_rule->getVersion(); + } + return ""; +} + + +int RuleMessage::getMaturity() const { + if (m_rule) { + return m_rule->getMaturity(); + } + return 0; +} + + +int RuleMessage::getAccuracy() const { + if (m_rule) { + return m_rule->getAccuracy(); + } + return 0; +} + + +std::string RuleMessage::getClientIpAddress() const { + if (m_transaction) { + return *m_transaction->m_clientIpAddress.get(); + } + return ""; +} + + +std::string RuleMessage::getServerIpAddress() const { + if (m_transaction) { + return *m_transaction->m_serverIpAddress.get(); + } + return ""; +} + + +std::string RuleMessage::getRequestId() const { + if (m_transaction) { + return *m_transaction->m_id.get(); + } + return ""; +} + + +std::string RuleMessage::getUri() const { + if (m_transaction) { + return *m_transaction->m_uri_no_query_string_decoded.get(); + } + return ""; +} + + +bool RuleMessage::isDisruptive() const { + if (m_rule) { + return m_rule->hasDisruptiveAction(); + } + return 0; +} + + +} // namespace modsecurity diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 45af242ea1..5d6f05c7a9 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -360,62 +360,35 @@ void RuleWithActions::executeAction(Transaction *trans, } -inline void RuleWithActions::executeTransformation( - actions::transformations::Transformation *a, - std::shared_ptr *value, +void RuleWithActions::executeTransformations( Transaction *trans, - TransformationResults *ret, - std::string *path) const { + const std::string &in, + TransformationsResults &results) { + int none = 0; - std::string *oldValue = (*value).get(); - std::string newValue = a->execute(*oldValue, trans); + ModSecStackString ssin; + ssin.assign(in.c_str()); - if (newValue != *oldValue) { - std::shared_ptr u(new std::string(newValue)); - if (m_containsMultiMatchAction) { - ret->push_back(std::make_pair(u, a->m_name)); - } - *value = u; - } + TransformationResult a = TransformationResult(&ssin); + results.push_back(a); - if (path->empty()) { - path->append(*a->m_name.get()); - } else { - path->append("," + *a->m_name.get()); - } - ms_dbg_a(trans, 9, "Transformation " + \ - *a->m_name.get() + ": \"" + \ - utils::string::limitTo(80, newValue) + "\""); -} - -void RuleWithActions::executeTransformations( - Transaction *trans, - const std::string &in, - TransformationResults &ret) { - int none = 0; std::string path(""); std::shared_ptr value = std::shared_ptr(new std::string(in)); - if (hasMultimatchAction()) { - /* keep the original value */ - ret.push_back(std::make_pair( - std::shared_ptr(new std::string(*value)), - std::shared_ptr(new std::string(path)))); - } - for (Action *a : getTransformationPtr()) { - if (a->m_isNone) { + for (Action *action : getTransformationPtr()) { + if (action->m_isNone) { none++; } } - for (Transformation *a : getTransformationPtr()) { + for (Transformation *t : getTransformationPtr()) { if (none == 0) { - executeTransformation(a, &value, trans, &ret, &path); + executeTransformation(trans, &results, t); } - if (a->m_isNone) { + if (t->m_isNone) { none--; } } @@ -427,8 +400,8 @@ void RuleWithActions::executeTransformations( if (m_ruleId != b.first) { continue; } - Transformation *a = dynamic_cast(b.second.get()); - if (a->m_isNone) { + Transformation *t = dynamic_cast(b.second.get()); + if (t->m_isNone) { none++; } } @@ -438,26 +411,61 @@ void RuleWithActions::executeTransformations( if (m_ruleId != b.first) { continue; } - Transformation *a = dynamic_cast(b.second.get()); + Transformation *t = dynamic_cast(b.second.get()); if (none == 0) { - executeTransformation(a, &value, trans, &ret, &path); + executeTransformation(trans, &results, t); } - if (a->m_isNone) { + if (t->m_isNone) { none--; } } - if (m_containsMultiMatchAction == true) { +/* + if (hasMultimatchAction() == true) { ms_dbg_a(trans, 9, "multiMatch is enabled. " \ - + std::to_string(ret.size()) + \ + + std::to_string(results.size()) + \ " values to be tested."); + } else { + results.pop_front(); + results.push_back(TransformationResult(&ssin)); } +*/ +} - if (!m_containsMultiMatchAction) { - ret.push_back(std::make_pair( - std::shared_ptr(new std::string(*value)), - std::shared_ptr(new std::string(path)))); - } + + +void RuleWithActions::executeTransformation( + Transaction *transaction, + TransformationsResults *ret, + Transformation *transformation) { + executeTransformation( + transaction, + *ret->back().getAfter(), + ret, + transformation + ); +} + + +void RuleWithActions::executeTransformation( + Transaction *transaction, + ModSecStackString in, + TransformationsResults *ret, + Transformation *transformation) { + + ModSecStackString out; + transformation->execute(transaction, in, out); + + ms_dbg_a(transaction, 9, " T (" + std::to_string(ret->size() - 1) + ") " + \ + *transformation->m_name.get() + ": \"" + \ + utils::string::limitTo(80, out) + "\""); + + ret->push_back( + TransformationResult( + &out, + transformation->m_name.get() + ) + ); } diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index a58d00ee52..29ccf6f8e8 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -291,15 +291,22 @@ bool RuleWithOperator::evaluate(Transaction *trans) { continue; } - TransformationResults values; + TransformationsResults transformationsResults; - executeTransformations(trans, value, values); + executeTransformations(trans, value, transformationsResults); - for (const auto &valueTemp : values) { + auto iter = transformationsResults.begin(); + if (!hasMultimatchAction()) { + iter = transformationsResults.end(); + std::advance(iter, -1); + } + while (iter != transformationsResults.end()) { bool ret; - std::string valueAfterTrans = std::move(*valueTemp.first); + auto &valueTemp = *iter; + // FIXME: this copy is not necessary. + std::string *valueAfterTrans = new std::string(valueTemp.getAfter()->c_str()); - ret = executeOperatorAt(trans, key, valueAfterTrans); + ret = executeOperatorAt(trans, key, *valueAfterTrans); if (ret == true) { trans->messageGetLast()->m_match = m_operator->resolveMatchMessage(trans, @@ -308,14 +315,28 @@ bool RuleWithOperator::evaluate(Transaction *trans) { for (auto &i : v->getOrigin()) { trans->messageGetLast()->m_reference.append(i->toText()); } + auto iter2 = transformationsResults.begin(); + while (iter2 != transformationsResults.end()) { + if (iter2->getTransformationName()) { + trans->messageGetLast()->m_reference.append(*iter2->getTransformationName()); + } + /* + if (iter == iter2) { + break; + } else { + trans->messageGetLast()->m_reference.append("--"); + } + */ + iter2++; + } - trans->messageGetLast()->m_reference.append(*valueTemp.second); - - updateMatchedVars(trans, key, valueAfterTrans); + updateMatchedVars(trans, key, *valueAfterTrans); executeActionsIndependentOfChainedRuleResult(trans); globalRet = true; } + delete valueAfterTrans; + iter++; } delete v; v = NULL; diff --git a/src/rules.cc b/src/rules.cc new file mode 100644 index 0000000000..4666deb079 --- /dev/null +++ b/src/rules.cc @@ -0,0 +1,84 @@ +/* + * ModSecurity, http://www.modsecurity.org/ + * Copyright (c) 2015 Trustwave Holdings, Inc. (http://www.trustwave.com/) + * + * You may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * If any of the files related to licensing are missing or if you have any + * other questions related to licensing please contact Trustwave Holdings, Inc. + * directly using the email address security@modsecurity.org. + * + */ + +#include "modsecurity/rules.h" +#include "src/rule_with_actions.h" + + +namespace modsecurity { + + +int Rules::append(Rules *from, const std::vector &ids, std::ostringstream *err) { + size_t j = 0; + for (; j < from->size(); j++) { + RuleWithActions *rule = dynamic_cast(from->at(j).get()); + if (rule && std::binary_search(ids.begin(), ids.end(), rule->getId())) { + if (err != NULL) { + *err << "Rule id: " << std::to_string(rule->getId()) \ + << " is duplicated" << std::endl; + } + return -1; + } + } + m_rules.insert(m_rules.end(), from->m_rules.begin(), from->m_rules.end()); + return j; +} + + +bool Rules::insert(std::shared_ptr rule) { + return insert(rule, nullptr, nullptr); +} + + +bool Rules::insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { + RuleWithActions*r = dynamic_cast(rule.get()); + if (r && ids != nullptr && err != nullptr + && std::binary_search(ids->begin(), ids->end(), r->getId())) { + if (err != NULL) { + *err << "Rule id: " << std::to_string(r->getId()) \ + << " is duplicated" << std::endl; + } + return false; + } + m_rules.push_back(rule); + return true; +} + + +size_t Rules::size() { + return m_rules.size(); +} + + +std::shared_ptr Rules::operator[](int index) { + return m_rules[index]; +} + + +std::shared_ptr Rules::at(int index) { + return m_rules[index]; +} + + +void Rules::dump() { + for (int j = 0; j < m_rules.size(); j++) { + std::cout << " Rule ID: " << m_rules.at(j)->getReference(); + std::cout << "--" << m_rules.at(j) << std::endl; + } +} + + +} // namespace modsecurity + diff --git a/test/test-cases/regression/actions.json b/test/test-cases/regression/actions.json index daa93c844e..c69f1a7cb0 100644 --- a/test/test-cases/regression/actions.json +++ b/test/test-cases/regression/actions.json @@ -49,7 +49,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 403 }, @@ -109,7 +109,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 302, "redirect_url": "http://www.google.com" @@ -169,7 +169,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 306, "redirect_url": "http://www.google.com" @@ -229,7 +229,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 500 }, @@ -288,7 +288,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 500 }, @@ -347,7 +347,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 500 }, diff --git a/test/test-cases/regression/auditlog.json b/test/test-cases/regression/auditlog.json index 860ba0ef2b..33b6110111 100644 --- a/test/test-cases/regression/auditlog.json +++ b/test/test-cases/regression/auditlog.json @@ -40,7 +40,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 403 }, @@ -97,7 +97,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 403 }, @@ -155,7 +155,7 @@ }, "expected": { "audit_log": "", - "debug_log": "\\[9\\] Transformation t:trim: \"test", + "debug_log": "\\[9\\] T \\(0\\) t:trim: \"test", "error_log": "", "http_code": 403 }, diff --git a/test/test-cases/regression/collection-regular_expression_selection.json b/test/test-cases/regression/collection-regular_expression_selection.json index 79f772b80b..cde06ac767 100644 --- a/test/test-cases/regression/collection-regular_expression_selection.json +++ b/test/test-cases/regression/collection-regular_expression_selection.json @@ -48,7 +48,7 @@ }, "expected":{ "audit_log":"", - "debug_log":"Transformation t:lowercase: \"test2\"", + "debug_log":"T \\(0\\) t:lowercase: \"test2\"", "error_log":"" }, "rules":[ diff --git a/test/test-cases/regression/config-response_type.json b/test/test-cases/regression/config-response_type.json index c4ea1c4970..621ab38a20 100644 --- a/test/test-cases/regression/config-response_type.json +++ b/test/test-cases/regression/config-response_type.json @@ -31,7 +31,7 @@ ] }, "expected":{ - "debug_log":"Transformation t:trim: \"no need.\"" + "debug_log":"T \\(0\\) t:trim: \"no need.\"" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/variable-FILES.json b/test/test-cases/regression/variable-FILES.json index d7fd457e33..7f0f4dcf56 100644 --- a/test/test-cases/regression/variable-FILES.json +++ b/test/test-cases/regression/variable-FILES.json @@ -51,7 +51,7 @@ ] }, "expected":{ - "debug_log":"Transformation t:trim: \"small_text_file" + "debug_log":"T \\(0\\) t:trim: \"small_text_file" }, "rules":[ "SecRuleEngine On", diff --git a/test/test-cases/regression/variable-FILES_NAMES.json b/test/test-cases/regression/variable-FILES_NAMES.json index 48c6dc2193..fcf95ed972 100644 --- a/test/test-cases/regression/variable-FILES_NAMES.json +++ b/test/test-cases/regression/variable-FILES_NAMES.json @@ -51,7 +51,7 @@ ] }, "expected":{ - "debug_log":"Transformation t:trim: \"filedata" + "debug_log":"T \\(0\\) t:trim: \"filedata" }, "rules":[ "SecRuleEngine On", diff --git a/test/unit/unit.cc b/test/unit/unit.cc index 038d8aa127..cddf6a67f5 100644 --- a/test/unit/unit.cc +++ b/test/unit/unit.cc @@ -90,8 +90,14 @@ void perform_unit_test(ModSecurityTest *test, UnitTest *t, } delete op; } else if (t->type == "tfn") { + modsecurity::ModSecStackString in; + modsecurity::ModSecStackString out; + std::string ret; + in.assign(t->input.c_str(), t->input.size()); Transformation *tfn = Transformation::instantiate("t:" + t->name); - std::string ret = tfn->execute(t->input, NULL); + tfn->execute(NULL, in, out); + ret.assign(out.c_str(), out.size()); + t->obtained = 1; t->obtainedOutput = ret; if (ret != t->output) { From dc33ed7abc28d5422c43719cb66d164d733007f5 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Fri, 15 Mar 2019 01:35:07 -0300 Subject: [PATCH 09/16] Removes RuleMessage from action execute signature --- headers/modsecurity/actions/action.h | 4 ---- src/actions/audit_log.cc | 3 +-- src/actions/audit_log.h | 3 +-- src/actions/block.cc | 3 +-- src/actions/block.h | 3 +-- src/actions/data/status.cc | 3 +-- src/actions/data/status.h | 3 +-- src/actions/disruptive/deny.cc | 7 +++---- src/actions/disruptive/deny.h | 3 +-- src/actions/disruptive/drop.cc | 7 +++---- src/actions/disruptive/drop.h | 3 +-- src/actions/disruptive/pass.cc | 3 +-- src/actions/disruptive/pass.h | 3 +-- src/actions/disruptive/redirect.cc | 7 +++---- src/actions/disruptive/redirect.h | 3 +-- src/actions/log.cc | 3 +-- src/actions/log.h | 3 +-- src/actions/log_data.cc | 5 ++--- src/actions/log_data.h | 3 +-- src/actions/msg.cc | 5 ++--- src/actions/msg.h | 3 +-- src/actions/no_audit_log.cc | 3 +-- src/actions/no_audit_log.h | 3 +-- src/actions/no_log.cc | 3 +-- src/actions/no_log.h | 3 +-- src/actions/severity.cc | 3 +-- src/actions/severity.h | 3 +-- src/actions/tag.cc | 6 ++---- src/actions/tag.h | 3 +-- src/rule_with_actions.cc | 18 ++++++++---------- 30 files changed, 45 insertions(+), 80 deletions(-) diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index 3cbfc2571b..67f014f464 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -70,10 +70,6 @@ class Action { virtual std::string execute(const std::string &exp, Transaction *transaction); virtual bool execute(RuleWithActions *rule, Transaction *transaction); - virtual bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &ruleMessage) { - return execute(rule, transaction); - } /** * This method is meant to be used by transformations — a particular diff --git a/src/actions/audit_log.cc b/src/actions/audit_log.cc index 3d2ae2a625..6562bcbe3f 100644 --- a/src/actions/audit_log.cc +++ b/src/actions/audit_log.cc @@ -27,8 +27,7 @@ namespace modsecurity { namespace actions { -bool AuditLog::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool AuditLog::execute(RuleWithActions *rule, Transaction *transaction) { transaction->messageSetNoAuditLog(false); return true; } diff --git a/src/actions/audit_log.h b/src/actions/audit_log.h index 9cbd704c31..56026b8a3f 100644 --- a/src/actions/audit_log.h +++ b/src/actions/audit_log.h @@ -35,8 +35,7 @@ class AuditLog : public Action { explicit AuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/block.cc b/src/actions/block.cc index 01b6c37f07..62c6c153a6 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -29,8 +29,7 @@ namespace modsecurity { namespace actions { -bool Block::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Block::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 8, "Marking request as disruptive."); return true; } diff --git a/src/actions/block.h b/src/actions/block.h index 4fe066355a..0c30130897 100644 --- a/src/actions/block.h +++ b/src/actions/block.h @@ -38,8 +38,7 @@ class Block : public Action { Block(const Block &a) = delete; Block &operator=(const Block &a) = delete; - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; diff --git a/src/actions/data/status.cc b/src/actions/data/status.cc index 9d6d0b8c78..0a81a6709f 100644 --- a/src/actions/data/status.cc +++ b/src/actions/data/status.cc @@ -38,8 +38,7 @@ bool Status::init(std::string *error) { } -bool Status::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Status::execute(RuleWithActions *rule, Transaction *transaction) { transaction->m_it.status = m_status; return true; } diff --git a/src/actions/data/status.h b/src/actions/data/status.h index 4634e4b0d4..5aa294e122 100644 --- a/src/actions/data/status.h +++ b/src/actions/data/status.h @@ -37,8 +37,7 @@ class Status : public Action { m_status(0) { } bool init(std::string *error) override; - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; int m_status; }; diff --git a/src/actions/disruptive/deny.cc b/src/actions/disruptive/deny.cc index 1ce9b947e8..3a9ade8e27 100644 --- a/src/actions/disruptive/deny.cc +++ b/src/actions/disruptive/deny.cc @@ -28,8 +28,7 @@ namespace actions { namespace disruptive { -bool Deny::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Deny::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 8, "Running action deny"); if (transaction->m_it.status == 200) { @@ -38,9 +37,9 @@ bool Deny::execute(RuleWithActions *rule, Transaction *transaction, transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm.setRule(rule); + transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( - rm.log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/deny.h b/src/actions/disruptive/deny.h index db8c5e0ae4..28ba74c016 100644 --- a/src/actions/disruptive/deny.h +++ b/src/actions/disruptive/deny.h @@ -33,8 +33,7 @@ class Deny : public Action { public: explicit Deny(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/drop.cc b/src/actions/disruptive/drop.cc index a53cfa5bbd..fe6b94b572 100644 --- a/src/actions/disruptive/drop.cc +++ b/src/actions/disruptive/drop.cc @@ -32,8 +32,7 @@ namespace actions { namespace disruptive { -bool Drop::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Drop::execute(RuleWithActions *rule, Transaction *transaction) { ms_dbg_a(transaction, 8, "Running action drop " \ "[executing deny instead of drop.]"); @@ -43,9 +42,9 @@ bool Drop::execute(RuleWithActions *rule, Transaction *transaction, transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm.setRule(rule); + transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( - rm.log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/drop.h b/src/actions/disruptive/drop.h index d25952a58d..71394bca12 100644 --- a/src/actions/disruptive/drop.h +++ b/src/actions/disruptive/drop.h @@ -32,8 +32,7 @@ class Drop : public Action { public: explicit Drop(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/pass.cc b/src/actions/disruptive/pass.cc index fd26f52a5e..fc6833849d 100644 --- a/src/actions/disruptive/pass.cc +++ b/src/actions/disruptive/pass.cc @@ -29,8 +29,7 @@ namespace actions { namespace disruptive { -bool Pass::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Pass::execute(RuleWithActions *rule, Transaction *transaction) { intervention::free(&transaction->m_it); intervention::reset(&transaction->m_it); diff --git a/src/actions/disruptive/pass.h b/src/actions/disruptive/pass.h index ba1f4d09bc..a21900a5d3 100644 --- a/src/actions/disruptive/pass.h +++ b/src/actions/disruptive/pass.h @@ -31,8 +31,7 @@ class Pass : public Action { public: explicit Pass(const std::string &action) : Action(action) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool isDisruptive() override { return true; } }; diff --git a/src/actions/disruptive/redirect.cc b/src/actions/disruptive/redirect.cc index 4d1f901b15..ff4640604f 100644 --- a/src/actions/disruptive/redirect.cc +++ b/src/actions/disruptive/redirect.cc @@ -34,8 +34,7 @@ bool Redirect::init(std::string *error) { } -bool Redirect::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Redirect::execute(RuleWithActions *rule, Transaction *transaction) { std::string m_urlExpanded(m_string->evaluate(transaction)); /* if it was changed before, lets keep it. */ if (transaction->m_it.status == 200 @@ -47,9 +46,9 @@ bool Redirect::execute(RuleWithActions *rule, Transaction *transaction, transaction->m_it.url = strdup(m_urlExpanded.c_str()); transaction->m_it.disruptive = true; intervention::freeLog(&transaction->m_it); - rm.setRule(rule); + transaction->messageGetLast()->setRule(rule); transaction->m_it.log = strdup( - rm.log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); + transaction->messageGetLast()->log(RuleMessage::LogMessageInfo::ClientLogMessageInfo).c_str()); return true; } diff --git a/src/actions/disruptive/redirect.h b/src/actions/disruptive/redirect.h index a7719b9999..2a1574a509 100644 --- a/src/actions/disruptive/redirect.h +++ b/src/actions/disruptive/redirect.h @@ -46,8 +46,7 @@ class Redirect : public Action { m_status(0), m_string(std::move(z)) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; bool isDisruptive() override { return true; } diff --git a/src/actions/log.cc b/src/actions/log.cc index 84a788d2bf..87dc252ae7 100644 --- a/src/actions/log.cc +++ b/src/actions/log.cc @@ -28,8 +28,7 @@ namespace modsecurity { namespace actions { -bool Log::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Log::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/log.h b/src/actions/log.h index edbe0b77b4..d8c3483836 100644 --- a/src/actions/log.h +++ b/src/actions/log.h @@ -33,8 +33,7 @@ class Log : public Action { explicit Log(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/log_data.cc b/src/actions/log_data.cc index 6e1dc8f2e0..9af821d42f 100644 --- a/src/actions/log_data.cc +++ b/src/actions/log_data.cc @@ -29,9 +29,8 @@ namespace modsecurity { namespace actions { -bool LogData::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { - rm.m_data = data(transaction); +bool LogData::execute(RuleWithActions *rule, Transaction *transaction) { + transaction->messageGetLast()->m_data = data(transaction); return true; } diff --git a/src/actions/log_data.h b/src/actions/log_data.h index d5bb6cbdd4..2c29cd468c 100644 --- a/src/actions/log_data.h +++ b/src/actions/log_data.h @@ -39,8 +39,7 @@ class LogData : public Action { : Action("logdata", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string data(Transaction *Transaction); diff --git a/src/actions/msg.cc b/src/actions/msg.cc index b0cd98de0b..5a005f4195 100644 --- a/src/actions/msg.cc +++ b/src/actions/msg.cc @@ -46,10 +46,9 @@ namespace modsecurity { namespace actions { -bool Msg::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Msg::execute(RuleWithActions *rule, Transaction *transaction) { std::string msg = data(transaction); - rm.m_message = msg; + transaction->messageGetLast()->m_message = msg; ms_dbg_a(transaction, 9, "Saving msg: " + msg); return true; diff --git a/src/actions/msg.h b/src/actions/msg.h index a2e200ed16..a2044e053d 100644 --- a/src/actions/msg.h +++ b/src/actions/msg.h @@ -40,8 +40,7 @@ class Msg : public Action { : Action("msg", RunTimeOnlyIfMatchKind), m_string(std::move(z)) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; std::string data(Transaction *Transaction); std::shared_ptr m_string; diff --git a/src/actions/no_audit_log.cc b/src/actions/no_audit_log.cc index 0e295ff8c0..8283059b70 100644 --- a/src/actions/no_audit_log.cc +++ b/src/actions/no_audit_log.cc @@ -26,8 +26,7 @@ namespace modsecurity { namespace actions { -bool NoAuditLog::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool NoAuditLog::execute(RuleWithActions *rule, Transaction *transaction) { transaction->messageSetNoAuditLog(true); return true; } diff --git a/src/actions/no_audit_log.h b/src/actions/no_audit_log.h index 4b01dc743a..22491171dd 100644 --- a/src/actions/no_audit_log.h +++ b/src/actions/no_audit_log.h @@ -35,8 +35,7 @@ class NoAuditLog : public Action { explicit NoAuditLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/no_log.cc b/src/actions/no_log.cc index c01a696f84..4fadc190f4 100644 --- a/src/actions/no_log.cc +++ b/src/actions/no_log.cc @@ -29,8 +29,7 @@ namespace modsecurity { namespace actions { -bool NoLog::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool NoLog::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/no_log.h b/src/actions/no_log.h index e6bc673cdd..bb42a4f614 100644 --- a/src/actions/no_log.h +++ b/src/actions/no_log.h @@ -33,8 +33,7 @@ class NoLog : public Action { explicit NoLog(const std::string &action) : Action(action, RunTimeOnlyIfMatchKind) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; }; } // namespace actions diff --git a/src/actions/severity.cc b/src/actions/severity.cc index 297573c881..14af0f91c1 100644 --- a/src/actions/severity.cc +++ b/src/actions/severity.cc @@ -71,8 +71,7 @@ bool Severity::init(std::string *error) { } -bool Severity::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Severity::execute(RuleWithActions *rule, Transaction *transaction) { return true; } diff --git a/src/actions/severity.h b/src/actions/severity.h index c9c656cbbb..a07193e8a4 100644 --- a/src/actions/severity.h +++ b/src/actions/severity.h @@ -35,8 +35,7 @@ class Severity : public Action { : Action(action), m_severity(0) { } - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; bool init(std::string *error) override; int m_severity; diff --git a/src/actions/tag.cc b/src/actions/tag.cc index e001280868..454ffea605 100644 --- a/src/actions/tag.cc +++ b/src/actions/tag.cc @@ -57,13 +57,11 @@ std::string Tag::getName(Transaction *transaction) { } -bool Tag::execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) { +bool Tag::execute(RuleWithActions *rule, Transaction *transaction) { std::string tag = getName(transaction); ms_dbg_a(transaction, 9, "Rule tag: " + tag); - rm.m_tags.push_back(tag); - + transaction->messageGetLast()->m_tags.push_back(tag); return true; } diff --git a/src/actions/tag.h b/src/actions/tag.h index e0af10128b..799b948d47 100644 --- a/src/actions/tag.h +++ b/src/actions/tag.h @@ -38,8 +38,7 @@ class Tag : public Action { std::string getName(Transaction *transaction); - bool execute(RuleWithActions *rule, Transaction *transaction, - RuleMessage &rm) override; + bool execute(RuleWithActions *rule, Transaction *transaction) override; protected: std::shared_ptr m_string; diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 5d6f05c7a9..d187baf07f 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -258,7 +258,7 @@ void RuleWithActions::executeActionsIndependentOfChainedRuleResult(Transaction * } else if (*a->m_name.get() == "setvar") { ms_dbg_a(trans, 4, "Running [independent] (non-disruptive) " \ "action: " + *a->m_name.get()); - a->execute(this, trans, *trans->messageGetLast()); + a->execute(this, trans); } } } @@ -282,7 +282,7 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { for (actions::Tag *a : getTagsActionPtr()) { ms_dbg_a(trans, 4, "Running (non-disruptive) action: " \ + *a->m_name.get()); - a->execute(this, trans, *trans->messageGetLast()); + a->execute(this, trans); } /** @@ -301,18 +301,17 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { } if (m_logData) { - m_logData->execute(this, trans, *trans->messageGetLast()); + m_logData->execute(this, trans); } else if (m_defaultActionLogData) { - m_defaultActionLogData->execute(this, trans, *trans->messageGetLast()); + m_defaultActionLogData->execute(this, trans); } if (m_msg) { - m_msg->execute(this, trans, *trans->messageGetLast()); + m_msg->execute(this, trans); } else if (m_defaultActionMsg) { - m_defaultActionMsg->execute(this, trans, *trans->messageGetLast()); + m_defaultActionMsg->execute(this, trans); } - for (auto &a : getMatchActionsPtr()) { if (!a->isDisruptive() && !(disruptiveAlreadyExecuted @@ -334,11 +333,10 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { void RuleWithActions::executeAction(Transaction *trans, Action *a, bool defaultContext) { - if (a->isDisruptive() == false && *a->m_name.get() != "block") { ms_dbg_a(trans, 9, "Running " \ "action: " + *a->m_name.get()); - a->execute(this, trans, *trans->messageGetLast()); + a->execute(this, trans); return; } @@ -351,7 +349,7 @@ void RuleWithActions::executeAction(Transaction *trans, if (trans->getRuleEngineState() == RulesSet::EnabledRuleEngine) { ms_dbg_a(trans, 4, "Running (disruptive) action: " + *a->m_name.get() + "."); - a->execute(this, trans, *trans->messageGetLast()); + a->execute(this, trans); return; } From 17122a05d333dac8881ed34892749f472f3e058f Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Fri, 15 Mar 2019 01:56:40 -0300 Subject: [PATCH 10/16] Cleanup on Action class --- headers/modsecurity/actions/action.h | 85 +- headers/modsecurity/modsecurity.h | 6 + headers/modsecurity/rule_with_actions.h | 11 +- headers/modsecurity/rules.h | 54 +- headers/modsecurity/transaction.h | 1 - src/Makefile.am | 5 +- src/actions/accuracy.cc | 2 +- src/actions/block.cc | 1 + src/actions/chain.cc | 2 + src/actions/maturity.cc | 2 +- src/actions/phase.cc | 1 + src/actions/rev.cc | 1 + src/actions/rule_id.cc | 2 + src/actions/set_env.cc | 2 + src/actions/set_var.cc | 1 + src/actions/transformations/base64_decode.cc | 4 +- src/actions/transformations/base64_decode.h | 4 +- .../transformations/base64_decode_ext.cc | 4 +- .../transformations/base64_decode_ext.h | 4 +- src/actions/transformations/base64_encode.cc | 4 +- src/actions/transformations/base64_encode.h | 4 +- src/actions/transformations/cmd_line.cc | 4 +- src/actions/transformations/cmd_line.h | 4 +- .../transformations/compress_whitespace.cc | 4 +- .../transformations/compress_whitespace.h | 4 +- src/actions/transformations/css_decode.cc | 18 +- src/actions/transformations/css_decode.h | 4 +- .../transformations/escape_seq_decode.cc | 4 +- .../transformations/escape_seq_decode.h | 4 +- src/actions/transformations/hex_decode.cc | 4 +- src/actions/transformations/hex_decode.h | 4 +- src/actions/transformations/hex_encode.cc | 4 +- src/actions/transformations/hex_encode.h | 4 +- .../transformations/html_entity_decode.cc | 4 +- .../transformations/html_entity_decode.h | 4 +- src/actions/transformations/js_decode.cc | 4 +- src/actions/transformations/js_decode.h | 4 +- src/actions/transformations/length.cc | 4 +- src/actions/transformations/length.h | 4 +- src/actions/transformations/lower_case.cc | 4 +- src/actions/transformations/lower_case.h | 4 +- src/actions/transformations/md5.cc | 4 +- src/actions/transformations/md5.h | 4 +- src/actions/transformations/none.cc | 4 +- src/actions/transformations/none.h | 10 +- src/actions/transformations/normalise_path.cc | 4 +- src/actions/transformations/normalise_path.h | 4 +- .../transformations/normalise_path_win.cc | 4 +- .../transformations/normalise_path_win.h | 4 +- .../transformations/parity_even_7bit.cc | 4 +- .../transformations/parity_even_7bit.h | 4 +- .../transformations/parity_odd_7bit.cc | 4 +- src/actions/transformations/parity_odd_7bit.h | 4 +- .../transformations/parity_zero_7bit.cc | 4 +- .../transformations/parity_zero_7bit.h | 4 +- src/actions/transformations/php_args_names.cc | 4 +- src/actions/transformations/php_args_names.h | 4 +- .../transformations/remove_comments.cc | 4 +- src/actions/transformations/remove_comments.h | 4 +- .../transformations/remove_comments_char.cc | 4 +- .../transformations/remove_comments_char.h | 4 +- src/actions/transformations/remove_nulls.cc | 4 +- src/actions/transformations/remove_nulls.h | 4 +- .../transformations/remove_whitespace.cc | 4 +- .../transformations/remove_whitespace.h | 4 +- .../transformations/replace_comments.cc | 4 +- .../transformations/replace_comments.h | 4 +- src/actions/transformations/replace_nulls.cc | 4 +- src/actions/transformations/replace_nulls.h | 4 +- src/actions/transformations/sha1.cc | 4 +- src/actions/transformations/sha1.h | 4 +- src/actions/transformations/sql_hex_decode.cc | 4 +- src/actions/transformations/sql_hex_decode.h | 4 +- src/actions/transformations/transformation.cc | 1 + src/actions/transformations/transformation.h | 7 +- src/actions/transformations/trim.cc | 11 +- src/actions/transformations/trim.h | 10 +- src/actions/transformations/trim_left.cc | 4 +- src/actions/transformations/trim_left.h | 4 +- src/actions/transformations/trim_right.cc | 4 +- src/actions/transformations/trim_right.h | 4 +- src/actions/transformations/upper_case.cc | 4 +- src/actions/transformations/upper_case.h | 4 +- src/actions/transformations/url_decode.cc | 4 +- src/actions/transformations/url_decode.h | 4 +- src/actions/transformations/url_decode_uni.cc | 4 +- src/actions/transformations/url_decode_uni.h | 4 +- src/actions/transformations/url_encode.cc | 4 +- src/actions/transformations/url_encode.h | 4 +- .../transformations/utf8_to_unicode.cc | 4 +- src/actions/transformations/utf8_to_unicode.h | 4 +- src/actions/ver.cc | 1 + src/engine/lua.cc | 8 +- src/modsecurity.cc | 4 +- src/operators/detect_sqli.cc | 2 + src/operators/detect_xss.cc | 1 + src/operators/pm.cc | 2 + src/operators/rbl.cc | 2 + src/operators/rx.cc | 2 + src/operators/verify_cc.cc | 2 + src/operators/verify_cpf.cc | 2 + src/operators/verify_ssn.cc | 2 + src/operators/verify_svnr.cc | 1 + src/parser/seclang-parser.cc | 962 +++++++++--------- src/parser/seclang-parser.hh | 8 +- src/parser/seclang-parser.yy | 6 +- src/rule_script.h | 2 + src/rule_with_actions.cc | 32 +- src/rules.cc | 14 +- src/rules_exceptions.cc | 6 +- src/run_time_string.cc | 1 + src/variables/rule.h | 2 +- src/variables/xml.cc | 2 + test/cppcheck_suppressions.txt | 5 +- test/unit/unit.cc | 4 +- 115 files changed, 789 insertions(+), 797 deletions(-) diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index 67f014f464..4db98753fe 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -38,28 +38,21 @@ namespace actions { class Action { - public: - + public: explicit Action(const std::string& _action, int kind = RunTimeOnlyIfMatchKind) - : m_isNone(false), - temporaryAction(false), - action_kind(kind), + : m_actionKind(kind), m_name(nullptr), m_parser_payload("") { set_name_and_payload(_action); } Action(const Action &a) - : m_isNone(a.m_isNone), - temporaryAction(a.temporaryAction), - action_kind(a.action_kind), + : m_actionKind(a.m_actionKind), m_name(a.m_name), m_parser_payload(a.m_parser_payload) { } Action &operator=(const Action& a) { - m_isNone = a.m_isNone; - temporaryAction = a.temporaryAction; - action_kind = a.action_kind; + m_actionKind = a.m_actionKind; m_name = a.m_name; m_parser_payload = a.m_parser_payload; return *this; @@ -67,52 +60,24 @@ class Action { virtual ~Action() { } + virtual bool init(std::string *error) { return true; } + virtual std::string execute(const std::string &exp, Transaction *transaction); - virtual bool execute(RuleWithActions *rule, Transaction *transaction); - + virtual bool execute(RuleWithActions *rule, + Transaction *transaction); /** * This method is meant to be used by transformations — a particular * type of action. * */ virtual void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { }; - virtual bool init(std::string *error) { return true; } virtual bool isDisruptive() { return false; } - - void set_name_and_payload(const std::string& data) { - size_t pos = data.find(":"); - std::string t = "t:"; - - if (data.compare(0, t.length(), t) == 0) { - pos = data.find(":", 2); - } - - if (pos == std::string::npos) { - m_name = std::shared_ptr(new std::string(data)); - return; - } - - m_name = std::shared_ptr(new std::string(data, 0, pos)); - m_parser_payload = std::string(data, pos + 1, data.length()); - - if (m_parser_payload.at(0) == '\'' && m_parser_payload.size() > 2) { - m_parser_payload.erase(0, 1); - m_parser_payload.pop_back(); - } - } - - bool m_isNone; - bool temporaryAction; - int action_kind; - std::shared_ptr m_name; - std::string m_parser_payload; - /** * * Define the action kind regarding to the execution time. @@ -144,7 +109,35 @@ class Action { */ RunTimeOnlyIfMatchKind, }; - }; + + int m_actionKind; + std::shared_ptr m_name; + std::string m_parser_payload; + + private: + + void set_name_and_payload(const std::string& data) { + size_t pos = data.find(":"); + std::string t = "t:"; + + if (data.compare(0, t.length(), t) == 0) { + pos = data.find(":", 2); + } + + if (pos == std::string::npos) { + m_name = std::shared_ptr(new std::string(data)); + return; + } + + m_name = std::shared_ptr(new std::string(data, 0, pos)); + m_parser_payload = std::string(data, pos + 1, data.length()); + + if (m_parser_payload.at(0) == '\'' && m_parser_payload.size() > 2) { + m_parser_payload.erase(0, 1); + m_parser_payload.pop_back(); + } + } +}; } // namespace actions diff --git a/headers/modsecurity/modsecurity.h b/headers/modsecurity/modsecurity.h index 5d26efb74e..8f51ec6b04 100644 --- a/headers/modsecurity/modsecurity.h +++ b/headers/modsecurity/modsecurity.h @@ -89,6 +89,12 @@ typedef struct ModSecurity_t modsecurity; #else namespace modsecurity { + /** + * Further that will be changed to be a stack-based string, + * for the benefit of performance. + */ + using ModSecString = std::string; + /** * * The Phases enumerator consists in mapping the different stages of a diff --git a/headers/modsecurity/rule_with_actions.h b/headers/modsecurity/rule_with_actions.h index 569f651e06..86346be521 100644 --- a/headers/modsecurity/rule_with_actions.h +++ b/headers/modsecurity/rule_with_actions.h @@ -64,18 +64,17 @@ using MatchActionsPtr = std::vector; using XmlNSs = std::vector >; using XmlNSsPtr = std::vector; -using ModSecStackString = std::basic_string, std::allocator >; class TransformationResult { public: TransformationResult( - ModSecStackString *after, + ModSecString *after, std::string *transformation) : m_after(*after), m_transformation(transformation) { }; explicit TransformationResult( - ModSecStackString *after) + ModSecString *after) : m_after(*after), m_transformation(nullptr) { }; @@ -84,7 +83,7 @@ class TransformationResult { m_transformation(t2.m_transformation) { }; - ModSecStackString *getAfter() { + ModSecString *getAfter() { return &m_after; } @@ -95,7 +94,7 @@ class TransformationResult { private: - ModSecStackString m_after; + ModSecString m_after; std::string *m_transformation; }; @@ -212,7 +211,7 @@ class RuleWithActions : public Rule { static void executeTransformation( Transaction *transaction, - ModSecStackString in, + ModSecString in, TransformationsResults *ret, Transformation *transformation); diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 6eef07058c..5499042be0 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -40,51 +40,19 @@ namespace modsecurity { class Rules { public: - void dump() const { - for (int j = 0; j < m_rules.size(); j++) { - std::cout << " Rule ID: " << m_rules.at(j)->getReference(); - std::cout << "--" << m_rules.at(j) << std::endl; - } - } - - int append(Rules *from, const std::vector &ids, std::ostringstream *err) { - size_t j = 0; - for (; j < from->size(); j++) { - RuleWithOperator *rule = dynamic_cast(from->at(j).get()); - if (rule && std::binary_search(ids.begin(), ids.end(), rule->getId())) { - if (err != NULL) { - *err << "Rule id: " << std::to_string(rule->getId()) \ - << " is duplicated" << std::endl; - } - return -1; - } - } - m_rules.insert(m_rules.end(), from->m_rules.begin(), from->m_rules.end()); - return j; - } - - bool insert(const std::shared_ptr &rule) { - return insert(rule, nullptr, nullptr); - } - - bool insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { - RuleWithOperator *r = dynamic_cast(rule.get()); - if (r && ids != nullptr && std::binary_search(ids->begin(), ids->end(), r->getId())) { - if (err != nullptr) { - *err << "Rule id: " << std::to_string(r->getId()) \ - << " is duplicated" << std::endl; - } - return false; - } - m_rules.push_back(rule); - return true; - } + void dump() const; - void fixDefaultActions(); + int append(Rules *from, const std::vector &ids, std::ostringstream *err); + + bool insert(const std::shared_ptr &rule); + + bool insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err); - size_t size() const { return m_rules.size(); } - std::shared_ptr operator[](int index) const { return m_rules[index]; } - std::shared_ptr at(int index) const { return m_rules[index]; } + size_t size() const; + std::shared_ptr operator[](int index) const; + std::shared_ptr at(int index) const; + + void fixDefaultActions(); std::vector > m_defaultActions; std::vector > m_defaultTransformations; diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index ba38bc3903..6f1647c639 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -50,7 +50,6 @@ typedef struct Rules_t RulesSet; #include "modsecurity/variable_origin.h" #include "modsecurity/anchored_set_variable_translation_proxy.h" - #ifndef NO_LOGS #define ms_dbg(b, c) \ do { \ diff --git a/src/Makefile.am b/src/Makefile.am index 61e476ba5a..b8ee0e7d74 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -43,10 +43,6 @@ pkginclude_HEADERS = \ ../headers/modsecurity/intervention.h \ ../headers/modsecurity/modsecurity.h \ ../headers/modsecurity/rule.h \ - ../headers/modsecurity/rule_marker.h \ - ../headers/modsecurity/rule_unconditional.h \ - ../headers/modsecurity/rule_with_actions.h \ - ../headers/modsecurity/rule_with_operator.h \ ../headers/modsecurity/rules.h \ ../headers/modsecurity/rule_message.h \ ../headers/modsecurity/rules_set.h \ @@ -289,6 +285,7 @@ libmodsecurity_la_SOURCES = \ debug_log/debug_log_writer.cc \ run_time_string.cc \ rule.cc \ + rules.cc \ rule_unconditional.cc \ rule_with_actions.cc \ rule_with_operator.cc \ diff --git a/src/actions/accuracy.cc b/src/actions/accuracy.cc index 49354780a5..4153cbaeaa 100644 --- a/src/actions/accuracy.cc +++ b/src/actions/accuracy.cc @@ -21,7 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" - +#include "modsecurity/rule_with_actions.h" namespace modsecurity { namespace actions { diff --git a/src/actions/block.cc b/src/actions/block.cc index 62c6c153a6..7d69c244e1 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -24,6 +24,7 @@ #include "modsecurity/rule.h" #include "modsecurity/intervention.h" #include "src/actions/data/status.h" +#include "modsecurity/rule_with_actions.h" namespace modsecurity { namespace actions { diff --git a/src/actions/chain.cc b/src/actions/chain.cc index d5851e1515..0fa20f9b9d 100644 --- a/src/actions/chain.cc +++ b/src/actions/chain.cc @@ -20,6 +20,8 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace actions { diff --git a/src/actions/maturity.cc b/src/actions/maturity.cc index bd5c278591..877358ee4b 100644 --- a/src/actions/maturity.cc +++ b/src/actions/maturity.cc @@ -21,7 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" - +#include "modsecurity/rule_with_actions.h" namespace modsecurity { namespace actions { diff --git a/src/actions/phase.cc b/src/actions/phase.cc index 2fcc655edd..079fcd068c 100644 --- a/src/actions/phase.cc +++ b/src/actions/phase.cc @@ -22,6 +22,7 @@ #include "modsecurity/rule.h" #include "modsecurity/modsecurity.h" #include "src/utils/string.h" +#include "modsecurity/rule_with_actions.h" namespace modsecurity { diff --git a/src/actions/rev.cc b/src/actions/rev.cc index 54a74d4fe2..f192968db4 100644 --- a/src/actions/rev.cc +++ b/src/actions/rev.cc @@ -21,6 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "modsecurity/rule_with_actions.h" namespace modsecurity { diff --git a/src/actions/rule_id.cc b/src/actions/rule_id.cc index 09a8616844..dd56f1ef5c 100644 --- a/src/actions/rule_id.cc +++ b/src/actions/rule_id.cc @@ -20,6 +20,8 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace actions { diff --git a/src/actions/set_env.cc b/src/actions/set_env.cc index ea58cdab13..670620acbb 100644 --- a/src/actions/set_env.cc +++ b/src/actions/set_env.cc @@ -21,6 +21,8 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" #include "src/utils/string.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace actions { diff --git a/src/actions/set_var.cc b/src/actions/set_var.cc index 5ada6233c8..fa6d885647 100644 --- a/src/actions/set_var.cc +++ b/src/actions/set_var.cc @@ -30,6 +30,7 @@ #include "src/variables/tx.h" #include "src/variables/user.h" #include "src/variables/variable.h" +#include "modsecurity/rule_with_operator.h" namespace modsecurity { namespace actions { diff --git a/src/actions/transformations/base64_decode.cc b/src/actions/transformations/base64_decode.cc index 9af4cc2cdb..7e45edd308 100644 --- a/src/actions/transformations/base64_decode.cc +++ b/src/actions/transformations/base64_decode.cc @@ -33,8 +33,8 @@ namespace transformations { void Base64Decode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { std::string value(in.c_str(), in.size()); std::string ret = Utils::Base64::decode(value); out.assign(ret.c_str(), ret.size()); diff --git a/src/actions/transformations/base64_decode.h b/src/actions/transformations/base64_decode.h index 96bf35d923..e4efdb2eb0 100644 --- a/src/actions/transformations/base64_decode.h +++ b/src/actions/transformations/base64_decode.h @@ -34,8 +34,8 @@ class Base64Decode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/base64_decode_ext.cc b/src/actions/transformations/base64_decode_ext.cc index 96158e9950..3792eeec82 100644 --- a/src/actions/transformations/base64_decode_ext.cc +++ b/src/actions/transformations/base64_decode_ext.cc @@ -33,8 +33,8 @@ namespace transformations { void Base64DecodeExt::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { std::string ret = Utils::Base64::decode_forgiven(in); out.assign(ret.c_str(), ret.size()); } diff --git a/src/actions/transformations/base64_decode_ext.h b/src/actions/transformations/base64_decode_ext.h index 9e8c53357f..5adae8abef 100644 --- a/src/actions/transformations/base64_decode_ext.h +++ b/src/actions/transformations/base64_decode_ext.h @@ -34,8 +34,8 @@ class Base64DecodeExt : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/base64_encode.cc b/src/actions/transformations/base64_encode.cc index 8e6634f63e..86630e9a50 100644 --- a/src/actions/transformations/base64_encode.cc +++ b/src/actions/transformations/base64_encode.cc @@ -33,8 +33,8 @@ namespace transformations { void Base64Encode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { std::string ret = Utils::Base64::encode( std::string(in.c_str(), in.size())); out.assign(ret.c_str(), ret.size()); diff --git a/src/actions/transformations/base64_encode.h b/src/actions/transformations/base64_encode.h index 480ab6bcff..6da7417360 100644 --- a/src/actions/transformations/base64_encode.h +++ b/src/actions/transformations/base64_encode.h @@ -34,8 +34,8 @@ class Base64Encode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/cmd_line.cc b/src/actions/transformations/cmd_line.cc index 14ab766e54..45e1adb998 100644 --- a/src/actions/transformations/cmd_line.cc +++ b/src/actions/transformations/cmd_line.cc @@ -32,8 +32,8 @@ namespace transformations { void CmdLine::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int space = 0; for (auto& a : in) { diff --git a/src/actions/transformations/cmd_line.h b/src/actions/transformations/cmd_line.h index f4714b6c2a..c071e99c4d 100644 --- a/src/actions/transformations/cmd_line.h +++ b/src/actions/transformations/cmd_line.h @@ -34,8 +34,8 @@ class CmdLine : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/compress_whitespace.cc b/src/actions/transformations/compress_whitespace.cc index ee96048753..bf0a79e125 100644 --- a/src/actions/transformations/compress_whitespace.cc +++ b/src/actions/transformations/compress_whitespace.cc @@ -32,8 +32,8 @@ namespace transformations { void CompressWhitespace::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int inWhiteSpace = 0; size_t i = 0; out.reserve(in.size()); diff --git a/src/actions/transformations/compress_whitespace.h b/src/actions/transformations/compress_whitespace.h index 69bb6d9f80..3e42047cce 100644 --- a/src/actions/transformations/compress_whitespace.h +++ b/src/actions/transformations/compress_whitespace.h @@ -34,8 +34,8 @@ class CompressWhitespace : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/css_decode.cc b/src/actions/transformations/css_decode.cc index 6829cc188a..9f86d4848e 100644 --- a/src/actions/transformations/css_decode.cc +++ b/src/actions/transformations/css_decode.cc @@ -35,17 +35,19 @@ namespace transformations { void CssDecode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { + size_t s = in.size(); + char *tmp = reinterpret_cast( - malloc(sizeof(char) * in.size() + 1)); - memcpy(tmp, in.c_str(), in.size() + 1); - tmp[in.size()] = '\0'; + malloc(sizeof(char) * s + 1)); + memcpy(tmp, in.c_str(), s + 1); + tmp[s] = '\0'; - CssDecode::css_decode_inplace(reinterpret_cast(tmp), - in.size()); + size_t r = CssDecode::css_decode_inplace(reinterpret_cast(tmp), + s); - out.assign(tmp, 0, in.size()); + out.assign(tmp, r); free(tmp); } diff --git a/src/actions/transformations/css_decode.h b/src/actions/transformations/css_decode.h index b35ff165f3..f76ec571f1 100644 --- a/src/actions/transformations/css_decode.h +++ b/src/actions/transformations/css_decode.h @@ -35,8 +35,8 @@ class CssDecode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int css_decode_inplace(unsigned char *input, int64_t input_len); }; diff --git a/src/actions/transformations/escape_seq_decode.cc b/src/actions/transformations/escape_seq_decode.cc index a9174fb0d7..51f3158cd6 100644 --- a/src/actions/transformations/escape_seq_decode.cc +++ b/src/actions/transformations/escape_seq_decode.cc @@ -136,8 +136,8 @@ int EscapeSeqDecode::ansi_c_sequences_decode_inplace(unsigned char *input, void EscapeSeqDecode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *tmp = (unsigned char *) malloc(sizeof(char) * in.size() + 1); memcpy(tmp, in.c_str(), in.size() + 1); diff --git a/src/actions/transformations/escape_seq_decode.h b/src/actions/transformations/escape_seq_decode.h index 856fabac62..9acf001e7e 100644 --- a/src/actions/transformations/escape_seq_decode.h +++ b/src/actions/transformations/escape_seq_decode.h @@ -34,8 +34,8 @@ class EscapeSeqDecode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int ansi_c_sequences_decode_inplace(unsigned char *input, int input_len); }; diff --git a/src/actions/transformations/hex_decode.cc b/src/actions/transformations/hex_decode.cc index a6b5130c05..46faa809fa 100644 --- a/src/actions/transformations/hex_decode.cc +++ b/src/actions/transformations/hex_decode.cc @@ -33,8 +33,8 @@ namespace transformations { void HexDecode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; int size = 0; diff --git a/src/actions/transformations/hex_decode.h b/src/actions/transformations/hex_decode.h index 6f52d7975a..d28b760164 100644 --- a/src/actions/transformations/hex_decode.h +++ b/src/actions/transformations/hex_decode.h @@ -34,8 +34,8 @@ class HexDecode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *data, int len); }; diff --git a/src/actions/transformations/hex_encode.cc b/src/actions/transformations/hex_encode.cc index 06e0b8afef..211f49dba0 100644 --- a/src/actions/transformations/hex_encode.cc +++ b/src/actions/transformations/hex_encode.cc @@ -33,8 +33,8 @@ namespace transformations { void HexEncode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { std::stringstream result; for (std::size_t i=0; i < in.length(); i++) { int ii = reinterpret_cast(in[i]); diff --git a/src/actions/transformations/hex_encode.h b/src/actions/transformations/hex_encode.h index fdec1e6178..723418ab6e 100644 --- a/src/actions/transformations/hex_encode.h +++ b/src/actions/transformations/hex_encode.h @@ -34,8 +34,8 @@ class HexEncode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; diff --git a/src/actions/transformations/html_entity_decode.cc b/src/actions/transformations/html_entity_decode.cc index b583349bd6..b0ff0f4284 100644 --- a/src/actions/transformations/html_entity_decode.cc +++ b/src/actions/transformations/html_entity_decode.cc @@ -34,8 +34,8 @@ namespace transformations { void HtmlEntityDecode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast diff --git a/src/actions/transformations/html_entity_decode.h b/src/actions/transformations/html_entity_decode.h index 5469bec523..0a24543ccb 100644 --- a/src/actions/transformations/html_entity_decode.h +++ b/src/actions/transformations/html_entity_decode.h @@ -37,8 +37,8 @@ class HtmlEntityDecode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/js_decode.cc b/src/actions/transformations/js_decode.cc index c20534e46d..de1d3fb00c 100644 --- a/src/actions/transformations/js_decode.cc +++ b/src/actions/transformations/js_decode.cc @@ -35,8 +35,8 @@ namespace transformations { void JsDecode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast diff --git a/src/actions/transformations/js_decode.h b/src/actions/transformations/js_decode.h index a8b8cc3e36..a15f58d057 100644 --- a/src/actions/transformations/js_decode.h +++ b/src/actions/transformations/js_decode.h @@ -34,8 +34,8 @@ class JsDecode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/length.cc b/src/actions/transformations/length.cc index ee12043874..2b572f6183 100644 --- a/src/actions/transformations/length.cc +++ b/src/actions/transformations/length.cc @@ -32,8 +32,8 @@ namespace transformations { void Length::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { out.assign(std::to_string(in.size()).c_str()); } diff --git a/src/actions/transformations/length.h b/src/actions/transformations/length.h index 8f00e7ec92..b17ed09c77 100644 --- a/src/actions/transformations/length.h +++ b/src/actions/transformations/length.h @@ -34,8 +34,8 @@ class Length : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/lower_case.cc b/src/actions/transformations/lower_case.cc index 6e6c673298..39a2f0196f 100644 --- a/src/actions/transformations/lower_case.cc +++ b/src/actions/transformations/lower_case.cc @@ -28,8 +28,8 @@ namespace transformations { void LowerCase::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { std::locale loc; out.resize(in.size()); for (std::string::size_type i=0; i < in.size(); ++i) { diff --git a/src/actions/transformations/lower_case.h b/src/actions/transformations/lower_case.h index 60aa5104eb..9ff3adf064 100644 --- a/src/actions/transformations/lower_case.h +++ b/src/actions/transformations/lower_case.h @@ -36,8 +36,8 @@ class LowerCase : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/md5.cc b/src/actions/transformations/md5.cc index 0535eb6db0..538e737008 100644 --- a/src/actions/transformations/md5.cc +++ b/src/actions/transformations/md5.cc @@ -32,8 +32,8 @@ namespace transformations { void Md5::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { std::string ret = Utils::Md5::digest(std::string(in.c_str(), in.size())); out.assign(ret.c_str(), ret.size()); diff --git a/src/actions/transformations/md5.h b/src/actions/transformations/md5.h index fc11fbdfbc..063c9994fb 100644 --- a/src/actions/transformations/md5.h +++ b/src/actions/transformations/md5.h @@ -34,8 +34,8 @@ class Md5 : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/none.cc b/src/actions/transformations/none.cc index ef3e6e7b94..6533a5e83a 100644 --- a/src/actions/transformations/none.cc +++ b/src/actions/transformations/none.cc @@ -32,8 +32,8 @@ namespace transformations { void None::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { } + ModSecString &in, + ModSecString &out) { } } // namespace transformations diff --git a/src/actions/transformations/none.h b/src/actions/transformations/none.h index 102a07322a..2cdf045ad4 100644 --- a/src/actions/transformations/none.h +++ b/src/actions/transformations/none.h @@ -32,11 +32,15 @@ class None : public Transformation { public: explicit None(const std::string &action) : Transformation(action) - { m_isNone = true; } + { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; + + bool isNone() override { + return true; + } }; } // namespace transformations diff --git a/src/actions/transformations/normalise_path.cc b/src/actions/transformations/normalise_path.cc index 832e8b1072..34b1ad1724 100644 --- a/src/actions/transformations/normalise_path.cc +++ b/src/actions/transformations/normalise_path.cc @@ -34,8 +34,8 @@ namespace transformations { void NormalisePath::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int changed = 0; char *tmp = reinterpret_cast( diff --git a/src/actions/transformations/normalise_path.h b/src/actions/transformations/normalise_path.h index 429d0ad69f..a345992c70 100644 --- a/src/actions/transformations/normalise_path.h +++ b/src/actions/transformations/normalise_path.h @@ -34,8 +34,8 @@ class NormalisePath : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int normalize_path_inplace(unsigned char *input, int input_len, int win, int *changed); diff --git a/src/actions/transformations/normalise_path_win.cc b/src/actions/transformations/normalise_path_win.cc index 3c43e2b460..3e1de68442 100644 --- a/src/actions/transformations/normalise_path_win.cc +++ b/src/actions/transformations/normalise_path_win.cc @@ -35,8 +35,8 @@ namespace transformations { void NormalisePathWin::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int changed; char *tmp = reinterpret_cast( diff --git a/src/actions/transformations/normalise_path_win.h b/src/actions/transformations/normalise_path_win.h index 8b27709387..ae95988fd7 100644 --- a/src/actions/transformations/normalise_path_win.h +++ b/src/actions/transformations/normalise_path_win.h @@ -34,8 +34,8 @@ class NormalisePathWin : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/parity_even_7bit.cc b/src/actions/transformations/parity_even_7bit.cc index 64d640f342..e0f89484ac 100644 --- a/src/actions/transformations/parity_even_7bit.cc +++ b/src/actions/transformations/parity_even_7bit.cc @@ -33,8 +33,8 @@ namespace transformations { void ParityEven7bit::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast diff --git a/src/actions/transformations/parity_even_7bit.h b/src/actions/transformations/parity_even_7bit.h index 9ae23f4194..efbb113e94 100644 --- a/src/actions/transformations/parity_even_7bit.h +++ b/src/actions/transformations/parity_even_7bit.h @@ -34,8 +34,8 @@ class ParityEven7bit : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_odd_7bit.cc b/src/actions/transformations/parity_odd_7bit.cc index 47b8e6fc37..9d0091776b 100644 --- a/src/actions/transformations/parity_odd_7bit.cc +++ b/src/actions/transformations/parity_odd_7bit.cc @@ -33,8 +33,8 @@ namespace transformations { void ParityOdd7bit::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast diff --git a/src/actions/transformations/parity_odd_7bit.h b/src/actions/transformations/parity_odd_7bit.h index eecdd9316b..61730adf05 100644 --- a/src/actions/transformations/parity_odd_7bit.h +++ b/src/actions/transformations/parity_odd_7bit.h @@ -34,8 +34,8 @@ class ParityOdd7bit : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/parity_zero_7bit.cc b/src/actions/transformations/parity_zero_7bit.cc index fe938d133b..92dd539b53 100644 --- a/src/actions/transformations/parity_zero_7bit.cc +++ b/src/actions/transformations/parity_zero_7bit.cc @@ -33,8 +33,8 @@ namespace transformations { void ParityZero7bit::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast diff --git a/src/actions/transformations/parity_zero_7bit.h b/src/actions/transformations/parity_zero_7bit.h index 50c98c311f..5a58c0d19d 100644 --- a/src/actions/transformations/parity_zero_7bit.h +++ b/src/actions/transformations/parity_zero_7bit.h @@ -34,8 +34,8 @@ class ParityZero7bit : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static bool inplace(unsigned char *input, uint64_t input_len); }; diff --git a/src/actions/transformations/php_args_names.cc b/src/actions/transformations/php_args_names.cc index 41e7912661..6f9cdf3cc2 100644 --- a/src/actions/transformations/php_args_names.cc +++ b/src/actions/transformations/php_args_names.cc @@ -34,8 +34,8 @@ PhpArgsNames::PhpArgsNames(const std::string &a) void PhpArgsNames::execute(Transaction *t, - ModSecStackString &val, - ModSecStackString &out) { + ModSecString &val, + ModSecString &out) { //Took the logic from php src code: //https://github.com/php/php-src/blob/master/main/php_variables.c //Function call PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *track_vars_array) diff --git a/src/actions/transformations/php_args_names.h b/src/actions/transformations/php_args_names.h index bf1383eea7..a9694a32dd 100644 --- a/src/actions/transformations/php_args_names.h +++ b/src/actions/transformations/php_args_names.h @@ -35,8 +35,8 @@ class PhpArgsNames : public Transformation { explicit PhpArgsNames(const std::string &action); void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_comments.cc b/src/actions/transformations/remove_comments.cc index e26f7a47c6..aa41d988ef 100644 --- a/src/actions/transformations/remove_comments.cc +++ b/src/actions/transformations/remove_comments.cc @@ -33,8 +33,8 @@ namespace transformations { void RemoveComments::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast diff --git a/src/actions/transformations/remove_comments.h b/src/actions/transformations/remove_comments.h index d0d7b0ba59..cf36e41e68 100644 --- a/src/actions/transformations/remove_comments.h +++ b/src/actions/transformations/remove_comments.h @@ -35,8 +35,8 @@ class RemoveComments : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override;; + ModSecString &in, + ModSecString &out) override;; }; diff --git a/src/actions/transformations/remove_comments_char.cc b/src/actions/transformations/remove_comments_char.cc index 2f388a4bb0..15cb1474fa 100644 --- a/src/actions/transformations/remove_comments_char.cc +++ b/src/actions/transformations/remove_comments_char.cc @@ -32,8 +32,8 @@ namespace transformations { void RemoveCommentsChar::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int64_t i; out = in; diff --git a/src/actions/transformations/remove_comments_char.h b/src/actions/transformations/remove_comments_char.h index 7edebdabfb..8064bc37a1 100644 --- a/src/actions/transformations/remove_comments_char.h +++ b/src/actions/transformations/remove_comments_char.h @@ -34,8 +34,8 @@ class RemoveCommentsChar : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_nulls.cc b/src/actions/transformations/remove_nulls.cc index bed3bb114e..4ff86fb730 100644 --- a/src/actions/transformations/remove_nulls.cc +++ b/src/actions/transformations/remove_nulls.cc @@ -34,8 +34,8 @@ namespace transformations { void RemoveNulls::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int64_t i; out = in; diff --git a/src/actions/transformations/remove_nulls.h b/src/actions/transformations/remove_nulls.h index 701e2c07db..be9fb3b4bc 100644 --- a/src/actions/transformations/remove_nulls.h +++ b/src/actions/transformations/remove_nulls.h @@ -34,8 +34,8 @@ class RemoveNulls : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/remove_whitespace.cc b/src/actions/transformations/remove_whitespace.cc index fc3bd00db4..ac03bcec57 100644 --- a/src/actions/transformations/remove_whitespace.cc +++ b/src/actions/transformations/remove_whitespace.cc @@ -32,8 +32,8 @@ namespace transformations { void RemoveWhitespace::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { out = in; int64_t i = 0; const char nonBreakingSpaces = 0xa0; diff --git a/src/actions/transformations/remove_whitespace.h b/src/actions/transformations/remove_whitespace.h index 5a0bf8d033..e33037ab09 100644 --- a/src/actions/transformations/remove_whitespace.h +++ b/src/actions/transformations/remove_whitespace.h @@ -34,8 +34,8 @@ class RemoveWhitespace : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/replace_comments.cc b/src/actions/transformations/replace_comments.cc index 0edd89c012..8073a3071c 100644 --- a/src/actions/transformations/replace_comments.cc +++ b/src/actions/transformations/replace_comments.cc @@ -33,8 +33,8 @@ namespace transformations { void ReplaceComments::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { uint64_t i, j, incomment; char *input = reinterpret_cast( diff --git a/src/actions/transformations/replace_comments.h b/src/actions/transformations/replace_comments.h index 1ceea9da08..3f49dda267 100644 --- a/src/actions/transformations/replace_comments.h +++ b/src/actions/transformations/replace_comments.h @@ -34,8 +34,8 @@ class ReplaceComments : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/replace_nulls.cc b/src/actions/transformations/replace_nulls.cc index 65d2e9206e..6f31716c60 100644 --- a/src/actions/transformations/replace_nulls.cc +++ b/src/actions/transformations/replace_nulls.cc @@ -32,8 +32,8 @@ namespace transformations { void ReplaceNulls::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int64_t i; out = in; diff --git a/src/actions/transformations/replace_nulls.h b/src/actions/transformations/replace_nulls.h index e6d3388e95..85422830a3 100644 --- a/src/actions/transformations/replace_nulls.h +++ b/src/actions/transformations/replace_nulls.h @@ -34,8 +34,8 @@ class ReplaceNulls : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/sha1.cc b/src/actions/transformations/sha1.cc index adc8ee91e3..d2759d1f22 100644 --- a/src/actions/transformations/sha1.cc +++ b/src/actions/transformations/sha1.cc @@ -33,8 +33,8 @@ namespace transformations { void Sha1::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { auto a = Utils::Sha1::digest( std::string(in.c_str(), in.size()) diff --git a/src/actions/transformations/sha1.h b/src/actions/transformations/sha1.h index 4b8d7217d3..f053835c2a 100644 --- a/src/actions/transformations/sha1.h +++ b/src/actions/transformations/sha1.h @@ -34,8 +34,8 @@ class Sha1 : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/sql_hex_decode.cc b/src/actions/transformations/sql_hex_decode.cc index a070149103..143fe11287 100644 --- a/src/actions/transformations/sql_hex_decode.cc +++ b/src/actions/transformations/sql_hex_decode.cc @@ -42,8 +42,8 @@ namespace transformations { #endif void SqlHexDecode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; int size = 0; diff --git a/src/actions/transformations/sql_hex_decode.h b/src/actions/transformations/sql_hex_decode.h index de9563179c..a90ee05077 100644 --- a/src/actions/transformations/sql_hex_decode.h +++ b/src/actions/transformations/sql_hex_decode.h @@ -34,8 +34,8 @@ class SqlHexDecode : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *data, int len); diff --git a/src/actions/transformations/transformation.cc b/src/actions/transformations/transformation.cc index 9761043b68..32ee548e01 100644 --- a/src/actions/transformations/transformation.cc +++ b/src/actions/transformations/transformation.cc @@ -116,6 +116,7 @@ Transformation* Transformation::instantiate(std::string a) { return new Transformation(a); } + } // namespace transformations } // namespace actions } // namespace modsecurity diff --git a/src/actions/transformations/transformation.h b/src/actions/transformations/transformation.h index 4cba759fbe..5cbe6d995d 100644 --- a/src/actions/transformations/transformation.h +++ b/src/actions/transformations/transformation.h @@ -32,12 +32,7 @@ class Transformation : public Action { explicit Transformation(const std::string& _action) : Action(_action, RunTimeBeforeMatchAttemptKind) { } - void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override { - // FIXME: this should be remove as soon as #1974 got fixed. - out.assign(in.c_str(), in.length()); - } + virtual bool isNone() { return false; } static Transformation* instantiate(std::string a); }; diff --git a/src/actions/transformations/trim.cc b/src/actions/transformations/trim.cc index 8dea1de1f8..94c86b3736 100644 --- a/src/actions/transformations/trim.cc +++ b/src/actions/transformations/trim.cc @@ -31,8 +31,7 @@ namespace actions { namespace transformations { - -void Trim::ltrim(ModSecStackString *s) { +void Trim::ltrim(ModSecString *s) { s->erase( s->begin(), std::find_if(s->begin(), s->end(), [](unsigned char c) { @@ -42,7 +41,7 @@ void Trim::ltrim(ModSecStackString *s) { } -void Trim::rtrim(ModSecStackString *s) { +void Trim::rtrim(ModSecString *s) { s->erase( std::find_if(s->rbegin(), s->rend(), [](unsigned char c) { return !std::isspace(c); @@ -52,15 +51,15 @@ void Trim::rtrim(ModSecStackString *s) { } -void Trim::trim(ModSecStackString *s) { +void Trim::trim(ModSecString *s) { rtrim(s); ltrim(s); } void Trim::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { out = in; trim(&out); }; diff --git a/src/actions/transformations/trim.h b/src/actions/transformations/trim.h index 0d165ab60f..c1ee52c4f7 100644 --- a/src/actions/transformations/trim.h +++ b/src/actions/transformations/trim.h @@ -34,12 +34,12 @@ class Trim : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; - static void ltrim(ModSecStackString *s); - static void rtrim(ModSecStackString *s); - static void trim(ModSecStackString *s); + static void ltrim(ModSecString *s); + static void rtrim(ModSecString *s); + static void trim(ModSecString *s); }; } // namespace transformations diff --git a/src/actions/transformations/trim_left.cc b/src/actions/transformations/trim_left.cc index c73d9644cf..43027b79b8 100644 --- a/src/actions/transformations/trim_left.cc +++ b/src/actions/transformations/trim_left.cc @@ -33,8 +33,8 @@ namespace transformations { void TrimLeft::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { out = in; ltrim(&out); }; diff --git a/src/actions/transformations/trim_left.h b/src/actions/transformations/trim_left.h index 3031d69677..8073fd0450 100644 --- a/src/actions/transformations/trim_left.h +++ b/src/actions/transformations/trim_left.h @@ -35,8 +35,8 @@ class TrimLeft : public Trim { : Trim(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/trim_right.cc b/src/actions/transformations/trim_right.cc index 97ff9ecfea..545689f78e 100644 --- a/src/actions/transformations/trim_right.cc +++ b/src/actions/transformations/trim_right.cc @@ -32,8 +32,8 @@ namespace transformations { void TrimRight::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { out = in; rtrim(&out); }; diff --git a/src/actions/transformations/trim_right.h b/src/actions/transformations/trim_right.h index ba67d97531..29ac3f5fac 100644 --- a/src/actions/transformations/trim_right.h +++ b/src/actions/transformations/trim_right.h @@ -35,8 +35,8 @@ class TrimRight : public Trim { : Trim(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/upper_case.cc b/src/actions/transformations/upper_case.cc index 83b9e29f55..be33a781f1 100644 --- a/src/actions/transformations/upper_case.cc +++ b/src/actions/transformations/upper_case.cc @@ -28,8 +28,8 @@ namespace transformations { void UpperCase::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { std::locale loc; out.reserve(in.size()); for (std::string::size_type i=0; i < in.size(); ++i) { diff --git a/src/actions/transformations/upper_case.h b/src/actions/transformations/upper_case.h index 83bd7fcfd6..9994113ea0 100644 --- a/src/actions/transformations/upper_case.h +++ b/src/actions/transformations/upper_case.h @@ -36,8 +36,8 @@ class UpperCase : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/url_decode.cc b/src/actions/transformations/url_decode.cc index 7c0e17bc14..cd91431e7b 100644 --- a/src/actions/transformations/url_decode.cc +++ b/src/actions/transformations/url_decode.cc @@ -33,8 +33,8 @@ namespace transformations { void UrlDecode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *val(NULL); int invalid_count = 0; int changed; diff --git a/src/actions/transformations/url_decode.h b/src/actions/transformations/url_decode.h index c305ba9133..75dfef72d5 100644 --- a/src/actions/transformations/url_decode.h +++ b/src/actions/transformations/url_decode.h @@ -36,8 +36,8 @@ class UrlDecode : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; }; } // namespace transformations diff --git a/src/actions/transformations/url_decode_uni.cc b/src/actions/transformations/url_decode_uni.cc index fc67cb21e6..4613794df0 100644 --- a/src/actions/transformations/url_decode_uni.cc +++ b/src/actions/transformations/url_decode_uni.cc @@ -39,8 +39,8 @@ namespace transformations { void UrlDecodeUni::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; input = reinterpret_cast diff --git a/src/actions/transformations/url_decode_uni.h b/src/actions/transformations/url_decode_uni.h index 74f8704909..64b55f2015 100644 --- a/src/actions/transformations/url_decode_uni.h +++ b/src/actions/transformations/url_decode_uni.h @@ -35,8 +35,8 @@ class UrlDecodeUni : public Transformation { : Transformation(action) { } void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static int inplace(unsigned char *input, uint64_t input_len, Transaction *transaction); diff --git a/src/actions/transformations/url_encode.cc b/src/actions/transformations/url_encode.cc index 51103a9e41..a5184d7bc4 100644 --- a/src/actions/transformations/url_encode.cc +++ b/src/actions/transformations/url_encode.cc @@ -82,8 +82,8 @@ std::string UrlEncode::url_enc(const char *input, void UrlEncode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { int changed; std::string ret = url_enc(in.c_str(), in.size(), &changed); diff --git a/src/actions/transformations/url_encode.h b/src/actions/transformations/url_encode.h index 8a7401f0aa..03b9eca625 100644 --- a/src/actions/transformations/url_encode.h +++ b/src/actions/transformations/url_encode.h @@ -34,8 +34,8 @@ class UrlEncode : public Transformation { : Transformation(action) { }; void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static std::string url_enc(const char *input, unsigned int input_len, int *changed); diff --git a/src/actions/transformations/utf8_to_unicode.cc b/src/actions/transformations/utf8_to_unicode.cc index 8018ea7bf9..9457d07074 100644 --- a/src/actions/transformations/utf8_to_unicode.cc +++ b/src/actions/transformations/utf8_to_unicode.cc @@ -34,8 +34,8 @@ namespace transformations { void Utf8ToUnicode::execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) { + ModSecString &in, + ModSecString &out) { unsigned char *input; int changed = 0; diff --git a/src/actions/transformations/utf8_to_unicode.h b/src/actions/transformations/utf8_to_unicode.h index cc21ca60f3..738771dff8 100644 --- a/src/actions/transformations/utf8_to_unicode.h +++ b/src/actions/transformations/utf8_to_unicode.h @@ -40,8 +40,8 @@ class Utf8ToUnicode : public Transformation { void execute(Transaction *t, - ModSecStackString &in, - ModSecStackString &out) override; + ModSecString &in, + ModSecString &out) override; static char *inplace(unsigned char *input, uint64_t input_len, int *changed); diff --git a/src/actions/ver.cc b/src/actions/ver.cc index b7a002c2fd..3c159fe1db 100644 --- a/src/actions/ver.cc +++ b/src/actions/ver.cc @@ -21,6 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" +#include "modsecurity/rule_with_actions.h" namespace modsecurity { diff --git a/src/engine/lua.cc b/src/engine/lua.cc index 5673b617ce..e8525d1311 100644 --- a/src/engine/lua.cc +++ b/src/engine/lua.cc @@ -439,8 +439,8 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, "t:" + std::string(name)); // FIXME: transformation is not yet returning null. if (tfn) { - ModSecStackString in; - ModSecStackString out; + ModSecString in; + ModSecString out; in.assign(newVar.c_str(), newVar.size()); tfn->execute(t, in, out); newVar.assign(out.c_str(), out.size()); @@ -465,8 +465,8 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, // FIXME: transformation is not yet returning null. if (tfn) { - ModSecStackString in; - ModSecStackString out; + ModSecString in; + ModSecString out; in.assign(newVar.c_str(), newVar.size()); tfn->execute(t, in, out); newVar.assign(out.c_str(), out.size()); diff --git a/src/modsecurity.cc b/src/modsecurity.cc index 9691162f2b..1c834e8390 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -307,8 +307,8 @@ int ModSecurity::processContentOffset(const char *content, size_t len, while (!trans.empty()) { modsecurity::actions::transformations::Transformation *t; - ModSecStackString in; - ModSecStackString out; + ModSecString in; + ModSecString out; yajl_gen_map_open(g); yajl_gen_string(g, diff --git a/src/operators/detect_sqli.cc b/src/operators/detect_sqli.cc index b4cae8ccbc..9869b6fcef 100644 --- a/src/operators/detect_sqli.cc +++ b/src/operators/detect_sqli.cc @@ -20,6 +20,8 @@ #include "src/operators/operator.h" #include "others/libinjection/src/libinjection.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace operators { diff --git a/src/operators/detect_xss.cc b/src/operators/detect_xss.cc index c10238abc2..84698b8eac 100644 --- a/src/operators/detect_xss.cc +++ b/src/operators/detect_xss.cc @@ -19,6 +19,7 @@ #include "src/operators/operator.h" #include "others/libinjection/src/libinjection.h" +#include "modsecurity/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/pm.cc b/src/operators/pm.cc index d08f37bb80..ad3a6b94c4 100644 --- a/src/operators/pm.cc +++ b/src/operators/pm.cc @@ -28,6 +28,8 @@ #include "src/operators/operator.h" #include "src/utils/acmp.h" #include "src/utils/string.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace operators { diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index 973494ad97..ff846f1a60 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -25,6 +25,8 @@ #include "modsecurity/rules_set.h" #include "src/operators/operator.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace operators { diff --git a/src/operators/rx.cc b/src/operators/rx.cc index a6112f0c0c..1419e448b7 100644 --- a/src/operators/rx.cc +++ b/src/operators/rx.cc @@ -22,6 +22,8 @@ #include "src/operators/operator.h" #include "modsecurity/rule.h" #include "modsecurity/rule_message.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace operators { diff --git a/src/operators/verify_cc.cc b/src/operators/verify_cc.cc index 4690e22c76..4452ac80ab 100644 --- a/src/operators/verify_cc.cc +++ b/src/operators/verify_cc.cc @@ -21,6 +21,8 @@ #include #include "src/operators/operator.h" +#include "modsecurity/rule_with_actions.h" + #if PCRE_HAVE_JIT #define pcre_study_opt PCRE_STUDY_JIT_COMPILE diff --git a/src/operators/verify_cpf.cc b/src/operators/verify_cpf.cc index 5566d8b69d..2a3c43c845 100644 --- a/src/operators/verify_cpf.cc +++ b/src/operators/verify_cpf.cc @@ -19,6 +19,8 @@ #include #include "src/operators/operator.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace operators { diff --git a/src/operators/verify_ssn.cc b/src/operators/verify_ssn.cc index 8912b99ca4..6f308ba560 100644 --- a/src/operators/verify_ssn.cc +++ b/src/operators/verify_ssn.cc @@ -20,6 +20,8 @@ #include #include "src/operators/operator.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace operators { diff --git a/src/operators/verify_svnr.cc b/src/operators/verify_svnr.cc index f9f4174cfc..075c5989a3 100644 --- a/src/operators/verify_svnr.cc +++ b/src/operators/verify_svnr.cc @@ -9,6 +9,7 @@ #include "modsecurity/rule_message.h" #include "modsecurity/rules_set_properties.h" +#include "modsecurity/rule_with_actions.h" namespace modsecurity { namespace operators { diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index b3e76941db..33e196c66e 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -41,7 +41,7 @@ // Unqualified %code blocks. -#line 326 "seclang-parser.yy" +#line 328 "seclang-parser.yy" #include "src/parser/driver.h" @@ -1360,7 +1360,7 @@ namespace yy { // User initialization code. -#line 319 "seclang-parser.yy" +#line 321 "seclang-parser.yy" { // Initialize the initial location. yyla.location.begin.filename = yyla.location.end.filename = new std::string(driver.file); @@ -1721,7 +1721,7 @@ namespace yy { switch (yyn) { case 2: -#line 713 "seclang-parser.yy" +#line 715 "seclang-parser.yy" { return 0; } @@ -1729,7 +1729,7 @@ namespace yy { break; case 6: -#line 726 "seclang-parser.yy" +#line 728 "seclang-parser.yy" { driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } @@ -1737,7 +1737,7 @@ namespace yy { break; case 7: -#line 732 "seclang-parser.yy" +#line 734 "seclang-parser.yy" { driver.m_auditLog->setStorageDir(yystack_[0].value.as < std::string > ()); } @@ -1745,7 +1745,7 @@ namespace yy { break; case 8: -#line 738 "seclang-parser.yy" +#line 740 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus); } @@ -1753,7 +1753,7 @@ namespace yy { break; case 9: -#line 742 "seclang-parser.yy" +#line 744 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus); } @@ -1761,7 +1761,7 @@ namespace yy { break; case 10: -#line 746 "seclang-parser.yy" +#line 748 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus); } @@ -1769,7 +1769,7 @@ namespace yy { break; case 11: -#line 752 "seclang-parser.yy" +#line 754 "seclang-parser.yy" { driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } @@ -1777,7 +1777,7 @@ namespace yy { break; case 12: -#line 758 "seclang-parser.yy" +#line 760 "seclang-parser.yy" { driver.m_auditLog->setFilePath2(yystack_[0].value.as < std::string > ()); } @@ -1785,7 +1785,7 @@ namespace yy { break; case 13: -#line 764 "seclang-parser.yy" +#line 766 "seclang-parser.yy" { driver.m_auditLog->setParts(yystack_[0].value.as < std::string > ()); } @@ -1793,7 +1793,7 @@ namespace yy { break; case 14: -#line 770 "seclang-parser.yy" +#line 772 "seclang-parser.yy" { driver.m_auditLog->setFilePath1(yystack_[0].value.as < std::string > ()); } @@ -1801,7 +1801,7 @@ namespace yy { break; case 15: -#line 775 "seclang-parser.yy" +#line 777 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::JSONAuditLogFormat); } @@ -1809,7 +1809,7 @@ namespace yy { break; case 16: -#line 780 "seclang-parser.yy" +#line 782 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::NativeAuditLogFormat); } @@ -1817,7 +1817,7 @@ namespace yy { break; case 17: -#line 786 "seclang-parser.yy" +#line 788 "seclang-parser.yy" { std::string relevant_status(yystack_[0].value.as < std::string > ()); driver.m_auditLog->setRelevantStatus(relevant_status); @@ -1826,7 +1826,7 @@ namespace yy { break; case 18: -#line 793 "seclang-parser.yy" +#line 795 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType); } @@ -1834,7 +1834,7 @@ namespace yy { break; case 19: -#line 797 "seclang-parser.yy" +#line 799 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType); } @@ -1842,7 +1842,7 @@ namespace yy { break; case 20: -#line 801 "seclang-parser.yy" +#line 803 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType); } @@ -1850,7 +1850,7 @@ namespace yy { break; case 21: -#line 807 "seclang-parser.yy" +#line 809 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } @@ -1858,7 +1858,7 @@ namespace yy { break; case 22: -#line 811 "seclang-parser.yy" +#line 813 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } @@ -1866,7 +1866,7 @@ namespace yy { break; case 23: -#line 815 "seclang-parser.yy" +#line 817 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecUploadKeepFiles RelevantOnly is not currently supported. Accepted values are On or Off"); YYERROR; @@ -1875,7 +1875,7 @@ namespace yy { break; case 24: -#line 820 "seclang-parser.yy" +#line 822 "seclang-parser.yy" { driver.m_uploadFileLimit.m_set = true; driver.m_uploadFileLimit.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 10); @@ -1884,7 +1884,7 @@ namespace yy { break; case 25: -#line 825 "seclang-parser.yy" +#line 827 "seclang-parser.yy" { driver.m_uploadFileMode.m_set = true; driver.m_uploadFileMode.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8); @@ -1893,7 +1893,7 @@ namespace yy { break; case 26: -#line 830 "seclang-parser.yy" +#line 832 "seclang-parser.yy" { driver.m_uploadDirectory.m_set = true; driver.m_uploadDirectory.m_value = yystack_[0].value.as < std::string > (); @@ -1902,7 +1902,7 @@ namespace yy { break; case 27: -#line 835 "seclang-parser.yy" +#line 837 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } @@ -1910,7 +1910,7 @@ namespace yy { break; case 28: -#line 839 "seclang-parser.yy" +#line 841 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } @@ -1918,7 +1918,7 @@ namespace yy { break; case 29: -#line 846 "seclang-parser.yy" +#line 848 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } @@ -1926,7 +1926,7 @@ namespace yy { break; case 30: -#line 850 "seclang-parser.yy" +#line 852 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } @@ -1934,7 +1934,7 @@ namespace yy { break; case 31: -#line 857 "seclang-parser.yy" +#line 859 "seclang-parser.yy" { ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[3].location) yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); @@ -1944,7 +1944,7 @@ namespace yy { break; case 32: -#line 863 "seclang-parser.yy" +#line 865 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[1].location) @@ -1955,7 +1955,7 @@ namespace yy { break; case 33: -#line 873 "seclang-parser.yy" +#line 875 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); std::string error; @@ -1968,7 +1968,7 @@ namespace yy { break; case 34: -#line 882 "seclang-parser.yy" +#line 884 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); yylhs.value.as < std::unique_ptr > ()->m_negation = true; @@ -1982,7 +1982,7 @@ namespace yy { break; case 35: -#line 892 "seclang-parser.yy" +#line 894 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); std::string error; @@ -1995,7 +1995,7 @@ namespace yy { break; case 36: -#line 901 "seclang-parser.yy" +#line 903 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yylhs.value.as < std::unique_ptr > ()->m_negation = true; @@ -2009,7 +2009,7 @@ namespace yy { break; case 37: -#line 914 "seclang-parser.yy" +#line 916 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::UnconditionalMatch()); } @@ -2017,7 +2017,7 @@ namespace yy { break; case 38: -#line 918 "seclang-parser.yy" +#line 920 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectSQLi()); } @@ -2025,7 +2025,7 @@ namespace yy { break; case 39: -#line 922 "seclang-parser.yy" +#line 924 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectXSS()); } @@ -2033,7 +2033,7 @@ namespace yy { break; case 40: -#line 926 "seclang-parser.yy" +#line 928 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUrlEncoding()); } @@ -2041,7 +2041,7 @@ namespace yy { break; case 41: -#line 930 "seclang-parser.yy" +#line 932 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUtf8Encoding()); } @@ -2049,7 +2049,7 @@ namespace yy { break; case 42: -#line 934 "seclang-parser.yy" +#line 936 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::InspectFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2057,7 +2057,7 @@ namespace yy { break; case 43: -#line 938 "seclang-parser.yy" +#line 940 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::FuzzyHash(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2065,7 +2065,7 @@ namespace yy { break; case 44: -#line 942 "seclang-parser.yy" +#line 944 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateByteRange(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2073,7 +2073,7 @@ namespace yy { break; case 45: -#line 946 "seclang-parser.yy" +#line 948 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateDTD(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2081,7 +2081,7 @@ namespace yy { break; case 46: -#line 950 "seclang-parser.yy" +#line 952 "seclang-parser.yy" { /* $$ = new operators::ValidateHash($1); */ OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location); @@ -2090,7 +2090,7 @@ namespace yy { break; case 47: -#line 955 "seclang-parser.yy" +#line 957 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateSchema(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2098,7 +2098,7 @@ namespace yy { break; case 48: -#line 959 "seclang-parser.yy" +#line 961 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2106,7 +2106,7 @@ namespace yy { break; case 49: -#line 963 "seclang-parser.yy" +#line 965 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCPF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2114,7 +2114,7 @@ namespace yy { break; case 50: -#line 967 "seclang-parser.yy" +#line 969 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySSN(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2122,7 +2122,7 @@ namespace yy { break; case 51: -#line 971 "seclang-parser.yy" +#line 973 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySVNR(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2130,7 +2130,7 @@ namespace yy { break; case 52: -#line 975 "seclang-parser.yy" +#line 977 "seclang-parser.yy" { /* $$ = new operators::GsbLookup($1); */ OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location); @@ -2139,7 +2139,7 @@ namespace yy { break; case 53: -#line 980 "seclang-parser.yy" +#line 982 "seclang-parser.yy" { /* $$ = new operators::Rsub($1); */ OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location); @@ -2148,7 +2148,7 @@ namespace yy { break; case 54: -#line 985 "seclang-parser.yy" +#line 987 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Within(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2156,7 +2156,7 @@ namespace yy { break; case 55: -#line 989 "seclang-parser.yy" +#line 991 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ContainsWord(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2164,7 +2164,7 @@ namespace yy { break; case 56: -#line 993 "seclang-parser.yy" +#line 995 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Contains(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2172,7 +2172,7 @@ namespace yy { break; case 57: -#line 997 "seclang-parser.yy" +#line 999 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::EndsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2180,7 +2180,7 @@ namespace yy { break; case 58: -#line 1001 "seclang-parser.yy" +#line 1003 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Eq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2188,7 +2188,7 @@ namespace yy { break; case 59: -#line 1005 "seclang-parser.yy" +#line 1007 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Ge(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2196,7 +2196,7 @@ namespace yy { break; case 60: -#line 1009 "seclang-parser.yy" +#line 1011 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Gt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2204,7 +2204,7 @@ namespace yy { break; case 61: -#line 1013 "seclang-parser.yy" +#line 1015 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatchF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2212,7 +2212,7 @@ namespace yy { break; case 62: -#line 1017 "seclang-parser.yy" +#line 1019 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2220,7 +2220,7 @@ namespace yy { break; case 63: -#line 1021 "seclang-parser.yy" +#line 1023 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Le(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2228,7 +2228,7 @@ namespace yy { break; case 64: -#line 1025 "seclang-parser.yy" +#line 1027 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Lt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2236,7 +2236,7 @@ namespace yy { break; case 65: -#line 1029 "seclang-parser.yy" +#line 1031 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::PmFromFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2244,7 +2244,7 @@ namespace yy { break; case 66: -#line 1033 "seclang-parser.yy" +#line 1035 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Pm(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2252,7 +2252,7 @@ namespace yy { break; case 67: -#line 1037 "seclang-parser.yy" +#line 1039 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rbl(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2260,7 +2260,7 @@ namespace yy { break; case 68: -#line 1041 "seclang-parser.yy" +#line 1043 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2268,7 +2268,7 @@ namespace yy { break; case 69: -#line 1045 "seclang-parser.yy" +#line 1047 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::RxGlobal(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2276,7 +2276,7 @@ namespace yy { break; case 70: -#line 1049 "seclang-parser.yy" +#line 1051 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrEq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2284,7 +2284,7 @@ namespace yy { break; case 71: -#line 1053 "seclang-parser.yy" +#line 1055 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2292,7 +2292,7 @@ namespace yy { break; case 72: -#line 1057 "seclang-parser.yy" +#line 1059 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::BeginsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2300,7 +2300,7 @@ namespace yy { break; case 73: -#line 1061 "seclang-parser.yy" +#line 1063 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::GeoLookup()); @@ -2315,7 +2315,7 @@ namespace yy { break; case 75: -#line 1076 "seclang-parser.yy" +#line 1078 "seclang-parser.yy" { std::vector *a = new std::vector(); std::vector > *t = new std::vector >(); @@ -2351,7 +2351,7 @@ namespace yy { break; case 76: -#line 1108 "seclang-parser.yy" +#line 1110 "seclang-parser.yy" { variables::Variables *v = new variables::Variables(); for (auto &i : *yystack_[1].value.as < std::unique_ptr > > > ().get()) { @@ -2374,7 +2374,7 @@ namespace yy { break; case 77: -#line 1127 "seclang-parser.yy" +#line 1129 "seclang-parser.yy" { std::vector *a = new std::vector(); std::vector > *t = new std::vector >(); @@ -2399,7 +2399,7 @@ namespace yy { break; case 78: -#line 1148 "seclang-parser.yy" +#line 1150 "seclang-parser.yy" { std::string err; std::vector *a = new std::vector(); @@ -2433,7 +2433,7 @@ namespace yy { break; case 79: -#line 1178 "seclang-parser.yy" +#line 1180 "seclang-parser.yy" { bool hasDisruptive = false; std::vector *actions = new std::vector(); @@ -2452,8 +2452,8 @@ namespace yy { definedPhase = phase->m_phase; secRuleDefinedPhase = phase->m_secRulesPhase; delete phase; - } else if (a->action_kind == actions::Action::RunTimeOnlyIfMatchKind || - a->action_kind == actions::Action::RunTimeBeforeMatchAttemptKind) { + } else if (a->m_actionKind == actions::Action::RunTimeOnlyIfMatchKind || + a->m_actionKind == actions::Action::RunTimeBeforeMatchAttemptKind) { actions::transformations::None *none = dynamic_cast(a); if (none != NULL) { driver.error(yystack_[2].location, "The transformation none is not suitable to be part of the SecDefaultActions"); @@ -2499,7 +2499,7 @@ namespace yy { break; case 80: -#line 1240 "seclang-parser.yy" +#line 1242 "seclang-parser.yy" { driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as < std::string > ()), /* file name */ std::unique_ptr(new std::string(*yystack_[0].location.end.filename)), @@ -2510,7 +2510,7 @@ namespace yy { break; case 81: -#line 1247 "seclang-parser.yy" +#line 1249 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DisabledRuleEngine; } @@ -2518,7 +2518,7 @@ namespace yy { break; case 82: -#line 1251 "seclang-parser.yy" +#line 1253 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::EnabledRuleEngine; } @@ -2526,7 +2526,7 @@ namespace yy { break; case 83: -#line 1255 "seclang-parser.yy" +#line 1257 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DetectionOnlyRuleEngine; } @@ -2534,7 +2534,7 @@ namespace yy { break; case 84: -#line 1259 "seclang-parser.yy" +#line 1261 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } @@ -2542,7 +2542,7 @@ namespace yy { break; case 85: -#line 1263 "seclang-parser.yy" +#line 1265 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } @@ -2550,7 +2550,7 @@ namespace yy { break; case 86: -#line 1267 "seclang-parser.yy" +#line 1269 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } @@ -2558,7 +2558,7 @@ namespace yy { break; case 87: -#line 1271 "seclang-parser.yy" +#line 1273 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } @@ -2566,7 +2566,7 @@ namespace yy { break; case 88: -#line 1275 "seclang-parser.yy" +#line 1277 "seclang-parser.yy" { if (yystack_[0].value.as < std::string > ().length() != 1) { driver.error(yystack_[1].location, "Argument separator should be set to a single character."); @@ -2579,7 +2579,7 @@ namespace yy { break; case 89: -#line 1284 "seclang-parser.yy" +#line 1286 "seclang-parser.yy" { driver.m_components.push_back(yystack_[0].value.as < std::string > ()); } @@ -2587,7 +2587,7 @@ namespace yy { break; case 90: -#line 1288 "seclang-parser.yy" +#line 1290 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecConnEngine is not yet supported."); YYERROR; @@ -2596,14 +2596,14 @@ namespace yy { break; case 91: -#line 1293 "seclang-parser.yy" +#line 1295 "seclang-parser.yy" { } #line 2603 "seclang-parser.cc" break; case 92: -#line 1296 "seclang-parser.yy" +#line 1298 "seclang-parser.yy" { driver.m_secWebAppId.m_value = yystack_[0].value.as < std::string > (); driver.m_secWebAppId.m_set = true; @@ -2612,7 +2612,7 @@ namespace yy { break; case 93: -#line 1301 "seclang-parser.yy" +#line 1303 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecServerSignature is not supported."); YYERROR; @@ -2621,7 +2621,7 @@ namespace yy { break; case 94: -#line 1306 "seclang-parser.yy" +#line 1308 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCacheTransformations is not supported."); YYERROR; @@ -2630,7 +2630,7 @@ namespace yy { break; case 95: -#line 1311 "seclang-parser.yy" +#line 1313 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecDisableBackendCompression is not supported."); YYERROR; @@ -2639,14 +2639,14 @@ namespace yy { break; case 96: -#line 1316 "seclang-parser.yy" +#line 1318 "seclang-parser.yy" { } #line 2646 "seclang-parser.cc" break; case 97: -#line 1319 "seclang-parser.yy" +#line 1321 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecContentInjection is not yet supported."); YYERROR; @@ -2655,14 +2655,14 @@ namespace yy { break; case 98: -#line 1324 "seclang-parser.yy" +#line 1326 "seclang-parser.yy" { } #line 2662 "seclang-parser.cc" break; case 99: -#line 1327 "seclang-parser.yy" +#line 1329 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecChrootDir is not supported."); YYERROR; @@ -2671,7 +2671,7 @@ namespace yy { break; case 100: -#line 1332 "seclang-parser.yy" +#line 1334 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecHashEngine is not yet supported."); YYERROR; @@ -2680,14 +2680,14 @@ namespace yy { break; case 101: -#line 1337 "seclang-parser.yy" +#line 1339 "seclang-parser.yy" { } #line 2687 "seclang-parser.cc" break; case 102: -#line 1340 "seclang-parser.yy" +#line 1342 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashKey is not yet supported."); YYERROR; @@ -2696,7 +2696,7 @@ namespace yy { break; case 103: -#line 1345 "seclang-parser.yy" +#line 1347 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashParam is not yet supported."); YYERROR; @@ -2705,7 +2705,7 @@ namespace yy { break; case 104: -#line 1350 "seclang-parser.yy" +#line 1352 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodRx is not yet supported."); YYERROR; @@ -2714,7 +2714,7 @@ namespace yy { break; case 105: -#line 1355 "seclang-parser.yy" +#line 1357 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodPm is not yet supported."); YYERROR; @@ -2723,7 +2723,7 @@ namespace yy { break; case 106: -#line 1360 "seclang-parser.yy" +#line 1362 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGsbLookupDb is not supported."); YYERROR; @@ -2732,7 +2732,7 @@ namespace yy { break; case 107: -#line 1365 "seclang-parser.yy" +#line 1367 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGuardianLog is not supported."); YYERROR; @@ -2741,7 +2741,7 @@ namespace yy { break; case 108: -#line 1370 "seclang-parser.yy" +#line 1372 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecInterceptOnError is not yet supported."); YYERROR; @@ -2750,14 +2750,14 @@ namespace yy { break; case 109: -#line 1375 "seclang-parser.yy" +#line 1377 "seclang-parser.yy" { } #line 2757 "seclang-parser.cc" break; case 110: -#line 1378 "seclang-parser.yy" +#line 1380 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnReadStateLimit is not yet supported."); YYERROR; @@ -2766,7 +2766,7 @@ namespace yy { break; case 111: -#line 1383 "seclang-parser.yy" +#line 1385 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnWriteStateLimit is not yet supported."); YYERROR; @@ -2775,7 +2775,7 @@ namespace yy { break; case 112: -#line 1388 "seclang-parser.yy" +#line 1390 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecSensorId is not yet supported."); YYERROR; @@ -2784,7 +2784,7 @@ namespace yy { break; case 113: -#line 1393 "seclang-parser.yy" +#line 1395 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecRuleInheritance is not yet supported."); YYERROR; @@ -2793,14 +2793,14 @@ namespace yy { break; case 114: -#line 1398 "seclang-parser.yy" +#line 1400 "seclang-parser.yy" { } #line 2800 "seclang-parser.cc" break; case 115: -#line 1401 "seclang-parser.yy" +#line 1403 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecRulePerfTime is not yet supported."); YYERROR; @@ -2809,7 +2809,7 @@ namespace yy { break; case 116: -#line 1406 "seclang-parser.yy" +#line 1408 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamInBodyInspection is not supported."); YYERROR; @@ -2818,7 +2818,7 @@ namespace yy { break; case 117: -#line 1411 "seclang-parser.yy" +#line 1413 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamOutBodyInspection is not supported."); YYERROR; @@ -2827,7 +2827,7 @@ namespace yy { break; case 118: -#line 1416 "seclang-parser.yy" +#line 1418 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.load(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2844,7 +2844,7 @@ namespace yy { break; case 119: -#line 1429 "seclang-parser.yy" +#line 1431 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByTag(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2861,7 +2861,7 @@ namespace yy { break; case 120: -#line 1442 "seclang-parser.yy" +#line 1444 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByMsg(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2878,7 +2878,7 @@ namespace yy { break; case 121: -#line 1455 "seclang-parser.yy" +#line 1457 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByTag(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2895,7 +2895,7 @@ namespace yy { break; case 122: -#line 1468 "seclang-parser.yy" +#line 1470 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadUpdateTargetByMsg(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > > > ()), &error) == false) { @@ -2912,7 +2912,7 @@ namespace yy { break; case 123: -#line 1481 "seclang-parser.yy" +#line 1483 "seclang-parser.yy" { std::string error; double ruleId; @@ -2942,7 +2942,7 @@ namespace yy { break; case 124: -#line 1507 "seclang-parser.yy" +#line 1509 "seclang-parser.yy" { std::string error; double ruleId; @@ -2973,7 +2973,7 @@ namespace yy { break; case 125: -#line 1535 "seclang-parser.yy" +#line 1537 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { driver.m_debugLog->setDebugLogLevel(atoi(yystack_[0].value.as < std::string > ().c_str())); @@ -2989,7 +2989,7 @@ namespace yy { break; case 126: -#line 1547 "seclang-parser.yy" +#line 1549 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { std::string error; @@ -3012,7 +3012,7 @@ namespace yy { break; case 127: -#line 1567 "seclang-parser.yy" +#line 1569 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) std::string err; @@ -3043,7 +3043,7 @@ namespace yy { break; case 128: -#line 1594 "seclang-parser.yy" +#line 1596 "seclang-parser.yy" { driver.m_argumentsLimit.m_set = true; driver.m_argumentsLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); @@ -3052,7 +3052,7 @@ namespace yy { break; case 129: -#line 1600 "seclang-parser.yy" +#line 1602 "seclang-parser.yy" { driver.m_requestBodyLimit.m_set = true; driver.m_requestBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); @@ -3061,7 +3061,7 @@ namespace yy { break; case 130: -#line 1605 "seclang-parser.yy" +#line 1607 "seclang-parser.yy" { driver.m_requestBodyNoFilesLimit.m_set = true; driver.m_requestBodyNoFilesLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); @@ -3070,7 +3070,7 @@ namespace yy { break; case 131: -#line 1610 "seclang-parser.yy" +#line 1612 "seclang-parser.yy" { std::stringstream ss; ss << "As of ModSecurity version 3.0, SecRequestBodyInMemoryLimit is no longer "; @@ -3083,7 +3083,7 @@ namespace yy { break; case 132: -#line 1619 "seclang-parser.yy" +#line 1621 "seclang-parser.yy" { driver.m_responseBodyLimit.m_set = true; driver.m_responseBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); @@ -3092,7 +3092,7 @@ namespace yy { break; case 133: -#line 1624 "seclang-parser.yy" +#line 1626 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } @@ -3100,7 +3100,7 @@ namespace yy { break; case 134: -#line 1628 "seclang-parser.yy" +#line 1630 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } @@ -3108,7 +3108,7 @@ namespace yy { break; case 135: -#line 1632 "seclang-parser.yy" +#line 1634 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } @@ -3116,7 +3116,7 @@ namespace yy { break; case 136: -#line 1636 "seclang-parser.yy" +#line 1638 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } @@ -3124,7 +3124,7 @@ namespace yy { break; case 137: -#line 1640 "seclang-parser.yy" +#line 1642 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction; } @@ -3132,7 +3132,7 @@ namespace yy { break; case 138: -#line 1644 "seclang-parser.yy" +#line 1646 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction; } @@ -3140,7 +3140,7 @@ namespace yy { break; case 141: -#line 1658 "seclang-parser.yy" +#line 1660 "seclang-parser.yy" { std::istringstream buf(yystack_[0].value.as < std::string > ()); std::istream_iterator beg(buf), end; @@ -3156,7 +3156,7 @@ namespace yy { break; case 142: -#line 1670 "seclang-parser.yy" +#line 1672 "seclang-parser.yy" { driver.m_responseBodyTypeToBeInspected.m_set = true; driver.m_responseBodyTypeToBeInspected.m_clear = true; @@ -3166,7 +3166,7 @@ namespace yy { break; case 143: -#line 1676 "seclang-parser.yy" +#line 1678 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::FalseConfigBoolean; } @@ -3174,7 +3174,7 @@ namespace yy { break; case 144: -#line 1680 "seclang-parser.yy" +#line 1682 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::TrueConfigBoolean; } @@ -3182,7 +3182,7 @@ namespace yy { break; case 145: -#line 1684 "seclang-parser.yy" +#line 1686 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default installations with modsecurity.conf-recommended std::stringstream ss; @@ -3197,7 +3197,7 @@ namespace yy { break; case 148: -#line 1705 "seclang-parser.yy" +#line 1707 "seclang-parser.yy" { if (atoi(yystack_[0].value.as < std::string > ().c_str()) == 1) { driver.error(yystack_[1].location, "SecCookieFormat 1 is not yet supported."); @@ -3208,7 +3208,7 @@ namespace yy { break; case 149: -#line 1712 "seclang-parser.yy" +#line 1714 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCookieV0Separator is not yet supported."); YYERROR; @@ -3217,7 +3217,7 @@ namespace yy { break; case 151: -#line 1722 "seclang-parser.yy" +#line 1724 "seclang-parser.yy" { std::string error; std::vector param; @@ -3275,7 +3275,7 @@ namespace yy { break; case 152: -#line 1776 "seclang-parser.yy" +#line 1778 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default CRS installations with crs-setup.conf-recommended driver.error(@0, "SecCollectionTimeout is not yet supported."); @@ -3286,7 +3286,7 @@ namespace yy { break; case 153: -#line 1783 "seclang-parser.yy" +#line 1785 "seclang-parser.yy" { driver.m_httpblKey.m_set = true; driver.m_httpblKey.m_value = yystack_[0].value.as < std::string > (); @@ -3295,7 +3295,7 @@ namespace yy { break; case 154: -#line 1791 "seclang-parser.yy" +#line 1793 "seclang-parser.yy" { std::unique_ptr > > originalList = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); std::unique_ptr>> newList(new std::vector>()); @@ -3333,7 +3333,7 @@ namespace yy { break; case 155: -#line 1828 "seclang-parser.yy" +#line 1830 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } @@ -3341,7 +3341,7 @@ namespace yy { break; case 156: -#line 1832 "seclang-parser.yy" +#line 1834 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } @@ -3349,7 +3349,7 @@ namespace yy { break; case 157: -#line 1839 "seclang-parser.yy" +#line 1841 "seclang-parser.yy" { yystack_[2].value.as < std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[2].value.as < std::unique_ptr > > > ()); @@ -3358,7 +3358,7 @@ namespace yy { break; case 158: -#line 1844 "seclang-parser.yy" +#line 1846 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); @@ -3368,7 +3368,7 @@ namespace yy { break; case 159: -#line 1850 "seclang-parser.yy" +#line 1852 "seclang-parser.yy" { std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); yystack_[3].value.as < std::unique_ptr > > > ()->push_back(std::move(c)); @@ -3378,7 +3378,7 @@ namespace yy { break; case 160: -#line 1856 "seclang-parser.yy" +#line 1858 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); b->push_back(std::move(yystack_[0].value.as < std::unique_ptr > ())); @@ -3388,7 +3388,7 @@ namespace yy { break; case 161: -#line 1862 "seclang-parser.yy" +#line 1864 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as < std::unique_ptr > ()))); @@ -3399,7 +3399,7 @@ namespace yy { break; case 162: -#line 1869 "seclang-parser.yy" +#line 1871 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as < std::unique_ptr > ()))); @@ -3410,7 +3410,7 @@ namespace yy { break; case 163: -#line 1879 "seclang-parser.yy" +#line 1881 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3418,7 +3418,7 @@ namespace yy { break; case 164: -#line 1883 "seclang-parser.yy" +#line 1885 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3426,7 +3426,7 @@ namespace yy { break; case 165: -#line 1887 "seclang-parser.yy" +#line 1889 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_NoDictElement()); } @@ -3434,7 +3434,7 @@ namespace yy { break; case 166: -#line 1891 "seclang-parser.yy" +#line 1893 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3442,7 +3442,7 @@ namespace yy { break; case 167: -#line 1895 "seclang-parser.yy" +#line 1897 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3450,7 +3450,7 @@ namespace yy { break; case 168: -#line 1899 "seclang-parser.yy" +#line 1901 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_NoDictElement()); } @@ -3458,7 +3458,7 @@ namespace yy { break; case 169: -#line 1903 "seclang-parser.yy" +#line 1905 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3466,7 +3466,7 @@ namespace yy { break; case 170: -#line 1907 "seclang-parser.yy" +#line 1909 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3474,7 +3474,7 @@ namespace yy { break; case 171: -#line 1911 "seclang-parser.yy" +#line 1913 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_NoDictElement()); } @@ -3482,7 +3482,7 @@ namespace yy { break; case 172: -#line 1915 "seclang-parser.yy" +#line 1917 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3490,7 +3490,7 @@ namespace yy { break; case 173: -#line 1919 "seclang-parser.yy" +#line 1921 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3498,7 +3498,7 @@ namespace yy { break; case 174: -#line 1923 "seclang-parser.yy" +#line 1925 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_NoDictElement()); } @@ -3506,7 +3506,7 @@ namespace yy { break; case 175: -#line 1927 "seclang-parser.yy" +#line 1929 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3514,7 +3514,7 @@ namespace yy { break; case 176: -#line 1931 "seclang-parser.yy" +#line 1933 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3522,7 +3522,7 @@ namespace yy { break; case 177: -#line 1935 "seclang-parser.yy" +#line 1937 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_NoDictElement()); } @@ -3530,7 +3530,7 @@ namespace yy { break; case 178: -#line 1939 "seclang-parser.yy" +#line 1941 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3538,7 +3538,7 @@ namespace yy { break; case 179: -#line 1943 "seclang-parser.yy" +#line 1945 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3546,7 +3546,7 @@ namespace yy { break; case 180: -#line 1947 "seclang-parser.yy" +#line 1949 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_NoDictElement()); } @@ -3554,7 +3554,7 @@ namespace yy { break; case 181: -#line 1951 "seclang-parser.yy" +#line 1953 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3562,7 +3562,7 @@ namespace yy { break; case 182: -#line 1955 "seclang-parser.yy" +#line 1957 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3570,7 +3570,7 @@ namespace yy { break; case 183: -#line 1959 "seclang-parser.yy" +#line 1961 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_NoDictElement()); } @@ -3578,7 +3578,7 @@ namespace yy { break; case 184: -#line 1963 "seclang-parser.yy" +#line 1965 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3586,7 +3586,7 @@ namespace yy { break; case 185: -#line 1967 "seclang-parser.yy" +#line 1969 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3594,7 +3594,7 @@ namespace yy { break; case 186: -#line 1971 "seclang-parser.yy" +#line 1973 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_NoDictElement()); } @@ -3602,7 +3602,7 @@ namespace yy { break; case 187: -#line 1975 "seclang-parser.yy" +#line 1977 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3610,7 +3610,7 @@ namespace yy { break; case 188: -#line 1979 "seclang-parser.yy" +#line 1981 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3618,7 +3618,7 @@ namespace yy { break; case 189: -#line 1983 "seclang-parser.yy" +#line 1985 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_NoDictElement()); } @@ -3626,7 +3626,7 @@ namespace yy { break; case 190: -#line 1987 "seclang-parser.yy" +#line 1989 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3634,7 +3634,7 @@ namespace yy { break; case 191: -#line 1991 "seclang-parser.yy" +#line 1993 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3642,7 +3642,7 @@ namespace yy { break; case 192: -#line 1995 "seclang-parser.yy" +#line 1997 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_NoDictElement()); } @@ -3650,7 +3650,7 @@ namespace yy { break; case 193: -#line 1999 "seclang-parser.yy" +#line 2001 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3658,7 +3658,7 @@ namespace yy { break; case 194: -#line 2003 "seclang-parser.yy" +#line 2005 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3666,7 +3666,7 @@ namespace yy { break; case 195: -#line 2007 "seclang-parser.yy" +#line 2009 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_NoDictElement()); } @@ -3674,7 +3674,7 @@ namespace yy { break; case 196: -#line 2011 "seclang-parser.yy" +#line 2013 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3682,7 +3682,7 @@ namespace yy { break; case 197: -#line 2015 "seclang-parser.yy" +#line 2017 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3690,7 +3690,7 @@ namespace yy { break; case 198: -#line 2019 "seclang-parser.yy" +#line 2021 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_NoDictElement()); } @@ -3698,7 +3698,7 @@ namespace yy { break; case 199: -#line 2023 "seclang-parser.yy" +#line 2025 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3706,7 +3706,7 @@ namespace yy { break; case 200: -#line 2027 "seclang-parser.yy" +#line 2029 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3714,7 +3714,7 @@ namespace yy { break; case 201: -#line 2031 "seclang-parser.yy" +#line 2033 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_NoDictElement()); } @@ -3722,7 +3722,7 @@ namespace yy { break; case 202: -#line 2035 "seclang-parser.yy" +#line 2037 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3730,7 +3730,7 @@ namespace yy { break; case 203: -#line 2039 "seclang-parser.yy" +#line 2041 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3738,7 +3738,7 @@ namespace yy { break; case 204: -#line 2043 "seclang-parser.yy" +#line 2045 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_NoDictElement()); } @@ -3746,7 +3746,7 @@ namespace yy { break; case 205: -#line 2047 "seclang-parser.yy" +#line 2049 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3754,7 +3754,7 @@ namespace yy { break; case 206: -#line 2051 "seclang-parser.yy" +#line 2053 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3762,7 +3762,7 @@ namespace yy { break; case 207: -#line 2055 "seclang-parser.yy" +#line 2057 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_NoDictElement()); } @@ -3770,7 +3770,7 @@ namespace yy { break; case 208: -#line 2059 "seclang-parser.yy" +#line 2061 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3778,7 +3778,7 @@ namespace yy { break; case 209: -#line 2063 "seclang-parser.yy" +#line 2065 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3786,7 +3786,7 @@ namespace yy { break; case 210: -#line 2067 "seclang-parser.yy" +#line 2069 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_NoDictElement()); } @@ -3794,7 +3794,7 @@ namespace yy { break; case 211: -#line 2071 "seclang-parser.yy" +#line 2073 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3802,7 +3802,7 @@ namespace yy { break; case 212: -#line 2075 "seclang-parser.yy" +#line 2077 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3810,7 +3810,7 @@ namespace yy { break; case 213: -#line 2079 "seclang-parser.yy" +#line 2081 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_NoDictElement()); } @@ -3818,7 +3818,7 @@ namespace yy { break; case 214: -#line 2083 "seclang-parser.yy" +#line 2085 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } @@ -3826,7 +3826,7 @@ namespace yy { break; case 215: -#line 2087 "seclang-parser.yy" +#line 2089 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } @@ -3834,7 +3834,7 @@ namespace yy { break; case 216: -#line 2091 "seclang-parser.yy" +#line 2093 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV")); } @@ -3842,7 +3842,7 @@ namespace yy { break; case 217: -#line 2095 "seclang-parser.yy" +#line 2097 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } @@ -3850,7 +3850,7 @@ namespace yy { break; case 218: -#line 2099 "seclang-parser.yy" +#line 2101 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML("XML:" + yystack_[0].value.as < std::string > ())); } @@ -3858,7 +3858,7 @@ namespace yy { break; case 219: -#line 2103 "seclang-parser.yy" +#line 2105 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML_NoDictElement()); } @@ -3866,7 +3866,7 @@ namespace yy { break; case 220: -#line 2107 "seclang-parser.yy" +#line 2109 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3874,7 +3874,7 @@ namespace yy { break; case 221: -#line 2111 "seclang-parser.yy" +#line 2113 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3882,7 +3882,7 @@ namespace yy { break; case 222: -#line 2115 "seclang-parser.yy" +#line 2117 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_NoDictElement()); } @@ -3890,7 +3890,7 @@ namespace yy { break; case 223: -#line 2119 "seclang-parser.yy" +#line 2121 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -3898,7 +3898,7 @@ namespace yy { break; case 224: -#line 2123 "seclang-parser.yy" +#line 2125 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3906,7 +3906,7 @@ namespace yy { break; case 225: -#line 2127 "seclang-parser.yy" +#line 2129 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3914,7 +3914,7 @@ namespace yy { break; case 226: -#line 2131 "seclang-parser.yy" +#line 2133 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_NoDictElement()); } @@ -3922,7 +3922,7 @@ namespace yy { break; case 227: -#line 2135 "seclang-parser.yy" +#line 2137 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -3930,7 +3930,7 @@ namespace yy { break; case 228: -#line 2139 "seclang-parser.yy" +#line 2141 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3938,7 +3938,7 @@ namespace yy { break; case 229: -#line 2143 "seclang-parser.yy" +#line 2145 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3946,7 +3946,7 @@ namespace yy { break; case 230: -#line 2147 "seclang-parser.yy" +#line 2149 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_NoDictElement()); } @@ -3954,7 +3954,7 @@ namespace yy { break; case 231: -#line 2151 "seclang-parser.yy" +#line 2153 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -3962,7 +3962,7 @@ namespace yy { break; case 232: -#line 2155 "seclang-parser.yy" +#line 2157 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElement(yystack_[0].value.as < std::string > ())); } @@ -3970,7 +3970,7 @@ namespace yy { break; case 233: -#line 2159 "seclang-parser.yy" +#line 2161 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -3978,7 +3978,7 @@ namespace yy { break; case 234: -#line 2163 "seclang-parser.yy" +#line 2165 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_NoDictElement()); } @@ -3986,7 +3986,7 @@ namespace yy { break; case 235: -#line 2167 "seclang-parser.yy" +#line 2169 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -3994,7 +3994,7 @@ namespace yy { break; case 236: -#line 2171 "seclang-parser.yy" +#line 2173 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4002,7 +4002,7 @@ namespace yy { break; case 237: -#line 2175 "seclang-parser.yy" +#line 2177 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4010,7 +4010,7 @@ namespace yy { break; case 238: -#line 2179 "seclang-parser.yy" +#line 2181 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_NoDictElement()); } @@ -4018,7 +4018,7 @@ namespace yy { break; case 239: -#line 2183 "seclang-parser.yy" +#line 2185 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -4026,7 +4026,7 @@ namespace yy { break; case 240: -#line 2187 "seclang-parser.yy" +#line 2189 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4034,7 +4034,7 @@ namespace yy { break; case 241: -#line 2191 "seclang-parser.yy" +#line 2193 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4042,7 +4042,7 @@ namespace yy { break; case 242: -#line 2195 "seclang-parser.yy" +#line 2197 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_NoDictElement()); } @@ -4050,7 +4050,7 @@ namespace yy { break; case 243: -#line 2199 "seclang-parser.yy" +#line 2201 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -4058,7 +4058,7 @@ namespace yy { break; case 244: -#line 2203 "seclang-parser.yy" +#line 2205 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4066,7 +4066,7 @@ namespace yy { break; case 245: -#line 2207 "seclang-parser.yy" +#line 2209 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4074,7 +4074,7 @@ namespace yy { break; case 246: -#line 2211 "seclang-parser.yy" +#line 2213 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_NoDictElement()); } @@ -4082,7 +4082,7 @@ namespace yy { break; case 247: -#line 2215 "seclang-parser.yy" +#line 2217 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4090,7 +4090,7 @@ namespace yy { break; case 248: -#line 2219 "seclang-parser.yy" +#line 2221 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4098,7 +4098,7 @@ namespace yy { break; case 249: -#line 2223 "seclang-parser.yy" +#line 2225 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_NoDictElement()); } @@ -4106,7 +4106,7 @@ namespace yy { break; case 250: -#line 2227 "seclang-parser.yy" +#line 2229 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4114,7 +4114,7 @@ namespace yy { break; case 251: -#line 2231 "seclang-parser.yy" +#line 2233 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4122,7 +4122,7 @@ namespace yy { break; case 252: -#line 2235 "seclang-parser.yy" +#line 2237 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_NoDictElement()); } @@ -4130,7 +4130,7 @@ namespace yy { break; case 253: -#line 2240 "seclang-parser.yy" +#line 2242 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4138,7 +4138,7 @@ namespace yy { break; case 254: -#line 2244 "seclang-parser.yy" +#line 2246 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4146,7 +4146,7 @@ namespace yy { break; case 255: -#line 2248 "seclang-parser.yy" +#line 2250 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_NoDictElement()); } @@ -4154,7 +4154,7 @@ namespace yy { break; case 256: -#line 2253 "seclang-parser.yy" +#line 2255 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4162,7 +4162,7 @@ namespace yy { break; case 257: -#line 2257 "seclang-parser.yy" +#line 2259 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4170,7 +4170,7 @@ namespace yy { break; case 258: -#line 2261 "seclang-parser.yy" +#line 2263 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_NoDictElement()); } @@ -4178,7 +4178,7 @@ namespace yy { break; case 259: -#line 2266 "seclang-parser.yy" +#line 2268 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentType()); } @@ -4186,7 +4186,7 @@ namespace yy { break; case 260: -#line 2271 "seclang-parser.yy" +#line 2273 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } @@ -4194,7 +4194,7 @@ namespace yy { break; case 261: -#line 2275 "seclang-parser.yy" +#line 2277 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } @@ -4202,7 +4202,7 @@ namespace yy { break; case 262: -#line 2279 "seclang-parser.yy" +#line 2281 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_NoDictElement()); } @@ -4210,7 +4210,7 @@ namespace yy { break; case 263: -#line 2283 "seclang-parser.yy" +#line 2285 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsCombinedSize()); } @@ -4218,7 +4218,7 @@ namespace yy { break; case 264: -#line 2287 "seclang-parser.yy" +#line 2289 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::AuthType()); } @@ -4226,7 +4226,7 @@ namespace yy { break; case 265: -#line 2291 "seclang-parser.yy" +#line 2293 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesCombinedSize()); } @@ -4234,7 +4234,7 @@ namespace yy { break; case 266: -#line 2295 "seclang-parser.yy" +#line 2297 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequest()); } @@ -4242,7 +4242,7 @@ namespace yy { break; case 267: -#line 2299 "seclang-parser.yy" +#line 2301 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequestLength()); } @@ -4250,7 +4250,7 @@ namespace yy { break; case 268: -#line 2303 "seclang-parser.yy" +#line 2305 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::InboundDataError()); } @@ -4258,7 +4258,7 @@ namespace yy { break; case 269: -#line 2307 "seclang-parser.yy" +#line 2309 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVar()); } @@ -4266,7 +4266,7 @@ namespace yy { break; case 270: -#line 2311 "seclang-parser.yy" +#line 2313 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarName()); } @@ -4274,7 +4274,7 @@ namespace yy { break; case 271: -#line 2315 "seclang-parser.yy" +#line 2317 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryQuoted()); } @@ -4282,7 +4282,7 @@ namespace yy { break; case 272: -#line 2319 "seclang-parser.yy" +#line 2321 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryWhiteSpace()); } @@ -4290,7 +4290,7 @@ namespace yy { break; case 273: -#line 2323 "seclang-parser.yy" +#line 2325 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartCrlfLFLines()); } @@ -4298,7 +4298,7 @@ namespace yy { break; case 274: -#line 2327 "seclang-parser.yy" +#line 2329 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateAfter()); } @@ -4306,7 +4306,7 @@ namespace yy { break; case 275: -#line 2331 "seclang-parser.yy" +#line 2333 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateBefore()); } @@ -4314,7 +4314,7 @@ namespace yy { break; case 276: -#line 2335 "seclang-parser.yy" +#line 2337 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartFileLimitExceeded()); } @@ -4322,7 +4322,7 @@ namespace yy { break; case 277: -#line 2339 "seclang-parser.yy" +#line 2341 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartHeaderFolding()); } @@ -4330,7 +4330,7 @@ namespace yy { break; case 278: -#line 2343 "seclang-parser.yy" +#line 2345 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidHeaderFolding()); } @@ -4338,7 +4338,7 @@ namespace yy { break; case 279: -#line 2347 "seclang-parser.yy" +#line 2349 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidPart()); } @@ -4346,7 +4346,7 @@ namespace yy { break; case 280: -#line 2351 "seclang-parser.yy" +#line 2353 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidQuoting()); } @@ -4354,7 +4354,7 @@ namespace yy { break; case 281: -#line 2355 "seclang-parser.yy" +#line 2357 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartLFLine()); } @@ -4362,7 +4362,7 @@ namespace yy { break; case 282: -#line 2359 "seclang-parser.yy" +#line 2361 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } @@ -4370,7 +4370,7 @@ namespace yy { break; case 283: -#line 2363 "seclang-parser.yy" +#line 2365 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } @@ -4378,7 +4378,7 @@ namespace yy { break; case 284: -#line 2367 "seclang-parser.yy" +#line 2369 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartStrictError()); } @@ -4386,7 +4386,7 @@ namespace yy { break; case 285: -#line 2371 "seclang-parser.yy" +#line 2373 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartUnmatchedBoundary()); } @@ -4394,7 +4394,7 @@ namespace yy { break; case 286: -#line 2375 "seclang-parser.yy" +#line 2377 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::OutboundDataError()); } @@ -4402,7 +4402,7 @@ namespace yy { break; case 287: -#line 2379 "seclang-parser.yy" +#line 2381 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::PathInfo()); } @@ -4410,7 +4410,7 @@ namespace yy { break; case 288: -#line 2383 "seclang-parser.yy" +#line 2385 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::QueryString()); } @@ -4418,7 +4418,7 @@ namespace yy { break; case 289: -#line 2387 "seclang-parser.yy" +#line 2389 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteAddr()); } @@ -4426,7 +4426,7 @@ namespace yy { break; case 290: -#line 2391 "seclang-parser.yy" +#line 2393 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteHost()); } @@ -4434,7 +4434,7 @@ namespace yy { break; case 291: -#line 2395 "seclang-parser.yy" +#line 2397 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemotePort()); } @@ -4442,7 +4442,7 @@ namespace yy { break; case 292: -#line 2399 "seclang-parser.yy" +#line 2401 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyError()); } @@ -4450,7 +4450,7 @@ namespace yy { break; case 293: -#line 2403 "seclang-parser.yy" +#line 2405 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyErrorMsg()); } @@ -4458,7 +4458,7 @@ namespace yy { break; case 294: -#line 2407 "seclang-parser.yy" +#line 2409 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessor()); } @@ -4466,7 +4466,7 @@ namespace yy { break; case 295: -#line 2411 "seclang-parser.yy" +#line 2413 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorError()); } @@ -4474,7 +4474,7 @@ namespace yy { break; case 296: -#line 2415 "seclang-parser.yy" +#line 2417 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorErrorMsg()); } @@ -4482,7 +4482,7 @@ namespace yy { break; case 297: -#line 2419 "seclang-parser.yy" +#line 2421 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBasename()); } @@ -4490,7 +4490,7 @@ namespace yy { break; case 298: -#line 2423 "seclang-parser.yy" +#line 2425 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBody()); } @@ -4498,7 +4498,7 @@ namespace yy { break; case 299: -#line 2427 "seclang-parser.yy" +#line 2429 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBodyLength()); } @@ -4506,7 +4506,7 @@ namespace yy { break; case 300: -#line 2431 "seclang-parser.yy" +#line 2433 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestFilename()); } @@ -4514,7 +4514,7 @@ namespace yy { break; case 301: -#line 2435 "seclang-parser.yy" +#line 2437 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestLine()); } @@ -4522,7 +4522,7 @@ namespace yy { break; case 302: -#line 2439 "seclang-parser.yy" +#line 2441 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestMethod()); } @@ -4530,7 +4530,7 @@ namespace yy { break; case 303: -#line 2443 "seclang-parser.yy" +#line 2445 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestProtocol()); } @@ -4538,7 +4538,7 @@ namespace yy { break; case 304: -#line 2447 "seclang-parser.yy" +#line 2449 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURI()); } @@ -4546,7 +4546,7 @@ namespace yy { break; case 305: -#line 2451 "seclang-parser.yy" +#line 2453 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURIRaw()); } @@ -4554,7 +4554,7 @@ namespace yy { break; case 306: -#line 2455 "seclang-parser.yy" +#line 2457 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseBody()); } @@ -4562,7 +4562,7 @@ namespace yy { break; case 307: -#line 2459 "seclang-parser.yy" +#line 2461 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentLength()); } @@ -4570,7 +4570,7 @@ namespace yy { break; case 308: -#line 2463 "seclang-parser.yy" +#line 2465 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseProtocol()); } @@ -4578,7 +4578,7 @@ namespace yy { break; case 309: -#line 2467 "seclang-parser.yy" +#line 2469 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseStatus()); } @@ -4586,7 +4586,7 @@ namespace yy { break; case 310: -#line 2471 "seclang-parser.yy" +#line 2473 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerAddr()); } @@ -4594,7 +4594,7 @@ namespace yy { break; case 311: -#line 2475 "seclang-parser.yy" +#line 2477 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerName()); } @@ -4602,7 +4602,7 @@ namespace yy { break; case 312: -#line 2479 "seclang-parser.yy" +#line 2481 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerPort()); } @@ -4610,7 +4610,7 @@ namespace yy { break; case 313: -#line 2483 "seclang-parser.yy" +#line 2485 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::SessionID()); } @@ -4618,7 +4618,7 @@ namespace yy { break; case 314: -#line 2487 "seclang-parser.yy" +#line 2489 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UniqueID()); } @@ -4626,7 +4626,7 @@ namespace yy { break; case 315: -#line 2491 "seclang-parser.yy" +#line 2493 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UrlEncodedError()); } @@ -4634,7 +4634,7 @@ namespace yy { break; case 316: -#line 2495 "seclang-parser.yy" +#line 2497 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UserID()); } @@ -4642,7 +4642,7 @@ namespace yy { break; case 317: -#line 2499 "seclang-parser.yy" +#line 2501 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } @@ -4650,7 +4650,7 @@ namespace yy { break; case 318: -#line 2503 "seclang-parser.yy" +#line 2505 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } @@ -4658,7 +4658,7 @@ namespace yy { break; case 319: -#line 2507 "seclang-parser.yy" +#line 2509 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::WebAppId()); } @@ -4666,7 +4666,7 @@ namespace yy { break; case 320: -#line 2511 "seclang-parser.yy" +#line 2513 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4677,7 +4677,7 @@ namespace yy { break; case 321: -#line 2519 "seclang-parser.yy" +#line 2521 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4688,7 +4688,7 @@ namespace yy { break; case 322: -#line 2526 "seclang-parser.yy" +#line 2528 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4699,7 +4699,7 @@ namespace yy { break; case 323: -#line 2533 "seclang-parser.yy" +#line 2535 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4710,7 +4710,7 @@ namespace yy { break; case 324: -#line 2540 "seclang-parser.yy" +#line 2542 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4721,7 +4721,7 @@ namespace yy { break; case 325: -#line 2547 "seclang-parser.yy" +#line 2549 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4732,7 +4732,7 @@ namespace yy { break; case 326: -#line 2554 "seclang-parser.yy" +#line 2556 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4743,7 +4743,7 @@ namespace yy { break; case 327: -#line 2561 "seclang-parser.yy" +#line 2563 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4754,7 +4754,7 @@ namespace yy { break; case 328: -#line 2568 "seclang-parser.yy" +#line 2570 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4765,7 +4765,7 @@ namespace yy { break; case 329: -#line 2575 "seclang-parser.yy" +#line 2577 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4776,7 +4776,7 @@ namespace yy { break; case 330: -#line 2582 "seclang-parser.yy" +#line 2584 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4787,7 +4787,7 @@ namespace yy { break; case 331: -#line 2589 "seclang-parser.yy" +#line 2591 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4798,7 +4798,7 @@ namespace yy { break; case 332: -#line 2596 "seclang-parser.yy" +#line 2598 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); @@ -4809,7 +4809,7 @@ namespace yy { break; case 333: -#line 2606 "seclang-parser.yy" +#line 2608 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Accuracy(yystack_[0].value.as < std::string > ())); } @@ -4817,7 +4817,7 @@ namespace yy { break; case 334: -#line 2610 "seclang-parser.yy" +#line 2612 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Allow(yystack_[0].value.as < std::string > ())); } @@ -4825,7 +4825,7 @@ namespace yy { break; case 335: -#line 2614 "seclang-parser.yy" +#line 2616 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Append", yystack_[1].location); } @@ -4833,7 +4833,7 @@ namespace yy { break; case 336: -#line 2618 "seclang-parser.yy" +#line 2620 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::AuditLog(yystack_[0].value.as < std::string > ())); } @@ -4841,7 +4841,7 @@ namespace yy { break; case 337: -#line 2622 "seclang-parser.yy" +#line 2624 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Block(yystack_[0].value.as < std::string > ())); } @@ -4849,7 +4849,7 @@ namespace yy { break; case 338: -#line 2626 "seclang-parser.yy" +#line 2628 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Capture(yystack_[0].value.as < std::string > ())); } @@ -4857,7 +4857,7 @@ namespace yy { break; case 339: -#line 2630 "seclang-parser.yy" +#line 2632 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Chain(yystack_[0].value.as < std::string > ())); } @@ -4865,7 +4865,7 @@ namespace yy { break; case 340: -#line 2634 "seclang-parser.yy" +#line 2636 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); @@ -4874,7 +4874,7 @@ namespace yy { break; case 341: -#line 2639 "seclang-parser.yy" +#line 2641 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); @@ -4883,7 +4883,7 @@ namespace yy { break; case 342: -#line 2644 "seclang-parser.yy" +#line 2646 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); @@ -4892,7 +4892,7 @@ namespace yy { break; case 343: -#line 2649 "seclang-parser.yy" +#line 2651 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::AuditLogParts(yystack_[0].value.as < std::string > ())); } @@ -4900,7 +4900,7 @@ namespace yy { break; case 344: -#line 2653 "seclang-parser.yy" +#line 2655 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorJSON(yystack_[0].value.as < std::string > ())); } @@ -4908,7 +4908,7 @@ namespace yy { break; case 345: -#line 2657 "seclang-parser.yy" +#line 2659 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorXML(yystack_[0].value.as < std::string > ())); } @@ -4916,7 +4916,7 @@ namespace yy { break; case 346: -#line 2661 "seclang-parser.yy" +#line 2663 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorURLENCODED(yystack_[0].value.as < std::string > ())); } @@ -4924,7 +4924,7 @@ namespace yy { break; case 347: -#line 2665 "seclang-parser.yy" +#line 2667 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); @@ -4933,7 +4933,7 @@ namespace yy { break; case 348: -#line 2670 "seclang-parser.yy" +#line 2672 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[1].value.as < std::string > ())); @@ -4942,7 +4942,7 @@ namespace yy { break; case 349: -#line 2675 "seclang-parser.yy" +#line 2677 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "true")); } @@ -4950,7 +4950,7 @@ namespace yy { break; case 350: -#line 2679 "seclang-parser.yy" +#line 2681 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "false")); } @@ -4958,7 +4958,7 @@ namespace yy { break; case 351: -#line 2683 "seclang-parser.yy" +#line 2685 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=on")); } @@ -4966,7 +4966,7 @@ namespace yy { break; case 352: -#line 2687 "seclang-parser.yy" +#line 2689 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=off")); } @@ -4974,7 +4974,7 @@ namespace yy { break; case 353: -#line 2691 "seclang-parser.yy" +#line 2693 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=detectiononly")); } @@ -4982,7 +4982,7 @@ namespace yy { break; case 354: -#line 2695 "seclang-parser.yy" +#line 2697 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveById(yystack_[0].value.as < std::string > ())); } @@ -4990,7 +4990,7 @@ namespace yy { break; case 355: -#line 2699 "seclang-parser.yy" +#line 2701 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveByTag(yystack_[0].value.as < std::string > ())); } @@ -4998,7 +4998,7 @@ namespace yy { break; case 356: -#line 2703 "seclang-parser.yy" +#line 2705 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetById(yystack_[0].value.as < std::string > ())); } @@ -5006,7 +5006,7 @@ namespace yy { break; case 357: -#line 2707 "seclang-parser.yy" +#line 2709 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetByTag(yystack_[0].value.as < std::string > ())); } @@ -5014,7 +5014,7 @@ namespace yy { break; case 358: -#line 2711 "seclang-parser.yy" +#line 2713 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Deny(yystack_[0].value.as < std::string > ())); } @@ -5022,7 +5022,7 @@ namespace yy { break; case 359: -#line 2715 "seclang-parser.yy" +#line 2717 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[1].location); } @@ -5030,7 +5030,7 @@ namespace yy { break; case 360: -#line 2719 "seclang-parser.yy" +#line 2721 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Drop(yystack_[0].value.as < std::string > ())); } @@ -5038,7 +5038,7 @@ namespace yy { break; case 361: -#line 2723 "seclang-parser.yy" +#line 2725 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Exec(yystack_[0].value.as < std::string > ())); } @@ -5046,7 +5046,7 @@ namespace yy { break; case 362: -#line 2727 "seclang-parser.yy" +#line 2729 "seclang-parser.yy" { //ACTION_NOT_SUPPORTED("ExpireVar", @0); ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Action(yystack_[0].value.as < std::string > ())); @@ -5055,7 +5055,7 @@ namespace yy { break; case 363: -#line 2732 "seclang-parser.yy" +#line 2734 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::RuleId(yystack_[0].value.as < std::string > ())); } @@ -5063,7 +5063,7 @@ namespace yy { break; case 364: -#line 2736 "seclang-parser.yy" +#line 2738 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::InitCol(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5071,7 +5071,7 @@ namespace yy { break; case 365: -#line 2740 "seclang-parser.yy" +#line 2742 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::LogData(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5079,7 +5079,7 @@ namespace yy { break; case 366: -#line 2744 "seclang-parser.yy" +#line 2746 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Log(yystack_[0].value.as < std::string > ())); } @@ -5087,7 +5087,7 @@ namespace yy { break; case 367: -#line 2748 "seclang-parser.yy" +#line 2750 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Maturity(yystack_[0].value.as < std::string > ())); } @@ -5095,7 +5095,7 @@ namespace yy { break; case 368: -#line 2752 "seclang-parser.yy" +#line 2754 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Msg(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5103,7 +5103,7 @@ namespace yy { break; case 369: -#line 2756 "seclang-parser.yy" +#line 2758 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::MultiMatch(yystack_[0].value.as < std::string > ())); } @@ -5111,7 +5111,7 @@ namespace yy { break; case 370: -#line 2760 "seclang-parser.yy" +#line 2762 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoAuditLog(yystack_[0].value.as < std::string > ())); } @@ -5119,7 +5119,7 @@ namespace yy { break; case 371: -#line 2764 "seclang-parser.yy" +#line 2766 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoLog(yystack_[0].value.as < std::string > ())); } @@ -5127,7 +5127,7 @@ namespace yy { break; case 372: -#line 2768 "seclang-parser.yy" +#line 2770 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Pass(yystack_[0].value.as < std::string > ())); } @@ -5135,7 +5135,7 @@ namespace yy { break; case 373: -#line 2772 "seclang-parser.yy" +#line 2774 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Pause", yystack_[1].location); } @@ -5143,7 +5143,7 @@ namespace yy { break; case 374: -#line 2776 "seclang-parser.yy" +#line 2778 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Phase(yystack_[0].value.as < std::string > ())); } @@ -5151,7 +5151,7 @@ namespace yy { break; case 375: -#line 2780 "seclang-parser.yy" +#line 2782 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Prepend", yystack_[1].location); } @@ -5159,7 +5159,7 @@ namespace yy { break; case 376: -#line 2784 "seclang-parser.yy" +#line 2786 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("Proxy", yystack_[1].location); } @@ -5167,7 +5167,7 @@ namespace yy { break; case 377: -#line 2788 "seclang-parser.yy" +#line 2790 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Redirect(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5175,7 +5175,7 @@ namespace yy { break; case 378: -#line 2792 "seclang-parser.yy" +#line 2794 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Rev(yystack_[0].value.as < std::string > ())); } @@ -5183,7 +5183,7 @@ namespace yy { break; case 379: -#line 2796 "seclang-parser.yy" +#line 2798 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[1].location); } @@ -5191,7 +5191,7 @@ namespace yy { break; case 380: -#line 2800 "seclang-parser.yy" +#line 2802 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[1].location); } @@ -5199,7 +5199,7 @@ namespace yy { break; case 381: -#line 2804 "seclang-parser.yy" +#line 2806 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[1].location); } @@ -5207,7 +5207,7 @@ namespace yy { break; case 382: -#line 2808 "seclang-parser.yy" +#line 2810 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[1].location); } @@ -5215,7 +5215,7 @@ namespace yy { break; case 383: -#line 2812 "seclang-parser.yy" +#line 2814 "seclang-parser.yy" { ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[1].location); } @@ -5223,7 +5223,7 @@ namespace yy { break; case 384: -#line 2816 "seclang-parser.yy" +#line 2818 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetENV(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5231,7 +5231,7 @@ namespace yy { break; case 385: -#line 2820 "seclang-parser.yy" +#line 2822 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetRSC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5239,7 +5239,7 @@ namespace yy { break; case 386: -#line 2824 "seclang-parser.yy" +#line 2826 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetSID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5247,7 +5247,7 @@ namespace yy { break; case 387: -#line 2828 "seclang-parser.yy" +#line 2830 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetUID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5255,7 +5255,7 @@ namespace yy { break; case 388: -#line 2832 "seclang-parser.yy" +#line 2834 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); } @@ -5263,7 +5263,7 @@ namespace yy { break; case 389: -#line 2836 "seclang-parser.yy" +#line 2838 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Severity(yystack_[0].value.as < std::string > ())); } @@ -5271,7 +5271,7 @@ namespace yy { break; case 390: -#line 2840 "seclang-parser.yy" +#line 2842 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Skip(yystack_[0].value.as < std::string > ())); } @@ -5279,7 +5279,7 @@ namespace yy { break; case 391: -#line 2844 "seclang-parser.yy" +#line 2846 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SkipAfter(yystack_[0].value.as < std::string > ())); } @@ -5287,7 +5287,7 @@ namespace yy { break; case 392: -#line 2848 "seclang-parser.yy" +#line 2850 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::data::Status(yystack_[0].value.as < std::string > ())); } @@ -5295,7 +5295,7 @@ namespace yy { break; case 393: -#line 2852 "seclang-parser.yy" +#line 2854 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Tag(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5303,7 +5303,7 @@ namespace yy { break; case 394: -#line 2856 "seclang-parser.yy" +#line 2858 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Ver(yystack_[0].value.as < std::string > ())); } @@ -5311,7 +5311,7 @@ namespace yy { break; case 395: -#line 2860 "seclang-parser.yy" +#line 2862 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::XmlNS(yystack_[0].value.as < std::string > ())); } @@ -5319,7 +5319,7 @@ namespace yy { break; case 396: -#line 2864 "seclang-parser.yy" +#line 2866 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityZero7bit(yystack_[0].value.as < std::string > ())); } @@ -5327,7 +5327,7 @@ namespace yy { break; case 397: -#line 2868 "seclang-parser.yy" +#line 2870 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityOdd7bit(yystack_[0].value.as < std::string > ())); } @@ -5335,7 +5335,7 @@ namespace yy { break; case 398: -#line 2872 "seclang-parser.yy" +#line 2874 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityEven7bit(yystack_[0].value.as < std::string > ())); } @@ -5343,7 +5343,7 @@ namespace yy { break; case 399: -#line 2876 "seclang-parser.yy" +#line 2878 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::SqlHexDecode(yystack_[0].value.as < std::string > ())); } @@ -5351,7 +5351,7 @@ namespace yy { break; case 400: -#line 2880 "seclang-parser.yy" +#line 2882 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Encode(yystack_[0].value.as < std::string > ())); } @@ -5359,7 +5359,7 @@ namespace yy { break; case 401: -#line 2884 "seclang-parser.yy" +#line 2886 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Decode(yystack_[0].value.as < std::string > ())); } @@ -5367,7 +5367,7 @@ namespace yy { break; case 402: -#line 2888 "seclang-parser.yy" +#line 2890 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64DecodeExt(yystack_[0].value.as < std::string > ())); } @@ -5375,7 +5375,7 @@ namespace yy { break; case 403: -#line 2892 "seclang-parser.yy" +#line 2894 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CmdLine(yystack_[0].value.as < std::string > ())); } @@ -5383,7 +5383,7 @@ namespace yy { break; case 404: -#line 2896 "seclang-parser.yy" +#line 2898 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Sha1(yystack_[0].value.as < std::string > ())); } @@ -5391,7 +5391,7 @@ namespace yy { break; case 405: -#line 2900 "seclang-parser.yy" +#line 2902 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Md5(yystack_[0].value.as < std::string > ())); } @@ -5399,7 +5399,7 @@ namespace yy { break; case 406: -#line 2904 "seclang-parser.yy" +#line 2906 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::EscapeSeqDecode(yystack_[0].value.as < std::string > ())); } @@ -5407,7 +5407,7 @@ namespace yy { break; case 407: -#line 2908 "seclang-parser.yy" +#line 2910 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexEncode(yystack_[0].value.as < std::string > ())); } @@ -5415,7 +5415,7 @@ namespace yy { break; case 408: -#line 2912 "seclang-parser.yy" +#line 2914 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexDecode(yystack_[0].value.as < std::string > ())); } @@ -5423,7 +5423,7 @@ namespace yy { break; case 409: -#line 2916 "seclang-parser.yy" +#line 2918 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::LowerCase(yystack_[0].value.as < std::string > ())); } @@ -5431,7 +5431,7 @@ namespace yy { break; case 410: -#line 2920 "seclang-parser.yy" +#line 2922 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::PhpArgsNames(yystack_[0].value.as < std::string > ())); } @@ -5439,7 +5439,7 @@ namespace yy { break; case 411: -#line 2924 "seclang-parser.yy" +#line 2926 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UpperCase(yystack_[0].value.as < std::string > ())); } @@ -5447,7 +5447,7 @@ namespace yy { break; case 412: -#line 2928 "seclang-parser.yy" +#line 2930 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecodeUni(yystack_[0].value.as < std::string > ())); } @@ -5455,7 +5455,7 @@ namespace yy { break; case 413: -#line 2932 "seclang-parser.yy" +#line 2934 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecode(yystack_[0].value.as < std::string > ())); } @@ -5463,7 +5463,7 @@ namespace yy { break; case 414: -#line 2936 "seclang-parser.yy" +#line 2938 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlEncode(yystack_[0].value.as < std::string > ())); } @@ -5471,7 +5471,7 @@ namespace yy { break; case 415: -#line 2940 "seclang-parser.yy" +#line 2942 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::None(yystack_[0].value.as < std::string > ())); } @@ -5479,7 +5479,7 @@ namespace yy { break; case 416: -#line 2944 "seclang-parser.yy" +#line 2946 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CompressWhitespace(yystack_[0].value.as < std::string > ())); } @@ -5487,7 +5487,7 @@ namespace yy { break; case 417: -#line 2948 "seclang-parser.yy" +#line 2950 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveWhitespace(yystack_[0].value.as < std::string > ())); } @@ -5495,7 +5495,7 @@ namespace yy { break; case 418: -#line 2952 "seclang-parser.yy" +#line 2954 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceNulls(yystack_[0].value.as < std::string > ())); } @@ -5503,7 +5503,7 @@ namespace yy { break; case 419: -#line 2956 "seclang-parser.yy" +#line 2958 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveNulls(yystack_[0].value.as < std::string > ())); } @@ -5511,7 +5511,7 @@ namespace yy { break; case 420: -#line 2960 "seclang-parser.yy" +#line 2962 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HtmlEntityDecode(yystack_[0].value.as < std::string > ())); } @@ -5519,7 +5519,7 @@ namespace yy { break; case 421: -#line 2964 "seclang-parser.yy" +#line 2966 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::JsDecode(yystack_[0].value.as < std::string > ())); } @@ -5527,7 +5527,7 @@ namespace yy { break; case 422: -#line 2968 "seclang-parser.yy" +#line 2970 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CssDecode(yystack_[0].value.as < std::string > ())); } @@ -5535,7 +5535,7 @@ namespace yy { break; case 423: -#line 2972 "seclang-parser.yy" +#line 2974 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Trim(yystack_[0].value.as < std::string > ())); } @@ -5543,7 +5543,7 @@ namespace yy { break; case 424: -#line 2976 "seclang-parser.yy" +#line 2978 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimLeft(yystack_[0].value.as < std::string > ())); } @@ -5551,7 +5551,7 @@ namespace yy { break; case 425: -#line 2980 "seclang-parser.yy" +#line 2982 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimRight(yystack_[0].value.as < std::string > ())); } @@ -5559,7 +5559,7 @@ namespace yy { break; case 426: -#line 2984 "seclang-parser.yy" +#line 2986 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePathWin(yystack_[0].value.as < std::string > ())); } @@ -5567,7 +5567,7 @@ namespace yy { break; case 427: -#line 2988 "seclang-parser.yy" +#line 2990 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePath(yystack_[0].value.as < std::string > ())); } @@ -5575,7 +5575,7 @@ namespace yy { break; case 428: -#line 2992 "seclang-parser.yy" +#line 2994 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Length(yystack_[0].value.as < std::string > ())); } @@ -5583,7 +5583,7 @@ namespace yy { break; case 429: -#line 2996 "seclang-parser.yy" +#line 2998 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Utf8ToUnicode(yystack_[0].value.as < std::string > ())); } @@ -5591,7 +5591,7 @@ namespace yy { break; case 430: -#line 3000 "seclang-parser.yy" +#line 3002 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveCommentsChar(yystack_[0].value.as < std::string > ())); } @@ -5599,7 +5599,7 @@ namespace yy { break; case 431: -#line 3004 "seclang-parser.yy" +#line 3006 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveComments(yystack_[0].value.as < std::string > ())); } @@ -5607,7 +5607,7 @@ namespace yy { break; case 432: -#line 3008 "seclang-parser.yy" +#line 3010 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceComments(yystack_[0].value.as < std::string > ())); } @@ -5615,7 +5615,7 @@ namespace yy { break; case 433: -#line 3015 "seclang-parser.yy" +#line 3017 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5623,7 +5623,7 @@ namespace yy { break; case 434: -#line 3019 "seclang-parser.yy" +#line 3021 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5631,7 +5631,7 @@ namespace yy { break; case 435: -#line 3023 "seclang-parser.yy" +#line 3025 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5639,7 +5639,7 @@ namespace yy { break; case 436: -#line 3027 "seclang-parser.yy" +#line 3029 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5647,7 +5647,7 @@ namespace yy { break; case 437: -#line 3031 "seclang-parser.yy" +#line 3033 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -5655,7 +5655,7 @@ namespace yy { break; case 438: -#line 3038 "seclang-parser.yy" +#line 3040 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendText(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); @@ -5664,7 +5664,7 @@ namespace yy { break; case 439: -#line 3043 "seclang-parser.yy" +#line 3045 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); @@ -5673,7 +5673,7 @@ namespace yy { break; case 440: -#line 3048 "seclang-parser.yy" +#line 3050 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendText(yystack_[0].value.as < std::string > ()); @@ -5683,7 +5683,7 @@ namespace yy { break; case 441: -#line 3054 "seclang-parser.yy" +#line 3056 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->appendVar(std::move(yystack_[0].value.as < std::unique_ptr > ())); @@ -7109,51 +7109,51 @@ namespace yy { const short seclang_parser::yyrline_[] = { - 0, 712, 712, 716, 717, 720, 725, 731, 737, 741, - 745, 751, 757, 763, 769, 774, 779, 785, 792, 796, - 800, 806, 810, 814, 819, 824, 829, 834, 838, 845, - 849, 856, 862, 872, 881, 891, 900, 913, 917, 921, - 925, 929, 933, 937, 941, 945, 949, 954, 958, 962, - 966, 970, 974, 979, 984, 988, 992, 996, 1000, 1004, - 1008, 1012, 1016, 1020, 1024, 1028, 1032, 1036, 1040, 1044, - 1048, 1052, 1056, 1060, 1074, 1075, 1107, 1126, 1147, 1177, - 1239, 1246, 1250, 1254, 1258, 1262, 1266, 1270, 1274, 1283, - 1287, 1292, 1295, 1300, 1305, 1310, 1315, 1318, 1323, 1326, - 1331, 1336, 1339, 1344, 1349, 1354, 1359, 1364, 1369, 1374, - 1377, 1382, 1387, 1392, 1397, 1400, 1405, 1410, 1415, 1428, - 1441, 1454, 1467, 1480, 1506, 1534, 1546, 1566, 1593, 1599, - 1604, 1609, 1618, 1623, 1627, 1631, 1635, 1639, 1643, 1647, - 1652, 1657, 1669, 1675, 1679, 1683, 1694, 1703, 1704, 1711, - 1716, 1721, 1775, 1782, 1790, 1827, 1831, 1838, 1843, 1849, - 1855, 1861, 1868, 1878, 1882, 1886, 1890, 1894, 1898, 1902, - 1906, 1910, 1914, 1918, 1922, 1926, 1930, 1934, 1938, 1942, - 1946, 1950, 1954, 1958, 1962, 1966, 1970, 1974, 1978, 1982, - 1986, 1990, 1994, 1998, 2002, 2006, 2010, 2014, 2018, 2022, - 2026, 2030, 2034, 2038, 2042, 2046, 2050, 2054, 2058, 2062, - 2066, 2070, 2074, 2078, 2082, 2086, 2090, 2094, 2098, 2102, - 2106, 2110, 2114, 2118, 2122, 2126, 2130, 2134, 2138, 2142, - 2146, 2150, 2154, 2158, 2162, 2166, 2170, 2174, 2178, 2182, - 2186, 2190, 2194, 2198, 2202, 2206, 2210, 2214, 2218, 2222, - 2226, 2230, 2234, 2239, 2243, 2247, 2252, 2256, 2260, 2265, - 2270, 2274, 2278, 2282, 2286, 2290, 2294, 2298, 2302, 2306, - 2310, 2314, 2318, 2322, 2326, 2330, 2334, 2338, 2342, 2346, - 2350, 2354, 2358, 2362, 2366, 2370, 2374, 2378, 2382, 2386, - 2390, 2394, 2398, 2402, 2406, 2410, 2414, 2418, 2422, 2426, - 2430, 2434, 2438, 2442, 2446, 2450, 2454, 2458, 2462, 2466, - 2470, 2474, 2478, 2482, 2486, 2490, 2494, 2498, 2502, 2506, - 2510, 2518, 2525, 2532, 2539, 2546, 2553, 2560, 2567, 2574, - 2581, 2588, 2595, 2605, 2609, 2613, 2617, 2621, 2625, 2629, - 2633, 2638, 2643, 2648, 2652, 2656, 2660, 2664, 2669, 2674, - 2678, 2682, 2686, 2690, 2694, 2698, 2702, 2706, 2710, 2714, - 2718, 2722, 2726, 2731, 2735, 2739, 2743, 2747, 2751, 2755, - 2759, 2763, 2767, 2771, 2775, 2779, 2783, 2787, 2791, 2795, - 2799, 2803, 2807, 2811, 2815, 2819, 2823, 2827, 2831, 2835, - 2839, 2843, 2847, 2851, 2855, 2859, 2863, 2867, 2871, 2875, - 2879, 2883, 2887, 2891, 2895, 2899, 2903, 2907, 2911, 2915, - 2919, 2923, 2927, 2931, 2935, 2939, 2943, 2947, 2951, 2955, - 2959, 2963, 2967, 2971, 2975, 2979, 2983, 2987, 2991, 2995, - 2999, 3003, 3007, 3014, 3018, 3022, 3026, 3030, 3037, 3042, - 3047, 3053 + 0, 714, 714, 718, 719, 722, 727, 733, 739, 743, + 747, 753, 759, 765, 771, 776, 781, 787, 794, 798, + 802, 808, 812, 816, 821, 826, 831, 836, 840, 847, + 851, 858, 864, 874, 883, 893, 902, 915, 919, 923, + 927, 931, 935, 939, 943, 947, 951, 956, 960, 964, + 968, 972, 976, 981, 986, 990, 994, 998, 1002, 1006, + 1010, 1014, 1018, 1022, 1026, 1030, 1034, 1038, 1042, 1046, + 1050, 1054, 1058, 1062, 1076, 1077, 1109, 1128, 1149, 1179, + 1241, 1248, 1252, 1256, 1260, 1264, 1268, 1272, 1276, 1285, + 1289, 1294, 1297, 1302, 1307, 1312, 1317, 1320, 1325, 1328, + 1333, 1338, 1341, 1346, 1351, 1356, 1361, 1366, 1371, 1376, + 1379, 1384, 1389, 1394, 1399, 1402, 1407, 1412, 1417, 1430, + 1443, 1456, 1469, 1482, 1508, 1536, 1548, 1568, 1595, 1601, + 1606, 1611, 1620, 1625, 1629, 1633, 1637, 1641, 1645, 1649, + 1654, 1659, 1671, 1677, 1681, 1685, 1696, 1705, 1706, 1713, + 1718, 1723, 1777, 1784, 1792, 1829, 1833, 1840, 1845, 1851, + 1857, 1863, 1870, 1880, 1884, 1888, 1892, 1896, 1900, 1904, + 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, + 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, + 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020, 2024, + 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, + 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096, 2100, 2104, + 2108, 2112, 2116, 2120, 2124, 2128, 2132, 2136, 2140, 2144, + 2148, 2152, 2156, 2160, 2164, 2168, 2172, 2176, 2180, 2184, + 2188, 2192, 2196, 2200, 2204, 2208, 2212, 2216, 2220, 2224, + 2228, 2232, 2236, 2241, 2245, 2249, 2254, 2258, 2262, 2267, + 2272, 2276, 2280, 2284, 2288, 2292, 2296, 2300, 2304, 2308, + 2312, 2316, 2320, 2324, 2328, 2332, 2336, 2340, 2344, 2348, + 2352, 2356, 2360, 2364, 2368, 2372, 2376, 2380, 2384, 2388, + 2392, 2396, 2400, 2404, 2408, 2412, 2416, 2420, 2424, 2428, + 2432, 2436, 2440, 2444, 2448, 2452, 2456, 2460, 2464, 2468, + 2472, 2476, 2480, 2484, 2488, 2492, 2496, 2500, 2504, 2508, + 2512, 2520, 2527, 2534, 2541, 2548, 2555, 2562, 2569, 2576, + 2583, 2590, 2597, 2607, 2611, 2615, 2619, 2623, 2627, 2631, + 2635, 2640, 2645, 2650, 2654, 2658, 2662, 2666, 2671, 2676, + 2680, 2684, 2688, 2692, 2696, 2700, 2704, 2708, 2712, 2716, + 2720, 2724, 2728, 2733, 2737, 2741, 2745, 2749, 2753, 2757, + 2761, 2765, 2769, 2773, 2777, 2781, 2785, 2789, 2793, 2797, + 2801, 2805, 2809, 2813, 2817, 2821, 2825, 2829, 2833, 2837, + 2841, 2845, 2849, 2853, 2857, 2861, 2865, 2869, 2873, 2877, + 2881, 2885, 2889, 2893, 2897, 2901, 2905, 2909, 2913, 2917, + 2921, 2925, 2929, 2933, 2937, 2941, 2945, 2949, 2953, 2957, + 2961, 2965, 2969, 2973, 2977, 2981, 2985, 2989, 2993, 2997, + 3001, 3005, 3009, 3016, 3020, 3024, 3028, 3032, 3039, 3044, + 3049, 3055 }; // Print the state stack on the debug stream. @@ -7189,7 +7189,7 @@ namespace yy { } // yy #line 7191 "seclang-parser.cc" -#line 3060 "seclang-parser.yy" +#line 3062 "seclang-parser.yy" void yy::seclang_parser::error (const location_type& l, const std::string& m) { diff --git a/src/parser/seclang-parser.hh b/src/parser/seclang-parser.hh index a06db34e86..1871edea58 100644 --- a/src/parser/seclang-parser.hh +++ b/src/parser/seclang-parser.hh @@ -56,6 +56,8 @@ class Driver; } #include "modsecurity/rule_unconditional.h" +#include "modsecurity/rule_with_operator.h" +#include "modsecurity/rule_with_actions.h" #include "src/rule_script.h" #include "src/actions/accuracy.h" @@ -350,7 +352,7 @@ using namespace modsecurity::operators; a = std::move(c); -#line 354 "seclang-parser.hh" +#line 356 "seclang-parser.hh" # include # include // std::abort @@ -484,7 +486,7 @@ using namespace modsecurity::operators; #endif namespace yy { -#line 488 "seclang-parser.hh" +#line 490 "seclang-parser.hh" @@ -8151,7 +8153,7 @@ switch (yytype) } } // yy -#line 8155 "seclang-parser.hh" +#line 8157 "seclang-parser.hh" diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index 99d626be25..064cf11d6b 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -18,6 +18,8 @@ class Driver; } #include "modsecurity/rule_unconditional.h" +#include "modsecurity/rule_with_operator.h" +#include "modsecurity/rule_with_actions.h" #include "src/rule_script.h" #include "src/actions/accuracy.h" @@ -1193,8 +1195,8 @@ expression: definedPhase = phase->m_phase; secRuleDefinedPhase = phase->m_secRulesPhase; delete phase; - } else if (a->action_kind == actions::Action::RunTimeOnlyIfMatchKind || - a->action_kind == actions::Action::RunTimeBeforeMatchAttemptKind) { + } else if (a->m_actionKind == actions::Action::RunTimeOnlyIfMatchKind || + a->m_actionKind == actions::Action::RunTimeBeforeMatchAttemptKind) { actions::transformations::None *none = dynamic_cast(a); if (none != NULL) { driver.error(@0, "The transformation none is not suitable to be part of the SecDefaultActions"); diff --git a/src/rule_script.h b/src/rule_script.h index 476e17ff0b..7b79a3aa27 100644 --- a/src/rule_script.h +++ b/src/rule_script.h @@ -32,6 +32,8 @@ #include "src/actions/log_data.h" #include "src/actions/severity.h" #include "src/variables/variable.h" +#include "modsecurity/rule_with_actions.h" + #ifndef SRC_RULE_SCRIPT_H_ #define SRC_RULE_SCRIPT_H_ diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index d187baf07f..c35c641422 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -104,12 +104,7 @@ RuleWithActions::RuleWithActions( } void RuleWithActions::addDefaultAction(std::shared_ptr a) { - if (a->action_kind == Action::ConfigurationKind) { - a->execute(this, NULL); - return; - } - - if (a->action_kind == Action::ConfigurationKind) { + if (a->m_actionKind == Action::ConfigurationKind) { if (dynamic_cast(a.get())) { actions::Accuracy *accuracy = dynamic_cast(a.get()); m_defaultAccuracy = accuracy->getAccuracy(); @@ -122,7 +117,7 @@ void RuleWithActions::addDefaultAction(std::shared_ptr a) { return; } - if (a->action_kind == Action::RunTimeOnlyIfMatchKind) { + if (a->m_actionKind == Action::RunTimeOnlyIfMatchKind) { if (dynamic_cast(a.get())) { m_defaultContainsCaptureAction = true; } else if (dynamic_cast(a.get())) { @@ -163,7 +158,7 @@ void RuleWithActions::addDefaultAction(std::shared_ptr a) { } void RuleWithActions::addAction(actions::Action *a) { - if (a->action_kind == Action::ConfigurationKind) { + if (a->m_actionKind == Action::ConfigurationKind) { if (dynamic_cast(a)) { actions::Accuracy *accuracy = dynamic_cast(a); m_accuracy = accuracy->getAccuracy(); @@ -177,7 +172,7 @@ void RuleWithActions::addAction(actions::Action *a) { return; } - if (a->action_kind == Action::RunTimeOnlyIfMatchKind) { + if (a->m_actionKind == Action::RunTimeOnlyIfMatchKind) { if (dynamic_cast(a)) { m_containsCaptureAction = true; delete a; @@ -269,7 +264,7 @@ void RuleWithActions::executeActionsAfterFullMatch(Transaction *trans) { #if 0 for (auto &a : trans->m_rules->m_defaultActions[getPhase()]) { - if (a.get()->action_kind != actions::Action::RunTimeOnlyIfMatchKind) { + if (a.get()->m_actionKind != actions::Action::RunTimeOnlyIfMatchKind) { continue; } if (!a.get()->isDisruptive()) { @@ -364,7 +359,7 @@ void RuleWithActions::executeTransformations( TransformationsResults &results) { int none = 0; - ModSecStackString ssin; + ModSecString ssin; ssin.assign(in.c_str()); TransformationResult a = TransformationResult(&ssin); @@ -375,9 +370,8 @@ void RuleWithActions::executeTransformations( std::shared_ptr value = std::shared_ptr(new std::string(in)); - - for (Action *action : getTransformationPtr()) { - if (action->m_isNone) { + for (Transformation *action : getTransformationPtr()) { + if (action->isNone()) { none++; } } @@ -386,7 +380,7 @@ void RuleWithActions::executeTransformations( if (none == 0) { executeTransformation(trans, &results, t); } - if (t->m_isNone) { + if (t->isNone()) { none--; } } @@ -399,7 +393,7 @@ void RuleWithActions::executeTransformations( continue; } Transformation *t = dynamic_cast(b.second.get()); - if (t->m_isNone) { + if (t->isNone()) { none++; } } @@ -413,7 +407,7 @@ void RuleWithActions::executeTransformations( if (none == 0) { executeTransformation(trans, &results, t); } - if (t->m_isNone) { + if (t->isNone()) { none--; } } @@ -447,11 +441,11 @@ void RuleWithActions::executeTransformation( void RuleWithActions::executeTransformation( Transaction *transaction, - ModSecStackString in, + ModSecString in, TransformationsResults *ret, Transformation *transformation) { - ModSecStackString out; + ModSecString out; transformation->execute(transaction, in, out); ms_dbg_a(transaction, 9, " T (" + std::to_string(ret->size() - 1) + ") " + \ diff --git a/src/rules.cc b/src/rules.cc index 4666deb079..b35664fbfa 100644 --- a/src/rules.cc +++ b/src/rules.cc @@ -14,7 +14,7 @@ */ #include "modsecurity/rules.h" -#include "src/rule_with_actions.h" +#include "modsecurity/rule_with_actions.h" namespace modsecurity { @@ -37,14 +37,14 @@ int Rules::append(Rules *from, const std::vector &ids, std::ostringstre } -bool Rules::insert(std::shared_ptr rule) { +bool Rules::insert(const std::shared_ptr &rule) { return insert(rule, nullptr, nullptr); } bool Rules::insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { RuleWithActions*r = dynamic_cast(rule.get()); - if (r && ids != nullptr && err != nullptr + if (r && ids != nullptr && std::binary_search(ids->begin(), ids->end(), r->getId())) { if (err != NULL) { *err << "Rule id: " << std::to_string(r->getId()) \ @@ -57,22 +57,22 @@ bool Rules::insert(std::shared_ptr rule, const std::vector *ids, } -size_t Rules::size() { +size_t Rules::size() const { return m_rules.size(); } -std::shared_ptr Rules::operator[](int index) { +std::shared_ptr Rules::operator[](int index) const { return m_rules[index]; } -std::shared_ptr Rules::at(int index) { +std::shared_ptr Rules::at(int index) const { return m_rules[index]; } -void Rules::dump() { +void Rules::dump() const { for (int j = 0; j < m_rules.size(); j++) { std::cout << " Rule ID: " << m_rules.at(j)->getReference(); std::cout << "--" << m_rules.at(j) << std::endl; diff --git a/src/rules_exceptions.cc b/src/rules_exceptions.cc index 2c22d16fc9..a5ab968938 100644 --- a/src/rules_exceptions.cc +++ b/src/rules_exceptions.cc @@ -36,15 +36,15 @@ bool RulesExceptions::loadUpdateActionById(double id, std::string *error) { for (auto &a : *actions) { - if (a->action_kind == actions::Action::ConfigurationKind) { + if (a->m_actionKind == actions::Action::ConfigurationKind) { std::cout << "General failure, action: " << a->m_name; std::cout << " has not expected to be used with UpdateActionByID."; std::cout << std::endl; - } else if (a->action_kind + } else if (a->m_actionKind == actions::Action::RunTimeBeforeMatchAttemptKind) { m_action_pre_update_target_by_id.emplace(std::pair>(id , std::move(a))); - } else if (a->action_kind == actions::Action::RunTimeOnlyIfMatchKind) { + } else if (a->m_actionKind == actions::Action::RunTimeOnlyIfMatchKind) { m_action_pos_update_target_by_id.emplace(std::pair>(id , std::move(a))); } else { diff --git a/src/run_time_string.cc b/src/run_time_string.cc index f2dfa686f2..3344db21f9 100644 --- a/src/run_time_string.cc +++ b/src/run_time_string.cc @@ -25,6 +25,7 @@ #include "src/variables/highest_severity.h" #include "src/utils/string.h" #include "src/variables/variable.h" +#include "modsecurity/rule_with_operator.h" namespace modsecurity { diff --git a/src/variables/rule.h b/src/variables/rule.h index a29cf54f3e..696b8d339d 100644 --- a/src/variables/rule.h +++ b/src/variables/rule.h @@ -24,7 +24,7 @@ #include "src/actions/severity.h" #include "src/actions/log_data.h" #include "src/actions/msg.h" - +#include "modsecurity/rule_with_actions.h" namespace modsecurity { diff --git a/src/variables/xml.cc b/src/variables/xml.cc index 9694b9e3b3..e34e631c74 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -42,6 +42,8 @@ #include "src/request_body_processor/xml.h" #include "modsecurity/actions/action.h" #include "src/actions/xmlns.h" +#include "modsecurity/rule_with_actions.h" + namespace modsecurity { namespace variables { diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index ec5037d0e0..a8b8abc252 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -37,8 +37,7 @@ redundantAssignment:src/operators/pm.cc:94 unmatchedSuppression:src/utils/geo_lookup.cc:82 useInitializationList:src/utils/shared_files.h:87 unmatchedSuppression:src/utils/msc_tree.cc -functionStatic:headers/modsecurity/transaction.h:407 -functionStatic:headers/modsecurity/transaction.h:456 +functionStatic:headers/modsecurity/transaction.h:455 duplicateBranch:src/audit_log/audit_log.cc:223 unreadVariable:src/request_body_processor/multipart.cc:435 stlcstrParam:src/audit_log/writer/parallel.cc:145 @@ -56,7 +55,7 @@ noConstructor:src/variables/variable.h:152 duplicateBranch:src/request_body_processor/multipart.cc:93 danglingTempReference:src/modsecurity.cc:206 knownConditionTrueFalse:src/operators/validate_url_encoding.cc:77 -knownConditionTrueFalse:src/operators/verify_svnr.cc:87 +knownConditionTrueFalse:src/operators/verify_svnr.cc:88 noExplicitConstructor:seclang-parser.hh constParameter:seclang-parser.hh diff --git a/test/unit/unit.cc b/test/unit/unit.cc index cddf6a67f5..db5718edda 100644 --- a/test/unit/unit.cc +++ b/test/unit/unit.cc @@ -90,8 +90,8 @@ void perform_unit_test(ModSecurityTest *test, UnitTest *t, } delete op; } else if (t->type == "tfn") { - modsecurity::ModSecStackString in; - modsecurity::ModSecStackString out; + modsecurity::ModSecString in; + modsecurity::ModSecString out; std::string ret; in.assign(t->input.c_str(), t->input.size()); Transformation *tfn = Transformation::instantiate("t:" + t->name); From 99350b885d772820cb937ffa20b3b66c8c8a7ada Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 26 Feb 2019 21:59:08 -0300 Subject: [PATCH 11/16] Moves rule* headers to src/ --- headers/modsecurity/actions/action.h | 4 +-- headers/modsecurity/rules.h | 21 +++++++++++----- headers/modsecurity/rules_set_phases.h | 4 +-- src/actions/accuracy.cc | 3 ++- src/actions/block.cc | 3 ++- src/actions/chain.cc | 2 +- src/actions/maturity.cc | 3 ++- src/actions/phase.cc | 2 +- src/actions/rev.cc | 2 +- src/actions/rule_id.cc | 2 +- src/actions/set_env.cc | 2 +- src/actions/set_var.cc | 3 ++- src/actions/ver.cc | 2 +- src/operators/detect_sqli.cc | 2 +- src/operators/detect_xss.cc | 2 +- src/operators/pm.cc | 2 +- src/operators/rbl.cc | 2 +- src/operators/rx.cc | 2 +- src/operators/rx_global.cc | 2 +- src/operators/verify_cc.cc | 2 +- src/operators/verify_cpf.cc | 2 +- src/operators/verify_ssn.cc | 2 +- src/operators/verify_svnr.cc | 2 +- src/parser/driver.cc | 2 +- src/parser/seclang-parser.hh | 6 ++--- src/parser/seclang-parser.yy | 6 ++--- {headers/modsecurity => src}/rule_marker.h | 0 src/rule_message.cc | 2 +- src/rule_script.h | 2 +- src/rule_unconditional.cc | 2 +- .../modsecurity => src}/rule_unconditional.h | 8 +++--- src/rule_with_actions.cc | 14 +++++------ .../modsecurity => src}/rule_with_actions.h | 9 ++++--- src/rule_with_operator.cc | 14 +++++------ .../modsecurity => src}/rule_with_operator.h | 10 ++++---- src/rules.cc | 2 +- src/rules_set.cc | 2 +- src/rules_set_phases.cc | 25 ++++++++++--------- src/run_time_string.cc | 2 +- src/transaction.cc | 1 + src/variables/rule.h | 3 ++- src/variables/xml.cc | 2 +- test/optimization/optimization.cc | 4 +-- 43 files changed, 102 insertions(+), 87 deletions(-) rename {headers/modsecurity => src}/rule_marker.h (100%) rename {headers/modsecurity => src}/rule_unconditional.h (88%) rename {headers/modsecurity => src}/rule_with_actions.h (99%) rename {headers/modsecurity => src}/rule_with_operator.h (89%) diff --git a/headers/modsecurity/actions/action.h b/headers/modsecurity/actions/action.h index 4db98753fe..821ce07269 100644 --- a/headers/modsecurity/actions/action.h +++ b/headers/modsecurity/actions/action.h @@ -23,7 +23,6 @@ #include "modsecurity/intervention.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" #ifndef HEADERS_MODSECURITY_ACTIONS_ACTION_H_ #define HEADERS_MODSECURITY_ACTIONS_ACTION_H_ @@ -32,7 +31,8 @@ namespace modsecurity { class Transaction; -class RuleWithOperator; +class RuleWithActions; + namespace actions { diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 5499042be0..209356b5b5 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -27,28 +27,35 @@ #endif #include "modsecurity/rule.h" -#include "modsecurity/rule_with_operator.h" -#include "modsecurity/rule_with_actions.h" + #ifndef HEADERS_MODSECURITY_RULES_H_ #define HEADERS_MODSECURITY_RULES_H_ - #ifdef __cplusplus namespace modsecurity { - +namespace actions { +namespace transformations { +class Transformation; +} +} class Rules { public: void dump() const; - int append(Rules *from, const std::vector &ids, std::ostringstream *err); + int append(Rules *from, + const std::vector &ids, + std::ostringstream *err); bool insert(const std::shared_ptr &rule); - bool insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err); + bool insert(std::shared_ptr rule, + const std::vector *ids, + std::ostringstream *err); size_t size() const; + std::shared_ptr operator[](int index) const; std::shared_ptr at(int index) const; @@ -58,6 +65,8 @@ class Rules { std::vector > m_defaultTransformations; std::vector > m_rules; + void dump(); + }; diff --git a/headers/modsecurity/rules_set_phases.h b/headers/modsecurity/rules_set_phases.h index 849d8ec1bf..26d6216501 100644 --- a/headers/modsecurity/rules_set_phases.h +++ b/headers/modsecurity/rules_set_phases.h @@ -48,8 +48,8 @@ class RulesSetPhases { int append(RulesSetPhases *from, std::ostringstream *err); void dump() const; - Rules *operator[](int index) { return &m_rulesAtPhase[index]; } - Rules *at(int index) { return &m_rulesAtPhase[index]; } + Rules *operator[](int index); + Rules *at(int index); private: Rules m_rulesAtPhase[8]; diff --git a/src/actions/accuracy.cc b/src/actions/accuracy.cc index 4153cbaeaa..91f02b40fd 100644 --- a/src/actions/accuracy.cc +++ b/src/actions/accuracy.cc @@ -21,7 +21,8 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace actions { diff --git a/src/actions/block.cc b/src/actions/block.cc index 7d69c244e1..d036213eac 100644 --- a/src/actions/block.cc +++ b/src/actions/block.cc @@ -24,7 +24,8 @@ #include "modsecurity/rule.h" #include "modsecurity/intervention.h" #include "src/actions/data/status.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace actions { diff --git a/src/actions/chain.cc b/src/actions/chain.cc index 0fa20f9b9d..d51fe37778 100644 --- a/src/actions/chain.cc +++ b/src/actions/chain.cc @@ -20,7 +20,7 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/actions/maturity.cc b/src/actions/maturity.cc index 877358ee4b..9b4ffaecd6 100644 --- a/src/actions/maturity.cc +++ b/src/actions/maturity.cc @@ -21,7 +21,8 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" + namespace modsecurity { namespace actions { diff --git a/src/actions/phase.cc b/src/actions/phase.cc index 079fcd068c..d8937c5765 100644 --- a/src/actions/phase.cc +++ b/src/actions/phase.cc @@ -22,7 +22,7 @@ #include "modsecurity/rule.h" #include "modsecurity/modsecurity.h" #include "src/utils/string.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/actions/rev.cc b/src/actions/rev.cc index f192968db4..cda632dcf1 100644 --- a/src/actions/rev.cc +++ b/src/actions/rev.cc @@ -21,7 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/actions/rule_id.cc b/src/actions/rule_id.cc index dd56f1ef5c..5e4b3538c0 100644 --- a/src/actions/rule_id.cc +++ b/src/actions/rule_id.cc @@ -20,7 +20,7 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/actions/set_env.cc b/src/actions/set_env.cc index 670620acbb..fd0abbed06 100644 --- a/src/actions/set_env.cc +++ b/src/actions/set_env.cc @@ -21,7 +21,7 @@ #include "modsecurity/transaction.h" #include "modsecurity/rule.h" #include "src/utils/string.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/actions/set_var.cc b/src/actions/set_var.cc index fa6d885647..e274332e71 100644 --- a/src/actions/set_var.cc +++ b/src/actions/set_var.cc @@ -30,7 +30,8 @@ #include "src/variables/tx.h" #include "src/variables/user.h" #include "src/variables/variable.h" -#include "modsecurity/rule_with_operator.h" +#include "src/rule_with_operator.h" + namespace modsecurity { namespace actions { diff --git a/src/actions/ver.cc b/src/actions/ver.cc index 3c159fe1db..4c5124bd4c 100644 --- a/src/actions/ver.cc +++ b/src/actions/ver.cc @@ -21,7 +21,7 @@ #include "modsecurity/actions/action.h" #include "modsecurity/transaction.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/detect_sqli.cc b/src/operators/detect_sqli.cc index 9869b6fcef..68b51c4887 100644 --- a/src/operators/detect_sqli.cc +++ b/src/operators/detect_sqli.cc @@ -20,7 +20,7 @@ #include "src/operators/operator.h" #include "others/libinjection/src/libinjection.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/detect_xss.cc b/src/operators/detect_xss.cc index 84698b8eac..38341ae3ac 100644 --- a/src/operators/detect_xss.cc +++ b/src/operators/detect_xss.cc @@ -19,7 +19,7 @@ #include "src/operators/operator.h" #include "others/libinjection/src/libinjection.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/pm.cc b/src/operators/pm.cc index ad3a6b94c4..0e24abc6dd 100644 --- a/src/operators/pm.cc +++ b/src/operators/pm.cc @@ -28,7 +28,7 @@ #include "src/operators/operator.h" #include "src/utils/acmp.h" #include "src/utils/string.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index ff846f1a60..ecc484eb84 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -25,7 +25,7 @@ #include "modsecurity/rules_set.h" #include "src/operators/operator.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/rx.cc b/src/operators/rx.cc index 1419e448b7..a0957824e3 100644 --- a/src/operators/rx.cc +++ b/src/operators/rx.cc @@ -22,7 +22,7 @@ #include "src/operators/operator.h" #include "modsecurity/rule.h" #include "modsecurity/rule_message.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/rx_global.cc b/src/operators/rx_global.cc index 7f71655b76..052c07922d 100644 --- a/src/operators/rx_global.cc +++ b/src/operators/rx_global.cc @@ -20,7 +20,7 @@ #include #include "src/operators/operator.h" -#include "modsecurity/rule.h" +#include "src/rule_with_actions.h" #include "modsecurity/rule_message.h" namespace modsecurity { diff --git a/src/operators/verify_cc.cc b/src/operators/verify_cc.cc index 4452ac80ab..0c6b49682b 100644 --- a/src/operators/verify_cc.cc +++ b/src/operators/verify_cc.cc @@ -21,7 +21,7 @@ #include #include "src/operators/operator.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" #if PCRE_HAVE_JIT diff --git a/src/operators/verify_cpf.cc b/src/operators/verify_cpf.cc index 2a3c43c845..3454dbab72 100644 --- a/src/operators/verify_cpf.cc +++ b/src/operators/verify_cpf.cc @@ -19,7 +19,7 @@ #include #include "src/operators/operator.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/verify_ssn.cc b/src/operators/verify_ssn.cc index 6f308ba560..fae46828e2 100644 --- a/src/operators/verify_ssn.cc +++ b/src/operators/verify_ssn.cc @@ -20,7 +20,7 @@ #include #include "src/operators/operator.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/operators/verify_svnr.cc b/src/operators/verify_svnr.cc index 075c5989a3..8a444ac12a 100644 --- a/src/operators/verify_svnr.cc +++ b/src/operators/verify_svnr.cc @@ -9,7 +9,7 @@ #include "modsecurity/rule_message.h" #include "modsecurity/rules_set_properties.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { namespace operators { diff --git a/src/parser/driver.cc b/src/parser/driver.cc index f1ddcef66d..eadf510286 100644 --- a/src/parser/driver.cc +++ b/src/parser/driver.cc @@ -18,7 +18,7 @@ #include "modsecurity/rules_set_properties.h" #include "src/parser/seclang-parser.hh" #include "modsecurity/audit_log.h" -#include "modsecurity/rule_marker.h" +#include "src/rule_marker.h" using modsecurity::audit_log::AuditLog; using modsecurity::RuleWithOperator; diff --git a/src/parser/seclang-parser.hh b/src/parser/seclang-parser.hh index 1871edea58..1ce0c974cd 100644 --- a/src/parser/seclang-parser.hh +++ b/src/parser/seclang-parser.hh @@ -55,9 +55,9 @@ class Driver; } } -#include "modsecurity/rule_unconditional.h" -#include "modsecurity/rule_with_operator.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_unconditional.h" +#include "src/rule_with_operator.h" +#include "src/rule_with_actions.h" #include "src/rule_script.h" #include "src/actions/accuracy.h" diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index 064cf11d6b..a63a1f63e1 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -17,9 +17,9 @@ class Driver; } } -#include "modsecurity/rule_unconditional.h" -#include "modsecurity/rule_with_operator.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_unconditional.h" +#include "src/rule_with_operator.h" +#include "src/rule_with_actions.h" #include "src/rule_script.h" #include "src/actions/accuracy.h" diff --git a/headers/modsecurity/rule_marker.h b/src/rule_marker.h similarity index 100% rename from headers/modsecurity/rule_marker.h rename to src/rule_marker.h diff --git a/src/rule_message.cc b/src/rule_message.cc index b54f97dbee..7b71d43231 100644 --- a/src/rule_message.cc +++ b/src/rule_message.cc @@ -20,7 +20,7 @@ #include "modsecurity/transaction.h" #include "src/utils/string.h" #include "src/actions/tag.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/rule_script.h b/src/rule_script.h index 7b79a3aa27..8b8434d597 100644 --- a/src/rule_script.h +++ b/src/rule_script.h @@ -32,7 +32,7 @@ #include "src/actions/log_data.h" #include "src/actions/severity.h" #include "src/variables/variable.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" #ifndef SRC_RULE_SCRIPT_H_ diff --git a/src/rule_unconditional.cc b/src/rule_unconditional.cc index 541dc41151..592d6666f4 100644 --- a/src/rule_unconditional.cc +++ b/src/rule_unconditional.cc @@ -13,7 +13,7 @@ * */ -#include "modsecurity/rule_unconditional.h" +#include "src/rule_unconditional.h" namespace modsecurity { diff --git a/headers/modsecurity/rule_unconditional.h b/src/rule_unconditional.h similarity index 88% rename from headers/modsecurity/rule_unconditional.h rename to src/rule_unconditional.h index b1ac0eb4ec..c249e3cac1 100644 --- a/headers/modsecurity/rule_unconditional.h +++ b/src/rule_unconditional.h @@ -22,15 +22,15 @@ #include #endif -#ifndef HEADERS_MODSECURITY_RULE_UNCONDITIONAL_H_ -#define HEADERS_MODSECURITY_RULE_UNCONDITIONAL_H_ +#ifndef SRC_RULE_UNCONDITIONAL_H_ +#define SRC_RULE_UNCONDITIONAL_H_ #include "modsecurity/modsecurity.h" #include "modsecurity/variable_value.h" #include "modsecurity/rule.h" #include "modsecurity/rules_set.h" -#include "modsecurity/rule_with_actions.h" #include "modsecurity/actions/action.h" +#include "src/rule_with_actions.h" #ifdef __cplusplus @@ -65,4 +65,4 @@ class RuleUnconditional : public RuleWithActions { #endif -#endif // HEADERS_MODSECURITY_RULE_UNCONDITIONAL_H_ +#endif // SRC_RULE_UNCONDITIONAL_H_ diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index c35c641422..e6a87d92ab 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -29,7 +29,7 @@ #include "modsecurity/modsecurity.h" #include "modsecurity/rule_message.h" #include "modsecurity/rules_set.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" #include "src/actions/accuracy.h" #include "src/actions/block.h" #include "src/actions/capture.h" @@ -360,10 +360,8 @@ void RuleWithActions::executeTransformations( int none = 0; ModSecString ssin; - ssin.assign(in.c_str()); - - TransformationResult a = TransformationResult(&ssin); - results.push_back(a); + ssin.assign(in.c_str(), in.size()); + results.push_back(TransformationResult(&ssin)); std::string path(""); @@ -418,8 +416,8 @@ void RuleWithActions::executeTransformations( + std::to_string(results.size()) + \ " values to be tested."); } else { - results.pop_front(); - results.push_back(TransformationResult(&ssin)); + //results.push_back(TransformationResult(nullptr, ssin)); + //results.pop_front(); } */ } @@ -441,7 +439,7 @@ void RuleWithActions::executeTransformation( void RuleWithActions::executeTransformation( Transaction *transaction, - ModSecString in, + ModSecString &in, TransformationsResults *ret, Transformation *transformation) { diff --git a/headers/modsecurity/rule_with_actions.h b/src/rule_with_actions.h similarity index 99% rename from headers/modsecurity/rule_with_actions.h rename to src/rule_with_actions.h index 86346be521..f410a7b4bd 100644 --- a/headers/modsecurity/rule_with_actions.h +++ b/src/rule_with_actions.h @@ -22,8 +22,8 @@ #include #endif -#ifndef HEADERS_MODSECURITY_RULE_WITH_ACTIONS_H_ -#define HEADERS_MODSECURITY_RULE_WITH_ACTIONS_H_ +#ifndef SRC_RULE_WITH_ACTIONS_H_ +#define SRC_RULE_WITH_ACTIONS_H_ #include "modsecurity/transaction.h" #include "modsecurity/modsecurity.h" @@ -211,7 +211,7 @@ class RuleWithActions : public Rule { static void executeTransformation( Transaction *transaction, - ModSecString in, + ModSecString &in, TransformationsResults *ret, Transformation *transformation); @@ -533,4 +533,5 @@ class RuleWithActions : public Rule { #endif -#endif // HEADERS_MODSECURITY_RULE_WITH_ACTIONS_H_ \ No newline at end of file +#endif // SRC_RULE_WITH_ACTIONS_H_ + diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index 29ccf6f8e8..5ba8fa19ac 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -13,7 +13,6 @@ * */ -#include "modsecurity/rule_with_operator.h" #include @@ -41,6 +40,7 @@ #include "src/actions/set_var.h" #include "src/actions/block.h" #include "src/variables/variable.h" +#include "src/rule_with_operator.h" namespace modsecurity { @@ -265,6 +265,7 @@ bool RuleWithOperator::evaluate(Transaction *trans) { } var->evaluate(trans, this, &e); for (const VariableValue *v : e) { + TransformationsResults transformationsResults; const std::string &value = v->getValue(); const std::string &key = v->getKeyWithCollection(); @@ -291,8 +292,6 @@ bool RuleWithOperator::evaluate(Transaction *trans) { continue; } - TransformationsResults transformationsResults; - executeTransformations(trans, value, transformationsResults); auto iter = transformationsResults.begin(); @@ -303,8 +302,8 @@ bool RuleWithOperator::evaluate(Transaction *trans) { while (iter != transformationsResults.end()) { bool ret; auto &valueTemp = *iter; - // FIXME: this copy is not necessary. - std::string *valueAfterTrans = new std::string(valueTemp.getAfter()->c_str()); + // FIXME: this copy is not necessary. + std::string *valueAfterTrans = new std::string(valueTemp.getAfter()->c_str(), valueTemp.getAfter()->size()); ret = executeOperatorAt(trans, key, *valueAfterTrans); @@ -315,6 +314,7 @@ bool RuleWithOperator::evaluate(Transaction *trans) { for (auto &i : v->getOrigin()) { trans->messageGetLast()->m_reference.append(i->toText()); } + auto iter2 = transformationsResults.begin(); while (iter2 != transformationsResults.end()) { if (iter2->getTransformationName()) { @@ -323,8 +323,8 @@ bool RuleWithOperator::evaluate(Transaction *trans) { /* if (iter == iter2) { break; - } else { - trans->messageGetLast()->m_reference.append("--"); + } else if (iter2->getTransformationName()) { + trans->messageGetLast()->m_reference.append(","); } */ iter2++; diff --git a/headers/modsecurity/rule_with_operator.h b/src/rule_with_operator.h similarity index 89% rename from headers/modsecurity/rule_with_operator.h rename to src/rule_with_operator.h index 6d178eb470..e3426fa5ca 100644 --- a/headers/modsecurity/rule_with_operator.h +++ b/src/rule_with_operator.h @@ -22,20 +22,19 @@ #include #endif -#ifndef HEADERS_MODSECURITY_RULE_WITH_OPERATOR_H_ -#define HEADERS_MODSECURITY_RULE_WITH_OPERATOR_H_ +#ifndef SRC_RULE_WITH_OPERATOR_H_ +#define SRC_RULE_WITH_OPERATOR_H_ #include "modsecurity/transaction.h" #include "modsecurity/modsecurity.h" #include "modsecurity/variable_value.h" #include "modsecurity/rule.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" #ifdef __cplusplus namespace modsecurity { -using TransformationsResults = std::list; class RuleWithOperator : public RuleWithActions { public: @@ -84,4 +83,5 @@ class RuleWithOperator : public RuleWithActions { #endif -#endif // HEADERS_MODSECURITY_RULE_WITH_OPERATOR_H_ +#endif // SRC_RULE_WITH_OPERATOR_H_ + diff --git a/src/rules.cc b/src/rules.cc index b35664fbfa..e2a70c653c 100644 --- a/src/rules.cc +++ b/src/rules.cc @@ -14,7 +14,7 @@ */ #include "modsecurity/rules.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/src/rules_set.cc b/src/rules_set.cc index b905ffa69d..c99ce3077c 100644 --- a/src/rules_set.cc +++ b/src/rules_set.cc @@ -20,7 +20,7 @@ #include #include "modsecurity/rules_set.h" -#include "modsecurity/rule_marker.h" +#include "src/rule_marker.h" #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/parser/driver.h" diff --git a/src/rules_set_phases.cc b/src/rules_set_phases.cc index 858da7268f..3f904fc948 100644 --- a/src/rules_set_phases.cc +++ b/src/rules_set_phases.cc @@ -13,17 +13,8 @@ * */ -#include -#include -#include -#include -#include - #include "modsecurity/rules_set_phases.h" -#include "modsecurity/rule.h" -#include "modsecurity/rules.h" -#include "modsecurity/modsecurity.h" - +#include "src/rule_with_operator.h" namespace modsecurity { @@ -47,6 +38,7 @@ int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { v.reserve(m_rulesAtPhase[i].size()); for (size_t z = 0; z < m_rulesAtPhase[i].size(); z++) { RuleWithOperator *rule_ckc = dynamic_cast(m_rulesAtPhase[i].at(z).get()); + //RuleWithOperator *rule_ckc = dynamic_cast(m_rulesAtPhase->at(i).get()); if (!rule_ckc) { continue; } @@ -62,7 +54,6 @@ int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { } amount_of_rules = amount_of_rules + res; - /** * An action set in a child will overwrite an action set on a parent. * @@ -91,6 +82,7 @@ int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { void RulesSetPhases::dump() const { for (int i = 0; i <= modsecurity::Phases::NUMBER_OF_PHASES; i++) { + const Rules *rules = &m_rulesAtPhase[i]; std::cout << "Phase: " << std::to_string(i); std::cout << " (" << std::to_string(m_rulesAtPhase[i].size()); std::cout << " rules)" << std::endl; @@ -99,5 +91,14 @@ void RulesSetPhases::dump() const { } -} // namespace modsecurity +Rules *RulesSetPhases::operator[](int index) { + return &m_rulesAtPhase[index]; +} + +Rules *RulesSetPhases::at(int index) { + return &m_rulesAtPhase[index]; +} + + +} // namespace modsecurity diff --git a/src/run_time_string.cc b/src/run_time_string.cc index 3344db21f9..ec5c76c94f 100644 --- a/src/run_time_string.cc +++ b/src/run_time_string.cc @@ -25,7 +25,7 @@ #include "src/variables/highest_severity.h" #include "src/utils/string.h" #include "src/variables/variable.h" -#include "modsecurity/rule_with_operator.h" +#include "src/rule_with_operator.h" namespace modsecurity { diff --git a/src/transaction.cc b/src/transaction.cc index 91d73f3ee9..cf7dc8be3f 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -52,6 +52,7 @@ #include "modsecurity/rules_set_properties.h" #include "src/actions/disruptive/allow.h" #include "src/variables/remote_user.h" +#include "src/rule_with_actions.h" diff --git a/src/variables/rule.h b/src/variables/rule.h index 696b8d339d..bec5a3ba2a 100644 --- a/src/variables/rule.h +++ b/src/variables/rule.h @@ -24,7 +24,8 @@ #include "src/actions/severity.h" #include "src/actions/log_data.h" #include "src/actions/msg.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" + namespace modsecurity { diff --git a/src/variables/xml.cc b/src/variables/xml.cc index e34e631c74..377e716332 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -42,7 +42,7 @@ #include "src/request_body_processor/xml.h" #include "modsecurity/actions/action.h" #include "src/actions/xmlns.h" -#include "modsecurity/rule_with_actions.h" +#include "src/rule_with_actions.h" namespace modsecurity { diff --git a/test/optimization/optimization.cc b/test/optimization/optimization.cc index 081853bc9c..7ad4ae570e 100644 --- a/test/optimization/optimization.cc +++ b/test/optimization/optimization.cc @@ -27,8 +27,8 @@ #include "src/parser/driver.h" #include "src/utils/https_client.h" #include "modsecurity/transaction.h" -#include "modsecurity/rule_unconditional.h" -#include "modsecurity/rule_with_operator.h" +#include "src/rule_unconditional.h" +#include "src/rule_with_operator.h" void print_help() { From 4b03e89b01c9a27c1856bf4ffcfca117aa2f159f Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Wed, 20 Mar 2019 16:21:28 -0300 Subject: [PATCH 12/16] Cosmetics: Defining a type for RuleId --- headers/modsecurity/modsecurity.h | 2 ++ headers/modsecurity/rules.h | 4 ++-- src/rule_with_actions.h | 4 ++-- src/rules.cc | 4 ++-- test/cppcheck_suppressions.txt | 2 ++ 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/headers/modsecurity/modsecurity.h b/headers/modsecurity/modsecurity.h index 8f51ec6b04..15302c38a2 100644 --- a/headers/modsecurity/modsecurity.h +++ b/headers/modsecurity/modsecurity.h @@ -95,6 +95,8 @@ namespace modsecurity { */ using ModSecString = std::string; + using RuleId = int64_t; + /** * * The Phases enumerator consists in mapping the different stages of a diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 209356b5b5..0f0f88989e 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -45,13 +45,13 @@ class Rules { void dump() const; int append(Rules *from, - const std::vector &ids, + const std::vector &ids, std::ostringstream *err); bool insert(const std::shared_ptr &rule); bool insert(std::shared_ptr rule, - const std::vector *ids, + const std::vector *ids, std::ostringstream *err); size_t size() const; diff --git a/src/rule_with_actions.h b/src/rule_with_actions.h index f410a7b4bd..315540e8a7 100644 --- a/src/rule_with_actions.h +++ b/src/rule_with_actions.h @@ -408,7 +408,7 @@ class RuleWithActions : public Rule { return dst; } - inline int64_t getId() const { return m_ruleId; } + inline RuleId getId() const { return m_ruleId; } void setId(int id) { m_ruleId = id; } @@ -443,7 +443,7 @@ class RuleWithActions : public Rule { } private: - int64_t m_ruleId; + RuleId m_ruleId; std::shared_ptr m_chainedRuleChild; RuleWithActions *m_chainedRuleParent; diff --git a/src/rules.cc b/src/rules.cc index e2a70c653c..44f9810640 100644 --- a/src/rules.cc +++ b/src/rules.cc @@ -20,7 +20,7 @@ namespace modsecurity { -int Rules::append(Rules *from, const std::vector &ids, std::ostringstream *err) { +int Rules::append(Rules *from, const std::vector &ids, std::ostringstream *err) { size_t j = 0; for (; j < from->size(); j++) { RuleWithActions *rule = dynamic_cast(from->at(j).get()); @@ -42,7 +42,7 @@ bool Rules::insert(const std::shared_ptr &rule) { } -bool Rules::insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { +bool Rules::insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { RuleWithActions*r = dynamic_cast(rule.get()); if (r && ids != nullptr && std::binary_search(ids->begin(), ids->end(), r->getId())) { diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index a8b8abc252..fde3545a27 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -56,6 +56,8 @@ duplicateBranch:src/request_body_processor/multipart.cc:93 danglingTempReference:src/modsecurity.cc:206 knownConditionTrueFalse:src/operators/validate_url_encoding.cc:77 knownConditionTrueFalse:src/operators/verify_svnr.cc:88 +noConstructor:src/actions/rule_id.h:33 +functionStatic:src/actions/rule_id.h:35 noExplicitConstructor:seclang-parser.hh constParameter:seclang-parser.hh From 8de527ebb1ef62af3eec7f722714496447f777c1 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Mon, 8 Apr 2019 15:50:42 -0300 Subject: [PATCH 13/16] Adds method getVariableNames to variables --- src/variables/variable.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/variables/variable.h b/src/variables/variable.h index 492df4bd91..570e0aefa4 100644 --- a/src/variables/variable.h +++ b/src/variables/variable.h @@ -610,6 +610,7 @@ class Variables : public std::vector { return std::find_if(begin(), end(), [v](Variable *m) -> bool { return *v == *m; }) != end(); }; + bool contains(const VariableValue *v) { return std::find_if(begin(), end(), [v](Variable *m) -> bool { @@ -620,6 +621,19 @@ class Variables : public std::vector { return v->getKeyWithCollection() == *m->m_fullName.get(); }) != end(); }; + + + std::string getVariableNames(const std::string &sep = ",") { + std::string names; + for (auto a : *this) { + if (names.length() > 0) { + names = names + sep + *a->m_fullName; + } else { + names = *a->m_fullName; + } + } + return names; + } }; From 17c4201522df9515538c446cd6669e2d80e4e3c2 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Thu, 21 Mar 2019 09:45:04 -0300 Subject: [PATCH 14/16] Better error handling when loading configurations --- CHANGES | 9 +- headers/modsecurity/modsecurity.h | 5 ++ headers/modsecurity/rules.h | 22 ++--- headers/modsecurity/rules_set.h | 7 +- headers/modsecurity/rules_set_phases.h | 24 +++++- headers/modsecurity/rules_set_properties.h | 20 +++-- src/parser/driver.cc | 12 --- src/rules.cc | 39 +++------ src/rules_set.cc | 85 +++++++++++++++++-- src/rules_set_phases.cc | 74 ++++------------ .../regression/config-include-bad.json | 2 +- 11 files changed, 163 insertions(+), 136 deletions(-) diff --git a/CHANGES b/CHANGES index fa2f52775d..7d746600a3 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,10 @@ v3.x.y - YYYY-MMM-DD (to be released) -------------------------------------- - - - IMPORTANT: SecDefaultAction behaves changing: SecDefaultAction specified +------------------------------------- + + - Added the basics for supporting better error/warning handling while + loading configurations. + [@zimmerle] + - IMPORTANT: SecDefaultAction behaves changing: SecDefaultAction specified on a child configuration will overwrite the ones specified on the parent; Previously it was concatenating. [@zimmerle] diff --git a/headers/modsecurity/modsecurity.h b/headers/modsecurity/modsecurity.h index 15302c38a2..9c76fe81ff 100644 --- a/headers/modsecurity/modsecurity.h +++ b/headers/modsecurity/modsecurity.h @@ -78,6 +78,7 @@ #include #include #include +#include #endif @@ -95,6 +96,10 @@ namespace modsecurity { */ using ModSecString = std::string; + using RulesErrors = std::vector>; + using RulesWarnings = std::vector>; + + using RuleId = int64_t; /** diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 0f0f88989e..ede88cca71 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -40,33 +40,35 @@ class Transformation; } } + class Rules { public: - void dump() const; + using container=std::vector>; + using iterator=typename container::iterator; + using const_iterator=typename container::const_iterator; - int append(Rules *from, - const std::vector &ids, - std::ostringstream *err); + int append(Rules *from); bool insert(const std::shared_ptr &rule); - bool insert(std::shared_ptr rule, - const std::vector *ids, - std::ostringstream *err); - size_t size() const; std::shared_ptr operator[](int index) const; std::shared_ptr at(int index) const; - void fixDefaultActions(); + void fixDefaultActions(RulesWarnings *warnings, RulesErrors *errors); std::vector > m_defaultActions; std::vector > m_defaultTransformations; - std::vector > m_rules; void dump(); + inline iterator begin() noexcept { return m_rules.begin(); } + inline const_iterator cbegin() const noexcept { return m_rules.cbegin(); } + inline iterator end() noexcept { return m_rules.end(); } + inline const_iterator cend() const noexcept { return m_rules.cend(); } + private: + container m_rules; }; diff --git a/headers/modsecurity/rules_set.h b/headers/modsecurity/rules_set.h index 4af55f405e..d2bc95b65a 100644 --- a/headers/modsecurity/rules_set.h +++ b/headers/modsecurity/rules_set.h @@ -22,6 +22,7 @@ #include #include #include +#include #endif @@ -42,8 +43,6 @@ namespace Parser { class Driver; } - - /** @ingroup ModSecurity_CPP_API */ class RulesSet : public RulesSetProperties { public: @@ -68,12 +67,13 @@ class RulesSet : public RulesSetProperties { int load(const char *rules); int load(const char *rules, const std::string &ref); - void dump() const; + void dump(); int merge(Parser::Driver *driver); int merge(RulesSet *rules); int evaluate(int phase, Transaction *transaction); + std::string getParserError(); void debug(int level, const std::string &id, const std::string &uri, @@ -81,6 +81,7 @@ class RulesSet : public RulesSetProperties { RulesSetPhases m_rulesSetPhases; private: + bool containsDuplicatedIds(RulesWarnings *warnings, RulesErrors *errors); #ifndef NO_LOGS uint8_t m_secmarker_skipped; #endif diff --git a/headers/modsecurity/rules_set_phases.h b/headers/modsecurity/rules_set_phases.h index 26d6216501..1acdf4f48b 100644 --- a/headers/modsecurity/rules_set_phases.h +++ b/headers/modsecurity/rules_set_phases.h @@ -23,6 +23,7 @@ #include #include #include +#include #endif @@ -42,18 +43,33 @@ class Driver; /** @ingroup ModSecurity_CPP_API */ class RulesSetPhases { public: + using container = std::array; + using iterator = typename container::iterator; + using const_iterator = typename container::const_iterator; - bool insert(std::shared_ptr rule); + void insert(std::shared_ptr rule); + void append(RulesSetPhases *from); int append(RulesSetPhases *from, std::ostringstream *err); - void dump() const; + void dump(); Rules *operator[](int index); Rules *at(int index); + static size_t size() { return modsecurity::Phases::NUMBER_OF_PHASES; } - private: - Rules m_rulesAtPhase[8]; + void fixDefaultActions(RulesWarnings *warnings, RulesErrors *errors) { + for (auto &phase : m_rulesAtPhase) { + phase.fixDefaultActions(warnings, errors); + } + } + + inline iterator begin() noexcept { return m_rulesAtPhase.begin(); } + inline const_iterator cbegin() const noexcept { return m_rulesAtPhase.cbegin(); } + inline iterator end() noexcept { return m_rulesAtPhase.end(); } + inline const_iterator cend() const noexcept { return m_rulesAtPhase.cend(); } + private: + container m_rulesAtPhase; }; diff --git a/headers/modsecurity/rules_set_properties.h b/headers/modsecurity/rules_set_properties.h index b48d368239..1ee8822c68 100644 --- a/headers/modsecurity/rules_set_properties.h +++ b/headers/modsecurity/rules_set_properties.h @@ -330,7 +330,9 @@ class RulesSetProperties { static int mergeProperties(RulesSetProperties *from, - RulesSetProperties *to, std::ostringstream *err) { + RulesSetProperties *to, + RulesWarnings *warning, + RulesErrors *error) { merge_ruleengine_value(to->m_secRuleEngine, from->m_secRuleEngine, PropertyNotSetRuleEngine); @@ -401,10 +403,10 @@ class RulesSetProperties { } if (to->m_auditLog) { - std::string error; - to->m_auditLog->merge(from->m_auditLog, &error); - if (error.size() > 0) { - *err << error; + std::string error_; + to->m_auditLog->merge(from->m_auditLog, &error_); + if (error_.size() > 0) { + error->push_back(std::unique_ptr(new std::string(error_))); return -1; } } @@ -412,12 +414,12 @@ class RulesSetProperties { if (from->m_debugLog && to->m_debugLog && from->m_debugLog->isLogFileSet()) { if (to->m_debugLog->isLogFileSet() == false) { - std::string error; + std::string error_; to->m_debugLog->setDebugLogFile( from->m_debugLog->getDebugLogFile(), - &error); - if (error.size() > 0) { - *err << error; + &error_); + if (error_.size() > 0) { + error->push_back(std::unique_ptr(new std::string(error_))); return -1; } } diff --git a/src/parser/driver.cc b/src/parser/driver.cc index eadf510286..6ba04cc19b 100644 --- a/src/parser/driver.cc +++ b/src/parser/driver.cc @@ -176,18 +176,6 @@ int Driver::addSecRule(std::unique_ptr r) { return false; } - for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - Rules *rules = m_rulesSetPhases[i]; - for (int j = 0; j < rules->size(); j++) { - RuleWithOperator *lr = dynamic_cast(rules->at(j).get()); - if (lr && lr->getId() == rule->getId()) { - m_parserError << "Rule id: " << std::to_string(rule->getId()) \ - << " is duplicated" << std::endl; - return false; - } - } - } - m_lastRule = rule.get(); m_rulesSetPhases.insert(rule); diff --git a/src/rules.cc b/src/rules.cc index 44f9810640..0665231a11 100644 --- a/src/rules.cc +++ b/src/rules.cc @@ -20,38 +20,23 @@ namespace modsecurity { -int Rules::append(Rules *from, const std::vector &ids, std::ostringstream *err) { - size_t j = 0; - for (; j < from->size(); j++) { - RuleWithActions *rule = dynamic_cast(from->at(j).get()); - if (rule && std::binary_search(ids.begin(), ids.end(), rule->getId())) { - if (err != NULL) { - *err << "Rule id: " << std::to_string(rule->getId()) \ - << " is duplicated" << std::endl; - } - return -1; +int Rules::append(Rules *from) { + m_rules.insert(m_rules.end(), from->m_rules.begin(), from->m_rules.end()); + if (!from->m_defaultActions.empty() || !from->m_defaultTransformations.empty()) { + m_defaultActions.clear(); + m_defaultTransformations.clear(); + for (auto &a : from->m_defaultActions) { + m_defaultActions.push_back(a); + } + for (auto &a : from->m_defaultTransformations) { + m_defaultTransformations.push_back(a); } } - m_rules.insert(m_rules.end(), from->m_rules.begin(), from->m_rules.end()); - return j; + return from->size(); } bool Rules::insert(const std::shared_ptr &rule) { - return insert(rule, nullptr, nullptr); -} - - -bool Rules::insert(std::shared_ptr rule, const std::vector *ids, std::ostringstream *err) { - RuleWithActions*r = dynamic_cast(rule.get()); - if (r && ids != nullptr - && std::binary_search(ids->begin(), ids->end(), r->getId())) { - if (err != NULL) { - *err << "Rule id: " << std::to_string(r->getId()) \ - << " is duplicated" << std::endl; - } - return false; - } m_rules.push_back(rule); return true; } @@ -72,7 +57,7 @@ std::shared_ptr Rules::at(int index) const { } -void Rules::dump() const { +void Rules::dump() { for (int j = 0; j < m_rules.size(); j++) { std::cout << " Rule ID: " << m_rules.at(j)->getReference(); std::cout << "--" << m_rules.at(j) << std::endl; diff --git a/src/rules_set.cc b/src/rules_set.cc index c99ce3077c..f091c4be96 100644 --- a/src/rules_set.cc +++ b/src/rules_set.cc @@ -18,6 +18,7 @@ #include #include #include +#include #include "modsecurity/rules_set.h" #include "src/rule_marker.h" @@ -32,7 +33,7 @@ using modsecurity::Utils::HttpsClient; namespace modsecurity { - void Rules::fixDefaultActions() { + void Rules::fixDefaultActions(RulesWarnings *warnings, RulesErrors *errors) { for (size_t i = 0; i < m_rules.size(); i++) { auto &rule = m_rules[i]; @@ -142,6 +143,52 @@ int RulesSet::load(const char *plainRules) { } +bool RulesSet::containsDuplicatedIds(RulesWarnings *warning, RulesErrors *error) { + std::multimap allIds; + std::set duplicatedIds; + for (auto &rules : m_rulesSetPhases) { + for (auto &j : rules) { + RuleWithActions *rule = dynamic_cast(j.get()); + if (rule) { + allIds.insert(std::pair(rule->getId(), rule)); + } + } + } + + auto id = allIds.begin(); + auto next = id; + if (id != allIds.end()) { + next++; + } + while (id != allIds.end() && next != allIds.end()) { + if (id->first == next->first) { + duplicatedIds.insert(id->first); + } + id++; + next++; + } + + for (auto i : duplicatedIds) { + auto ret = allIds.equal_range(i); + std::stringstream ss; + + ss << "There are multiple rules defined with "; + ss << "same id. The ID " << i << " is defined at: " << std::endl; + for (auto it = ret.first; it != ret.second; ++it) { + auto rule = it->second; + ss << " " << *rule->getFileName() << ":"; + ss << rule->getLineNumber() << std::endl; + } + + std::unique_ptr e(new std::string(ss.str())); + error->push_back(std::move(e)); + } + + return !duplicatedIds.empty(); +} + + + std::string RulesSet::getParserError() { return this->m_parserError.str(); } @@ -265,13 +312,24 @@ int RulesSet::evaluate(int phase, Transaction *t) { int RulesSet::merge(Driver *from) { int amount_of_rules = 0; + RulesErrors errors; + RulesWarnings warnings; - amount_of_rules = m_rulesSetPhases.append(&from->m_rulesSetPhases, - &m_parserError); + m_rulesSetPhases.append(&from->m_rulesSetPhases); mergeProperties( dynamic_cast(from), dynamic_cast(this), - &m_parserError); + &warnings, &errors); + + m_rulesSetPhases.fixDefaultActions(&warnings, &errors); + containsDuplicatedIds(&warnings, &errors); + + if (!errors.empty()) { + for (auto &i : errors) { + m_parserError << "*** Error: " << *i << std::endl; + } + return -1; + } return amount_of_rules; } @@ -279,13 +337,24 @@ int RulesSet::merge(Driver *from) { int RulesSet::merge(RulesSet *from) { int amount_of_rules = 0; + RulesErrors errors; + RulesWarnings warnings; - amount_of_rules = m_rulesSetPhases.append(&from->m_rulesSetPhases, - &m_parserError); + m_rulesSetPhases.append(&from->m_rulesSetPhases); mergeProperties( dynamic_cast(from), dynamic_cast(this), - &m_parserError); + &warnings, &errors); + + m_rulesSetPhases.fixDefaultActions(&warnings, &errors); + containsDuplicatedIds(&warnings, &errors); + + if (!errors.empty()) { + for (auto &i : errors) { + m_parserError << "*** Error: " << *i << std::endl; + } + return -1; + } return amount_of_rules; } @@ -299,7 +368,7 @@ void RulesSet::debug(int level, const std::string &id, } -void RulesSet::dump() const { +void RulesSet::dump() { m_rulesSetPhases.dump(); } diff --git a/src/rules_set_phases.cc b/src/rules_set_phases.cc index 3f904fc948..69bfa0e86e 100644 --- a/src/rules_set_phases.cc +++ b/src/rules_set_phases.cc @@ -15,78 +15,34 @@ #include "modsecurity/rules_set_phases.h" #include "src/rule_with_operator.h" - +#include namespace modsecurity { -bool RulesSetPhases::insert(std::shared_ptr rule) { - if (rule->getPhase() >= modsecurity::Phases::NUMBER_OF_PHASES) { - return false; +void RulesSetPhases::insert(std::shared_ptr rule) { + if (rule->getPhase() >= size()) { + return; } m_rulesAtPhase[rule->getPhase()].insert(rule); - - return true; } -int RulesSetPhases::append(RulesSetPhases *from, std::ostringstream *err) { - int amount_of_rules = 0; - std::vector v; - - for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - v.reserve(m_rulesAtPhase[i].size()); - for (size_t z = 0; z < m_rulesAtPhase[i].size(); z++) { - RuleWithOperator *rule_ckc = dynamic_cast(m_rulesAtPhase[i].at(z).get()); - //RuleWithOperator *rule_ckc = dynamic_cast(m_rulesAtPhase->at(i).get()); - if (!rule_ckc) { - continue; - } - v.push_back(rule_ckc->getId()); - } - } - std::sort (v.begin(), v.end()); - - for (int phase = 0; phase < modsecurity::Phases::NUMBER_OF_PHASES; phase++) { - int res = m_rulesAtPhase[phase].append(from->at(phase), v, err); - if (res < 0) { - return res; - } - amount_of_rules = amount_of_rules + res; - - /** - * An action set in a child will overwrite an action set on a parent. - * - */ - std::vector > *actions_to = &at(phase)->m_defaultActions; - std::vector > *actions_t_to = &at(phase)->m_defaultTransformations; - if (actions_to->size() == 0 || actions_t_to->size() == 0) { - std::vector > *actions_from = &from->at(phase)->m_defaultActions; - - actions_to->clear(); - for (size_t j = 0; j < actions_from->size(); j++) { - actions_to->push_back(actions_from->at(j)); - } - - std::vector > *actions_t_from = &from->at(phase)->m_defaultTransformations; - actions_t_to->clear(); - for (size_t j = 0; j < actions_t_from->size(); j++) { - actions_t_to->push_back(actions_t_from->at(j)); - } - at(phase)->fixDefaultActions(); - } +void RulesSetPhases::append(RulesSetPhases *from) { + int phase = 0; + for (auto &a : *from) { + m_rulesAtPhase[phase++].append(&a); } - - return amount_of_rules; } -void RulesSetPhases::dump() const { - for (int i = 0; i <= modsecurity::Phases::NUMBER_OF_PHASES; i++) { - const Rules *rules = &m_rulesAtPhase[i]; - std::cout << "Phase: " << std::to_string(i); - std::cout << " (" << std::to_string(m_rulesAtPhase[i].size()); + +void RulesSetPhases::dump() { + int phase = 0; + for (auto &rules : m_rulesAtPhase) { + std::cout << "Phase: " << std::to_string(phase++); + std::cout << " (" << std::to_string(rules.size()); std::cout << " rules)" << std::endl; - m_rulesAtPhase[i].dump(); + rules.dump(); } } diff --git a/test/test-cases/regression/config-include-bad.json b/test/test-cases/regression/config-include-bad.json index 76797552d7..ed8b0156e0 100644 --- a/test/test-cases/regression/config-include-bad.json +++ b/test/test-cases/regression/config-include-bad.json @@ -43,7 +43,7 @@ "version_min":300000, "title":"Include - duplicate id", "expected":{ - "parser_error": "Rule id: 40 is duplicated" + "parser_error": "There are multiple rules defined with same id. The ID 40 is defined at" }, "rules":[ "SecRuleEngine On", From 1e9c54860b862a8bdb15ef554a9f4c00835b41cc Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Thu, 11 Apr 2019 10:18:03 -0300 Subject: [PATCH 15/16] Improves rules dump for better testing --- CHANGES | 2 ++ headers/modsecurity/rule.h | 16 ++++++++++++++-- headers/modsecurity/rules.h | 7 ++++++- src/rule_marker.h | 12 +++++++++++- src/rule_with_actions.h | 5 +++++ src/rule_with_operator.h | 11 +++++++++++ src/rules.cc | 8 +++----- tools/rules-check/rules-check.cc | 1 + 8 files changed, 53 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index 7d746600a3..7bfa87945c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ v3.x.y - YYYY-MMM-DD (to be released) ------------------------------------- + - More structured rules dump. Better supporting debugging. + [@zimmerle] - Added the basics for supporting better error/warning handling while loading configurations. [@zimmerle] diff --git a/headers/modsecurity/rule.h b/headers/modsecurity/rule.h index 4696f15637..9067b5fdb3 100644 --- a/headers/modsecurity/rule.h +++ b/headers/modsecurity/rule.h @@ -46,8 +46,8 @@ class Rule { Rule(std::unique_ptr fileName, int lineNumber) : m_fileName(std::make_shared(*fileName)), m_lineNumber(lineNumber), - m_phase(modsecurity::Phases::RequestHeadersPhase) { - } + m_phase(modsecurity::Phases::RequestHeadersPhase) + { } Rule(const Rule &other) : m_fileName(other.m_fileName), @@ -82,6 +82,18 @@ class Rule { return "<>:" + std::to_string(m_lineNumber); } + virtual void dump(std::stringstream &out) { + out << getOriginInTextFormat() << std::endl; + } + + protected: + std::string getOriginInTextFormat() const { + std::stringstream ss; + ss << "# File name: " << *getFileName() << std::endl; + ss << "# Line number: " << getLineNumber(); + return ss.str(); + } + private: std::shared_ptr m_fileName; int m_lineNumber; diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index ede88cca71..7dc86b49a3 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -61,7 +61,12 @@ class Rules { std::vector > m_defaultActions; std::vector > m_defaultTransformations; - void dump(); + virtual void dump() { + std::stringstream ss; + dump(ss); + std::cout << ss.str(); + }; + virtual void dump(std::stringstream &out); inline iterator begin() noexcept { return m_rules.begin(); } inline const_iterator cbegin() const noexcept { return m_rules.cbegin(); } diff --git a/src/rule_marker.h b/src/rule_marker.h index f17ee828cb..48942b9224 100644 --- a/src/rule_marker.h +++ b/src/rule_marker.h @@ -47,7 +47,12 @@ class RuleMarker : public Rule { RuleMarker(const RuleMarker& r) : Rule(r), m_name(r.m_name) - { } + { }; + + RuleMarker(RuleMarker &&r) : + Rule(r), + m_name(std::move(r.m_name)) + { }; RuleMarker &operator =(const RuleMarker& r) { Rule::operator = (r); @@ -72,6 +77,11 @@ class RuleMarker : public Rule { return m_name; } + virtual void dump(std::stringstream &out) override { + Rule::dump(out); + out << "SecMarker \"" << *getName() << "\"" << std::endl; + } + private: std::shared_ptr m_name; }; diff --git a/src/rule_with_actions.h b/src/rule_with_actions.h index 315540e8a7..0e69556ded 100644 --- a/src/rule_with_actions.h +++ b/src/rule_with_actions.h @@ -442,6 +442,11 @@ class RuleWithActions : public Rule { return dst; } + + virtual void dump(std::stringstream &out) override { + out << "RuleWithActions" << std::endl; + } + private: RuleId m_ruleId; diff --git a/src/rule_with_operator.h b/src/rule_with_operator.h index e3426fa5ca..e69339af49 100644 --- a/src/rule_with_operator.h +++ b/src/rule_with_operator.h @@ -30,6 +30,8 @@ #include "modsecurity/variable_value.h" #include "modsecurity/rule.h" #include "src/rule_with_actions.h" +#include "src/variables/variable.h" +#include "src/operators/operator.h" #ifdef __cplusplus @@ -73,6 +75,15 @@ class RuleWithOperator : public RuleWithActions { return std::to_string(getId()); } + virtual void dump(std::stringstream &out) override { + Rule::dump(out); + out << "# RuleWithOperator" << std::endl; + out << "SecRule "; + out << m_variables->getVariableNames() << " "; + out << "\"" << "@" << m_operator->m_op << " " << m_operator->m_param << "\""; + out << std::endl; + } + private: std::shared_ptr m_variables; std::shared_ptr m_operator; diff --git a/src/rules.cc b/src/rules.cc index 0665231a11..ff91e8b4f9 100644 --- a/src/rules.cc +++ b/src/rules.cc @@ -57,13 +57,11 @@ std::shared_ptr Rules::at(int index) const { } -void Rules::dump() { - for (int j = 0; j < m_rules.size(); j++) { - std::cout << " Rule ID: " << m_rules.at(j)->getReference(); - std::cout << "--" << m_rules.at(j) << std::endl; +void Rules::dump(std::stringstream &out) { + for (auto &r : m_rules) { + r->dump(out); } } - } // namespace modsecurity diff --git a/tools/rules-check/rules-check.cc b/tools/rules-check/rules-check.cc index f59439ee9f..7c9f40dfe3 100644 --- a/tools/rules-check/rules-check.cc +++ b/tools/rules-check/rules-check.cc @@ -91,6 +91,7 @@ int main(int argc, char **argv) { if (err.empty() == false) { std::cerr << " " << err << std::endl; } + rules->dump(); next: args++; } From 8e3e9b8be7a17e2de7a3106281f40204e64f6cc5 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 5 Mar 2019 12:26:44 -0300 Subject: [PATCH 16/16] Makes operator to use string_view --- headers/modsecurity/anchored_set_variable.h | 9 + headers/modsecurity/anchored_variable.h | 6 + headers/modsecurity/string_view.hpp | 1422 +++++++++++++++++++ src/Makefile.am | 2 + src/anchored_set_variable.cc | 30 + src/anchored_variable.cc | 24 + src/engine/lua.cc | 2 +- src/operators/begins_with.cc | 6 +- src/operators/begins_with.h | 4 +- src/operators/contains.cc | 8 +- src/operators/contains.h | 8 +- src/operators/contains_word.cc | 27 +- src/operators/contains_word.h | 7 +- src/operators/detect_sqli.cc | 22 +- src/operators/detect_sqli.h | 5 +- src/operators/detect_xss.cc | 18 +- src/operators/detect_xss.h | 5 +- src/operators/ends_with.cc | 12 +- src/operators/ends_with.h | 6 +- src/operators/eq.cc | 7 +- src/operators/eq.h | 6 +- src/operators/fuzzy_hash.cc | 9 +- src/operators/fuzzy_hash.h | 7 +- src/operators/ge.cc | 8 +- src/operators/ge.h | 6 +- src/operators/geo_lookup.cc | 13 +- src/operators/geo_lookup.h | 10 +- src/operators/gsblookup.cc | 5 +- src/operators/gsblookup.h | 5 +- src/operators/gt.cc | 7 +- src/operators/gt.h | 6 +- src/operators/inspect_file.cc | 9 +- src/operators/inspect_file.h | 9 +- src/operators/ip_match.cc | 7 +- src/operators/ip_match.h | 5 +- src/operators/le.cc | 7 +- src/operators/le.h | 5 +- src/operators/lt.cc | 7 +- src/operators/lt.h | 5 +- src/operators/no_match.cc | 5 +- src/operators/no_match.h | 5 +- src/operators/operator.cc | 29 +- src/operators/operator.h | 30 +- src/operators/pm.cc | 8 +- src/operators/pm.h | 6 +- src/operators/pm_from_file.cc | 2 +- src/operators/rbl.cc | 23 +- src/operators/rbl.h | 6 +- src/operators/rsub.cc | 5 +- src/operators/rsub.h | 6 +- src/operators/rx.cc | 12 +- src/operators/rx.h | 7 +- src/operators/rx_global.cc | 4 +- src/operators/rx_global.h | 2 +- src/operators/str_eq.cc | 7 +- src/operators/str_eq.h | 5 +- src/operators/str_match.cc | 7 +- src/operators/str_match.h | 5 +- src/operators/unconditional_match.cc | 4 +- src/operators/unconditional_match.h | 5 +- src/operators/validate_byte_range.cc | 27 +- src/operators/validate_byte_range.h | 8 +- src/operators/validate_dtd.cc | 26 +- src/operators/validate_dtd.h | 6 +- src/operators/validate_hash.cc | 5 +- src/operators/validate_hash.h | 6 +- src/operators/validate_schema.cc | 28 +- src/operators/validate_schema.h | 6 +- src/operators/validate_url_encoding.cc | 15 +- src/operators/validate_url_encoding.h | 5 +- src/operators/validate_utf8_encoding.cc | 18 +- src/operators/validate_utf8_encoding.h | 5 +- src/operators/verify_cc.cc | 18 +- src/operators/verify_cc.h | 9 +- src/operators/verify_cpf.cc | 14 +- src/operators/verify_cpf.h | 5 +- src/operators/verify_ssn.cc | 14 +- src/operators/verify_ssn.h | 5 +- src/operators/verify_svnr.cc | 8 +- src/operators/verify_svnr.h | 5 +- src/operators/within.cc | 8 +- src/operators/within.h | 7 +- src/rule_with_operator.cc | 30 +- src/rule_with_operator.h | 12 +- test/cppcheck_suppressions.txt | 13 +- 85 files changed, 1954 insertions(+), 298 deletions(-) create mode 100644 headers/modsecurity/string_view.hpp diff --git a/headers/modsecurity/anchored_set_variable.h b/headers/modsecurity/anchored_set_variable.h index 5b41e8502d..367e40f2f1 100644 --- a/headers/modsecurity/anchored_set_variable.h +++ b/headers/modsecurity/anchored_set_variable.h @@ -27,10 +27,13 @@ #include #include #include + +#include "modsecurity/string_view.hpp" #endif #include "modsecurity/variable_value.h" + #ifndef HEADERS_MODSECURITY_ANCHORED_SET_VARIABLE_H_ #define HEADERS_MODSECURITY_ANCHORED_SET_VARIABLE_H_ @@ -79,6 +82,12 @@ class AnchoredSetVariable : public std::unordered_multimap #include #include +#include + +#include "modsecurity/string_view.hpp" #endif #include "modsecurity/variable_value.h" + #ifndef HEADERS_MODSECURITY_ANCHORED_VARIABLE_H_ #define HEADERS_MODSECURITY_ANCHORED_VARIABLE_H_ @@ -59,6 +63,8 @@ class AnchoredVariable { void unset(); void set(const std::string &a, size_t offset); + void set(const bpstd::string_view &a, size_t offset); + void set(const char *a, size_t offset); void set(const std::string &a, size_t offset, size_t offsetLen); void append(const std::string &a, size_t offset, bool spaceSeparator = false); diff --git a/headers/modsecurity/string_view.hpp b/headers/modsecurity/string_view.hpp new file mode 100644 index 0000000000..ce9929534b --- /dev/null +++ b/headers/modsecurity/string_view.hpp @@ -0,0 +1,1422 @@ +/** + * \file string_view.hpp + * + * \brief This header contains the definition of the string_view type, as + * described by the C++17 standard. + * + * \author Matthew Rodusek (matthew.rodusek@gmail.com) + * \copyright Matthew Rodusek + */ + +/* + * The MIT License (MIT) + * + * Licensed under the MIT License . + * Copyright (c) 2016 Matthew Rodusek + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef BPSTD_STRING_VIEW_HPP +#define BPSTD_STRING_VIEW_HPP + +#include // std:: +#include // std::char_traits +#include // std::basic_ostream +#include // std::size_t +#include // std::allocator +#include // std::out_of_range +#include // std::reverse_iterator +namespace bpstd { // back-port std + + //////////////////////////////////////////////////////////////////////////// + /// \brief A wrapper around non-owned strings. + /// + /// This is an implementation of the C++17 string_view proposal + /// + /// \ingroup core + //////////////////////////////////////////////////////////////////////////// + template< + typename CharT, + typename Traits = std::char_traits + > + class basic_string_view final + { + //------------------------------------------------------------------------ + // Public Member Types + //------------------------------------------------------------------------ + public: + + using char_type = CharT; + using traits_type = Traits; + using size_type = std::size_t; + + using value_type = CharT; + using reference = value_type&; + using const_reference = const value_type&; + using pointer = value_type*; + using const_pointer = const value_type*; + + using iterator = const CharT*; + using const_iterator = const CharT*; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + + //------------------------------------------------------------------------ + // Public Members + //------------------------------------------------------------------------ + public: + + static constexpr size_type npos = size_type(-1); + + //------------------------------------------------------------------------ + // Constructors + //------------------------------------------------------------------------ + public: + + /// \brief Default constructs a basic_string_view without any content + constexpr basic_string_view() noexcept; + + /// \brief Constructs a basic_string_view by copying another one + /// + /// \param other the string view being copied + constexpr basic_string_view(const basic_string_view& other) noexcept = default; + + /// \brief Constructs a basic_string_view by moving anothe rone + /// + /// \param other the string view being moved + constexpr basic_string_view(basic_string_view&& other) noexcept = default; + + /// \brief Constructs a basic_string_view from a std::basic_string + /// + /// \param str the string to view + template + basic_string_view(const std::basic_string& str) noexcept; + + /// \brief Constructs a basic_string_view from an ansi-string + /// + /// \param str the string to view + constexpr basic_string_view(const char_type* str) noexcept; + + /// \brief Constructs a basic_string_view from an ansi string of a given size + /// + /// \param str the string to view + /// \param count the size of the string + constexpr basic_string_view(const char_type* str, size_type count) noexcept; + + //------------------------------------------------------------------------ + // Assignment + //------------------------------------------------------------------------ + public: + + /// \brief Assigns a basic_string_view from an ansi-string + /// + /// \param view the string to view + /// \return reference to \c (*this) + basic_string_view& operator=(const basic_string_view& view) = default; + + //------------------------------------------------------------------------ + // Capacity + //------------------------------------------------------------------------ + public: + + /// \brief Returns the length of the string, in terms of bytes + /// + /// \return the length of the string, in terms of bytes + constexpr size_type size() const noexcept; + + /// \copydoc basic_string_view::size + constexpr size_type length() const noexcept; + + /// \brief The largest possible number of char-like objects that can be + /// referred to by a basic_string_view. + /// \return Maximum number of characters + constexpr size_type max_size() const noexcept; + + /// \brief Returns whether the basic_string_view is empty + /// (i.e. whether its length is 0). + /// + /// \return whether the basic_string_view is empty + constexpr bool empty() const noexcept; + + //------------------------------------------------------------------------ + // Element Access + //------------------------------------------------------------------------ + public: + + /// \brief Gets the ansi-string of the current basic_string_view + /// + /// \return the ansi-string pointer + constexpr const char_type* c_str() const noexcept; + + /// \brief Gets the data of the current basic_string_view + /// + /// \note This is an alias of #c_str + /// + /// \return the data this basic_string_view contains + constexpr const char_type* data() const noexcept; + + /// \brief Accesses the element at index \p pos + /// + /// \param pos the index to access + /// \return const reference to the character + constexpr const_reference operator[](size_type pos) const noexcept; + + /// \brief Accesses the element at index \p pos + /// + /// \param pos the index to access + /// \return const reference to the character + constexpr const_reference at(size_type pos) const; + + /// \brief Access the first character of the string + /// + /// \note Undefined behavior if basic_string_view is empty + /// + /// \return reference to the first character of the string + constexpr const_reference front() const noexcept; + + /// \brief References the last character of the string + /// + /// \note Undefined behavior if basic_string_view is empty + /// + /// \return reference to the last character of the string + constexpr const_reference back() const noexcept; + + //------------------------------------------------------------------------ + // Modifiers + //------------------------------------------------------------------------ + public: + + /// \brief Moves the start of the view forward by n characters. + /// + /// The behavior is undefined if n > size(). + /// + /// \param n number of characters to remove from the start of the view + void remove_prefix(size_type n) noexcept; + + /// \brief Moves the end of the view back by n characters. + /// + /// The behavior is undefined if n > size(). + /// + /// \param n number of characters to remove from the end of the view + void remove_suffix(size_type n) noexcept; + + /// \brief Exchanges the view with that of v. + /// + /// \param v view to swap with + void swap(basic_string_view& v) noexcept; + + //------------------------------------------------------------------------ + // Conversions + //------------------------------------------------------------------------ + public: + + /// \brief Creates a basic_string with a copy of the content of the current view. + /// + /// \tparam Allocator type used to allocate internal storage + /// \param a Allocator instance to use for allocating the new string + /// + /// \return A basic_string containing a copy of the characters of the current view. + template> + constexpr std::basic_string + to_string(const Allocator& a = Allocator()) const; + + /// \copydoc basic_string_view::to_string + template + explicit constexpr operator std::basic_string() const; + + //------------------------------------------------------------------------ + // Operations + //------------------------------------------------------------------------ + public: + + /// \brief Copies the substring [pos, pos + rcount) to the character string pointed + /// to by dest, where rcount is the smaller of count and size() - pos. + /// + /// \param dest pointer to the destination character string + /// \param count requested substring length + /// \param pos position of the first character + size_type copy( char_type* dest, + size_type count = npos, + size_type pos = 0 ) const; + + /// \brief Returns a substring of this viewed string + /// + /// \param pos the position of the first character in the substring + /// \param len the length of the substring + /// \return the created substring + basic_string_view substr(size_t pos = 0, size_t len = npos) const; + + //------------------------------------------------------------------------ + + /// \brief Compares two character sequences + /// + /// \param v view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(basic_string_view v) const noexcept; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count number of characters of this view to compare + /// \param v view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(size_type pos, size_type count, basic_string_view v) const; + + /// \brief Compares two character sequences + /// + /// \param pos1 position of the first character in this view to compare + /// \param count1 number of characters of this view to compare + /// \param v view to compare + /// \param pos2 position of the second character in this view to compare + /// \param count2 number of characters of the given view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare( size_type pos1, size_type count1, basic_string_view v, + size_type pos2, size_type count2 ) const; + + /// \brief Compares two character sequences + /// + /// \param s pointer to the character string to compare to + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(const char_type* s) const; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count number of characters of this view to compare + /// \param s pointer to the character string to compare to + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare(size_type pos, size_type count, const char_type* s) const; + + /// \brief Compares two character sequences + /// + /// \param pos position of the first character in this view to compare + /// \param count1 number of characters of this view to compare + /// \param s pointer to the character string to compare to + /// \param count2 number of characters of the given view to compare + /// \return negative value if this view is less than the other character + /// sequence, zero if the both character sequences are equal, positive + /// value if this view is greater than the other character sequence. + int compare( size_type pos, size_type count1, const char_type* s, + size_type count2 ) const; + + //------------------------------------------------------------------------ + + size_type find(basic_string_view v, size_type pos = 0) const; + + size_type find(char_type c, size_type pos = 0) const; + + size_type find(const char_type* s, size_type pos, size_type count) const; + + size_type find(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type rfind(basic_string_view v, size_type pos = npos) const; + + size_type rfind(char_type c, size_type pos = npos) const; + + size_type rfind(const char_type* s, size_type pos, size_type count) const; + + size_type rfind(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + + size_type find_first_of(basic_string_view v, size_type pos = 0) const; + + size_type find_first_of(char_type c, size_type pos = 0) const; + + size_type find_first_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_first_of(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type find_last_of(basic_string_view v, size_type pos = npos) const; + + size_type find_last_of(char_type c, size_type pos = npos) const; + + size_type find_last_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_last_of(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + + size_type find_first_not_of(basic_string_view v, size_type pos = 0) const; + + size_type find_first_not_of(char_type c, size_type pos = 0) const; + + size_type find_first_not_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_first_not_of(const char_type* s, size_type pos = 0) const; + + //------------------------------------------------------------------------ + + size_type find_last_not_of(basic_string_view v, size_type pos = npos) const; + + size_type find_last_not_of(char_type c, size_type pos = npos) const; + + size_type find_last_not_of(const char_type* s, size_type pos, size_type count) const; + + size_type find_last_not_of(const char_type* s, size_type pos = npos) const; + + //------------------------------------------------------------------------ + // Iterators + //------------------------------------------------------------------------ + public: + + /// \{ + /// \brief Retrieves the begin iterator for this basic_string_view + /// + /// \return the begin iterator + const_iterator begin() const noexcept; + const_iterator cbegin() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the end iterator for this basic_string_view + /// + /// \return the end iterator + const_iterator end() const noexcept; + const_iterator cend() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the reverse begin iterator for this basic_string_view + /// + /// \return the reverse begin iterator + const_reverse_iterator rbegin() const noexcept; + const_reverse_iterator rend() const noexcept; + /// \} + + /// \{ + /// \brief Retrieves the reverse end iterator for this basic_string_view + /// + /// \return the reverse end iterator + const_reverse_iterator crbegin() const noexcept; + const_reverse_iterator crend() const noexcept; + /// \} + + //------------------------------------------------------------------------ + // Private Member + //------------------------------------------------------------------------ + private: + + const char_type* m_str; ///< The internal string type + size_type m_size; ///< The size of this string + + /// \brief Checks whether \p c is one of the characters in \p str + /// + /// \param c the character to check + /// \param str the characters to compare against + /// \return true if \p c is one of the characters in \p str + static bool is_one_of(CharT c, basic_string_view str); + }; + + template + const typename basic_string_view::size_type + basic_string_view::npos; + + //-------------------------------------------------------------------------- + // Public Functions + //-------------------------------------------------------------------------- + + /// \brief Overload for ostream output of basic_string_view + /// + /// \param o The output stream to print to + /// \param str the string to print + /// \return reference to the output stream + template + std::basic_ostream& operator<<(std::basic_ostream& o, + const basic_string_view& str); + + template + void swap(basic_string_view& lhs, + basic_string_view& rhs) noexcept; + + //-------------------------------------------------------------------------- + // Comparison Functions + //-------------------------------------------------------------------------- + + template + bool operator==(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator!=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator<(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator>(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator<=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + template + bool operator>=(const basic_string_view& lhs, + const basic_string_view& rhs) noexcept; + + //-------------------------------------------------------------------------- + // Type Aliases + //-------------------------------------------------------------------------- + + using string_view = basic_string_view; + using wstring_view = basic_string_view; + using u16string_view = basic_string_view; + using u32string_view = basic_string_view; + +} // namespace bpstd + +#ifndef BPSTD_DETAIL_STRING_VIEW_INL +#define BPSTD_DETAIL_STRING_VIEW_INL + +namespace bpstd { + + //-------------------------------------------------------------------------- + // Constructor + //-------------------------------------------------------------------------- + + template + inline constexpr basic_string_view::basic_string_view() + noexcept + : m_str(nullptr), + m_size(0) + { + + } + + template + template + inline basic_string_view::basic_string_view(const std::basic_string& str) + noexcept + : m_str(str.c_str()), + m_size(str.size()) + { + + } + + template + inline constexpr basic_string_view::basic_string_view(const char_type* str) + noexcept + : m_str(str), + m_size(traits_type::length(str)) + { + + } + + template + inline constexpr basic_string_view::basic_string_view(const char_type* str, size_type count) + noexcept + : m_str(str), + m_size(count) + { + + } + + //-------------------------------------------------------------------------- + // Capacity + //-------------------------------------------------------------------------- + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::size() + const noexcept + { + return m_size; + } + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::length() + const noexcept + { + return size(); + } + + template + inline constexpr typename basic_string_view::size_type + basic_string_view::max_size() + const noexcept + { + return npos - 1; + } + + template + inline constexpr bool basic_string_view::empty() + const noexcept + { + return m_size == 0; + } + + //-------------------------------------------------------------------------- + // Element Access + //-------------------------------------------------------------------------- + + template + inline constexpr const typename basic_string_view::char_type* + basic_string_view::c_str() + const noexcept + { + return m_str; + } + + template + inline constexpr const typename basic_string_view::char_type* + basic_string_view::data() + const noexcept + { + return m_str; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::operator[](size_type pos) + const noexcept + { + return m_str[pos]; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::at(size_type pos) + const + { + return pos < m_size ? m_str[pos] : throw std::out_of_range("Input out of range in basic_string_view::at"), m_str[pos]; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::front( ) + const noexcept + { + return *m_str; + } + + template + inline constexpr typename basic_string_view::const_reference + basic_string_view::back( ) + const noexcept + { + return m_str[m_size-1]; + } + + //-------------------------------------------------------------------------- + // Modifiers + //-------------------------------------------------------------------------- + + template + inline void + basic_string_view::remove_prefix(size_type n) + noexcept + { + m_str += n, m_size -= n; + } + + template + inline void + basic_string_view::remove_suffix(size_type n) + noexcept + { + m_size -= n; + } + + template + inline void + basic_string_view::swap(basic_string_view& v) + noexcept + { + using std::swap; + swap(m_size,v.m_size); + swap(m_str,v.m_str); + } + + //-------------------------------------------------------------------------- + // Conversions + //-------------------------------------------------------------------------- + + template + template + inline constexpr std::basic_string + basic_string_view::to_string(const Allocator& a) + const + { + return std::basic_string(m_str, m_size, a); + } + + template + template + inline constexpr basic_string_view::operator + std::basic_string() + const + { + return std::basic_string(m_str, m_size); + } + + //-------------------------------------------------------------------------- + // String Operations + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::copy(char_type* dest, + size_type count, + size_type pos) + const + { + if(pos >= m_size) { + throw std::out_of_range("Index out of range in basic_string_view::copy"); + } + + const size_type rcount = std::min(m_size - pos,count+1); + std::copy( m_str + pos, m_str + pos + rcount, dest); + return rcount; + } + + template + inline basic_string_view + basic_string_view::substr(size_type pos, + size_type len) + const + { + const size_type max_length = pos > m_size ? 0 : m_size - pos; + + if (pos > size()) { + throw std::out_of_range("Index out of range in basic_string_view::substr"); + } + + return basic_string_view(m_str + pos, std::min(len, max_length) ); + } + + //-------------------------------------------------------------------------- + + template + inline int basic_string_view::compare(basic_string_view v) + const noexcept + { + const size_type rlen = std::min(m_size,v.m_size); + const int compare = Traits::compare(m_str,v.m_str,rlen); + + return (compare ? compare : (m_size < v.m_size ? -1 : (m_size > v.m_size ? 1 : 0))); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count, + basic_string_view v) + const + { + return substr(pos,count).compare(v); + } + + template + inline int basic_string_view::compare(size_type pos1, + size_type count1, + basic_string_view v, + size_type pos2, + size_type count2) + const + { + return substr(pos1,count1).compare(v.substr(pos2,count2)); + } + + template + inline int basic_string_view::compare(const char_type* s) + const + { + return compare(basic_string_view(s)); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count, + const char_type* s) + const + { + return substr(pos, count).compare(basic_string_view(s)); + } + + template + inline int basic_string_view::compare(size_type pos, + size_type count1, + const char_type* s, + size_type count2) + const + { + return substr(pos, count1).compare(basic_string_view(s, count2)); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find(basic_string_view v, + size_type pos) + const + { + // Can't find a substring if the substring is bigger than this + if (pos > size()) { + return npos; + } + if ((pos + v.size()) > size()) { + return npos; + } + + const auto offset = pos; + const auto increments = size() - v.size(); + + for (auto i = 0u; i <= increments; ++i) { + const auto j = i + offset; + if (substr(j, v.size()) == v) { + return j; + } + } + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(char_type c, + size_type pos) + const + { + return find(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(const char_type* s, size_type pos, + size_type count) + const + { + return find(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find(const char_type* s, + size_type pos) + const + { + return find(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return v.empty() ? 0u : npos; + } + if (v.empty()) { + return std::min(size() - 1, pos); + } + if (v.size() > size()) { + return npos; + } + + auto i = std::min(pos, (size() - v.size())); + while (i != npos) { + if (substr(i, v.size()) == v) { + return i; + } + --i; + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(char_type c, + size_type pos) + const + { + return rfind(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(const char_type* s, size_type pos, + size_type count) + const + { + return rfind(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::rfind(const char_type* s, + size_type pos) + const + { + return rfind(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(basic_string_view v, + size_type pos) + const + { + const auto max_index = size(); + for (auto i = pos; i < max_index; ++i) { + if (is_one_of(m_str[i],v)) { + return i; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(char_type c, + size_type pos) + const + { + return find_first_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(const char_type* s, size_type pos, + size_type count) + const + { + return find_first_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_of(const char_type* s, + size_type pos) + const + { + return find_first_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return npos; + } + const auto max_index = std::min(size() - 1, pos); + for (auto i = 0u; i <= max_index; ++i) { + const auto j = max_index - i; + + if (is_one_of(m_str[j],v)) { + return j; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(char_type c, + size_type pos) + const + { + return find_last_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(const char_type* s, size_type pos, + size_type count) + const + { + return find_last_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_of(const char_type* s, + size_type pos) + const + { + return find_last_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(basic_string_view v, + size_type pos) + const + { + const auto max_index = size(); + for (auto i = pos; i < max_index; ++i) { + if (!is_one_of(m_str[i],v)) { + return i; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(char_type c, + size_type pos) + const + { + return find_first_not_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(const char_type* s, + size_type pos, + size_type count) + const + { + return find_first_not_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_first_not_of(const char_type* s, + size_type pos) + const + { + return find_first_not_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(basic_string_view v, + size_type pos) + const + { + if (empty()) { + return npos; + } + const auto max_index = std::min(size() - 1, pos); + for (auto i = 0u; i <= max_index; ++i) { + const auto j = max_index - i; + + if (!is_one_of(m_str[j],v)) { + return j; + } + } + + return npos; + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(char_type c, + size_type pos) + const + { + return find_last_not_of(basic_string_view(&c, 1), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(const char_type* s, + size_type pos, + size_type count) + const + { + return find_last_not_of(basic_string_view(s, count), pos); + } + + template + inline typename basic_string_view::size_type + basic_string_view::find_last_not_of(const char_type* s, + size_type pos) + const + { + return find_last_not_of(basic_string_view(s), pos); + } + + //-------------------------------------------------------------------------- + // Iterator + //-------------------------------------------------------------------------- + + template + inline typename basic_string_view::const_iterator + basic_string_view::begin() + const noexcept + { + return m_str; + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::cbegin() + const noexcept + { + return begin(); + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::end() + const noexcept + { + return m_str + m_size; + } + + template + inline typename basic_string_view::const_iterator + basic_string_view::cend() + const noexcept + { + return cend(); + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::rbegin() + const noexcept + { + return const_reverse_iterator{end()}; + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::crbegin() + const noexcept + { + return rbegin(); + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::rend() + const noexcept + { + return const_reverse_iterator{begin()}; + } + + template + inline typename basic_string_view::const_reverse_iterator + basic_string_view::crend() + const noexcept + { + return crend(); + } + + template + inline bool basic_string_view::is_one_of(CharT c, + basic_string_view str) + { + for (auto s : str) { + if (c == s) { + return true; + } + } + return false; + } + + //-------------------------------------------------------------------------- + // Public Functions + //-------------------------------------------------------------------------- + + template + std::basic_ostream& operator<<(std::basic_ostream& o, + const basic_string_view& str) + { + o.write(str.data(),str.size()); + return o; + } + + template + inline void swap(basic_string_view& lhs, + basic_string_view& rhs) + noexcept + { + lhs.swap(rhs); + } + + //-------------------------------------------------------------------------- + // Comparison Functions + //-------------------------------------------------------------------------- + + template + inline bool operator==(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) == 0; + } + + template + inline bool operator==(basic_string_view lhs, + const CharT* rhs) + noexcept + { + return lhs == basic_string_view(rhs); + } + + template + inline bool operator==(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) == rhs; + } + + template + inline bool operator==(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) == rhs; + } + + template + inline bool operator==(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs == basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator!=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) != 0; + } + + template + inline bool operator!=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs != basic_string_view(rhs); + } + + template + inline bool operator!=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) != rhs; + } + + template + inline bool operator!=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) != rhs; + } + + template + inline bool operator!=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs != basic_string_view(rhs); + } + //-------------------------------------------------------------------------- + + template + inline bool operator<(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) < 0; + } + + template + inline bool operator<(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs < basic_string_view(rhs); + } + + template + inline bool operator<(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) < rhs; + } + + template + inline bool operator<(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) < rhs; + } + + template + inline bool operator<(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs < basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator>(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) > 0; + } + + template + inline bool operator>(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs > basic_string_view(rhs); + } + + template + inline bool operator>(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) > rhs; + } + + template + inline bool operator>(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) > rhs; + } + + template + inline bool operator>(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs > basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator<=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) <= 0; + } + + template + inline bool operator<=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs <= basic_string_view(rhs); + } + + template + inline bool operator<=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) <= rhs; + } + + template + inline bool operator<=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) <= rhs; + } + + template + inline bool operator<=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs <= basic_string_view(rhs); + } + + //-------------------------------------------------------------------------- + + template + inline bool operator>=(const basic_string_view& lhs, + const basic_string_view& rhs) + noexcept + { + return lhs.compare(rhs) >= 0; + } + + template + inline bool operator>=(const basic_string_view& lhs, + const CharT* rhs) + noexcept + { + return lhs >= basic_string_view(rhs); + } + + template + inline bool operator>=(const CharT* lhs, + const basic_string_view& rhs) + noexcept + { + return basic_string_view(lhs) >= rhs; + } + + template + inline bool operator>=(const std::basic_string& lhs, + const basic_string_view& rhs) + { + return basic_string_view(lhs) >= rhs; + } + + template + inline bool operator>=(const basic_string_view& lhs, + const std::basic_string& rhs) + { + return lhs >= basic_string_view(rhs); + } + +} // namespace bpstd + +#endif /* BPSTD_DETAIL_STRING_VIEW_INL */ + +#endif /* BPSTD_STRING_VIEW_HPP */ diff --git a/src/Makefile.am b/src/Makefile.am index b8ee0e7d74..1a6f1b88c3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -49,11 +49,13 @@ pkginclude_HEADERS = \ ../headers/modsecurity/rules_set_phases.h \ ../headers/modsecurity/rules_set_properties.h \ ../headers/modsecurity/rules_exceptions.h \ + ../headers/modsecurity/string_view.hpp \ ../headers/modsecurity/transaction.h \ ../headers/modsecurity/variable_origin.h \ ../headers/modsecurity/variable_value.h + libmodsecurity_includesub_collection_HEADERS = \ ../headers/modsecurity/collection/collection.h \ ../headers/modsecurity/collection/collections.h diff --git a/src/anchored_set_variable.cc b/src/anchored_set_variable.cc index 32bddf8801..1ba31b38d2 100644 --- a/src/anchored_set_variable.cc +++ b/src/anchored_set_variable.cc @@ -80,6 +80,36 @@ void AnchoredSetVariable::set(const std::string &key, } +void AnchoredSetVariable::set(const std::string &key, + const bpstd::string_view &value, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + std::string *v = new std::string(value.c_str()); + VariableValue *var = new VariableValue(&m_name, &key, v); + delete v; + + origin->m_offset = offset; + origin->m_length = value.size(); + + var->addOrigin(std::move(origin)); + emplace(key, var); +} + + +void AnchoredSetVariable::set(const std::string &key, + const char *value, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + std::string *v = new std::string(value); + VariableValue *var = new VariableValue(&m_name, &key, v); + delete v; + + origin->m_offset = offset; + origin->m_length = strlen(value); + + var->addOrigin(std::move(origin)); + emplace(key, var); +} + + void AnchoredSetVariable::resolve( std::vector *l) { for (const auto& x : *this) { diff --git a/src/anchored_variable.cc b/src/anchored_variable.cc index 63128bb286..4c3853210c 100644 --- a/src/anchored_variable.cc +++ b/src/anchored_variable.cc @@ -23,6 +23,7 @@ #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/utils/regex.h" +#include "modsecurity/string_view.hpp" namespace modsecurity { @@ -75,6 +76,29 @@ void AnchoredVariable::set(const std::string &a, size_t offset) { } +void AnchoredVariable::set(const char *a, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + + m_offset = offset; + m_value.assign(a, strlen(a)); + origin->m_offset = offset; + origin->m_length = m_value.size(); + m_var->addOrigin(std::move(origin)); +} + + +void AnchoredVariable::set(const bpstd::string_view &a, size_t offset) { + std::unique_ptr origin(new VariableOrigin()); + + m_offset = offset; + m_value.assign(a.c_str(), a.size()); + origin->m_offset = offset; + origin->m_length = m_value.size(); + + m_var->addOrigin(std::move(origin)); +} + + void AnchoredVariable::append(const std::string &a, size_t offset, bool spaceSeparator) { std::unique_ptr origin( diff --git a/src/engine/lua.cc b/src/engine/lua.cc index e8525d1311..a28e6b76bf 100644 --- a/src/engine/lua.cc +++ b/src/engine/lua.cc @@ -444,12 +444,12 @@ std::string Lua::applyTransformations(lua_State *L, Transaction *t, in.assign(newVar.c_str(), newVar.size()); tfn->execute(t, in, out); newVar.assign(out.c_str(), out.size()); + delete tfn; } else { ms_dbg_a(t, 1, "SecRuleScript: Invalid transformation function: " \ + std::string(name)); } - delete tfn; } return newVar; diff --git a/src/operators/begins_with.cc b/src/operators/begins_with.cc index 7cf8909dbc..09571b701f 100644 --- a/src/operators/begins_with.cc +++ b/src/operators/begins_with.cc @@ -24,8 +24,10 @@ namespace modsecurity { namespace operators { -bool BeginsWith::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, RuleMessage *ruleMessage) { +bool BeginsWith::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); if (str.size() < p.size()) { diff --git a/src/operators/begins_with.h b/src/operators/begins_with.h index db8755ca3d..58bb7512a3 100644 --- a/src/operators/begins_with.h +++ b/src/operators/begins_with.h @@ -32,7 +32,9 @@ class BeginsWith : public Operator { explicit BeginsWith(std::unique_ptr param) : Operator("BeginsWith", std::move(param)) { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, const std::string &str, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; }; diff --git a/src/operators/contains.cc b/src/operators/contains.cc index 828e7ac637..15e61ab56f 100644 --- a/src/operators/contains.cc +++ b/src/operators/contains.cc @@ -21,10 +21,12 @@ namespace modsecurity { namespace operators { -bool Contains::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, RuleMessage *ruleMessage) { +bool Contains::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - size_t offset = input.find(p); + size_t offset = input.to_string().find(p); bool contains = offset != std::string::npos; diff --git a/src/operators/contains.h b/src/operators/contains.h index 0144e418d4..505f8a1e14 100644 --- a/src/operators/contains.h +++ b/src/operators/contains.h @@ -33,9 +33,11 @@ class Contains : public Operator { public: /** @ingroup ModSecurity_Operator */ explicit Contains(std::unique_ptr param) - : Operator("Contains", std::move(param)) { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, + : Operator("Contains", std::move(param)) { }; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; }; diff --git a/src/operators/contains_word.cc b/src/operators/contains_word.cc index b691d62e0a..2a5d7ab964 100644 --- a/src/operators/contains_word.cc +++ b/src/operators/contains_word.cc @@ -23,7 +23,7 @@ namespace modsecurity { namespace operators { -bool ContainsWord::acceptableChar(const std::string& a, size_t pos) { +bool ContainsWord::acceptableChar(const bpstd::string_view &a, size_t pos) { if (a.size() - 1 < pos) { return false; } @@ -36,37 +36,40 @@ bool ContainsWord::acceptableChar(const std::string& a, size_t pos) { return true; } -bool ContainsWord::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, RuleMessage *ruleMessage) { +bool ContainsWord::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &inputView, + RuleMessage *ruleMessage) { std::string paramTarget(m_string->evaluate(transaction)); + std::string input = inputView.to_string(); if (paramTarget.empty()) { return true; } - if (str.empty()) { + if (input.empty()) { return false; } - if (str == paramTarget) { + if (input == paramTarget) { return true; } - size_t pos = str.find(paramTarget); + size_t pos = input.find(paramTarget); while (pos != std::string::npos) { - if (pos == 0 && acceptableChar(str, paramTarget.size())) { + if (pos == 0 && acceptableChar(input, paramTarget.size())) { logOffset(ruleMessage, 0, paramTarget.size()); return true; } - if (pos + paramTarget.size() == str.size() && - acceptableChar(str, pos - 1)) { + if (pos + paramTarget.size() == input.size() && + acceptableChar(input, pos - 1)) { logOffset(ruleMessage, pos, paramTarget.size()); return true; } - if (acceptableChar(str, pos - 1) && - acceptableChar(str, pos + paramTarget.size())) { + if (acceptableChar(input, pos - 1) && + acceptableChar(input, pos + paramTarget.size())) { logOffset(ruleMessage, pos, paramTarget.size()); return true; } - pos = str.find(paramTarget, pos + 1); + pos = input.find(paramTarget, pos + 1); } return false; diff --git a/src/operators/contains_word.h b/src/operators/contains_word.h index 20ee3ff87c..30177bf3bc 100644 --- a/src/operators/contains_word.h +++ b/src/operators/contains_word.h @@ -32,12 +32,13 @@ class ContainsWord : public Operator { explicit ContainsWord(std::unique_ptr param) : Operator("ContainsWord", std::move(param)) { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; private: - static bool acceptableChar(const std::string& a, size_t pos); + static bool acceptableChar(const bpstd::string_view &a, size_t pos); }; } // namespace operators diff --git a/src/operators/detect_sqli.cc b/src/operators/detect_sqli.cc index 68b51c4887..29d43a3c16 100644 --- a/src/operators/detect_sqli.cc +++ b/src/operators/detect_sqli.cc @@ -27,31 +27,33 @@ namespace modsecurity { namespace operators { -bool DetectSQLi::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, RuleMessage *ruleMessage) { +bool DetectSQLi::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { char fingerprint[8]; int issqli; issqli = libinjection_sqli(input.c_str(), input.length(), fingerprint); - if (!t) { + if (!transaction) { goto tisempty; } if (issqli) { - t->m_matched.push_back(fingerprint); - ms_dbg_a(t, 4, "detected SQLi using libinjection with " \ + transaction->m_matched.push_back(fingerprint); + ms_dbg_a(transaction, 4, "detected SQLi using libinjection with " \ "fingerprint '" + std::string(fingerprint) + "' at: '" + - input + "'"); + input.to_string() + "'"); if (rule && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", std::string(fingerprint)); - ms_dbg_a(t, 7, "Added DetectSQLi match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added DetectSQLi match TX.0: " + \ std::string(fingerprint)); } } else { - ms_dbg_a(t, 9, "detected SQLi: not able to find an " \ - "inject on '" + input + "'"); + ms_dbg_a(transaction, 9, "detected SQLi: not able to find an " \ + "inject on '" + input.to_string() + "'"); } tisempty: diff --git a/src/operators/detect_sqli.h b/src/operators/detect_sqli.h index 9ab7a7c169..a7df9deded 100644 --- a/src/operators/detect_sqli.h +++ b/src/operators/detect_sqli.h @@ -32,8 +32,9 @@ class DetectSQLi : public Operator { m_match_message.assign("detected SQLi using libinjection."); } - bool evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; }; diff --git a/src/operators/detect_xss.cc b/src/operators/detect_xss.cc index 38341ae3ac..7bc3c9ebfd 100644 --- a/src/operators/detect_xss.cc +++ b/src/operators/detect_xss.cc @@ -26,24 +26,26 @@ namespace modsecurity { namespace operators { -bool DetectXSS::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, RuleMessage *ruleMessage) { +bool DetectXSS::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { int is_xss; is_xss = libinjection_xss(input.c_str(), input.length()); - if (t) { + if (transaction) { if (is_xss) { - ms_dbg_a(t, 5, "detected XSS using libinjection."); + ms_dbg_a(transaction, 5, "detected XSS using libinjection."); if (rule && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", std::string(input)); - ms_dbg_a(t, 7, "Added DetectXSS match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added DetectXSS match TX.0: " + \ std::string(input)); } } else { - ms_dbg_a(t, 9, "libinjection was not able to " \ - "find any XSS in: " + input); + ms_dbg_a(transaction, 9, "libinjection was not able to " \ + "find any XSS in: " + input.to_string()); } } return is_xss != 0; diff --git a/src/operators/detect_xss.h b/src/operators/detect_xss.h index 16bddb2299..1f4f033948 100644 --- a/src/operators/detect_xss.h +++ b/src/operators/detect_xss.h @@ -31,8 +31,9 @@ class DetectXSS : public Operator { m_match_message.assign("detected XSS using libinjection."); } - bool evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; }; diff --git a/src/operators/ends_with.cc b/src/operators/ends_with.cc index 125fef6a44..d8c36fd4ea 100644 --- a/src/operators/ends_with.cc +++ b/src/operators/ends_with.cc @@ -23,16 +23,18 @@ namespace modsecurity { namespace operators { -bool EndsWith::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, RuleMessage *ruleMessage) { +bool EndsWith::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { bool ret = false; std::string p(m_string->evaluate(transaction)); - if (str.length() >= p.length()) { - ret = (0 == str.compare(str.length() - p.length(), + if (input.length() >= p.length()) { + ret = (0 == input.compare(input.length() - p.length(), p.length(), p)); if (ret) { - logOffset(ruleMessage, str.length() - p.length(), + logOffset(ruleMessage, input.length() - p.length(), p.size()); } } diff --git a/src/operators/ends_with.h b/src/operators/ends_with.h index 1fd555955b..c376f49c32 100644 --- a/src/operators/ends_with.h +++ b/src/operators/ends_with.h @@ -33,8 +33,10 @@ class EndsWith : public Operator { : Operator("EndsWith", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; }; diff --git a/src/operators/eq.cc b/src/operators/eq.cc index 473356d303..7513b73bfe 100644 --- a/src/operators/eq.cc +++ b/src/operators/eq.cc @@ -24,7 +24,10 @@ namespace modsecurity { namespace operators { -bool Eq::evaluate(Transaction *transaction, const std::string &input) { +bool Eq::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { int p = 0; int i = 0; std::string pt(m_string->evaluate(transaction)); @@ -35,7 +38,7 @@ bool Eq::evaluate(Transaction *transaction, const std::string &input) { p = 0; } try { - i = std::stoi(input); + i = std::stoi(input.c_str()); } catch (...) { i = 0; } diff --git a/src/operators/eq.h b/src/operators/eq.h index 02494f6f92..578e0796a6 100644 --- a/src/operators/eq.h +++ b/src/operators/eq.h @@ -31,7 +31,11 @@ class Eq : public Operator { /** @ingroup ModSecurity_Operator */ explicit Eq(std::unique_ptr param) : Operator("Eq", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &input) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/fuzzy_hash.cc b/src/operators/fuzzy_hash.cc index df31a98c2b..f4c1359418 100644 --- a/src/operators/fuzzy_hash.cc +++ b/src/operators/fuzzy_hash.cc @@ -96,21 +96,24 @@ FuzzyHash::~FuzzyHash() { } -bool FuzzyHash::evaluate(Transaction *t, const std::string &str) { +bool FuzzyHash::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { #ifdef WITH_SSDEEP char result[FUZZY_MAX_RESULT]; struct fuzzy_hash_chunk *chunk = m_head; if (fuzzy_hash_buf((const unsigned char*)str.c_str(), str.size(), result)) { - ms_dbg_a(t, 4, "Problems generating fuzzy hash"); + ms_dbg_a(transaction, 4, "Problems generating fuzzy hash"); return false; } while (chunk != NULL) { int i = fuzzy_compare(chunk->data, result); if (i >= m_threshold) { - ms_dbg_a(t, 4, "Fuzzy hash: matched " \ + ms_dbg_a(transaction, 4, "Fuzzy hash: matched " \ "with score: " + std::to_string(i) + "."); return true; } diff --git a/src/operators/fuzzy_hash.h b/src/operators/fuzzy_hash.h index b555eff55f..d007906b39 100644 --- a/src/operators/fuzzy_hash.h +++ b/src/operators/fuzzy_hash.h @@ -44,9 +44,12 @@ class FuzzyHash : public Operator { m_head(NULL) { } ~FuzzyHash(); - bool evaluate(Transaction *transaction, const std::string &std) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; - bool init(const std::string ¶m, std::string *error) override; + bool init(const std::string &file, std::string *error) override; private: int m_threshold; struct fuzzy_hash_chunk *m_head; diff --git a/src/operators/ge.cc b/src/operators/ge.cc index 2a3b39ec8c..acd0333418 100644 --- a/src/operators/ge.cc +++ b/src/operators/ge.cc @@ -23,11 +23,13 @@ namespace modsecurity { namespace operators { -bool Ge::evaluate(Transaction *transaction, const std::string &input) { +bool Ge::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - std::string i = input; - bool ge = atoll(i.c_str()) >= atoll(p.c_str()); + bool ge = atoll(str.c_str()) >= atoll(p.c_str()); return ge; } diff --git a/src/operators/ge.h b/src/operators/ge.h index 4830e91ea1..6716f3d408 100644 --- a/src/operators/ge.h +++ b/src/operators/ge.h @@ -32,7 +32,11 @@ class Ge : public Operator { : Operator("Ge", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/geo_lookup.cc b/src/operators/geo_lookup.cc index 5717b7afb3..c79591fb83 100644 --- a/src/operators/geo_lookup.cc +++ b/src/operators/geo_lookup.cc @@ -34,16 +34,19 @@ namespace modsecurity { namespace operators { -bool GeoLookup::evaluate(Transaction *trans, const std::string &exp) { +bool GeoLookup::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { using std::placeholders::_1; using std::placeholders::_2; bool ret = true; - if (trans) { - ret = Utils::GeoLookup::getInstance().lookup(exp, trans, - std::bind(&GeoLookup::debug, this, trans, _1, _2)); + if (transaction) { + ret = Utils::GeoLookup::getInstance().lookup(str.c_str(), transaction, + std::bind(&GeoLookup::debug, this, transaction, _1, _2)); } else { - ret = Utils::GeoLookup::getInstance().lookup(exp, NULL, + ret = Utils::GeoLookup::getInstance().lookup(str.c_str(), NULL, nullptr); } diff --git a/src/operators/geo_lookup.h b/src/operators/geo_lookup.h index e019378259..ffbbacd238 100644 --- a/src/operators/geo_lookup.h +++ b/src/operators/geo_lookup.h @@ -29,11 +29,15 @@ class GeoLookup : public Operator { /** @ingroup ModSecurity_Operator */ GeoLookup() : Operator("GeoLookup") { } - bool evaluate(Transaction *transaction, const std::string &exp) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; protected: - bool debug(Transaction *transaction, int x, const std::string &a) { - ms_dbg_a(transaction, x, a); + bool debug(Transaction *transaction, int x, const bpstd::string_view &str) { + ms_dbg_a(transaction, x, str.to_string()); return true; } }; diff --git a/src/operators/gsblookup.cc b/src/operators/gsblookup.cc index ca934b4777..98eaefba26 100644 --- a/src/operators/gsblookup.cc +++ b/src/operators/gsblookup.cc @@ -23,7 +23,10 @@ namespace modsecurity { namespace operators { -bool GsbLookup::evaluate(Transaction *transaction, const std::string &str) { +bool GsbLookup::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { /** * @todo Implement the operator GeoLookup. * Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#gsblookup diff --git a/src/operators/gsblookup.h b/src/operators/gsblookup.h index 63c32ae2eb..c25a445e68 100644 --- a/src/operators/gsblookup.h +++ b/src/operators/gsblookup.h @@ -31,7 +31,10 @@ class GsbLookup : public Operator { explicit GsbLookup(std::unique_ptr param) : Operator("GsbLookup", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/gt.cc b/src/operators/gt.cc index 47bb2fb78c..edbbc03eef 100644 --- a/src/operators/gt.cc +++ b/src/operators/gt.cc @@ -23,10 +23,13 @@ namespace modsecurity { namespace operators { -bool Gt::evaluate(Transaction *transaction, const std::string &input) { +bool Gt::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool gt = atoll(input.c_str()) > atoll(p.c_str()); + bool gt = atoll(str.c_str()) > atoll(p.c_str()); return gt; } diff --git a/src/operators/gt.h b/src/operators/gt.h index 0e80853f9f..969f8259e1 100644 --- a/src/operators/gt.h +++ b/src/operators/gt.h @@ -33,7 +33,11 @@ class Gt : public Operator { : Operator("Gt", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/inspect_file.cc b/src/operators/inspect_file.cc index 9ce43af0d8..2d2cd9638e 100644 --- a/src/operators/inspect_file.cc +++ b/src/operators/inspect_file.cc @@ -49,9 +49,12 @@ bool InspectFile::init(const std::string ¶m2, std::string *error) { } -bool InspectFile::evaluate(Transaction *transaction, const std::string &str) { +bool InspectFile::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { if (m_isScript) { - return m_lua.run(transaction, str); + return m_lua.run(transaction, str.c_str()); } else { FILE *in; char buff[512]; @@ -61,7 +64,7 @@ bool InspectFile::evaluate(Transaction *transaction, const std::string &str) { openstr.append(m_param); openstr.append(" "); - openstr.append(str); + openstr.append(str.c_str()); if (!(in = popen(openstr.c_str(), "r"))) { return false; } diff --git a/src/operators/inspect_file.h b/src/operators/inspect_file.h index e398eb30c1..7b1f16f2a3 100644 --- a/src/operators/inspect_file.h +++ b/src/operators/inspect_file.h @@ -35,8 +35,13 @@ class InspectFile : public Operator { m_file(""), m_isScript(false) { } - bool init(const std::string ¶m, std::string *error) override; - bool evaluate(Transaction *transaction, const std::string &str) override; + bool init(const std::string &file, std::string *error) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + private: std::string m_file; bool m_isScript; diff --git a/src/operators/ip_match.cc b/src/operators/ip_match.cc index 35a993fbee..9a739507c4 100644 --- a/src/operators/ip_match.cc +++ b/src/operators/ip_match.cc @@ -37,8 +37,11 @@ bool IpMatch::init(const std::string &file, std::string *error) { } -bool IpMatch::evaluate(Transaction *transaction, const std::string &input) { - return m_tree.contains(input); +bool IpMatch::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { + return m_tree.contains(str.c_str()); } diff --git a/src/operators/ip_match.h b/src/operators/ip_match.h index b0c080c755..72d55e2e7e 100644 --- a/src/operators/ip_match.h +++ b/src/operators/ip_match.h @@ -34,7 +34,10 @@ class IpMatch : public Operator { IpMatch(const std::string &n, std::unique_ptr param) : Operator(n, std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/le.cc b/src/operators/le.cc index e448a383fe..fe9c96daf0 100644 --- a/src/operators/le.cc +++ b/src/operators/le.cc @@ -23,10 +23,13 @@ namespace modsecurity { namespace operators { -bool Le::evaluate(Transaction *transaction, const std::string &input) { +bool Le::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool le = atoll(input.c_str()) <= atoll(p.c_str()); + bool le = atoll(str.c_str()) <= atoll(p.c_str()); return le; } diff --git a/src/operators/le.h b/src/operators/le.h index 2549112ec2..f9ecd7e501 100644 --- a/src/operators/le.h +++ b/src/operators/le.h @@ -34,7 +34,10 @@ class Le : public Operator { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; diff --git a/src/operators/lt.cc b/src/operators/lt.cc index 2cb05c6cfa..715898a28f 100644 --- a/src/operators/lt.cc +++ b/src/operators/lt.cc @@ -22,10 +22,13 @@ namespace modsecurity { namespace operators { -bool Lt::evaluate(Transaction *transaction, const std::string &input) { +bool Lt::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool lt = atoll(input.c_str()) < atoll(p.c_str()); + bool lt = atoll(str.c_str()) < atoll(p.c_str()); return lt; } diff --git a/src/operators/lt.h b/src/operators/lt.h index aa5c4b82d3..d83f03dddc 100644 --- a/src/operators/lt.h +++ b/src/operators/lt.h @@ -34,7 +34,10 @@ class Lt : public Operator { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/no_match.cc b/src/operators/no_match.cc index 4509bf5fa4..3fcb77c757 100644 --- a/src/operators/no_match.cc +++ b/src/operators/no_match.cc @@ -20,7 +20,10 @@ namespace modsecurity { namespace operators { -bool NoMatch::evaluate(Transaction *transaction, const std::string &str) { +bool NoMatch::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { return false; } diff --git a/src/operators/no_match.h b/src/operators/no_match.h index e6012cb3ac..b872810556 100644 --- a/src/operators/no_match.h +++ b/src/operators/no_match.h @@ -32,7 +32,10 @@ class NoMatch : public Operator { NoMatch() : Operator("NoMatch") { } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/operator.cc b/src/operators/operator.cc index 2aaa143afb..b45d0035c9 100644 --- a/src/operators/operator.cc +++ b/src/operators/operator.cc @@ -71,7 +71,7 @@ namespace operators { bool Operator::evaluateInternal(Transaction *transaction, - RuleWithActions *rule, const std::string& a, RuleMessage *rm) { + RuleWithActions *rule, const bpstd::string_view &a, RuleMessage *rm) { bool res = evaluate(transaction, rule, a, rm); if (m_negation) { @@ -81,28 +81,6 @@ bool Operator::evaluateInternal(Transaction *transaction, return res; } -bool Operator::evaluateInternal(Transaction *transaction, - RuleWithActions *rule, const std::string& a) { - bool res = evaluate(transaction, rule, a); - - if (m_negation) { - return !res; - } - - return res; -} - -bool Operator::evaluateInternal(Transaction *transaction, - const std::string& a) { - bool res = evaluate(transaction, a); - - if (m_negation) { - return !res; - } - - return res; -} - std::string Operator::resolveMatchMessage(Transaction *t, std::string key, std::string value) { @@ -132,7 +110,10 @@ std::string Operator::resolveMatchMessage(Transaction *t, } -bool Operator::evaluate(Transaction *transaction, const std::string& a) { +bool Operator::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { ms_dbg_a(transaction, 2, "Operator: " + m_op + \ " is not implemented or malfunctioning."); return true; diff --git a/src/operators/operator.h b/src/operators/operator.h index 444377942e..405567e609 100644 --- a/src/operators/operator.h +++ b/src/operators/operator.h @@ -24,6 +24,7 @@ #include "modsecurity/rule.h" #include "modsecurity/rule_message.h" #include "src/run_time_string.h" +#include "modsecurity/string_view.hpp" namespace modsecurity { namespace operators { @@ -107,25 +108,16 @@ class Operator { return true; } - virtual std::string resolveMatchMessage(Transaction *t, - std::string key, std::string value); - - bool evaluateInternal(Transaction *t, const std::string& a); - bool evaluateInternal(Transaction *t, RuleWithActions *rule, - const std::string& a); - bool evaluateInternal(Transaction *t, RuleWithActions *rule, - const std::string& a, RuleMessage *ruleMessage); + bool evaluateInternal(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view& a, + RuleMessage *ruleMessage); + virtual bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage); - virtual bool evaluate(Transaction *transaction, const std::string &str); - virtual bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str) { - return evaluate(transaction, str); - } - virtual bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, RuleMessage *ruleMessage) { - return evaluate(transaction, str); - } static void logOffset(RuleMessage *ruleMessage, int offset, int len) { if (ruleMessage) { @@ -135,6 +127,10 @@ class Operator { } } + virtual std::string resolveMatchMessage(Transaction *t, + std::string key, std::string value); + + std::string m_match_message; bool m_negation; std::string m_op; diff --git a/src/operators/pm.cc b/src/operators/pm.cc index 0e24abc6dd..412c598570 100644 --- a/src/operators/pm.cc +++ b/src/operators/pm.cc @@ -83,8 +83,10 @@ void Pm::postOrderTraversal(acmp_btree_node_t *node) { } -bool Pm::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, RuleMessage *ruleMessage) { +bool Pm::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { int rc = -1; ACMPT pt; pt.parser = m_p; @@ -93,7 +95,7 @@ bool Pm::evaluate(Transaction *transaction, RuleWithActions *rule, #ifdef MODSEC_MUTEX_ON_PM pthread_mutex_lock(&m_lock); #endif - rc = acmp_process_quick(&pt, &match, input.c_str(), input.length()); + rc = acmp_process_quick(&pt, &match, str.c_str(), str.length()); #ifdef MODSEC_MUTEX_ON_PM pthread_mutex_unlock(&m_lock); #endif diff --git a/src/operators/pm.h b/src/operators/pm.h index 34ff688ad4..b34cf1c74e 100644 --- a/src/operators/pm.h +++ b/src/operators/pm.h @@ -41,8 +41,10 @@ class Pm : public Operator { m_p = acmp_create(0); } ~Pm(); - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; diff --git a/src/operators/pm_from_file.cc b/src/operators/pm_from_file.cc index f70677cdc6..097e901f94 100644 --- a/src/operators/pm_from_file.cc +++ b/src/operators/pm_from_file.cc @@ -56,7 +56,7 @@ bool PmFromFile::init(const std::string &config, std::string *error) { iss = new std::stringstream(client.content); } else { std::string err; - std::string resource = utils::find_resource(m_param, config, &err); + std::string resource = utils::find_resource(m_param, config.c_str(), &err); iss = new std::ifstream(resource, std::ios::in); if (((std::ifstream *)iss)->is_open() == false) { diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index ecc484eb84..19f7cdd545 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -202,11 +202,12 @@ void Rbl::furtherInfo(struct sockaddr_in *sin, const std::string &ipStr, } -bool Rbl::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& ipStr, - RuleMessage *ruleMessage) { +bool Rbl::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { struct addrinfo *info = NULL; - std::string host = Rbl::mapIpToAddress(ipStr, t); + std::string host = Rbl::mapIpToAddress(str.c_str(), transaction); int rc = 0; if (host.empty()) { @@ -219,20 +220,20 @@ bool Rbl::evaluate(Transaction *t, RuleWithActions *rule, if (info != NULL) { freeaddrinfo(info); } - ms_dbg_a(t, 5, "RBL lookup of " + ipStr + " failed."); + ms_dbg_a(transaction, 5, "RBL lookup of " + str.to_string() + " failed."); return false; } struct sockaddr *addr = info->ai_addr; struct sockaddr_in *sin = (struct sockaddr_in *) addr; - furtherInfo(sin, ipStr, t, m_provider); + furtherInfo(sin, str.c_str(), transaction, m_provider); freeaddrinfo(info); - if (rule && t && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( - "0", std::string(ipStr)); - ms_dbg_a(t, 7, "Added RXL match TX.0: " + \ - std::string(ipStr)); + if (rule && transaction && rule->hasCaptureAction()) { + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( + "0", std::string(str)); + ms_dbg_a(transaction, 7, "Added RXL match TX.0: " + \ + std::string(str)); } return true; diff --git a/src/operators/rbl.h b/src/operators/rbl.h index eb25c56b5f..74a32db644 100644 --- a/src/operators/rbl.h +++ b/src/operators/rbl.h @@ -76,8 +76,10 @@ class Rbl : public Operator { m_provider = RblProvider::httpbl; } } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; std::string mapIpToAddress(const std::string &ipStr, Transaction *trans) const; diff --git a/src/operators/rsub.cc b/src/operators/rsub.cc index d310185b73..979117febb 100644 --- a/src/operators/rsub.cc +++ b/src/operators/rsub.cc @@ -23,7 +23,10 @@ namespace modsecurity { namespace operators { -bool Rsub::evaluate(Transaction *transaction, const std::string &str) { +bool Rsub::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { /** * @todo Implement the operator Rsub. * Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#rsub diff --git a/src/operators/rsub.h b/src/operators/rsub.h index 15c80085a2..84981a7356 100644 --- a/src/operators/rsub.h +++ b/src/operators/rsub.h @@ -32,7 +32,11 @@ class Rsub : public Operator { /** @ingroup ModSecurity_Operator */ explicit Rsub(std::unique_ptr param) : Operator("Rsub", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; diff --git a/src/operators/rx.cc b/src/operators/rx.cc index a0957824e3..7183707911 100644 --- a/src/operators/rx.cc +++ b/src/operators/rx.cc @@ -29,7 +29,7 @@ namespace modsecurity { namespace operators { -bool Rx::init(const std::string &arg, std::string *error) { +bool Rx::init(const std::string &file, std::string *error) { if (m_string->m_containsMacro == false) { m_re = new Regex(m_param); } @@ -38,8 +38,10 @@ bool Rx::init(const std::string &arg, std::string *error) { } -bool Rx::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, RuleMessage *ruleMessage) { +bool Rx::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { Regex *re; if (m_param.empty() && !m_string->m_containsMacro) { @@ -54,8 +56,8 @@ bool Rx::evaluate(Transaction *transaction, RuleWithActions *rule, } std::vector captures; - re->searchOneMatch(input, captures); - + // FIXME: searchOneMatch should accept string_view. + re->searchOneMatch(input.c_str(), captures); if (rule && rule->hasCaptureAction() && transaction) { for (const Utils::SMatchCapture& capture : captures) { const std::string capture_substring(input.substr(capture.m_offset,capture.m_length)); diff --git a/src/operators/rx.h b/src/operators/rx.h index 3fee464ad0..874ec1f728 100644 --- a/src/operators/rx.h +++ b/src/operators/rx.h @@ -49,11 +49,12 @@ class Rx : public Operator { } } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; - bool init(const std::string &arg, std::string *error) override; + bool init(const std::string &file, std::string *error) override; private: Regex *m_re; diff --git a/src/operators/rx_global.cc b/src/operators/rx_global.cc index 052c07922d..c0c4cee8c3 100644 --- a/src/operators/rx_global.cc +++ b/src/operators/rx_global.cc @@ -37,7 +37,7 @@ bool RxGlobal::init(const std::string &arg, std::string *error) { bool RxGlobal::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, RuleMessage *ruleMessage) { + const bpstd::string_view& input, RuleMessage *ruleMessage) { Regex *re; if (m_param.empty() && !m_string->m_containsMacro) { @@ -52,7 +52,7 @@ bool RxGlobal::evaluate(Transaction *transaction, RuleWithActions *rule, } std::vector captures; - re->searchGlobal(input, captures); + re->searchGlobal(input.c_str(), captures); if (rule && rule->hasCaptureAction() && transaction) { for (const Utils::SMatchCapture& capture : captures) { diff --git a/src/operators/rx_global.h b/src/operators/rx_global.h index f608773cb0..a508d34f61 100644 --- a/src/operators/rx_global.h +++ b/src/operators/rx_global.h @@ -50,7 +50,7 @@ class RxGlobal : public Operator { } bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, + const bpstd::string_view& input, RuleMessage *ruleMessage) override; bool init(const std::string &arg, std::string *error) override; diff --git a/src/operators/str_eq.cc b/src/operators/str_eq.cc index 13c0368823..160c4196fe 100644 --- a/src/operators/str_eq.cc +++ b/src/operators/str_eq.cc @@ -20,9 +20,12 @@ namespace modsecurity { namespace operators { -bool StrEq::evaluate(Transaction *transaction, const std::string &str) { +bool StrEq::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string pt(m_string->evaluate(transaction)); - return !pt.compare(str); + return !pt.compare(str.to_string()); } diff --git a/src/operators/str_eq.h b/src/operators/str_eq.h index 10f38e3c25..0510439197 100644 --- a/src/operators/str_eq.h +++ b/src/operators/str_eq.h @@ -34,7 +34,10 @@ class StrEq : public Operator { explicit StrEq(std::unique_ptr param) : Operator("StrEq", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/str_match.cc b/src/operators/str_match.cc index ce7dfb2b92..51a2bb28c7 100644 --- a/src/operators/str_match.cc +++ b/src/operators/str_match.cc @@ -24,9 +24,12 @@ namespace modsecurity { namespace operators { -bool StrMatch::evaluate(Transaction *transaction, const std::string &input) { +bool StrMatch::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { std::string p(m_string->evaluate(transaction)); - bool ret = input.find(p) != std::string::npos; + bool ret = str.find(p) != std::string::npos; return ret; } diff --git a/src/operators/str_match.h b/src/operators/str_match.h index 4f77532f29..07a25e56a2 100644 --- a/src/operators/str_match.h +++ b/src/operators/str_match.h @@ -34,7 +34,10 @@ class StrMatch : public Operator { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, const std::string &input) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/unconditional_match.cc b/src/operators/unconditional_match.cc index b79275d234..e68630b6bf 100644 --- a/src/operators/unconditional_match.cc +++ b/src/operators/unconditional_match.cc @@ -19,7 +19,9 @@ namespace modsecurity { namespace operators { bool UnconditionalMatch::evaluate(Transaction *transaction, - const std::string &input) { + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { return true; } diff --git a/src/operators/unconditional_match.h b/src/operators/unconditional_match.h index a54c768272..fafafa3ca2 100644 --- a/src/operators/unconditional_match.h +++ b/src/operators/unconditional_match.h @@ -31,7 +31,10 @@ class UnconditionalMatch : public Operator { UnconditionalMatch() : Operator("UnconditionalMatch") { } - bool evaluate(Transaction *transaction, const std::string &exp) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/validate_byte_range.cc b/src/operators/validate_byte_range.cc index 8ab58538ad..b1a68d2a88 100644 --- a/src/operators/validate_byte_range.cc +++ b/src/operators/validate_byte_range.cc @@ -23,7 +23,7 @@ namespace modsecurity { namespace operators { -bool ValidateByteRange::getRange(const std::string &rangeRepresentation, +bool ValidateByteRange::getRange(const bpstd::string_view &rangeRepresentation, std::string *error) { size_t pos = rangeRepresentation.find_first_of("-"); int start; @@ -31,9 +31,10 @@ bool ValidateByteRange::getRange(const std::string &rangeRepresentation, if (pos == std::string::npos) { try { - start = std::stoi(rangeRepresentation); + start = std::stoi(rangeRepresentation.c_str()); } catch(...) { - error->assign("Not able to convert '" + rangeRepresentation + + error->assign("Not able to convert '" + \ + rangeRepresentation.to_string() + "' into a number"); return false; } @@ -42,19 +43,19 @@ bool ValidateByteRange::getRange(const std::string &rangeRepresentation, } try { - start = std::stoi(std::string(rangeRepresentation, 0, pos)); + start = std::stoi(std::string(rangeRepresentation.c_str(), 0, pos)); } catch (...) { error->assign("Not able to convert '" + - std::string(rangeRepresentation, 0, pos) + + std::string(rangeRepresentation.c_str(), 0, pos) + "' into a number"); return false; } try { - end = std::stoi(std::string(rangeRepresentation, pos + 1, + end = std::stoi(std::string(rangeRepresentation.c_str(), pos + 1, rangeRepresentation.length() - (pos + 1))); } catch (...) { - error->assign("Not able to convert '" + std::string(rangeRepresentation, + error->assign("Not able to convert '" + std::string(rangeRepresentation.c_str(), pos + 1, rangeRepresentation.length() - (pos + 1)) + "' into a number"); return false; @@ -110,16 +111,18 @@ bool ValidateByteRange::init(const std::string &file, } -bool ValidateByteRange::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, RuleMessage *ruleMessage) { +bool ValidateByteRange::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { bool ret = true; size_t count = 0; - for (int i = 0; i < input.length(); i++) { - int x = (unsigned char) input.at(i); + for (int i = 0; i < str.length(); i++) { + int x = (unsigned char) str.at(i); if (!(table[x >> 3] & (1 << (x & 0x7)))) { // debug(9, "Value " + std::to_string(x) + " in " + - // input + " ouside range: " + param); + // str + " ouside range: " + param); logOffset(ruleMessage, i, 1); count++; } diff --git a/src/operators/validate_byte_range.h b/src/operators/validate_byte_range.h index da053783cf..fbcf70149c 100644 --- a/src/operators/validate_byte_range.h +++ b/src/operators/validate_byte_range.h @@ -37,10 +37,12 @@ class ValidateByteRange : public Operator { } ~ValidateByteRange() override { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; - bool getRange(const std::string &rangeRepresentation, std::string *error); + + bool getRange(const bpstd::string_view &rangeRepresentation, std::string *error); bool init(const std::string& file, std::string *error) override; private: std::vector ranges; diff --git a/src/operators/validate_dtd.cc b/src/operators/validate_dtd.cc index f57dbed3a5..7d3d0c77f4 100644 --- a/src/operators/validate_dtd.cc +++ b/src/operators/validate_dtd.cc @@ -43,25 +43,28 @@ bool ValidateDTD::init(const std::string &file, std::string *error) { } -bool ValidateDTD::evaluate(Transaction *t, const std::string &str) { +bool ValidateDTD::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { xmlValidCtxtPtr cvp; m_dtd = xmlParseDTD(NULL, (const xmlChar *)m_resource.c_str()); if (m_dtd == NULL) { std::string err = std::string("XML: Failed to load DTD: ") \ + m_resource; - ms_dbg_a(t, 4, err); + ms_dbg_a(transaction, 4, err); return true; } - if (t->m_xml->m_data.doc == NULL) { - ms_dbg_a(t, 4, "XML document tree could not "\ + if (transaction->m_xml->m_data.doc == NULL) { + ms_dbg_a(transaction, 4, "XML document tree could not "\ "be found for DTD validation."); return true; } - if (t->m_xml->m_data.well_formed != 1) { - ms_dbg_a(t, 4, "XML: DTD validation failed because " \ + if (transaction->m_xml->m_data.well_formed != 1) { + ms_dbg_a(transaction, 4, "XML: DTD validation failed because " \ "content is not well formed."); return true; } @@ -78,22 +81,23 @@ bool ValidateDTD::evaluate(Transaction *t, const std::string &str) { cvp = xmlNewValidCtxt(); if (cvp == NULL) { - ms_dbg_a(t, 4, "XML: Failed to create a validation context."); + ms_dbg_a(transaction, 4, + "XML: Failed to create a validation context."); return true; } /* Send validator errors/warnings to msr_log */ cvp->error = (xmlSchemaValidityErrorFunc)error_runtime; cvp->warning = (xmlSchemaValidityErrorFunc)warn_runtime; - cvp->userData = t; + cvp->userData = transaction; - if (!xmlValidateDtd(cvp, t->m_xml->m_data.doc, m_dtd)) { - ms_dbg_a(t, 4, "XML: DTD validation failed."); + if (!xmlValidateDtd(cvp, transaction->m_xml->m_data.doc, m_dtd)) { + ms_dbg_a(transaction, 4, "XML: DTD validation failed."); xmlFreeValidCtxt(cvp); return true; } - ms_dbg_a(t, 4, std::string("XML: Successfully validated " \ + ms_dbg_a(transaction, 4, std::string("XML: Successfully validated " \ "payload against DTD: ") + m_resource); xmlFreeValidCtxt(cvp); diff --git a/src/operators/validate_dtd.h b/src/operators/validate_dtd.h index ace6aad464..a5cd610b90 100644 --- a/src/operators/validate_dtd.h +++ b/src/operators/validate_dtd.h @@ -46,7 +46,11 @@ class ValidateDTD : public Operator { } } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/validate_hash.cc b/src/operators/validate_hash.cc index b608ac2b5a..3ceaa1ae97 100644 --- a/src/operators/validate_hash.cc +++ b/src/operators/validate_hash.cc @@ -22,7 +22,10 @@ namespace modsecurity { namespace operators { -bool ValidateHash::evaluate(Transaction *transaction, const std::string &str) { +bool ValidateHash::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { /** * @todo Implement the operator ValidateHash. * Reference: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#validateHash diff --git a/src/operators/validate_hash.h b/src/operators/validate_hash.h index 47e25fdf45..f9de9aa6b0 100644 --- a/src/operators/validate_hash.h +++ b/src/operators/validate_hash.h @@ -31,7 +31,11 @@ class ValidateHash : public Operator { /** @ingroup ModSecurity_Operator */ explicit ValidateHash(std::unique_ptr param) : Operator("ValidateHash", std::move(param)) { } - bool evaluate(Transaction *transaction, const std::string &str) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/operators/validate_schema.cc b/src/operators/validate_schema.cc index a94ca4f8a3..182df2072b 100644 --- a/src/operators/validate_schema.cc +++ b/src/operators/validate_schema.cc @@ -39,8 +39,10 @@ bool ValidateSchema::init(const std::string &file, std::string *error) { } -bool ValidateSchema::evaluate(Transaction *t, - const std::string &str) { +bool ValidateSchema::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { int rc; m_parserCtx = xmlSchemaNewParserCtxt(m_resource.c_str()); @@ -52,7 +54,7 @@ bool ValidateSchema::evaluate(Transaction *t, if (m_err.empty() == false) { err << m_err; } - ms_dbg_a(t, 4, err.str()); + ms_dbg_a(transaction, 4, err.str()); return true; } @@ -75,7 +77,7 @@ bool ValidateSchema::evaluate(Transaction *t, if (m_err.empty() == false) { err << " " << m_err; } - ms_dbg_a(t, 4, err.str()); + ms_dbg_a(transaction, 4, err.str()); xmlSchemaFreeParserCtxt(m_parserCtx); return true; } @@ -86,23 +88,23 @@ bool ValidateSchema::evaluate(Transaction *t, if (m_err.empty() == false) { err << " " << m_err; } - ms_dbg_a(t, 4, err.str()); + ms_dbg_a(transaction, 4, err.str()); return true; } /* Send validator errors/warnings to msr_log */ xmlSchemaSetValidErrors(m_validCtx, (xmlSchemaValidityErrorFunc)error_runtime, - (xmlSchemaValidityWarningFunc)warn_runtime, t); + (xmlSchemaValidityWarningFunc)warn_runtime, transaction); - if (t->m_xml->m_data.doc == NULL) { - ms_dbg_a(t, 4, "XML document tree could not be found for " \ + if (transaction->m_xml->m_data.doc == NULL) { + ms_dbg_a(transaction, 4, "XML document tree could not be found for " \ "schema validation."); return true; } - if (t->m_xml->m_data.well_formed != 1) { - ms_dbg_a(t, 4, "XML: Schema validation failed because " \ + if (transaction->m_xml->m_data.well_formed != 1) { + ms_dbg_a(transaction, 4, "XML: Schema validation failed because " \ "content is not well formed."); return true; } @@ -116,15 +118,15 @@ bool ValidateSchema::evaluate(Transaction *t, } */ - rc = xmlSchemaValidateDoc(m_validCtx, t->m_xml->m_data.doc); + rc = xmlSchemaValidateDoc(m_validCtx, transaction->m_xml->m_data.doc); if (rc != 0) { - ms_dbg_a(t, 4, "XML: Schema validation failed."); + ms_dbg_a(transaction, 4, "XML: Schema validation failed."); xmlSchemaFree(m_schema); xmlSchemaFreeParserCtxt(m_parserCtx); return true; /* No match. */ } - ms_dbg_a(t, 4, "XML: Successfully validated payload against " \ + ms_dbg_a(transaction, 4, "XML: Successfully validated payload against " \ "Schema: " + m_resource); xmlSchemaFree(m_schema); xmlSchemaFreeParserCtxt(m_parserCtx); diff --git a/src/operators/validate_schema.h b/src/operators/validate_schema.h index b190ef15d9..80d5aaacee 100644 --- a/src/operators/validate_schema.h +++ b/src/operators/validate_schema.h @@ -58,7 +58,11 @@ class ValidateSchema : public Operator { } } - bool evaluate(Transaction *transaction, const std::string &str) override; + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + bool init(const std::string &file, std::string *error) override; diff --git a/src/operators/validate_url_encoding.cc b/src/operators/validate_url_encoding.cc index 302ca1f894..c82eb62c72 100644 --- a/src/operators/validate_url_encoding.cc +++ b/src/operators/validate_url_encoding.cc @@ -68,8 +68,10 @@ int ValidateUrlEncoding::validate_url_encoding(const char *input, } -bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, RuleMessage *ruleMessage) { +bool ValidateUrlEncoding::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { size_t offset = 0; bool res = false; @@ -82,14 +84,15 @@ bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *ru case 1 : /* Encoding is valid */ if (transaction) { - ms_dbg_a(transaction, 7, "Valid URL Encoding at '" +input + "'"); + ms_dbg_a(transaction, 7, "Valid URL Encoding at '" + \ + input.to_string() + "'"); } res = false; break; case -2 : if (transaction) { ms_dbg_a(transaction, 7, "Invalid URL Encoding: Non-hexadecimal " - "digits used at '" + input + "'"); + "digits used at '" + input.to_string() + "'"); logOffset(ruleMessage, offset, input.size()); } res = true; /* Invalid match. */ @@ -97,7 +100,7 @@ bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *ru case -3 : if (transaction) { ms_dbg_a(transaction, 7, "Invalid URL Encoding: Not enough " \ - "characters at the end of input at '" + input + "'"); + "characters at the end of input at '" + input.to_string() + "'"); logOffset(ruleMessage, offset, input.size()); } res = true; /* Invalid match. */ @@ -107,7 +110,7 @@ bool ValidateUrlEncoding::evaluate(Transaction *transaction, RuleWithActions *ru if (transaction) { ms_dbg_a(transaction, 7, "Invalid URL Encoding: Internal " \ "Error (rc = " + std::to_string(rc) + ") at '" + - input + "'"); + input.to_string() + "'"); logOffset(ruleMessage, offset, input.size()); } res = true; diff --git a/src/operators/validate_url_encoding.h b/src/operators/validate_url_encoding.h index 3f0498dca2..b7a5dc169f 100644 --- a/src/operators/validate_url_encoding.h +++ b/src/operators/validate_url_encoding.h @@ -31,8 +31,9 @@ class ValidateUrlEncoding : public Operator { ValidateUrlEncoding() : Operator("ValidateUrlEncoding") { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; static int validate_url_encoding(const char *input, uint64_t input_length, diff --git a/src/operators/validate_utf8_encoding.cc b/src/operators/validate_utf8_encoding.cc index ec5ac90a60..8952ae57d5 100644 --- a/src/operators/validate_utf8_encoding.cc +++ b/src/operators/validate_utf8_encoding.cc @@ -113,8 +113,10 @@ int ValidateUtf8Encoding::detect_utf8_character( return unicode_len; } -bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, RuleMessage *ruleMessage) { +bool ValidateUtf8Encoding::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { unsigned int i, bytes_left; const char *str_c = str.c_str(); @@ -128,7 +130,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "not enough bytes in character " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); } return true; @@ -137,7 +139,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "invalid byte value in character " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -147,7 +149,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "overlong character detected " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -157,7 +159,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (transaction) { ms_dbg_a(transaction, 8, "Invalid UTF-8 encoding: " "use of restricted character " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -166,7 +168,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r case UNICODE_ERROR_DECODING_ERROR : if (transaction) { ms_dbg_a(transaction, 8, "Error validating UTF-8 decoding " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } @@ -177,7 +179,7 @@ bool ValidateUtf8Encoding::evaluate(Transaction *transaction, RuleWithActions *r if (rc <= 0) { if (transaction) { ms_dbg_a(transaction, 8, "Internal error during UTF-8 validation " - "at " + str + ". [offset \"" + + "at " + str.to_string() + ". [offset \"" + std::to_string(i) + "\"]"); logOffset(ruleMessage, i, str.size()); } diff --git a/src/operators/validate_utf8_encoding.h b/src/operators/validate_utf8_encoding.h index a7d63c8343..0f695c22f1 100644 --- a/src/operators/validate_utf8_encoding.h +++ b/src/operators/validate_utf8_encoding.h @@ -38,8 +38,9 @@ class ValidateUtf8Encoding : public Operator { ValidateUtf8Encoding() : Operator("ValidateUtf8Encoding") { } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; static int detect_utf8_character(const unsigned char *p_read, diff --git a/src/operators/verify_cc.cc b/src/operators/verify_cc.cc index 0c6b49682b..45b1e951ff 100644 --- a/src/operators/verify_cc.cc +++ b/src/operators/verify_cc.cc @@ -119,8 +119,10 @@ bool VerifyCC::init(const std::string ¶m2, std::string *error) { } -bool VerifyCC::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& i, RuleMessage *ruleMessage) { +bool VerifyCC::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &i, + RuleMessage *ruleMessage) { int offset = 0; int target_length = i.length(); @@ -139,18 +141,18 @@ bool VerifyCC::evaluate(Transaction *t, RuleWithActions *rule, return false; } if (ret > 0) { - match = std::string(i, ovector[0], ovector[1] - ovector[0]); + match = std::string(i.to_string(), ovector[0], ovector[1] - ovector[0]); int is_cc = luhnVerify(match.c_str(), match.size()); if (is_cc) { - if (t) { + if (transaction) { if (rule && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", std::string(match)); - ms_dbg_a(t, 7, "Added VerifyCC match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added VerifyCC match TX.0: " + \ std::string(match)); } - ms_dbg_a(t, 9, "CC# match \"" + m_param + - "\" at " + i + ". [offset " + + ms_dbg_a(transaction, 9, "CC# match \"" + m_param + + "\" at " + i.to_string() + ". [offset " + std::to_string(offset) + "]"); } return true; diff --git a/src/operators/verify_cc.h b/src/operators/verify_cc.h index 7095cbc8ce..d4cdf18566 100644 --- a/src/operators/verify_cc.h +++ b/src/operators/verify_cc.h @@ -35,10 +35,13 @@ class VerifyCC : public Operator { m_pce(NULL) { } ~VerifyCC(); - bool evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, - RuleMessage *ruleMessage) override; bool init(const std::string ¶m, std::string *error) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; + private: pcre *m_pc; pcre_extra *m_pce; diff --git a/src/operators/verify_cpf.cc b/src/operators/verify_cpf.cc index 3454dbab72..922d62232e 100644 --- a/src/operators/verify_cpf.cc +++ b/src/operators/verify_cpf.cc @@ -110,8 +110,10 @@ bool VerifyCPF::verify(const char *cpfnumber, int len) { } -bool VerifyCPF::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, RuleMessage *ruleMessage) { +bool VerifyCPF::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { std::list matches; bool is_cpf = false; int i; @@ -121,15 +123,15 @@ bool VerifyCPF::evaluate(Transaction *t, RuleWithActions *rule, } for (i = 0; i < input.size() - 1 && is_cpf == false; i++) { - matches = m_re->searchAll(input.substr(i, input.size())); + matches = m_re->searchAll(input.substr(i, input.size()).to_string()); for (const auto & m : matches) { is_cpf = verify(m.str().c_str(), m.str().size()); if (is_cpf) { logOffset(ruleMessage, m.offset(), m.str().size()); - if (rule && t && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + if (rule && transaction && rule->hasCaptureAction()) { + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", m.str()); - ms_dbg_a(t, 7, "Added VerifyCPF match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added VerifyCPF match TX.0: " + \ m.str()); } diff --git a/src/operators/verify_cpf.h b/src/operators/verify_cpf.h index e15e74c47a..9ee96643a9 100644 --- a/src/operators/verify_cpf.h +++ b/src/operators/verify_cpf.h @@ -46,8 +46,9 @@ class VerifyCPF : public Operator { bool operator=(const VerifyCPF &a) = delete; VerifyCPF(const VerifyCPF &a) = delete; - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; bool verify(const char *ssnumber, int len); diff --git a/src/operators/verify_ssn.cc b/src/operators/verify_ssn.cc index fae46828e2..f58d8d27a8 100644 --- a/src/operators/verify_ssn.cc +++ b/src/operators/verify_ssn.cc @@ -112,8 +112,10 @@ bool VerifySSN::verify(const char *ssnumber, int len) { } -bool VerifySSN::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, RuleMessage *ruleMessage) { +bool VerifySSN::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) { std::list matches; bool is_ssn = false; int i; @@ -123,15 +125,15 @@ bool VerifySSN::evaluate(Transaction *t, RuleWithActions *rule, } for (i = 0; i < input.size() - 1 && is_ssn == false; i++) { - matches = m_re->searchAll(input.substr(i, input.size())); + matches = m_re->searchAll(input.substr(i, input.size()).to_string()); for (const auto & j : matches) { is_ssn = verify(j.str().c_str(), j.str().size()); if (is_ssn) { logOffset(ruleMessage, j.offset(), j.str().size()); - if (rule && t && rule->hasCaptureAction()) { - t->m_collections.m_tx_collection->storeOrUpdateFirst( + if (rule && transaction && rule->hasCaptureAction()) { + transaction->m_collections.m_tx_collection->storeOrUpdateFirst( "0", j.str()); - ms_dbg_a(t, 7, "Added VerifySSN match TX.0: " + \ + ms_dbg_a(transaction, 7, "Added VerifySSN match TX.0: " + \ j.str()); } diff --git a/src/operators/verify_ssn.h b/src/operators/verify_ssn.h index ef38cad3c6..a1c6b7803d 100644 --- a/src/operators/verify_ssn.h +++ b/src/operators/verify_ssn.h @@ -46,8 +46,9 @@ class VerifySSN : public Operator { bool operator=(const VerifySSN &a) = delete; VerifySSN(const VerifySSN &a) = delete; - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; diff --git a/src/operators/verify_svnr.cc b/src/operators/verify_svnr.cc index 8a444ac12a..8f906b3c27 100644 --- a/src/operators/verify_svnr.cc +++ b/src/operators/verify_svnr.cc @@ -78,8 +78,10 @@ bool VerifySVNR::verify(const char *svnrnumber, int len) { } -bool VerifySVNR::evaluate(Transaction *t, RuleWithActions *rule, - const std::string& input, RuleMessage* ruleMessage) { +bool VerifySVNR::evaluate(Transaction *t, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage* ruleMessage) { std::list matches; bool is_svnr = false; int i; @@ -89,7 +91,7 @@ bool VerifySVNR::evaluate(Transaction *t, RuleWithActions *rule, } for (i = 0; i < input.size() - 1 && is_svnr == false; i++) { - matches = m_re->searchAll(input.substr(i, input.size())); + matches = m_re->searchAll(input.substr(i, input.size()).to_string()); for (const auto & j : matches) { is_svnr = verify(j.str().c_str(), j.str().size()); diff --git a/src/operators/verify_svnr.h b/src/operators/verify_svnr.h index 898bee79b1..b5ba924343 100644 --- a/src/operators/verify_svnr.h +++ b/src/operators/verify_svnr.h @@ -32,8 +32,9 @@ class VerifySVNR : public Operator { bool operator=(const VerifySVNR &a) = delete; VerifySVNR(const VerifySVNR &a) = delete; - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string& input, + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, RuleMessage *ruleMessage) override; bool verify(const char *ssnumber, int len); diff --git a/src/operators/within.cc b/src/operators/within.cc index a4ffc655cd..346243e11c 100644 --- a/src/operators/within.cc +++ b/src/operators/within.cc @@ -24,8 +24,10 @@ namespace modsecurity { namespace operators { -bool Within::evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, RuleMessage *ruleMessage) { +bool Within::evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &str, + RuleMessage *ruleMessage) { bool res = false; size_t pos = 0; std::string paramTarget(m_string->evaluate(transaction)); @@ -34,7 +36,7 @@ bool Within::evaluate(Transaction *transaction, RuleWithActions *rule, return true; } - pos = paramTarget.find(str); + pos = paramTarget.find(str.c_str()); res = pos != std::string::npos; if (res) { logOffset(ruleMessage, pos, str.size()); diff --git a/src/operators/within.h b/src/operators/within.h index b9921a7352..a6bc5d313b 100644 --- a/src/operators/within.h +++ b/src/operators/within.h @@ -33,8 +33,11 @@ class Within : public Operator { : Operator("Within", std::move(param)) { m_couldContainsMacro = true; } - bool evaluate(Transaction *transaction, RuleWithActions *rule, - const std::string &str, RuleMessage *ruleMessage) override; + + bool evaluate(Transaction *transaction, + RuleWithActions *rule, + const bpstd::string_view &input, + RuleMessage *ruleMessage) override; }; } // namespace operators diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index 5ba8fa19ac..cb6667d249 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -41,6 +41,7 @@ #include "src/actions/block.h" #include "src/variables/variable.h" #include "src/rule_with_operator.h" +#include "modsecurity/string_view.hpp" namespace modsecurity { @@ -68,8 +69,9 @@ RuleWithOperator::~RuleWithOperator() { } -void RuleWithOperator::updateMatchedVars(Transaction *trans, const std::string &key, - const std::string &value) { +void RuleWithOperator::updateMatchedVars(Transaction *trans, + const std::string &key, + const bpstd::string_view &value) { ms_dbg_a(trans, 9, "Matched vars updated."); trans->m_variableMatchedVar.set(value, trans->m_variableOffset); trans->m_variableMatchedVarName.set(key, trans->m_variableOffset); @@ -88,9 +90,9 @@ void RuleWithOperator::cleanMatchedVars(Transaction *trans) { } - -bool RuleWithOperator::executeOperatorAt(Transaction *trans, const std::string &key, - std::string value) { +bool RuleWithOperator::executeOperatorAt(Transaction *trans, + const std::string &key, + const bpstd::string_view &value) { #if MSC_EXEC_CLOCK_ENABLED clock_t begin = clock(); clock_t end; @@ -98,16 +100,13 @@ bool RuleWithOperator::executeOperatorAt(Transaction *trans, const std::string & #endif bool ret; - ms_dbg_a(trans, 9, "Target value: \"" + utils::string::limitTo(80, - utils::string::toHexIfNeeded(value)) \ + ms_dbg_a(trans, 9, "Target value: \"" \ + + utils::string::limitTo(80, + utils::string::toHexIfNeeded(value.to_string())) \ + "\" (Variable: " + key + ")"); ret = m_operator->evaluateInternal(trans, this, value, trans->messageGetLast()); - if (ret == false) { - return false; - } - #if MSC_EXEC_CLOCK_ENABLED end = clock(); elapsed_s = static_cast(end - begin) / CLOCKS_PER_SEC; @@ -302,10 +301,9 @@ bool RuleWithOperator::evaluate(Transaction *trans) { while (iter != transformationsResults.end()) { bool ret; auto &valueTemp = *iter; - // FIXME: this copy is not necessary. - std::string *valueAfterTrans = new std::string(valueTemp.getAfter()->c_str(), valueTemp.getAfter()->size()); + bpstd::string_view view = *valueTemp.getAfter(); - ret = executeOperatorAt(trans, key, *valueAfterTrans); + ret = executeOperatorAt(trans, key, view); if (ret == true) { trans->messageGetLast()->m_match = m_operator->resolveMatchMessage(trans, @@ -330,12 +328,12 @@ bool RuleWithOperator::evaluate(Transaction *trans) { iter2++; } - updateMatchedVars(trans, key, *valueAfterTrans); + updateMatchedVars(trans, key, view); executeActionsIndependentOfChainedRuleResult(trans); globalRet = true; } - delete valueAfterTrans; + iter++; } delete v; diff --git a/src/rule_with_operator.h b/src/rule_with_operator.h index e69339af49..f9990a509d 100644 --- a/src/rule_with_operator.h +++ b/src/rule_with_operator.h @@ -32,6 +32,7 @@ #include "src/rule_with_actions.h" #include "src/variables/variable.h" #include "src/operators/operator.h" +#include "modsecurity/string_view.hpp" #ifdef __cplusplus @@ -61,11 +62,14 @@ class RuleWithOperator : public RuleWithActions { inline void getFinalVars(variables::Variables *vars, variables::Variables *eclusion, Transaction *trans); - bool executeOperatorAt(Transaction *trasn, const std::string &key, - std::string value); + bool executeOperatorAt(Transaction *transaction, + const std::string &key, + const bpstd::string_view &value); + + static void updateMatchedVars(Transaction *transaction, + const std::string &key, + const bpstd::string_view &value); - static void updateMatchedVars(Transaction *trasn, const std::string &key, - const std::string &value); static void cleanMatchedVars(Transaction *trasn); diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index fde3545a27..de6b1b66a3 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -19,6 +19,12 @@ *:others/mbedtls/sha1.c +// +// 3rd party string view +// +*:headers/modsecurity/string_view.hpp + + // // Code imported from ModSecurity v2... // @@ -30,11 +36,10 @@ invalidScanfArgType_int:src/rules_set_properties.cc:102 redundantAssignment:src/operators/pm.cc:94 - // // ModSecurity v3 code... // -unmatchedSuppression:src/utils/geo_lookup.cc:82 +functionStatic:src/operators/geo_lookup.h:39 useInitializationList:src/utils/shared_files.h:87 unmatchedSuppression:src/utils/msc_tree.cc functionStatic:headers/modsecurity/transaction.h:455 @@ -54,8 +59,8 @@ syntaxError:src/transaction.cc:62 noConstructor:src/variables/variable.h:152 duplicateBranch:src/request_body_processor/multipart.cc:93 danglingTempReference:src/modsecurity.cc:206 -knownConditionTrueFalse:src/operators/validate_url_encoding.cc:77 -knownConditionTrueFalse:src/operators/verify_svnr.cc:88 +knownConditionTrueFalse:src/operators/validate_url_encoding.cc:79 +knownConditionTrueFalse:src/operators/verify_svnr.cc:90 noConstructor:src/actions/rule_id.h:33 functionStatic:src/actions/rule_id.h:35