diff --git a/KnoBABQuery.g4 b/KnoBABQuery.g4 index 82b0347..2ce0421 100755 --- a/KnoBABQuery.g4 +++ b/KnoBABQuery.g4 @@ -83,6 +83,8 @@ ltlf : INIT TIMED? declare_arguments? declare_act_target? | DIAMOND TIMED? ltlf #diamond | NEGATED TIMED? ltlf PRESERVE? #not | '(' ltlf ')' #paren + | ltlf 'BX' THETA? INV? declare_arguments? declare_act_target? #and_next_B + | ltlf 'XB' THETA? INV? declare_arguments? declare_act_target? #next_and_B | ltlf '&Ft' THETA? INV? ltlf #and_future | ltlf '&Ft!X' THETA? INV? ltlf #and_future_not_next | ltlf '&Ft!WX' THETA? INV? ltlf #and_wfuture_not_next diff --git a/include/knobab/server/algorithms/querymanager/LTLfQuery.h b/include/knobab/server/algorithms/querymanager/LTLfQuery.h index ebb3624..e05c515 100755 --- a/include/knobab/server/algorithms/querymanager/LTLfQuery.h +++ b/include/knobab/server/algorithms/querymanager/LTLfQuery.h @@ -52,7 +52,9 @@ struct LTLfQuery { LAST_QP = 17, FALSEHOOD_QP = 18, AFNXA_QPT = 19, - AFNWXA_QPT = 20 + AFNWXA_QPT = 20, + AND_NEXT_QPT = 21, + NEXT_AND_QPT = 22, }; bool doInvTheta = false; type t; @@ -114,6 +116,8 @@ struct LTLfQuery { static LTLfQuery qDIAMOND(const LTLfQuery& lhs, bool isTimed); static LTLfQuery qANDFUTURENOTNEXTA(const LTLfQuery& lhs, const LTLfQuery& rhs, bool isTimed, bool hasTheta, bool isInv); static LTLfQuery qANDFUTURENOTWNEXTA(const LTLfQuery& lhs, const LTLfQuery& rhs, bool isTimed, bool hasTheta, bool isInv); + static LTLfQuery qANDNEXT(const LTLfQuery& lhs, short declare_argument, LeafType marking, bool isTimed, bool hasTheta, bool isInv); + static LTLfQuery qNEXTAND(const LTLfQuery& lhs, short declare_argument, LeafType marking, bool isTimed, bool hasTheta, bool isInv); }; diff --git a/include/knobab/server/algorithms/querymanager/MAXSatPipeline.h b/include/knobab/server/algorithms/querymanager/MAXSatPipeline.h index 42f71de..04a826e 100755 --- a/include/knobab/server/algorithms/querymanager/MAXSatPipeline.h +++ b/include/knobab/server/algorithms/querymanager/MAXSatPipeline.h @@ -158,8 +158,8 @@ struct MAXSatPipeline { void data_chunk(CNFDeclareDataAware* model, const AtomizingPipeline& atomization, const KnowledgeBase& kb); std::vector subqueriesRunning(const KnowledgeBase &kb); void abidinglogic_query_running(const std::vector& results_cache, const KnowledgeBase& kb); - void fast_v1_query_running(const std::vector& results_cache, const KnowledgeBase& kb); - void hybrid_query_running(const std::vector& results_cache, const KnowledgeBase& kb); + void fast_v1_query_running(const std::vector& results_cache, const AtomizingPipeline& ap, const KnowledgeBase& kb); + void hybrid_query_running(const std::vector& results_cache, const AtomizingPipeline& ap, const KnowledgeBase& kb); // LTLfQuery *pushAtomicQueries(const AtomizingPipeline &atomization, LTLfQuery *formula); }; diff --git a/include/knobab/server/declare/DeclareDataAware.h b/include/knobab/server/declare/DeclareDataAware.h index a0adbfa..3b6cb85 100755 --- a/include/knobab/server/declare/DeclareDataAware.h +++ b/include/knobab/server/declare/DeclareDataAware.h @@ -165,9 +165,9 @@ struct DeclareDataAware { bool compareAsThetaPredicate(const struct DeclareDataAware* ptr) const { if (ptr == nullptr) return false; return n == ptr->n - && left_act == ptr->left_act + && left_act == ptr->left_act && ptr->dnf_left_map == dnf_left_map // && left_act_id == ptr->left_act_id - && right_act == ptr->right_act + && right_act == ptr->right_act && ptr->dnf_right_map == dnf_right_map // && right_act_id == ptr->right_act_id && conjunctive_map == ptr->conjunctive_map; } diff --git a/include/knobab/server/operators/novel_ltlf_operators.h b/include/knobab/server/operators/novel_ltlf_operators.h index f29c60b..a6ad8a0 100755 --- a/include/knobab/server/operators/novel_ltlf_operators.h +++ b/include/knobab/server/operators/novel_ltlf_operators.h @@ -7,24 +7,62 @@ #ifndef KNOBAB_NOVEL_LTLF_OPERATORS_H #define KNOBAB_NOVEL_LTLF_OPERATORS_H +#include #include inline void and_next(const Result &lhsOperand, Result& result, const KnowledgeBase& kb, - act_t right_activity, - const PredicateManager* right_predicate = nullptr, + const AtomizingPipeline* ap, + const std::set& rhs_atoms, const PredicateManager* correlation = nullptr) { std::unordered_set cache; - if (right_predicate) - DEBUG_ASSERT(right_predicate->kb == &kb); + act_t right_activity; + bool right_predicate; + if ((!ap) ||((rhs_atoms.size() == 1) && ap->act_atoms.contains(*rhs_atoms.begin()))) { + right_predicate = false; + right_activity = kb.event_label_mapper.get(*rhs_atoms.begin()); + } else { + right_predicate = true; + right_activity = kb.event_label_mapper.get(ap->atom_to_conjunctedPredicates.at(*rhs_atoms.begin()).at(0).label); + } +// if (right_predicate) +// DEBUG_ASSERT(right_predicate->kb == &kb); for (const auto& x : lhsOperand) { if ((kb.act_table_by_act_id.getTraceLength(x.first.first)-1) == (x.first.second)) continue; size_t right_offset = kb.act_table_by_act_id.getBuilder().trace_id_to_event_id_to_offset.at(x.first.first).at(x.first.second+1); if ((kb.act_table_by_act_id.table.at(right_offset).entry.id.parts.act != right_activity)) continue; - bool rightMatch = !right_predicate ? true : right_predicate->checkValidity(false, x.first.first, x.first.second); + bool rightMatch = true; + if (right_predicate) { + size_t table_offset = + kb.act_table_by_act_id.getBuilder().trace_id_to_event_id_to_offset.at(x.first.first).at(x.first.second+1); + for(const auto& pred_withConj : rhs_atoms){ + bool result = true; + for (const auto& predDummy : ap->atom_to_conjunctedPredicates.at(pred_withConj)) { + bool test = true; + auto temp2_a = kb.attribute_name_to_table.find(predDummy.var); + if (temp2_a != kb.attribute_name_to_table.end()) { + std::optional data = temp2_a->second.resolve_record_if_exists2(table_offset); + if (data.has_value()) { + if (!predDummy.testOverSingleVariable(data.value())) { + test = false; + } + } + } + if (!test) { + result = false; + break; + } + } + if (result) { + rightMatch= true; + break; + } + } + rightMatch= false; + } if (rightMatch) { if (correlation) { env e1 = correlation->GetPayloadDataFromEvent(x.first.first, x.first.second, true, cache); @@ -41,26 +79,65 @@ inline void and_next(const Result &lhsOperand, inline void next_and(const Result &lhsOperand, Result& result, const KnowledgeBase& kb, - act_t right_activity, - const PredicateManager* right_predicate = nullptr, + const AtomizingPipeline* ap, + const std::set& rhs_atoms, const PredicateManager* correlation = nullptr) { std::unordered_set cache; - if (right_predicate) - DEBUG_ASSERT(right_predicate->kb == &kb); + act_t right_activity; + bool right_predicate; + if ((!ap) ||((rhs_atoms.size() == 1) && ap->act_atoms.contains(*rhs_atoms.begin()))) { + right_predicate = false; + right_activity = kb.event_label_mapper.get(*rhs_atoms.begin()); + } else { + right_predicate = true; + right_activity = kb.event_label_mapper.get(ap->atom_to_conjunctedPredicates.at(*rhs_atoms.begin()).at(0).label); + } for (const auto& x : lhsOperand) { - if (x.first.first == 0) continue; + if (x.first.second == 0) continue; size_t right_offset = kb.act_table_by_act_id.getBuilder().trace_id_to_event_id_to_offset.at(x.first.first).at(x.first.second-1); if ((kb.act_table_by_act_id.table.at(right_offset).entry.id.parts.act != right_activity)) continue; - bool rightMatch = !right_predicate ? true : right_predicate->checkValidity(false, x.first.first, x.first.second); + bool rightMatch = true; + if (right_predicate) { + size_t table_offset = + kb.act_table_by_act_id.getBuilder().trace_id_to_event_id_to_offset.at(x.first.first).at(x.first.second-1); + for(const auto& pred_withConj : rhs_atoms){ + bool result = true; + for (const auto& predDummy : ap->atom_to_conjunctedPredicates.at(pred_withConj)) { + bool test = true; + auto temp2_a = kb.attribute_name_to_table.find(predDummy.var); + if (temp2_a != kb.attribute_name_to_table.end()) { + std::optional data = temp2_a->second.resolve_record_if_exists2(table_offset); + if (data.has_value()) { + if (!predDummy.testOverSingleVariable(data.value())) { + test = false; + } + } + } + if (!test) { + result = false; + break; + } + } + if (result) { + rightMatch= true; + break; + } + } + rightMatch= false; + } if (rightMatch) { if (correlation) { env e1 = correlation->GetPayloadDataFromEvent(x.first.first, x.first.second, true, cache); if (correlation->checkValidity(e1, x.first.first, x.first.second-1)) { - result.emplace_back(x).second.second.emplace_back(marked_event::right(x.first.second-1)); + auto& ref = result.emplace_back(x); + ref.first.second--; + ref.second.second.emplace_back(marked_event::right(x.first.second-1)); } } else { - result.emplace_back(x).second.second.emplace_back(marked_event::right(x.first.second-1)); + auto& ref = result.emplace_back(x); + ref.first.second--; + ref.second.second.emplace_back(marked_event::right(x.first.second-1)); } } } diff --git a/include/knobab/server/query_manager/KnoBABQueryBaseListener.h b/include/knobab/server/query_manager/KnoBABQueryBaseListener.h index b57cbb4..96116b6 100644 --- a/include/knobab/server/query_manager/KnoBABQueryBaseListener.h +++ b/include/knobab/server/query_manager/KnoBABQueryBaseListener.h @@ -94,6 +94,9 @@ class KnoBABQueryBaseListener : public KnoBABQueryListener { virtual void enterOr(KnoBABQueryParser::OrContext * /*ctx*/) override { } virtual void exitOr(KnoBABQueryParser::OrContext * /*ctx*/) override { } + virtual void enterAnd_next_B(KnoBABQueryParser::And_next_BContext * /*ctx*/) override { } + virtual void exitAnd_next_B(KnoBABQueryParser::And_next_BContext * /*ctx*/) override { } + virtual void enterLast(KnoBABQueryParser::LastContext * /*ctx*/) override { } virtual void exitLast(KnoBABQueryParser::LastContext * /*ctx*/) override { } @@ -139,6 +142,9 @@ class KnoBABQueryBaseListener : public KnoBABQueryListener { virtual void enterUntil(KnoBABQueryParser::UntilContext * /*ctx*/) override { } virtual void exitUntil(KnoBABQueryParser::UntilContext * /*ctx*/) override { } + virtual void enterNext_and_B(KnoBABQueryParser::Next_and_BContext * /*ctx*/) override { } + virtual void exitNext_and_B(KnoBABQueryParser::Next_and_BContext * /*ctx*/) override { } + virtual void enterAnd_future(KnoBABQueryParser::And_futureContext * /*ctx*/) override { } virtual void exitAnd_future(KnoBABQueryParser::And_futureContext * /*ctx*/) override { } diff --git a/include/knobab/server/query_manager/KnoBABQueryBaseVisitor.h b/include/knobab/server/query_manager/KnoBABQueryBaseVisitor.h index 474bd8f..5d750cc 100644 --- a/include/knobab/server/query_manager/KnoBABQueryBaseVisitor.h +++ b/include/knobab/server/query_manager/KnoBABQueryBaseVisitor.h @@ -119,6 +119,10 @@ class KnoBABQueryBaseVisitor : public KnoBABQueryVisitor { return visitChildren(ctx); } + virtual std::any visitAnd_next_B(KnoBABQueryParser::And_next_BContext *ctx) override { + return visitChildren(ctx); + } + virtual std::any visitLast(KnoBABQueryParser::LastContext *ctx) override { return visitChildren(ctx); } @@ -179,6 +183,10 @@ class KnoBABQueryBaseVisitor : public KnoBABQueryVisitor { return visitChildren(ctx); } + virtual std::any visitNext_and_B(KnoBABQueryParser::Next_and_BContext *ctx) override { + return visitChildren(ctx); + } + virtual std::any visitAnd_future(KnoBABQueryParser::And_futureContext *ctx) override { return visitChildren(ctx); } diff --git a/include/knobab/server/query_manager/KnoBABQueryLexer.h b/include/knobab/server/query_manager/KnoBABQueryLexer.h index 8eeecbc..33aa839 100644 --- a/include/knobab/server/query_manager/KnoBABQueryLexer.h +++ b/include/knobab/server/query_manager/KnoBABQueryLexer.h @@ -24,15 +24,15 @@ class KnoBABQueryLexer : public antlr4::Lexer { T__56 = 57, T__57 = 58, T__58 = 59, T__59 = 60, T__60 = 61, T__61 = 62, T__62 = 63, T__63 = 64, T__64 = 65, T__65 = 66, T__66 = 67, T__67 = 68, T__68 = 69, T__69 = 70, T__70 = 71, T__71 = 72, T__72 = 73, T__73 = 74, - VIOLATED = 75, VAC_SAT = 76, SAT = 77, ACT_TABLE = 78, WITH_ALIGNMENT_STRATEGY = 79, - CNT_TABLE = 80, ATT_TABLE = 81, ACTIVITYLABEL = 82, LOGS = 83, ATT = 84, - ACTIVATION = 85, TARGET = 86, INIT = 87, END = 88, EXISTS = 89, ABSENCE = 90, - NEXT = 91, OR = 92, AND = 93, FIRST = 94, LAST = 95, IF = 96, THEN = 97, - ELSE = 98, UNTIL = 99, BOX = 100, DIAMOND = 101, AUTO_TIMED = 102, LPAREN = 103, - RPAREN = 104, PRESERVE = 105, TIMED = 106, THETA = 107, LEFT = 108, - INV = 109, RIGHT = 110, MIDDLE = 111, NEGATED = 112, JOLLY = 113, HRF = 114, - TAB = 115, XES = 116, LABEL = 117, INTNUMBER = 118, NUMBER = 119, STRING = 120, - SPACE = 121, COMMENT = 122, LINE_COMMENT = 123 + T__74 = 75, T__75 = 76, VIOLATED = 77, VAC_SAT = 78, SAT = 79, ACT_TABLE = 80, + WITH_ALIGNMENT_STRATEGY = 81, CNT_TABLE = 82, ATT_TABLE = 83, ACTIVITYLABEL = 84, + LOGS = 85, ATT = 86, ACTIVATION = 87, TARGET = 88, INIT = 89, END = 90, + EXISTS = 91, ABSENCE = 92, NEXT = 93, OR = 94, AND = 95, FIRST = 96, + LAST = 97, IF = 98, THEN = 99, ELSE = 100, UNTIL = 101, BOX = 102, DIAMOND = 103, + AUTO_TIMED = 104, LPAREN = 105, RPAREN = 106, PRESERVE = 107, TIMED = 108, + THETA = 109, LEFT = 110, INV = 111, RIGHT = 112, MIDDLE = 113, NEGATED = 114, + JOLLY = 115, HRF = 116, TAB = 117, XES = 118, LABEL = 119, INTNUMBER = 120, + NUMBER = 121, STRING = 122, SPACE = 123, COMMENT = 124, LINE_COMMENT = 125 }; explicit KnoBABQueryLexer(antlr4::CharStream *input); diff --git a/include/knobab/server/query_manager/KnoBABQueryListener.h b/include/knobab/server/query_manager/KnoBABQueryListener.h index 756bab4..777edcf 100644 --- a/include/knobab/server/query_manager/KnoBABQueryListener.h +++ b/include/knobab/server/query_manager/KnoBABQueryListener.h @@ -92,6 +92,9 @@ class KnoBABQueryListener : public antlr4::tree::ParseTreeListener { virtual void enterOr(KnoBABQueryParser::OrContext *ctx) = 0; virtual void exitOr(KnoBABQueryParser::OrContext *ctx) = 0; + virtual void enterAnd_next_B(KnoBABQueryParser::And_next_BContext *ctx) = 0; + virtual void exitAnd_next_B(KnoBABQueryParser::And_next_BContext *ctx) = 0; + virtual void enterLast(KnoBABQueryParser::LastContext *ctx) = 0; virtual void exitLast(KnoBABQueryParser::LastContext *ctx) = 0; @@ -137,6 +140,9 @@ class KnoBABQueryListener : public antlr4::tree::ParseTreeListener { virtual void enterUntil(KnoBABQueryParser::UntilContext *ctx) = 0; virtual void exitUntil(KnoBABQueryParser::UntilContext *ctx) = 0; + virtual void enterNext_and_B(KnoBABQueryParser::Next_and_BContext *ctx) = 0; + virtual void exitNext_and_B(KnoBABQueryParser::Next_and_BContext *ctx) = 0; + virtual void enterAnd_future(KnoBABQueryParser::And_futureContext *ctx) = 0; virtual void exitAnd_future(KnoBABQueryParser::And_futureContext *ctx) = 0; diff --git a/include/knobab/server/query_manager/KnoBABQueryParser.h b/include/knobab/server/query_manager/KnoBABQueryParser.h index 89b5c3f..cd506b6 100644 --- a/include/knobab/server/query_manager/KnoBABQueryParser.h +++ b/include/knobab/server/query_manager/KnoBABQueryParser.h @@ -24,15 +24,15 @@ class KnoBABQueryParser : public antlr4::Parser { T__56 = 57, T__57 = 58, T__58 = 59, T__59 = 60, T__60 = 61, T__61 = 62, T__62 = 63, T__63 = 64, T__64 = 65, T__65 = 66, T__66 = 67, T__67 = 68, T__68 = 69, T__69 = 70, T__70 = 71, T__71 = 72, T__72 = 73, T__73 = 74, - VIOLATED = 75, VAC_SAT = 76, SAT = 77, ACT_TABLE = 78, WITH_ALIGNMENT_STRATEGY = 79, - CNT_TABLE = 80, ATT_TABLE = 81, ACTIVITYLABEL = 82, LOGS = 83, ATT = 84, - ACTIVATION = 85, TARGET = 86, INIT = 87, END = 88, EXISTS = 89, ABSENCE = 90, - NEXT = 91, OR = 92, AND = 93, FIRST = 94, LAST = 95, IF = 96, THEN = 97, - ELSE = 98, UNTIL = 99, BOX = 100, DIAMOND = 101, AUTO_TIMED = 102, LPAREN = 103, - RPAREN = 104, PRESERVE = 105, TIMED = 106, THETA = 107, LEFT = 108, - INV = 109, RIGHT = 110, MIDDLE = 111, NEGATED = 112, JOLLY = 113, HRF = 114, - TAB = 115, XES = 116, LABEL = 117, INTNUMBER = 118, NUMBER = 119, STRING = 120, - SPACE = 121, COMMENT = 122, LINE_COMMENT = 123 + T__74 = 75, T__75 = 76, VIOLATED = 77, VAC_SAT = 78, SAT = 79, ACT_TABLE = 80, + WITH_ALIGNMENT_STRATEGY = 81, CNT_TABLE = 82, ATT_TABLE = 83, ACTIVITYLABEL = 84, + LOGS = 85, ATT = 86, ACTIVATION = 87, TARGET = 88, INIT = 89, END = 90, + EXISTS = 91, ABSENCE = 92, NEXT = 93, OR = 94, AND = 95, FIRST = 96, + LAST = 97, IF = 98, THEN = 99, ELSE = 100, UNTIL = 101, BOX = 102, DIAMOND = 103, + AUTO_TIMED = 104, LPAREN = 105, RPAREN = 106, PRESERVE = 107, TIMED = 108, + THETA = 109, LEFT = 110, INV = 111, RIGHT = 112, MIDDLE = 113, NEGATED = 114, + JOLLY = 115, HRF = 116, TAB = 117, XES = 118, LABEL = 119, INTNUMBER = 120, + NUMBER = 121, STRING = 122, SPACE = 123, COMMENT = 124, LINE_COMMENT = 125 }; enum { @@ -603,6 +603,21 @@ class KnoBABQueryParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class And_next_BContext : public LtlfContext { + public: + And_next_BContext(LtlfContext *ctx); + + LtlfContext *ltlf(); + antlr4::tree::TerminalNode *THETA(); + antlr4::tree::TerminalNode *INV(); + Declare_argumentsContext *declare_arguments(); + Declare_act_targetContext *declare_act_target(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class LastContext : public LtlfContext { public: LastContext(LtlfContext *ctx); @@ -816,6 +831,21 @@ class KnoBABQueryParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class Next_and_BContext : public LtlfContext { + public: + Next_and_BContext(LtlfContext *ctx); + + LtlfContext *ltlf(); + antlr4::tree::TerminalNode *THETA(); + antlr4::tree::TerminalNode *INV(); + Declare_argumentsContext *declare_arguments(); + Declare_act_targetContext *declare_act_target(); + virtual void enterRule(antlr4::tree::ParseTreeListener *listener) override; + virtual void exitRule(antlr4::tree::ParseTreeListener *listener) override; + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class And_futureContext : public LtlfContext { public: And_futureContext(LtlfContext *ctx); diff --git a/include/knobab/server/query_manager/KnoBABQueryVisitor.h b/include/knobab/server/query_manager/KnoBABQueryVisitor.h index a420d52..3cbbb5d 100644 --- a/include/knobab/server/query_manager/KnoBABQueryVisitor.h +++ b/include/knobab/server/query_manager/KnoBABQueryVisitor.h @@ -71,6 +71,8 @@ class KnoBABQueryVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual std::any visitOr(KnoBABQueryParser::OrContext *context) = 0; + virtual std::any visitAnd_next_B(KnoBABQueryParser::And_next_BContext *context) = 0; + virtual std::any visitLast(KnoBABQueryParser::LastContext *context) = 0; virtual std::any visitAbsence(KnoBABQueryParser::AbsenceContext *context) = 0; @@ -101,6 +103,8 @@ class KnoBABQueryVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual std::any visitUntil(KnoBABQueryParser::UntilContext *context) = 0; + virtual std::any visitNext_and_B(KnoBABQueryParser::Next_and_BContext *context) = 0; + virtual std::any visitAnd_future(KnoBABQueryParser::And_futureContext *context) = 0; virtual std::any visitFirst(KnoBABQueryParser::FirstContext *context) = 0; diff --git a/include/knobab/server/query_manager/ServerQueryManager.h b/include/knobab/server/query_manager/ServerQueryManager.h index eedd622..e5c97c9 100755 --- a/include/knobab/server/query_manager/ServerQueryManager.h +++ b/include/knobab/server/query_manager/ServerQueryManager.h @@ -121,6 +121,8 @@ class ServerQueryManager : public KnoBABQueryBaseVisitor { std::any visitQuery_plan(KnoBABQueryParser::Query_planContext *context) override; std::any visitAnd_future_not_next(KnoBABQueryParser::And_future_not_nextContext *ctx) override; std::any visitAnd_wfuture_not_next(KnoBABQueryParser::And_wfuture_not_nextContext *ctx) override; + std::any visitAnd_next_B(KnoBABQueryParser::And_next_BContext *ctx) override; + std::any visitNext_and_B(KnoBABQueryParser::Next_and_BContext *ctx) override; trace_visitor* tv = nullptr; std::unordered_map multiple_logs; diff --git a/src/knobab/old_log_generator.cpp b/src/knobab/old_log_generator.cpp index 0352a44..c163efb 100644 --- a/src/knobab/old_log_generator.cpp +++ b/src/knobab/old_log_generator.cpp @@ -4,6 +4,7 @@ #include #include "yaucl/strings/serializers.h" +#include "ServerQueryManager.h" //#include "knobab/dataStructures/TraceData.h" //#include "knobab/Environment.h" #include @@ -280,8 +281,83 @@ void generatePatternLog(std::map, std::vector log_parse_format_type{"HRF", "XES", "TAB"}; + std::ofstream f{"/home/giacomo/b.txt", std::ios_base::app}; + + auto root_folder = std::filesystem::current_path(); + std::string base{"ChainPrecedence"}; + std::string operators{"Hybrid"}; + std::filesystem::path curr = root_folder / "data" / "testing" / "declare" / base; + auto sizes = root_folder / "data" /"testing"/"declare" / (base+"_pos_neg.txt"); + + ServerQueryManager sqm; + std::stringstream ss; + std::ifstream fs{sizes}; + fs >> pos >> neg; + auto declare_file_path = (root_folder / "data" /"testing"/"declare" / (base+".powerdecl")).string(); + std::ifstream t(declare_file_path); + std::stringstream buffer; + buffer << t.rdbuf(); + + ss << "load " + << log_parse_format_type.at((size_t)TAB_SEPARATED_EVENTS) + << " " + << std::quoted(curr.string()) + << " no stats as " + << std::quoted(base); + auto tmp = sqm.runQuery(ss.str()); + ss.str(std::string()); + ss.clear(); + + sqm.runQuery(query_plan_novel); + ss << "model-check declare " << buffer.str() << std::endl; + ss << " using \"TraceMaximumSatisfiability\" over " << std::quoted(base) << std::endl; + ss << " plan \"edbt24\" " << std::endl; + ss << " with operators " << std::quoted(operators); + std::string a,b; + std::tie(a,b) = sqm.runQuery(ss.str()); + auto js = nlohmann::json::parse(a); + std::vector max_sat_per_trace = js["TraceMaximumSatisfiability"].get>(); + f << base<< " "<() << std::endl; + for (size_t i = 0; i model; // model.emplace_back(DeclareDataAware::binary("ChainPrecedence", "b", "c")); // model.emplace_back(DeclareDataAware::binary("ChainResponse", "d", "e")); diff --git a/src/knobab/server/algorithms/querymanager/LTLfQuery.cpp b/src/knobab/server/algorithms/querymanager/LTLfQuery.cpp index d9d700d..400abe3 100755 --- a/src/knobab/server/algorithms/querymanager/LTLfQuery.cpp +++ b/src/knobab/server/algorithms/querymanager/LTLfQuery.cpp @@ -498,4 +498,45 @@ LTLfQuery LTLfQuery::qDIAMOND(const LTLfQuery& lhs, bool isTimed) { q.fields.id.parts.is_queryplan = false; q.fields.id.parts.directly_from_cache = false; return q; +} + + LTLfQuery LTLfQuery::qANDNEXT(const LTLfQuery& lhs, short declare_argument, LeafType marking, bool isTimed, bool hasTheta, bool isInv) { + LTLfQuery q; + q.t = AND_NEXT_QPT; + q.n = 0; + DEBUG_ASSERT(marking != NotALeaf); + q.isLeaf = marking; + q.declare_arg = declare_argument; + q.fields.id.parts.has_theta = hasTheta; + q.fields.id.parts.preserve = false; + q.fields.id.parts.is_atom = false; + q.fields.id.parts.is_negated = false; + q.fields.id.parts.is_timed = isTimed; + q.fields.id.parts.is_numbered = false; + q.args_from_script.emplace_back(lhs); +// q.args_from_script.emplace_back(rhs); + q.fields.id.parts.is_queryplan = false; + q.fields.id.parts.directly_from_cache = false; + q.doInvTheta = isInv; + return q; +} + LTLfQuery LTLfQuery::qNEXTAND(const LTLfQuery& lhs, short declare_argument, LeafType marking, bool isTimed, bool hasTheta, bool isInv) { + LTLfQuery q; + q.t = NEXT_AND_QPT; + q.n = 0; + DEBUG_ASSERT(marking != NotALeaf); + q.isLeaf = marking; + q.declare_arg = declare_argument; + q.fields.id.parts.has_theta = hasTheta; + q.fields.id.parts.preserve = false; + q.fields.id.parts.is_atom = false; + q.fields.id.parts.is_negated = false; + q.fields.id.parts.is_timed = isTimed; + q.fields.id.parts.is_numbered = false; + q.args_from_script.emplace_back(lhs); +// q.args_from_script.emplace_back(rhs); + q.fields.id.parts.is_queryplan = false; + q.fields.id.parts.directly_from_cache = false; + q.doInvTheta = isInv; + return q; } \ No newline at end of file diff --git a/src/knobab/server/algorithms/querymanager/MAXSatPipeline.cpp b/src/knobab/server/algorithms/querymanager/MAXSatPipeline.cpp index 5a68fdb..d6d9683 100755 --- a/src/knobab/server/algorithms/querymanager/MAXSatPipeline.cpp +++ b/src/knobab/server/algorithms/querymanager/MAXSatPipeline.cpp @@ -1215,6 +1215,19 @@ void MAXSatPipeline::abidinglogic_query_running(const std::vector } break; + case LTLfQuery::AND_NEXT_QPT: { + + throw std::runtime_error("ERROR: use the other semantics plan!"); + } + break; + + + case LTLfQuery::NEXT_AND_QPT: { + + throw std::runtime_error("ERROR: use the other semantics plan!"); + } + break; + case LTLfQuery::AFNXA_QPT: { throw std::runtime_error("ERROR: use the other semantics plan!"); // Result local; @@ -1311,7 +1324,9 @@ void MAXSatPipeline::abidinglogic_query_running(const std::vector -void MAXSatPipeline::fast_v1_query_running(const std::vector& results_cache, const KnowledgeBase& kb) { +void MAXSatPipeline::fast_v1_query_running(const std::vector& results_cache, + const AtomizingPipeline& ap, + const KnowledgeBase& kb) { /// Scanning the query plan starting from the leaves (rbegin) towards the actual declare formulae (rend) auto it = qm.Q.rbegin(), en = qm.Q.rend(); size_t Depthidx = qm.Q.size()-1; @@ -1516,6 +1531,35 @@ void MAXSatPipeline::fast_v1_query_running(const std::vector& res throw std::runtime_error("AndFuture is untimed: unexpected implementation!"); break; + case LTLfQuery::AND_NEXT_QPT: { + if (formula->fields.id.parts.is_timed) + and_next(formula->args.at(0)->result, + formula->result, + kb, + &ap, + formula->atom, + formula->joinCondition); + else + throw std::runtime_error("AND_NEXT_QPT is untimed: unexpected implementation!"); + break; + } + break; + + + case LTLfQuery::NEXT_AND_QPT: { + if (formula->fields.id.parts.is_timed) + next_and(formula->args.at(0)->result, + formula->result, + kb, + &ap, + formula->atom, + formula->joinCondition); + else + throw std::runtime_error("AND_NEXT_QPT is untimed: unexpected implementation!"); + break; + } + break; + case LTLfQuery::AFNWXA_QPT: if (formula->fields.id.parts.is_timed) aWeakAlternateAndFutureB(formula->args.at(0)->result, @@ -1580,7 +1624,9 @@ void MAXSatPipeline::fast_v1_query_running(const std::vector& res } } -void MAXSatPipeline::hybrid_query_running(const std::vector& results_cache, const KnowledgeBase& kb) { +void MAXSatPipeline::hybrid_query_running(const std::vector& results_cache, + const AtomizingPipeline& ap, + const KnowledgeBase& kb) { /// Scanning the query plan starting from the leaves (rbegin) towards the actual declare formulae (rend) auto it = qm.Q.rbegin(), en = qm.Q.rend(); size_t idx = qm.Q.size()-1; @@ -1812,6 +1858,35 @@ void MAXSatPipeline::hybrid_query_running(const std::vector& resu throw std::runtime_error("AndFutureBNotNextA is untimed: unexpected implementation!"); break; + case LTLfQuery::AND_NEXT_QPT: { + if (formula->fields.id.parts.is_timed) + and_next(formula->args.at(0)->result, + formula->result, + kb, + &ap, + formula->atom, + formula->joinCondition); + else + throw std::runtime_error("AND_NEXT_QPT is untimed: unexpected implementation!"); + break; + } + break; + + + case LTLfQuery::NEXT_AND_QPT: { + if (formula->fields.id.parts.is_timed) + next_and(formula->args.at(0)->result, + formula->result, + kb, + &ap, + formula->atom, + formula->joinCondition); + else + throw std::runtime_error("AND_NEXT_QPT is untimed: unexpected implementation!"); + break; + } + break; + case LTLfQuery::AXG_QPT: if (formula->fields.id.parts.is_timed) aAndNextGloballyB_timed(formula->args.at(0)->result, @@ -1901,11 +1976,11 @@ void MAXSatPipeline::pipeline(CNFDeclareDataAware* model, break; case FastOperator_v1: - fast_v1_query_running(pr, kb); + fast_v1_query_running(pr,atomization, kb); break; case Hybrid: - hybrid_query_running(pr, kb); + hybrid_query_running(pr,atomization, kb); break; default: diff --git a/src/knobab/server/query_manager/KnoBABQueryLexer.cpp b/src/knobab/server/query_manager/KnoBABQueryLexer.cpp index 5f743fb..a17808f 100644 --- a/src/knobab/server/query_manager/KnoBABQueryLexer.cpp +++ b/src/knobab/server/query_manager/KnoBABQueryLexer.cpp @@ -57,13 +57,14 @@ void knobabquerylexerLexerInitialize() { "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", "T__68", "T__69", "T__70", "T__71", "T__72", - "T__73", "VIOLATED", "VAC_SAT", "SAT", "ACT_TABLE", "WITH_ALIGNMENT_STRATEGY", - "CNT_TABLE", "ATT_TABLE", "ACTIVITYLABEL", "LOGS", "ATT", "ACTIVATION", - "TARGET", "INIT", "END", "EXISTS", "ABSENCE", "NEXT", "OR", "AND", - "FIRST", "LAST", "IF", "THEN", "ELSE", "UNTIL", "BOX", "DIAMOND", - "AUTO_TIMED", "LPAREN", "RPAREN", "PRESERVE", "TIMED", "THETA", "LEFT", - "INV", "RIGHT", "MIDDLE", "NEGATED", "JOLLY", "HRF", "TAB", "XES", - "LABEL", "INTNUMBER", "NUMBER", "STRING", "SPACE", "COMMENT", "LINE_COMMENT" + "T__73", "T__74", "T__75", "VIOLATED", "VAC_SAT", "SAT", "ACT_TABLE", + "WITH_ALIGNMENT_STRATEGY", "CNT_TABLE", "ATT_TABLE", "ACTIVITYLABEL", + "LOGS", "ATT", "ACTIVATION", "TARGET", "INIT", "END", "EXISTS", "ABSENCE", + "NEXT", "OR", "AND", "FIRST", "LAST", "IF", "THEN", "ELSE", "UNTIL", + "BOX", "DIAMOND", "AUTO_TIMED", "LPAREN", "RPAREN", "PRESERVE", "TIMED", + "THETA", "LEFT", "INV", "RIGHT", "MIDDLE", "NEGATED", "JOLLY", "HRF", + "TAB", "XES", "LABEL", "INTNUMBER", "NUMBER", "STRING", "SPACE", "COMMENT", + "LINE_COMMENT" }, std::vector{ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" @@ -79,35 +80,36 @@ void knobabquerylexerLexerInitialize() { "'min-length'", "'max-length'", "'n-traces'", "'sample'", "'serialize-dot-to'", "'file'", "'declare'", "'template'", "'logtop'", "'atomize!'", "'label'", "'maximum'", "'strlen'", "'strategy'", "'grounding!'", "'query-plan'", - "'queryplan'", "':='", "'args'", "'=>'", "'('", "')'", "'&Ft'", "'&Ft!X'", - "'&Ft!WX'", "'&XGt'", "'&Gt'", "','", "'where'", "'||'", "'true'", - "'&&'", "'<'", "'<='", "'>'", "'>='", "'!='", "'#'", "'no'", "'preliminary'", - "'fill'", "'act'", "'attributes'", "'cream'", "'off'", "'data'", "'missing'", - "'stats'", "'['", "']'", "'var'", "'violated'", "'vac_sat'", "'sat'", - "'ACTTABLE'", "'with-alignment-strategy'", "'COUNTTABLE'", "'ATTRIBUTETABLE'", - "'ACTIVITYLABEL'", "'LOGS'", "'ATTRIBUTES'", "'activation'", "'target'", - "'INIT'", "'END'", "'EXISTS'", "'ABSENCE'", "'NEXT'", "'OR'", "'AND'", - "'FIRST'", "'LAST'", "'IF'", "'THEN'", "'ELSE'", "'U'", "'G'", "'F'", - "'auto-timed'", "'{'", "'}'", "'PRESERVE'", "'t'", "'THETA'", "'L'", - "'INV'", "'R'", "'M'", "'~'", "'$'", "'HRF'", "'TAB'", "'XES'" + "'queryplan'", "':='", "'args'", "'=>'", "'('", "')'", "'BX'", "'XB'", + "'&Ft'", "'&Ft!X'", "'&Ft!WX'", "'&XGt'", "'&Gt'", "','", "'where'", + "'||'", "'true'", "'&&'", "'<'", "'<='", "'>'", "'>='", "'!='", "'#'", + "'no'", "'preliminary'", "'fill'", "'act'", "'attributes'", "'cream'", + "'off'", "'data'", "'missing'", "'stats'", "'['", "']'", "'var'", + "'violated'", "'vac_sat'", "'sat'", "'ACTTABLE'", "'with-alignment-strategy'", + "'COUNTTABLE'", "'ATTRIBUTETABLE'", "'ACTIVITYLABEL'", "'LOGS'", "'ATTRIBUTES'", + "'activation'", "'target'", "'INIT'", "'END'", "'EXISTS'", "'ABSENCE'", + "'NEXT'", "'OR'", "'AND'", "'FIRST'", "'LAST'", "'IF'", "'THEN'", + "'ELSE'", "'U'", "'G'", "'F'", "'auto-timed'", "'{'", "'}'", "'PRESERVE'", + "'t'", "'THETA'", "'L'", "'INV'", "'R'", "'M'", "'~'", "'$'", "'HRF'", + "'TAB'", "'XES'" }, std::vector{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "VIOLATED", "VAC_SAT", "SAT", "ACT_TABLE", - "WITH_ALIGNMENT_STRATEGY", "CNT_TABLE", "ATT_TABLE", "ACTIVITYLABEL", - "LOGS", "ATT", "ACTIVATION", "TARGET", "INIT", "END", "EXISTS", "ABSENCE", - "NEXT", "OR", "AND", "FIRST", "LAST", "IF", "THEN", "ELSE", "UNTIL", - "BOX", "DIAMOND", "AUTO_TIMED", "LPAREN", "RPAREN", "PRESERVE", "TIMED", - "THETA", "LEFT", "INV", "RIGHT", "MIDDLE", "NEGATED", "JOLLY", "HRF", - "TAB", "XES", "LABEL", "INTNUMBER", "NUMBER", "STRING", "SPACE", "COMMENT", - "LINE_COMMENT" + "", "", "", "", "", "", "", "", "", "VIOLATED", "VAC_SAT", "SAT", + "ACT_TABLE", "WITH_ALIGNMENT_STRATEGY", "CNT_TABLE", "ATT_TABLE", + "ACTIVITYLABEL", "LOGS", "ATT", "ACTIVATION", "TARGET", "INIT", "END", + "EXISTS", "ABSENCE", "NEXT", "OR", "AND", "FIRST", "LAST", "IF", "THEN", + "ELSE", "UNTIL", "BOX", "DIAMOND", "AUTO_TIMED", "LPAREN", "RPAREN", + "PRESERVE", "TIMED", "THETA", "LEFT", "INV", "RIGHT", "MIDDLE", "NEGATED", + "JOLLY", "HRF", "TAB", "XES", "LABEL", "INTNUMBER", "NUMBER", "STRING", + "SPACE", "COMMENT", "LINE_COMMENT" } ); static const int32_t serializedATNSegment[] = { - 4,0,123,1030,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,0,125,1040,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2, 14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2, 21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2, @@ -125,77 +127,78 @@ void knobabquerylexerLexerInitialize() { 7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109,7,109,2,110, 7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,7,114,2,115,7,115,2,116, 7,116,2,117,7,117,2,118,7,118,2,119,7,119,2,120,7,120,2,121,7,121,2,122, - 7,122,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, - 1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7, - 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,10,1,10, - 1,11,1,11,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, - 1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16, - 1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18, - 1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19, - 1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, - 1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, - 1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, - 1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25, - 1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28, - 1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30, - 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33, - 1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35, - 1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38, - 1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, - 1,39,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,43,1,43, - 1,44,1,44,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47, - 1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49, - 1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,53,1,53,1,53, - 1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,56,1,56,1,56,1,57,1,57,1,58,1,58, - 1,58,1,59,1,59,1,59,1,60,1,60,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62, - 1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,64, - 1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66, - 1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68, - 1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70, - 1,71,1,71,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74, - 1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76, - 1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78, - 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, - 1,78,1,78,1,78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79, - 1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80, - 1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, - 1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83, - 1,83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84, - 1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86, - 1,86,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89, - 1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91, - 1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94, - 1,94,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97, - 1,98,1,98,1,99,1,99,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,101,1, - 101,1,101,1,101,1,101,1,101,1,102,1,102,1,103,1,103,1,104,1,104,1,104, - 1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,106,1,106,1,106,1,106, - 1,106,1,106,1,107,1,107,1,108,1,108,1,108,1,108,1,109,1,109,1,110,1,110, - 1,111,1,111,1,112,1,112,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, - 1,115,1,115,1,115,1,115,1,116,1,116,5,116,970,8,116,10,116,12,116,973, - 9,116,1,117,4,117,976,8,117,11,117,12,117,977,1,118,3,118,981,8,118,1, - 118,1,118,1,118,3,118,986,8,118,1,119,1,119,1,119,1,119,5,119,992,8,119, - 10,119,12,119,995,9,119,1,119,1,119,1,120,4,120,1000,8,120,11,120,12, - 120,1001,1,120,1,120,1,121,1,121,1,121,1,121,5,121,1010,8,121,10,121, - 12,121,1013,9,121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122, - 5,122,1024,8,122,10,122,12,122,1027,9,122,1,122,1,122,1,1011,0,123,1, - 1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29, - 15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26, - 53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75, - 38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49, - 99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59, - 119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69, - 139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79, - 159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89, - 179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99, - 199,100,201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108, - 217,109,219,110,221,111,223,112,225,113,227,114,229,115,231,116,233,117, - 235,118,237,119,239,120,241,121,243,122,245,123,1,0,4,2,0,65,90,97,122, - 2,0,34,34,92,92,3,0,9,10,13,13,32,32,2,0,10,10,13,13,1038,0,1,1,0,0,0, + 7,122,2,123,7,123,2,124,7,124,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1, + 3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6, + 1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1, + 9,1,9,1,9,1,9,1,10,1,10,1,11,1,11,1,12,1,12,1,13,1,13,1,13,1,13,1,13, + 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,15, + 1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17, + 1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19, + 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20, + 1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21, + 1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22, + 1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23, + 1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,25, + 1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26, + 1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27, + 1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29, + 1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31, + 1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32, + 1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36, + 1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,38, + 1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39, + 1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41, + 1,42,1,42,1,42,1,43,1,43,1,44,1,44,1,45,1,45,1,45,1,46,1,46,1,46,1,47, + 1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49, + 1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,52,1,52,1,53, + 1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,56, + 1,56,1,56,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,60,1,60,1,60,1,61,1,61, + 1,61,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64, + 1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,67, + 1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68, + 1,68,1,68,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71, + 1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,74, + 1,74,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76, + 1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,79,1,79, + 1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80, + 1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80, + 1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, + 1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,82, + 1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83, + 1,83,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85, + 1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86, + 1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,89,1,89, + 1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,91, + 1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,94,1,94,1,94, + 1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,97,1,97, + 1,97,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1, + 101,1,101,1,102,1,102,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,104,1,104,1,105,1,105,1,106,1,106,1,106,1,106,1,106, + 1,106,1,106,1,106,1,106,1,107,1,107,1,108,1,108,1,108,1,108,1,108,1,108, + 1,109,1,109,1,110,1,110,1,110,1,110,1,111,1,111,1,112,1,112,1,113,1,113, + 1,114,1,114,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,117,1,117, + 1,117,1,117,1,118,1,118,5,118,980,8,118,10,118,12,118,983,9,118,1,119, + 4,119,986,8,119,11,119,12,119,987,1,120,3,120,991,8,120,1,120,1,120,1, + 120,3,120,996,8,120,1,121,1,121,1,121,1,121,5,121,1002,8,121,10,121,12, + 121,1005,9,121,1,121,1,121,1,122,4,122,1010,8,122,11,122,12,122,1011, + 1,122,1,122,1,123,1,123,1,123,1,123,5,123,1020,8,123,10,123,12,123,1023, + 9,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,5,124,1034, + 8,124,10,124,12,124,1037,9,124,1,124,1,124,1,1021,0,125,1,1,3,2,5,3,7, + 4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33, + 17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28, + 57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79, + 40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51, + 103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,61, + 123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,71, + 143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161,81, + 163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90,181,91, + 183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100,201,101, + 203,102,205,103,207,104,209,105,211,106,213,107,215,108,217,109,219,110, + 221,111,223,112,225,113,227,114,229,115,231,116,233,117,235,118,237,119, + 239,120,241,121,243,122,245,123,247,124,249,125,1,0,4,2,0,65,90,97,122, + 2,0,34,34,92,92,3,0,9,10,13,13,32,32,2,0,10,10,13,13,1048,0,1,1,0,0,0, 0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0, 0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0, 0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35, @@ -219,230 +222,232 @@ void knobabquerylexerLexerInitialize() { 1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219, 1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229, 1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239, - 1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,1,247,1,0,0,0,3,264, - 1,0,0,0,5,269,1,0,0,0,7,272,1,0,0,0,9,280,1,0,0,0,11,284,1,0,0,0,13,289, - 1,0,0,0,15,297,1,0,0,0,17,306,1,0,0,0,19,309,1,0,0,0,21,313,1,0,0,0,23, - 315,1,0,0,0,25,317,1,0,0,0,27,319,1,0,0,0,29,331,1,0,0,0,31,337,1,0,0, - 0,33,342,1,0,0,0,35,347,1,0,0,0,37,352,1,0,0,0,39,362,1,0,0,0,41,376, - 1,0,0,0,43,386,1,0,0,0,45,403,1,0,0,0,47,413,1,0,0,0,49,424,1,0,0,0,51, - 435,1,0,0,0,53,444,1,0,0,0,55,451,1,0,0,0,57,468,1,0,0,0,59,473,1,0,0, - 0,61,481,1,0,0,0,63,490,1,0,0,0,65,497,1,0,0,0,67,506,1,0,0,0,69,512, - 1,0,0,0,71,520,1,0,0,0,73,527,1,0,0,0,75,536,1,0,0,0,77,547,1,0,0,0,79, - 558,1,0,0,0,81,568,1,0,0,0,83,571,1,0,0,0,85,576,1,0,0,0,87,579,1,0,0, - 0,89,581,1,0,0,0,91,583,1,0,0,0,93,587,1,0,0,0,95,593,1,0,0,0,97,600, - 1,0,0,0,99,605,1,0,0,0,101,609,1,0,0,0,103,611,1,0,0,0,105,617,1,0,0, - 0,107,620,1,0,0,0,109,625,1,0,0,0,111,628,1,0,0,0,113,630,1,0,0,0,115, - 633,1,0,0,0,117,635,1,0,0,0,119,638,1,0,0,0,121,641,1,0,0,0,123,643,1, - 0,0,0,125,646,1,0,0,0,127,658,1,0,0,0,129,663,1,0,0,0,131,667,1,0,0,0, - 133,678,1,0,0,0,135,684,1,0,0,0,137,688,1,0,0,0,139,693,1,0,0,0,141,701, - 1,0,0,0,143,707,1,0,0,0,145,709,1,0,0,0,147,711,1,0,0,0,149,715,1,0,0, - 0,151,724,1,0,0,0,153,732,1,0,0,0,155,736,1,0,0,0,157,745,1,0,0,0,159, - 769,1,0,0,0,161,780,1,0,0,0,163,795,1,0,0,0,165,809,1,0,0,0,167,814,1, - 0,0,0,169,825,1,0,0,0,171,836,1,0,0,0,173,843,1,0,0,0,175,848,1,0,0,0, - 177,852,1,0,0,0,179,859,1,0,0,0,181,867,1,0,0,0,183,872,1,0,0,0,185,875, - 1,0,0,0,187,879,1,0,0,0,189,885,1,0,0,0,191,890,1,0,0,0,193,893,1,0,0, - 0,195,898,1,0,0,0,197,903,1,0,0,0,199,905,1,0,0,0,201,907,1,0,0,0,203, - 909,1,0,0,0,205,920,1,0,0,0,207,922,1,0,0,0,209,924,1,0,0,0,211,933,1, - 0,0,0,213,935,1,0,0,0,215,941,1,0,0,0,217,943,1,0,0,0,219,947,1,0,0,0, - 221,949,1,0,0,0,223,951,1,0,0,0,225,953,1,0,0,0,227,955,1,0,0,0,229,959, - 1,0,0,0,231,963,1,0,0,0,233,967,1,0,0,0,235,975,1,0,0,0,237,980,1,0,0, - 0,239,987,1,0,0,0,241,999,1,0,0,0,243,1005,1,0,0,0,245,1019,1,0,0,0,247, - 248,5,98,0,0,248,249,5,101,0,0,249,250,5,110,0,0,250,251,5,99,0,0,251, - 252,5,104,0,0,252,253,5,109,0,0,253,254,5,97,0,0,254,255,5,114,0,0,255, - 256,5,107,0,0,256,257,5,105,0,0,257,258,5,110,0,0,258,259,5,103,0,0,259, - 260,5,45,0,0,260,261,5,108,0,0,261,262,5,111,0,0,262,263,5,103,0,0,263, - 2,1,0,0,0,264,265,5,108,0,0,265,266,5,111,0,0,266,267,5,97,0,0,267,268, - 5,100,0,0,268,4,1,0,0,0,269,270,5,97,0,0,270,271,5,115,0,0,271,6,1,0, - 0,0,272,273,5,100,0,0,273,274,5,105,0,0,274,275,5,115,0,0,275,276,5,112, - 0,0,276,277,5,108,0,0,277,278,5,97,0,0,278,279,5,121,0,0,279,8,1,0,0, - 0,280,281,5,102,0,0,281,282,5,111,0,0,282,283,5,114,0,0,283,10,1,0,0, - 0,284,285,5,108,0,0,285,286,5,105,0,0,286,287,5,115,0,0,287,288,5,116, - 0,0,288,12,1,0,0,0,289,290,5,100,0,0,290,291,5,114,0,0,291,292,5,111, - 0,0,292,293,5,112,0,0,293,294,5,108,0,0,294,295,5,111,0,0,295,296,5,103, - 0,0,296,14,1,0,0,0,297,298,5,100,0,0,298,299,5,117,0,0,299,300,5,109, - 0,0,300,301,5,112,0,0,301,302,5,45,0,0,302,303,5,101,0,0,303,304,5,110, - 0,0,304,305,5,118,0,0,305,16,1,0,0,0,306,307,5,105,0,0,307,308,5,110, - 0,0,308,18,1,0,0,0,309,310,5,108,0,0,310,311,5,111,0,0,311,312,5,103, - 0,0,312,20,1,0,0,0,313,314,5,59,0,0,314,22,1,0,0,0,315,316,5,58,0,0,316, - 24,1,0,0,0,317,318,5,61,0,0,318,26,1,0,0,0,319,320,5,109,0,0,320,321, - 5,111,0,0,321,322,5,100,0,0,322,323,5,101,0,0,323,324,5,108,0,0,324,325, - 5,45,0,0,325,326,5,99,0,0,326,327,5,104,0,0,327,328,5,101,0,0,328,329, - 5,99,0,0,329,330,5,107,0,0,330,28,1,0,0,0,331,332,5,117,0,0,332,333,5, - 115,0,0,333,334,5,105,0,0,334,335,5,110,0,0,335,336,5,103,0,0,336,30, - 1,0,0,0,337,338,5,111,0,0,338,339,5,118,0,0,339,340,5,101,0,0,340,341, - 5,114,0,0,341,32,1,0,0,0,342,343,5,112,0,0,343,344,5,108,0,0,344,345, - 5,97,0,0,345,346,5,110,0,0,346,34,1,0,0,0,347,348,5,119,0,0,348,349,5, - 105,0,0,349,350,5,116,0,0,350,351,5,104,0,0,351,36,1,0,0,0,352,353,5, - 111,0,0,353,354,5,112,0,0,354,355,5,101,0,0,355,356,5,114,0,0,356,357, - 5,97,0,0,357,358,5,116,0,0,358,359,5,111,0,0,359,360,5,114,0,0,360,361, - 5,115,0,0,361,38,1,0,0,0,362,363,5,109,0,0,363,364,5,117,0,0,364,365, - 5,108,0,0,365,366,5,116,0,0,366,367,5,105,0,0,367,368,5,116,0,0,368,369, - 5,104,0,0,369,370,5,114,0,0,370,371,5,101,0,0,371,372,5,97,0,0,372,373, - 5,100,0,0,373,374,5,101,0,0,374,375,5,100,0,0,375,40,1,0,0,0,376,377, - 5,109,0,0,377,378,5,111,0,0,378,379,5,100,0,0,379,380,5,101,0,0,380,381, - 5,108,0,0,381,382,5,45,0,0,382,383,5,108,0,0,383,384,5,111,0,0,384,385, - 5,103,0,0,385,42,1,0,0,0,386,387,5,102,0,0,387,388,5,114,0,0,388,389, - 5,111,0,0,389,390,5,109,0,0,390,391,5,45,0,0,391,392,5,97,0,0,392,393, - 5,117,0,0,393,394,5,116,0,0,394,395,5,111,0,0,395,396,5,109,0,0,396,397, - 5,97,0,0,397,398,5,116,0,0,398,399,5,97,0,0,399,400,5,45,0,0,400,401, - 5,105,0,0,401,402,5,110,0,0,402,44,1,0,0,0,403,404,5,115,0,0,404,405, - 5,97,0,0,405,406,5,109,0,0,406,407,5,112,0,0,407,408,5,108,0,0,408,409, - 5,101,0,0,409,410,5,45,0,0,410,411,5,116,0,0,411,412,5,111,0,0,412,46, - 1,0,0,0,413,414,5,109,0,0,414,415,5,105,0,0,415,416,5,110,0,0,416,417, - 5,45,0,0,417,418,5,108,0,0,418,419,5,101,0,0,419,420,5,110,0,0,420,421, - 5,103,0,0,421,422,5,116,0,0,422,423,5,104,0,0,423,48,1,0,0,0,424,425, - 5,109,0,0,425,426,5,97,0,0,426,427,5,120,0,0,427,428,5,45,0,0,428,429, - 5,108,0,0,429,430,5,101,0,0,430,431,5,110,0,0,431,432,5,103,0,0,432,433, - 5,116,0,0,433,434,5,104,0,0,434,50,1,0,0,0,435,436,5,110,0,0,436,437, - 5,45,0,0,437,438,5,116,0,0,438,439,5,114,0,0,439,440,5,97,0,0,440,441, - 5,99,0,0,441,442,5,101,0,0,442,443,5,115,0,0,443,52,1,0,0,0,444,445,5, - 115,0,0,445,446,5,97,0,0,446,447,5,109,0,0,447,448,5,112,0,0,448,449, - 5,108,0,0,449,450,5,101,0,0,450,54,1,0,0,0,451,452,5,115,0,0,452,453, - 5,101,0,0,453,454,5,114,0,0,454,455,5,105,0,0,455,456,5,97,0,0,456,457, - 5,108,0,0,457,458,5,105,0,0,458,459,5,122,0,0,459,460,5,101,0,0,460,461, - 5,45,0,0,461,462,5,100,0,0,462,463,5,111,0,0,463,464,5,116,0,0,464,465, - 5,45,0,0,465,466,5,116,0,0,466,467,5,111,0,0,467,56,1,0,0,0,468,469,5, - 102,0,0,469,470,5,105,0,0,470,471,5,108,0,0,471,472,5,101,0,0,472,58, - 1,0,0,0,473,474,5,100,0,0,474,475,5,101,0,0,475,476,5,99,0,0,476,477, - 5,108,0,0,477,478,5,97,0,0,478,479,5,114,0,0,479,480,5,101,0,0,480,60, - 1,0,0,0,481,482,5,116,0,0,482,483,5,101,0,0,483,484,5,109,0,0,484,485, - 5,112,0,0,485,486,5,108,0,0,486,487,5,97,0,0,487,488,5,116,0,0,488,489, - 5,101,0,0,489,62,1,0,0,0,490,491,5,108,0,0,491,492,5,111,0,0,492,493, - 5,103,0,0,493,494,5,116,0,0,494,495,5,111,0,0,495,496,5,112,0,0,496,64, - 1,0,0,0,497,498,5,97,0,0,498,499,5,116,0,0,499,500,5,111,0,0,500,501, - 5,109,0,0,501,502,5,105,0,0,502,503,5,122,0,0,503,504,5,101,0,0,504,505, - 5,33,0,0,505,66,1,0,0,0,506,507,5,108,0,0,507,508,5,97,0,0,508,509,5, - 98,0,0,509,510,5,101,0,0,510,511,5,108,0,0,511,68,1,0,0,0,512,513,5,109, - 0,0,513,514,5,97,0,0,514,515,5,120,0,0,515,516,5,105,0,0,516,517,5,109, - 0,0,517,518,5,117,0,0,518,519,5,109,0,0,519,70,1,0,0,0,520,521,5,115, - 0,0,521,522,5,116,0,0,522,523,5,114,0,0,523,524,5,108,0,0,524,525,5,101, - 0,0,525,526,5,110,0,0,526,72,1,0,0,0,527,528,5,115,0,0,528,529,5,116, - 0,0,529,530,5,114,0,0,530,531,5,97,0,0,531,532,5,116,0,0,532,533,5,101, - 0,0,533,534,5,103,0,0,534,535,5,121,0,0,535,74,1,0,0,0,536,537,5,103, - 0,0,537,538,5,114,0,0,538,539,5,111,0,0,539,540,5,117,0,0,540,541,5,110, - 0,0,541,542,5,100,0,0,542,543,5,105,0,0,543,544,5,110,0,0,544,545,5,103, - 0,0,545,546,5,33,0,0,546,76,1,0,0,0,547,548,5,113,0,0,548,549,5,117,0, - 0,549,550,5,101,0,0,550,551,5,114,0,0,551,552,5,121,0,0,552,553,5,45, - 0,0,553,554,5,112,0,0,554,555,5,108,0,0,555,556,5,97,0,0,556,557,5,110, - 0,0,557,78,1,0,0,0,558,559,5,113,0,0,559,560,5,117,0,0,560,561,5,101, - 0,0,561,562,5,114,0,0,562,563,5,121,0,0,563,564,5,112,0,0,564,565,5,108, - 0,0,565,566,5,97,0,0,566,567,5,110,0,0,567,80,1,0,0,0,568,569,5,58,0, - 0,569,570,5,61,0,0,570,82,1,0,0,0,571,572,5,97,0,0,572,573,5,114,0,0, - 573,574,5,103,0,0,574,575,5,115,0,0,575,84,1,0,0,0,576,577,5,61,0,0,577, - 578,5,62,0,0,578,86,1,0,0,0,579,580,5,40,0,0,580,88,1,0,0,0,581,582,5, - 41,0,0,582,90,1,0,0,0,583,584,5,38,0,0,584,585,5,70,0,0,585,586,5,116, - 0,0,586,92,1,0,0,0,587,588,5,38,0,0,588,589,5,70,0,0,589,590,5,116,0, - 0,590,591,5,33,0,0,591,592,5,88,0,0,592,94,1,0,0,0,593,594,5,38,0,0,594, - 595,5,70,0,0,595,596,5,116,0,0,596,597,5,33,0,0,597,598,5,87,0,0,598, - 599,5,88,0,0,599,96,1,0,0,0,600,601,5,38,0,0,601,602,5,88,0,0,602,603, - 5,71,0,0,603,604,5,116,0,0,604,98,1,0,0,0,605,606,5,38,0,0,606,607,5, - 71,0,0,607,608,5,116,0,0,608,100,1,0,0,0,609,610,5,44,0,0,610,102,1,0, - 0,0,611,612,5,119,0,0,612,613,5,104,0,0,613,614,5,101,0,0,614,615,5,114, - 0,0,615,616,5,101,0,0,616,104,1,0,0,0,617,618,5,124,0,0,618,619,5,124, - 0,0,619,106,1,0,0,0,620,621,5,116,0,0,621,622,5,114,0,0,622,623,5,117, - 0,0,623,624,5,101,0,0,624,108,1,0,0,0,625,626,5,38,0,0,626,627,5,38,0, - 0,627,110,1,0,0,0,628,629,5,60,0,0,629,112,1,0,0,0,630,631,5,60,0,0,631, - 632,5,61,0,0,632,114,1,0,0,0,633,634,5,62,0,0,634,116,1,0,0,0,635,636, - 5,62,0,0,636,637,5,61,0,0,637,118,1,0,0,0,638,639,5,33,0,0,639,640,5, - 61,0,0,640,120,1,0,0,0,641,642,5,35,0,0,642,122,1,0,0,0,643,644,5,110, - 0,0,644,645,5,111,0,0,645,124,1,0,0,0,646,647,5,112,0,0,647,648,5,114, - 0,0,648,649,5,101,0,0,649,650,5,108,0,0,650,651,5,105,0,0,651,652,5,109, - 0,0,652,653,5,105,0,0,653,654,5,110,0,0,654,655,5,97,0,0,655,656,5,114, - 0,0,656,657,5,121,0,0,657,126,1,0,0,0,658,659,5,102,0,0,659,660,5,105, - 0,0,660,661,5,108,0,0,661,662,5,108,0,0,662,128,1,0,0,0,663,664,5,97, - 0,0,664,665,5,99,0,0,665,666,5,116,0,0,666,130,1,0,0,0,667,668,5,97,0, - 0,668,669,5,116,0,0,669,670,5,116,0,0,670,671,5,114,0,0,671,672,5,105, - 0,0,672,673,5,98,0,0,673,674,5,117,0,0,674,675,5,116,0,0,675,676,5,101, - 0,0,676,677,5,115,0,0,677,132,1,0,0,0,678,679,5,99,0,0,679,680,5,114, - 0,0,680,681,5,101,0,0,681,682,5,97,0,0,682,683,5,109,0,0,683,134,1,0, - 0,0,684,685,5,111,0,0,685,686,5,102,0,0,686,687,5,102,0,0,687,136,1,0, - 0,0,688,689,5,100,0,0,689,690,5,97,0,0,690,691,5,116,0,0,691,692,5,97, - 0,0,692,138,1,0,0,0,693,694,5,109,0,0,694,695,5,105,0,0,695,696,5,115, - 0,0,696,697,5,115,0,0,697,698,5,105,0,0,698,699,5,110,0,0,699,700,5,103, - 0,0,700,140,1,0,0,0,701,702,5,115,0,0,702,703,5,116,0,0,703,704,5,97, - 0,0,704,705,5,116,0,0,705,706,5,115,0,0,706,142,1,0,0,0,707,708,5,91, - 0,0,708,144,1,0,0,0,709,710,5,93,0,0,710,146,1,0,0,0,711,712,5,118,0, - 0,712,713,5,97,0,0,713,714,5,114,0,0,714,148,1,0,0,0,715,716,5,118,0, - 0,716,717,5,105,0,0,717,718,5,111,0,0,718,719,5,108,0,0,719,720,5,97, - 0,0,720,721,5,116,0,0,721,722,5,101,0,0,722,723,5,100,0,0,723,150,1,0, - 0,0,724,725,5,118,0,0,725,726,5,97,0,0,726,727,5,99,0,0,727,728,5,95, - 0,0,728,729,5,115,0,0,729,730,5,97,0,0,730,731,5,116,0,0,731,152,1,0, - 0,0,732,733,5,115,0,0,733,734,5,97,0,0,734,735,5,116,0,0,735,154,1,0, - 0,0,736,737,5,65,0,0,737,738,5,67,0,0,738,739,5,84,0,0,739,740,5,84,0, - 0,740,741,5,65,0,0,741,742,5,66,0,0,742,743,5,76,0,0,743,744,5,69,0,0, - 744,156,1,0,0,0,745,746,5,119,0,0,746,747,5,105,0,0,747,748,5,116,0,0, - 748,749,5,104,0,0,749,750,5,45,0,0,750,751,5,97,0,0,751,752,5,108,0,0, - 752,753,5,105,0,0,753,754,5,103,0,0,754,755,5,110,0,0,755,756,5,109,0, - 0,756,757,5,101,0,0,757,758,5,110,0,0,758,759,5,116,0,0,759,760,5,45, - 0,0,760,761,5,115,0,0,761,762,5,116,0,0,762,763,5,114,0,0,763,764,5,97, - 0,0,764,765,5,116,0,0,765,766,5,101,0,0,766,767,5,103,0,0,767,768,5,121, - 0,0,768,158,1,0,0,0,769,770,5,67,0,0,770,771,5,79,0,0,771,772,5,85,0, - 0,772,773,5,78,0,0,773,774,5,84,0,0,774,775,5,84,0,0,775,776,5,65,0,0, - 776,777,5,66,0,0,777,778,5,76,0,0,778,779,5,69,0,0,779,160,1,0,0,0,780, - 781,5,65,0,0,781,782,5,84,0,0,782,783,5,84,0,0,783,784,5,82,0,0,784,785, - 5,73,0,0,785,786,5,66,0,0,786,787,5,85,0,0,787,788,5,84,0,0,788,789,5, - 69,0,0,789,790,5,84,0,0,790,791,5,65,0,0,791,792,5,66,0,0,792,793,5,76, - 0,0,793,794,5,69,0,0,794,162,1,0,0,0,795,796,5,65,0,0,796,797,5,67,0, - 0,797,798,5,84,0,0,798,799,5,73,0,0,799,800,5,86,0,0,800,801,5,73,0,0, - 801,802,5,84,0,0,802,803,5,89,0,0,803,804,5,76,0,0,804,805,5,65,0,0,805, - 806,5,66,0,0,806,807,5,69,0,0,807,808,5,76,0,0,808,164,1,0,0,0,809,810, - 5,76,0,0,810,811,5,79,0,0,811,812,5,71,0,0,812,813,5,83,0,0,813,166,1, - 0,0,0,814,815,5,65,0,0,815,816,5,84,0,0,816,817,5,84,0,0,817,818,5,82, - 0,0,818,819,5,73,0,0,819,820,5,66,0,0,820,821,5,85,0,0,821,822,5,84,0, - 0,822,823,5,69,0,0,823,824,5,83,0,0,824,168,1,0,0,0,825,826,5,97,0,0, - 826,827,5,99,0,0,827,828,5,116,0,0,828,829,5,105,0,0,829,830,5,118,0, - 0,830,831,5,97,0,0,831,832,5,116,0,0,832,833,5,105,0,0,833,834,5,111, - 0,0,834,835,5,110,0,0,835,170,1,0,0,0,836,837,5,116,0,0,837,838,5,97, - 0,0,838,839,5,114,0,0,839,840,5,103,0,0,840,841,5,101,0,0,841,842,5,116, - 0,0,842,172,1,0,0,0,843,844,5,73,0,0,844,845,5,78,0,0,845,846,5,73,0, - 0,846,847,5,84,0,0,847,174,1,0,0,0,848,849,5,69,0,0,849,850,5,78,0,0, - 850,851,5,68,0,0,851,176,1,0,0,0,852,853,5,69,0,0,853,854,5,88,0,0,854, - 855,5,73,0,0,855,856,5,83,0,0,856,857,5,84,0,0,857,858,5,83,0,0,858,178, - 1,0,0,0,859,860,5,65,0,0,860,861,5,66,0,0,861,862,5,83,0,0,862,863,5, - 69,0,0,863,864,5,78,0,0,864,865,5,67,0,0,865,866,5,69,0,0,866,180,1,0, - 0,0,867,868,5,78,0,0,868,869,5,69,0,0,869,870,5,88,0,0,870,871,5,84,0, - 0,871,182,1,0,0,0,872,873,5,79,0,0,873,874,5,82,0,0,874,184,1,0,0,0,875, - 876,5,65,0,0,876,877,5,78,0,0,877,878,5,68,0,0,878,186,1,0,0,0,879,880, - 5,70,0,0,880,881,5,73,0,0,881,882,5,82,0,0,882,883,5,83,0,0,883,884,5, - 84,0,0,884,188,1,0,0,0,885,886,5,76,0,0,886,887,5,65,0,0,887,888,5,83, - 0,0,888,889,5,84,0,0,889,190,1,0,0,0,890,891,5,73,0,0,891,892,5,70,0, - 0,892,192,1,0,0,0,893,894,5,84,0,0,894,895,5,72,0,0,895,896,5,69,0,0, - 896,897,5,78,0,0,897,194,1,0,0,0,898,899,5,69,0,0,899,900,5,76,0,0,900, - 901,5,83,0,0,901,902,5,69,0,0,902,196,1,0,0,0,903,904,5,85,0,0,904,198, - 1,0,0,0,905,906,5,71,0,0,906,200,1,0,0,0,907,908,5,70,0,0,908,202,1,0, - 0,0,909,910,5,97,0,0,910,911,5,117,0,0,911,912,5,116,0,0,912,913,5,111, - 0,0,913,914,5,45,0,0,914,915,5,116,0,0,915,916,5,105,0,0,916,917,5,109, - 0,0,917,918,5,101,0,0,918,919,5,100,0,0,919,204,1,0,0,0,920,921,5,123, - 0,0,921,206,1,0,0,0,922,923,5,125,0,0,923,208,1,0,0,0,924,925,5,80,0, - 0,925,926,5,82,0,0,926,927,5,69,0,0,927,928,5,83,0,0,928,929,5,69,0,0, - 929,930,5,82,0,0,930,931,5,86,0,0,931,932,5,69,0,0,932,210,1,0,0,0,933, - 934,5,116,0,0,934,212,1,0,0,0,935,936,5,84,0,0,936,937,5,72,0,0,937,938, - 5,69,0,0,938,939,5,84,0,0,939,940,5,65,0,0,940,214,1,0,0,0,941,942,5, - 76,0,0,942,216,1,0,0,0,943,944,5,73,0,0,944,945,5,78,0,0,945,946,5,86, - 0,0,946,218,1,0,0,0,947,948,5,82,0,0,948,220,1,0,0,0,949,950,5,77,0,0, - 950,222,1,0,0,0,951,952,5,126,0,0,952,224,1,0,0,0,953,954,5,36,0,0,954, - 226,1,0,0,0,955,956,5,72,0,0,956,957,5,82,0,0,957,958,5,70,0,0,958,228, - 1,0,0,0,959,960,5,84,0,0,960,961,5,65,0,0,961,962,5,66,0,0,962,230,1, - 0,0,0,963,964,5,88,0,0,964,965,5,69,0,0,965,966,5,83,0,0,966,232,1,0, - 0,0,967,971,2,65,90,0,968,970,7,0,0,0,969,968,1,0,0,0,970,973,1,0,0,0, - 971,969,1,0,0,0,971,972,1,0,0,0,972,234,1,0,0,0,973,971,1,0,0,0,974,976, - 2,48,57,0,975,974,1,0,0,0,976,977,1,0,0,0,977,975,1,0,0,0,977,978,1,0, - 0,0,978,236,1,0,0,0,979,981,5,45,0,0,980,979,1,0,0,0,980,981,1,0,0,0, - 981,982,1,0,0,0,982,985,3,235,117,0,983,984,5,46,0,0,984,986,3,235,117, - 0,985,983,1,0,0,0,985,986,1,0,0,0,986,238,1,0,0,0,987,993,5,34,0,0,988, - 992,8,1,0,0,989,990,5,92,0,0,990,992,7,1,0,0,991,988,1,0,0,0,991,989, - 1,0,0,0,992,995,1,0,0,0,993,991,1,0,0,0,993,994,1,0,0,0,994,996,1,0,0, - 0,995,993,1,0,0,0,996,997,5,34,0,0,997,240,1,0,0,0,998,1000,7,2,0,0,999, - 998,1,0,0,0,1000,1001,1,0,0,0,1001,999,1,0,0,0,1001,1002,1,0,0,0,1002, - 1003,1,0,0,0,1003,1004,6,120,0,0,1004,242,1,0,0,0,1005,1006,5,47,0,0, - 1006,1007,5,42,0,0,1007,1011,1,0,0,0,1008,1010,9,0,0,0,1009,1008,1,0, - 0,0,1010,1013,1,0,0,0,1011,1012,1,0,0,0,1011,1009,1,0,0,0,1012,1014,1, - 0,0,0,1013,1011,1,0,0,0,1014,1015,5,42,0,0,1015,1016,5,47,0,0,1016,1017, - 1,0,0,0,1017,1018,6,121,0,0,1018,244,1,0,0,0,1019,1020,5,47,0,0,1020, - 1021,5,47,0,0,1021,1025,1,0,0,0,1022,1024,8,3,0,0,1023,1022,1,0,0,0,1024, - 1027,1,0,0,0,1025,1023,1,0,0,0,1025,1026,1,0,0,0,1026,1028,1,0,0,0,1027, - 1025,1,0,0,0,1028,1029,6,122,0,0,1029,246,1,0,0,0,10,0,971,977,980,985, - 991,993,1001,1011,1025,1,6,0,0 + 1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249, + 1,0,0,0,1,251,1,0,0,0,3,268,1,0,0,0,5,273,1,0,0,0,7,276,1,0,0,0,9,284, + 1,0,0,0,11,288,1,0,0,0,13,293,1,0,0,0,15,301,1,0,0,0,17,310,1,0,0,0,19, + 313,1,0,0,0,21,317,1,0,0,0,23,319,1,0,0,0,25,321,1,0,0,0,27,323,1,0,0, + 0,29,335,1,0,0,0,31,341,1,0,0,0,33,346,1,0,0,0,35,351,1,0,0,0,37,356, + 1,0,0,0,39,366,1,0,0,0,41,380,1,0,0,0,43,390,1,0,0,0,45,407,1,0,0,0,47, + 417,1,0,0,0,49,428,1,0,0,0,51,439,1,0,0,0,53,448,1,0,0,0,55,455,1,0,0, + 0,57,472,1,0,0,0,59,477,1,0,0,0,61,485,1,0,0,0,63,494,1,0,0,0,65,501, + 1,0,0,0,67,510,1,0,0,0,69,516,1,0,0,0,71,524,1,0,0,0,73,531,1,0,0,0,75, + 540,1,0,0,0,77,551,1,0,0,0,79,562,1,0,0,0,81,572,1,0,0,0,83,575,1,0,0, + 0,85,580,1,0,0,0,87,583,1,0,0,0,89,585,1,0,0,0,91,587,1,0,0,0,93,590, + 1,0,0,0,95,593,1,0,0,0,97,597,1,0,0,0,99,603,1,0,0,0,101,610,1,0,0,0, + 103,615,1,0,0,0,105,619,1,0,0,0,107,621,1,0,0,0,109,627,1,0,0,0,111,630, + 1,0,0,0,113,635,1,0,0,0,115,638,1,0,0,0,117,640,1,0,0,0,119,643,1,0,0, + 0,121,645,1,0,0,0,123,648,1,0,0,0,125,651,1,0,0,0,127,653,1,0,0,0,129, + 656,1,0,0,0,131,668,1,0,0,0,133,673,1,0,0,0,135,677,1,0,0,0,137,688,1, + 0,0,0,139,694,1,0,0,0,141,698,1,0,0,0,143,703,1,0,0,0,145,711,1,0,0,0, + 147,717,1,0,0,0,149,719,1,0,0,0,151,721,1,0,0,0,153,725,1,0,0,0,155,734, + 1,0,0,0,157,742,1,0,0,0,159,746,1,0,0,0,161,755,1,0,0,0,163,779,1,0,0, + 0,165,790,1,0,0,0,167,805,1,0,0,0,169,819,1,0,0,0,171,824,1,0,0,0,173, + 835,1,0,0,0,175,846,1,0,0,0,177,853,1,0,0,0,179,858,1,0,0,0,181,862,1, + 0,0,0,183,869,1,0,0,0,185,877,1,0,0,0,187,882,1,0,0,0,189,885,1,0,0,0, + 191,889,1,0,0,0,193,895,1,0,0,0,195,900,1,0,0,0,197,903,1,0,0,0,199,908, + 1,0,0,0,201,913,1,0,0,0,203,915,1,0,0,0,205,917,1,0,0,0,207,919,1,0,0, + 0,209,930,1,0,0,0,211,932,1,0,0,0,213,934,1,0,0,0,215,943,1,0,0,0,217, + 945,1,0,0,0,219,951,1,0,0,0,221,953,1,0,0,0,223,957,1,0,0,0,225,959,1, + 0,0,0,227,961,1,0,0,0,229,963,1,0,0,0,231,965,1,0,0,0,233,969,1,0,0,0, + 235,973,1,0,0,0,237,977,1,0,0,0,239,985,1,0,0,0,241,990,1,0,0,0,243,997, + 1,0,0,0,245,1009,1,0,0,0,247,1015,1,0,0,0,249,1029,1,0,0,0,251,252,5, + 98,0,0,252,253,5,101,0,0,253,254,5,110,0,0,254,255,5,99,0,0,255,256,5, + 104,0,0,256,257,5,109,0,0,257,258,5,97,0,0,258,259,5,114,0,0,259,260, + 5,107,0,0,260,261,5,105,0,0,261,262,5,110,0,0,262,263,5,103,0,0,263,264, + 5,45,0,0,264,265,5,108,0,0,265,266,5,111,0,0,266,267,5,103,0,0,267,2, + 1,0,0,0,268,269,5,108,0,0,269,270,5,111,0,0,270,271,5,97,0,0,271,272, + 5,100,0,0,272,4,1,0,0,0,273,274,5,97,0,0,274,275,5,115,0,0,275,6,1,0, + 0,0,276,277,5,100,0,0,277,278,5,105,0,0,278,279,5,115,0,0,279,280,5,112, + 0,0,280,281,5,108,0,0,281,282,5,97,0,0,282,283,5,121,0,0,283,8,1,0,0, + 0,284,285,5,102,0,0,285,286,5,111,0,0,286,287,5,114,0,0,287,10,1,0,0, + 0,288,289,5,108,0,0,289,290,5,105,0,0,290,291,5,115,0,0,291,292,5,116, + 0,0,292,12,1,0,0,0,293,294,5,100,0,0,294,295,5,114,0,0,295,296,5,111, + 0,0,296,297,5,112,0,0,297,298,5,108,0,0,298,299,5,111,0,0,299,300,5,103, + 0,0,300,14,1,0,0,0,301,302,5,100,0,0,302,303,5,117,0,0,303,304,5,109, + 0,0,304,305,5,112,0,0,305,306,5,45,0,0,306,307,5,101,0,0,307,308,5,110, + 0,0,308,309,5,118,0,0,309,16,1,0,0,0,310,311,5,105,0,0,311,312,5,110, + 0,0,312,18,1,0,0,0,313,314,5,108,0,0,314,315,5,111,0,0,315,316,5,103, + 0,0,316,20,1,0,0,0,317,318,5,59,0,0,318,22,1,0,0,0,319,320,5,58,0,0,320, + 24,1,0,0,0,321,322,5,61,0,0,322,26,1,0,0,0,323,324,5,109,0,0,324,325, + 5,111,0,0,325,326,5,100,0,0,326,327,5,101,0,0,327,328,5,108,0,0,328,329, + 5,45,0,0,329,330,5,99,0,0,330,331,5,104,0,0,331,332,5,101,0,0,332,333, + 5,99,0,0,333,334,5,107,0,0,334,28,1,0,0,0,335,336,5,117,0,0,336,337,5, + 115,0,0,337,338,5,105,0,0,338,339,5,110,0,0,339,340,5,103,0,0,340,30, + 1,0,0,0,341,342,5,111,0,0,342,343,5,118,0,0,343,344,5,101,0,0,344,345, + 5,114,0,0,345,32,1,0,0,0,346,347,5,112,0,0,347,348,5,108,0,0,348,349, + 5,97,0,0,349,350,5,110,0,0,350,34,1,0,0,0,351,352,5,119,0,0,352,353,5, + 105,0,0,353,354,5,116,0,0,354,355,5,104,0,0,355,36,1,0,0,0,356,357,5, + 111,0,0,357,358,5,112,0,0,358,359,5,101,0,0,359,360,5,114,0,0,360,361, + 5,97,0,0,361,362,5,116,0,0,362,363,5,111,0,0,363,364,5,114,0,0,364,365, + 5,115,0,0,365,38,1,0,0,0,366,367,5,109,0,0,367,368,5,117,0,0,368,369, + 5,108,0,0,369,370,5,116,0,0,370,371,5,105,0,0,371,372,5,116,0,0,372,373, + 5,104,0,0,373,374,5,114,0,0,374,375,5,101,0,0,375,376,5,97,0,0,376,377, + 5,100,0,0,377,378,5,101,0,0,378,379,5,100,0,0,379,40,1,0,0,0,380,381, + 5,109,0,0,381,382,5,111,0,0,382,383,5,100,0,0,383,384,5,101,0,0,384,385, + 5,108,0,0,385,386,5,45,0,0,386,387,5,108,0,0,387,388,5,111,0,0,388,389, + 5,103,0,0,389,42,1,0,0,0,390,391,5,102,0,0,391,392,5,114,0,0,392,393, + 5,111,0,0,393,394,5,109,0,0,394,395,5,45,0,0,395,396,5,97,0,0,396,397, + 5,117,0,0,397,398,5,116,0,0,398,399,5,111,0,0,399,400,5,109,0,0,400,401, + 5,97,0,0,401,402,5,116,0,0,402,403,5,97,0,0,403,404,5,45,0,0,404,405, + 5,105,0,0,405,406,5,110,0,0,406,44,1,0,0,0,407,408,5,115,0,0,408,409, + 5,97,0,0,409,410,5,109,0,0,410,411,5,112,0,0,411,412,5,108,0,0,412,413, + 5,101,0,0,413,414,5,45,0,0,414,415,5,116,0,0,415,416,5,111,0,0,416,46, + 1,0,0,0,417,418,5,109,0,0,418,419,5,105,0,0,419,420,5,110,0,0,420,421, + 5,45,0,0,421,422,5,108,0,0,422,423,5,101,0,0,423,424,5,110,0,0,424,425, + 5,103,0,0,425,426,5,116,0,0,426,427,5,104,0,0,427,48,1,0,0,0,428,429, + 5,109,0,0,429,430,5,97,0,0,430,431,5,120,0,0,431,432,5,45,0,0,432,433, + 5,108,0,0,433,434,5,101,0,0,434,435,5,110,0,0,435,436,5,103,0,0,436,437, + 5,116,0,0,437,438,5,104,0,0,438,50,1,0,0,0,439,440,5,110,0,0,440,441, + 5,45,0,0,441,442,5,116,0,0,442,443,5,114,0,0,443,444,5,97,0,0,444,445, + 5,99,0,0,445,446,5,101,0,0,446,447,5,115,0,0,447,52,1,0,0,0,448,449,5, + 115,0,0,449,450,5,97,0,0,450,451,5,109,0,0,451,452,5,112,0,0,452,453, + 5,108,0,0,453,454,5,101,0,0,454,54,1,0,0,0,455,456,5,115,0,0,456,457, + 5,101,0,0,457,458,5,114,0,0,458,459,5,105,0,0,459,460,5,97,0,0,460,461, + 5,108,0,0,461,462,5,105,0,0,462,463,5,122,0,0,463,464,5,101,0,0,464,465, + 5,45,0,0,465,466,5,100,0,0,466,467,5,111,0,0,467,468,5,116,0,0,468,469, + 5,45,0,0,469,470,5,116,0,0,470,471,5,111,0,0,471,56,1,0,0,0,472,473,5, + 102,0,0,473,474,5,105,0,0,474,475,5,108,0,0,475,476,5,101,0,0,476,58, + 1,0,0,0,477,478,5,100,0,0,478,479,5,101,0,0,479,480,5,99,0,0,480,481, + 5,108,0,0,481,482,5,97,0,0,482,483,5,114,0,0,483,484,5,101,0,0,484,60, + 1,0,0,0,485,486,5,116,0,0,486,487,5,101,0,0,487,488,5,109,0,0,488,489, + 5,112,0,0,489,490,5,108,0,0,490,491,5,97,0,0,491,492,5,116,0,0,492,493, + 5,101,0,0,493,62,1,0,0,0,494,495,5,108,0,0,495,496,5,111,0,0,496,497, + 5,103,0,0,497,498,5,116,0,0,498,499,5,111,0,0,499,500,5,112,0,0,500,64, + 1,0,0,0,501,502,5,97,0,0,502,503,5,116,0,0,503,504,5,111,0,0,504,505, + 5,109,0,0,505,506,5,105,0,0,506,507,5,122,0,0,507,508,5,101,0,0,508,509, + 5,33,0,0,509,66,1,0,0,0,510,511,5,108,0,0,511,512,5,97,0,0,512,513,5, + 98,0,0,513,514,5,101,0,0,514,515,5,108,0,0,515,68,1,0,0,0,516,517,5,109, + 0,0,517,518,5,97,0,0,518,519,5,120,0,0,519,520,5,105,0,0,520,521,5,109, + 0,0,521,522,5,117,0,0,522,523,5,109,0,0,523,70,1,0,0,0,524,525,5,115, + 0,0,525,526,5,116,0,0,526,527,5,114,0,0,527,528,5,108,0,0,528,529,5,101, + 0,0,529,530,5,110,0,0,530,72,1,0,0,0,531,532,5,115,0,0,532,533,5,116, + 0,0,533,534,5,114,0,0,534,535,5,97,0,0,535,536,5,116,0,0,536,537,5,101, + 0,0,537,538,5,103,0,0,538,539,5,121,0,0,539,74,1,0,0,0,540,541,5,103, + 0,0,541,542,5,114,0,0,542,543,5,111,0,0,543,544,5,117,0,0,544,545,5,110, + 0,0,545,546,5,100,0,0,546,547,5,105,0,0,547,548,5,110,0,0,548,549,5,103, + 0,0,549,550,5,33,0,0,550,76,1,0,0,0,551,552,5,113,0,0,552,553,5,117,0, + 0,553,554,5,101,0,0,554,555,5,114,0,0,555,556,5,121,0,0,556,557,5,45, + 0,0,557,558,5,112,0,0,558,559,5,108,0,0,559,560,5,97,0,0,560,561,5,110, + 0,0,561,78,1,0,0,0,562,563,5,113,0,0,563,564,5,117,0,0,564,565,5,101, + 0,0,565,566,5,114,0,0,566,567,5,121,0,0,567,568,5,112,0,0,568,569,5,108, + 0,0,569,570,5,97,0,0,570,571,5,110,0,0,571,80,1,0,0,0,572,573,5,58,0, + 0,573,574,5,61,0,0,574,82,1,0,0,0,575,576,5,97,0,0,576,577,5,114,0,0, + 577,578,5,103,0,0,578,579,5,115,0,0,579,84,1,0,0,0,580,581,5,61,0,0,581, + 582,5,62,0,0,582,86,1,0,0,0,583,584,5,40,0,0,584,88,1,0,0,0,585,586,5, + 41,0,0,586,90,1,0,0,0,587,588,5,66,0,0,588,589,5,88,0,0,589,92,1,0,0, + 0,590,591,5,88,0,0,591,592,5,66,0,0,592,94,1,0,0,0,593,594,5,38,0,0,594, + 595,5,70,0,0,595,596,5,116,0,0,596,96,1,0,0,0,597,598,5,38,0,0,598,599, + 5,70,0,0,599,600,5,116,0,0,600,601,5,33,0,0,601,602,5,88,0,0,602,98,1, + 0,0,0,603,604,5,38,0,0,604,605,5,70,0,0,605,606,5,116,0,0,606,607,5,33, + 0,0,607,608,5,87,0,0,608,609,5,88,0,0,609,100,1,0,0,0,610,611,5,38,0, + 0,611,612,5,88,0,0,612,613,5,71,0,0,613,614,5,116,0,0,614,102,1,0,0,0, + 615,616,5,38,0,0,616,617,5,71,0,0,617,618,5,116,0,0,618,104,1,0,0,0,619, + 620,5,44,0,0,620,106,1,0,0,0,621,622,5,119,0,0,622,623,5,104,0,0,623, + 624,5,101,0,0,624,625,5,114,0,0,625,626,5,101,0,0,626,108,1,0,0,0,627, + 628,5,124,0,0,628,629,5,124,0,0,629,110,1,0,0,0,630,631,5,116,0,0,631, + 632,5,114,0,0,632,633,5,117,0,0,633,634,5,101,0,0,634,112,1,0,0,0,635, + 636,5,38,0,0,636,637,5,38,0,0,637,114,1,0,0,0,638,639,5,60,0,0,639,116, + 1,0,0,0,640,641,5,60,0,0,641,642,5,61,0,0,642,118,1,0,0,0,643,644,5,62, + 0,0,644,120,1,0,0,0,645,646,5,62,0,0,646,647,5,61,0,0,647,122,1,0,0,0, + 648,649,5,33,0,0,649,650,5,61,0,0,650,124,1,0,0,0,651,652,5,35,0,0,652, + 126,1,0,0,0,653,654,5,110,0,0,654,655,5,111,0,0,655,128,1,0,0,0,656,657, + 5,112,0,0,657,658,5,114,0,0,658,659,5,101,0,0,659,660,5,108,0,0,660,661, + 5,105,0,0,661,662,5,109,0,0,662,663,5,105,0,0,663,664,5,110,0,0,664,665, + 5,97,0,0,665,666,5,114,0,0,666,667,5,121,0,0,667,130,1,0,0,0,668,669, + 5,102,0,0,669,670,5,105,0,0,670,671,5,108,0,0,671,672,5,108,0,0,672,132, + 1,0,0,0,673,674,5,97,0,0,674,675,5,99,0,0,675,676,5,116,0,0,676,134,1, + 0,0,0,677,678,5,97,0,0,678,679,5,116,0,0,679,680,5,116,0,0,680,681,5, + 114,0,0,681,682,5,105,0,0,682,683,5,98,0,0,683,684,5,117,0,0,684,685, + 5,116,0,0,685,686,5,101,0,0,686,687,5,115,0,0,687,136,1,0,0,0,688,689, + 5,99,0,0,689,690,5,114,0,0,690,691,5,101,0,0,691,692,5,97,0,0,692,693, + 5,109,0,0,693,138,1,0,0,0,694,695,5,111,0,0,695,696,5,102,0,0,696,697, + 5,102,0,0,697,140,1,0,0,0,698,699,5,100,0,0,699,700,5,97,0,0,700,701, + 5,116,0,0,701,702,5,97,0,0,702,142,1,0,0,0,703,704,5,109,0,0,704,705, + 5,105,0,0,705,706,5,115,0,0,706,707,5,115,0,0,707,708,5,105,0,0,708,709, + 5,110,0,0,709,710,5,103,0,0,710,144,1,0,0,0,711,712,5,115,0,0,712,713, + 5,116,0,0,713,714,5,97,0,0,714,715,5,116,0,0,715,716,5,115,0,0,716,146, + 1,0,0,0,717,718,5,91,0,0,718,148,1,0,0,0,719,720,5,93,0,0,720,150,1,0, + 0,0,721,722,5,118,0,0,722,723,5,97,0,0,723,724,5,114,0,0,724,152,1,0, + 0,0,725,726,5,118,0,0,726,727,5,105,0,0,727,728,5,111,0,0,728,729,5,108, + 0,0,729,730,5,97,0,0,730,731,5,116,0,0,731,732,5,101,0,0,732,733,5,100, + 0,0,733,154,1,0,0,0,734,735,5,118,0,0,735,736,5,97,0,0,736,737,5,99,0, + 0,737,738,5,95,0,0,738,739,5,115,0,0,739,740,5,97,0,0,740,741,5,116,0, + 0,741,156,1,0,0,0,742,743,5,115,0,0,743,744,5,97,0,0,744,745,5,116,0, + 0,745,158,1,0,0,0,746,747,5,65,0,0,747,748,5,67,0,0,748,749,5,84,0,0, + 749,750,5,84,0,0,750,751,5,65,0,0,751,752,5,66,0,0,752,753,5,76,0,0,753, + 754,5,69,0,0,754,160,1,0,0,0,755,756,5,119,0,0,756,757,5,105,0,0,757, + 758,5,116,0,0,758,759,5,104,0,0,759,760,5,45,0,0,760,761,5,97,0,0,761, + 762,5,108,0,0,762,763,5,105,0,0,763,764,5,103,0,0,764,765,5,110,0,0,765, + 766,5,109,0,0,766,767,5,101,0,0,767,768,5,110,0,0,768,769,5,116,0,0,769, + 770,5,45,0,0,770,771,5,115,0,0,771,772,5,116,0,0,772,773,5,114,0,0,773, + 774,5,97,0,0,774,775,5,116,0,0,775,776,5,101,0,0,776,777,5,103,0,0,777, + 778,5,121,0,0,778,162,1,0,0,0,779,780,5,67,0,0,780,781,5,79,0,0,781,782, + 5,85,0,0,782,783,5,78,0,0,783,784,5,84,0,0,784,785,5,84,0,0,785,786,5, + 65,0,0,786,787,5,66,0,0,787,788,5,76,0,0,788,789,5,69,0,0,789,164,1,0, + 0,0,790,791,5,65,0,0,791,792,5,84,0,0,792,793,5,84,0,0,793,794,5,82,0, + 0,794,795,5,73,0,0,795,796,5,66,0,0,796,797,5,85,0,0,797,798,5,84,0,0, + 798,799,5,69,0,0,799,800,5,84,0,0,800,801,5,65,0,0,801,802,5,66,0,0,802, + 803,5,76,0,0,803,804,5,69,0,0,804,166,1,0,0,0,805,806,5,65,0,0,806,807, + 5,67,0,0,807,808,5,84,0,0,808,809,5,73,0,0,809,810,5,86,0,0,810,811,5, + 73,0,0,811,812,5,84,0,0,812,813,5,89,0,0,813,814,5,76,0,0,814,815,5,65, + 0,0,815,816,5,66,0,0,816,817,5,69,0,0,817,818,5,76,0,0,818,168,1,0,0, + 0,819,820,5,76,0,0,820,821,5,79,0,0,821,822,5,71,0,0,822,823,5,83,0,0, + 823,170,1,0,0,0,824,825,5,65,0,0,825,826,5,84,0,0,826,827,5,84,0,0,827, + 828,5,82,0,0,828,829,5,73,0,0,829,830,5,66,0,0,830,831,5,85,0,0,831,832, + 5,84,0,0,832,833,5,69,0,0,833,834,5,83,0,0,834,172,1,0,0,0,835,836,5, + 97,0,0,836,837,5,99,0,0,837,838,5,116,0,0,838,839,5,105,0,0,839,840,5, + 118,0,0,840,841,5,97,0,0,841,842,5,116,0,0,842,843,5,105,0,0,843,844, + 5,111,0,0,844,845,5,110,0,0,845,174,1,0,0,0,846,847,5,116,0,0,847,848, + 5,97,0,0,848,849,5,114,0,0,849,850,5,103,0,0,850,851,5,101,0,0,851,852, + 5,116,0,0,852,176,1,0,0,0,853,854,5,73,0,0,854,855,5,78,0,0,855,856,5, + 73,0,0,856,857,5,84,0,0,857,178,1,0,0,0,858,859,5,69,0,0,859,860,5,78, + 0,0,860,861,5,68,0,0,861,180,1,0,0,0,862,863,5,69,0,0,863,864,5,88,0, + 0,864,865,5,73,0,0,865,866,5,83,0,0,866,867,5,84,0,0,867,868,5,83,0,0, + 868,182,1,0,0,0,869,870,5,65,0,0,870,871,5,66,0,0,871,872,5,83,0,0,872, + 873,5,69,0,0,873,874,5,78,0,0,874,875,5,67,0,0,875,876,5,69,0,0,876,184, + 1,0,0,0,877,878,5,78,0,0,878,879,5,69,0,0,879,880,5,88,0,0,880,881,5, + 84,0,0,881,186,1,0,0,0,882,883,5,79,0,0,883,884,5,82,0,0,884,188,1,0, + 0,0,885,886,5,65,0,0,886,887,5,78,0,0,887,888,5,68,0,0,888,190,1,0,0, + 0,889,890,5,70,0,0,890,891,5,73,0,0,891,892,5,82,0,0,892,893,5,83,0,0, + 893,894,5,84,0,0,894,192,1,0,0,0,895,896,5,76,0,0,896,897,5,65,0,0,897, + 898,5,83,0,0,898,899,5,84,0,0,899,194,1,0,0,0,900,901,5,73,0,0,901,902, + 5,70,0,0,902,196,1,0,0,0,903,904,5,84,0,0,904,905,5,72,0,0,905,906,5, + 69,0,0,906,907,5,78,0,0,907,198,1,0,0,0,908,909,5,69,0,0,909,910,5,76, + 0,0,910,911,5,83,0,0,911,912,5,69,0,0,912,200,1,0,0,0,913,914,5,85,0, + 0,914,202,1,0,0,0,915,916,5,71,0,0,916,204,1,0,0,0,917,918,5,70,0,0,918, + 206,1,0,0,0,919,920,5,97,0,0,920,921,5,117,0,0,921,922,5,116,0,0,922, + 923,5,111,0,0,923,924,5,45,0,0,924,925,5,116,0,0,925,926,5,105,0,0,926, + 927,5,109,0,0,927,928,5,101,0,0,928,929,5,100,0,0,929,208,1,0,0,0,930, + 931,5,123,0,0,931,210,1,0,0,0,932,933,5,125,0,0,933,212,1,0,0,0,934,935, + 5,80,0,0,935,936,5,82,0,0,936,937,5,69,0,0,937,938,5,83,0,0,938,939,5, + 69,0,0,939,940,5,82,0,0,940,941,5,86,0,0,941,942,5,69,0,0,942,214,1,0, + 0,0,943,944,5,116,0,0,944,216,1,0,0,0,945,946,5,84,0,0,946,947,5,72,0, + 0,947,948,5,69,0,0,948,949,5,84,0,0,949,950,5,65,0,0,950,218,1,0,0,0, + 951,952,5,76,0,0,952,220,1,0,0,0,953,954,5,73,0,0,954,955,5,78,0,0,955, + 956,5,86,0,0,956,222,1,0,0,0,957,958,5,82,0,0,958,224,1,0,0,0,959,960, + 5,77,0,0,960,226,1,0,0,0,961,962,5,126,0,0,962,228,1,0,0,0,963,964,5, + 36,0,0,964,230,1,0,0,0,965,966,5,72,0,0,966,967,5,82,0,0,967,968,5,70, + 0,0,968,232,1,0,0,0,969,970,5,84,0,0,970,971,5,65,0,0,971,972,5,66,0, + 0,972,234,1,0,0,0,973,974,5,88,0,0,974,975,5,69,0,0,975,976,5,83,0,0, + 976,236,1,0,0,0,977,981,2,65,90,0,978,980,7,0,0,0,979,978,1,0,0,0,980, + 983,1,0,0,0,981,979,1,0,0,0,981,982,1,0,0,0,982,238,1,0,0,0,983,981,1, + 0,0,0,984,986,2,48,57,0,985,984,1,0,0,0,986,987,1,0,0,0,987,985,1,0,0, + 0,987,988,1,0,0,0,988,240,1,0,0,0,989,991,5,45,0,0,990,989,1,0,0,0,990, + 991,1,0,0,0,991,992,1,0,0,0,992,995,3,239,119,0,993,994,5,46,0,0,994, + 996,3,239,119,0,995,993,1,0,0,0,995,996,1,0,0,0,996,242,1,0,0,0,997,1003, + 5,34,0,0,998,1002,8,1,0,0,999,1000,5,92,0,0,1000,1002,7,1,0,0,1001,998, + 1,0,0,0,1001,999,1,0,0,0,1002,1005,1,0,0,0,1003,1001,1,0,0,0,1003,1004, + 1,0,0,0,1004,1006,1,0,0,0,1005,1003,1,0,0,0,1006,1007,5,34,0,0,1007,244, + 1,0,0,0,1008,1010,7,2,0,0,1009,1008,1,0,0,0,1010,1011,1,0,0,0,1011,1009, + 1,0,0,0,1011,1012,1,0,0,0,1012,1013,1,0,0,0,1013,1014,6,122,0,0,1014, + 246,1,0,0,0,1015,1016,5,47,0,0,1016,1017,5,42,0,0,1017,1021,1,0,0,0,1018, + 1020,9,0,0,0,1019,1018,1,0,0,0,1020,1023,1,0,0,0,1021,1022,1,0,0,0,1021, + 1019,1,0,0,0,1022,1024,1,0,0,0,1023,1021,1,0,0,0,1024,1025,5,42,0,0,1025, + 1026,5,47,0,0,1026,1027,1,0,0,0,1027,1028,6,123,0,0,1028,248,1,0,0,0, + 1029,1030,5,47,0,0,1030,1031,5,47,0,0,1031,1035,1,0,0,0,1032,1034,8,3, + 0,0,1033,1032,1,0,0,0,1034,1037,1,0,0,0,1035,1033,1,0,0,0,1035,1036,1, + 0,0,0,1036,1038,1,0,0,0,1037,1035,1,0,0,0,1038,1039,6,124,0,0,1039,250, + 1,0,0,0,10,0,981,987,990,995,1001,1003,1011,1021,1035,1,6,0,0 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); diff --git a/src/knobab/server/query_manager/KnoBABQueryParser.cpp b/src/knobab/server/query_manager/KnoBABQueryParser.cpp index 4c5be49..93a18ca 100644 --- a/src/knobab/server/query_manager/KnoBABQueryParser.cpp +++ b/src/knobab/server/query_manager/KnoBABQueryParser.cpp @@ -62,35 +62,36 @@ void knobabqueryParserInitialize() { "'min-length'", "'max-length'", "'n-traces'", "'sample'", "'serialize-dot-to'", "'file'", "'declare'", "'template'", "'logtop'", "'atomize!'", "'label'", "'maximum'", "'strlen'", "'strategy'", "'grounding!'", "'query-plan'", - "'queryplan'", "':='", "'args'", "'=>'", "'('", "')'", "'&Ft'", "'&Ft!X'", - "'&Ft!WX'", "'&XGt'", "'&Gt'", "','", "'where'", "'||'", "'true'", - "'&&'", "'<'", "'<='", "'>'", "'>='", "'!='", "'#'", "'no'", "'preliminary'", - "'fill'", "'act'", "'attributes'", "'cream'", "'off'", "'data'", "'missing'", - "'stats'", "'['", "']'", "'var'", "'violated'", "'vac_sat'", "'sat'", - "'ACTTABLE'", "'with-alignment-strategy'", "'COUNTTABLE'", "'ATTRIBUTETABLE'", - "'ACTIVITYLABEL'", "'LOGS'", "'ATTRIBUTES'", "'activation'", "'target'", - "'INIT'", "'END'", "'EXISTS'", "'ABSENCE'", "'NEXT'", "'OR'", "'AND'", - "'FIRST'", "'LAST'", "'IF'", "'THEN'", "'ELSE'", "'U'", "'G'", "'F'", - "'auto-timed'", "'{'", "'}'", "'PRESERVE'", "'t'", "'THETA'", "'L'", - "'INV'", "'R'", "'M'", "'~'", "'$'", "'HRF'", "'TAB'", "'XES'" + "'queryplan'", "':='", "'args'", "'=>'", "'('", "')'", "'BX'", "'XB'", + "'&Ft'", "'&Ft!X'", "'&Ft!WX'", "'&XGt'", "'&Gt'", "','", "'where'", + "'||'", "'true'", "'&&'", "'<'", "'<='", "'>'", "'>='", "'!='", "'#'", + "'no'", "'preliminary'", "'fill'", "'act'", "'attributes'", "'cream'", + "'off'", "'data'", "'missing'", "'stats'", "'['", "']'", "'var'", + "'violated'", "'vac_sat'", "'sat'", "'ACTTABLE'", "'with-alignment-strategy'", + "'COUNTTABLE'", "'ATTRIBUTETABLE'", "'ACTIVITYLABEL'", "'LOGS'", "'ATTRIBUTES'", + "'activation'", "'target'", "'INIT'", "'END'", "'EXISTS'", "'ABSENCE'", + "'NEXT'", "'OR'", "'AND'", "'FIRST'", "'LAST'", "'IF'", "'THEN'", + "'ELSE'", "'U'", "'G'", "'F'", "'auto-timed'", "'{'", "'}'", "'PRESERVE'", + "'t'", "'THETA'", "'L'", "'INV'", "'R'", "'M'", "'~'", "'$'", "'HRF'", + "'TAB'", "'XES'" }, std::vector{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "VIOLATED", "VAC_SAT", "SAT", "ACT_TABLE", - "WITH_ALIGNMENT_STRATEGY", "CNT_TABLE", "ATT_TABLE", "ACTIVITYLABEL", - "LOGS", "ATT", "ACTIVATION", "TARGET", "INIT", "END", "EXISTS", "ABSENCE", - "NEXT", "OR", "AND", "FIRST", "LAST", "IF", "THEN", "ELSE", "UNTIL", - "BOX", "DIAMOND", "AUTO_TIMED", "LPAREN", "RPAREN", "PRESERVE", "TIMED", - "THETA", "LEFT", "INV", "RIGHT", "MIDDLE", "NEGATED", "JOLLY", "HRF", - "TAB", "XES", "LABEL", "INTNUMBER", "NUMBER", "STRING", "SPACE", "COMMENT", - "LINE_COMMENT" + "", "", "", "", "", "", "", "", "", "VIOLATED", "VAC_SAT", "SAT", + "ACT_TABLE", "WITH_ALIGNMENT_STRATEGY", "CNT_TABLE", "ATT_TABLE", + "ACTIVITYLABEL", "LOGS", "ATT", "ACTIVATION", "TARGET", "INIT", "END", + "EXISTS", "ABSENCE", "NEXT", "OR", "AND", "FIRST", "LAST", "IF", "THEN", + "ELSE", "UNTIL", "BOX", "DIAMOND", "AUTO_TIMED", "LPAREN", "RPAREN", + "PRESERVE", "TIMED", "THETA", "LEFT", "INV", "RIGHT", "MIDDLE", "NEGATED", + "JOLLY", "HRF", "TAB", "XES", "LABEL", "INTNUMBER", "NUMBER", "STRING", + "SPACE", "COMMENT", "LINE_COMMENT" } ); static const int32_t serializedATNSegment[] = { - 4,1,123,645,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2, + 4,1,125,673,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2, 7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7, 14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7, 21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,7, @@ -128,200 +129,212 @@ void knobabqueryParserInitialize() { 19,1,19,1,19,1,19,1,19,3,19,454,8,19,1,19,3,19,457,8,19,1,19,1,19,1,19, 1,19,3,19,463,8,19,1,19,3,19,466,8,19,1,19,1,19,1,19,1,19,3,19,472,8, 19,1,19,3,19,475,8,19,1,19,1,19,1,19,1,19,3,19,481,8,19,1,19,3,19,484, - 8,19,1,19,1,19,1,19,1,19,3,19,490,8,19,1,19,3,19,493,8,19,1,19,5,19,496, - 8,19,10,19,12,19,499,9,19,1,20,5,20,502,8,20,10,20,12,20,505,9,20,1,21, - 1,21,1,21,1,21,1,21,4,21,512,8,21,11,21,12,21,513,1,21,1,21,1,21,1,21, - 3,21,520,8,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,529,8,21,1,22,1, - 22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,3,23,541,8,23,1,24,1,24,1, - 24,1,24,1,24,3,24,548,8,24,1,25,3,25,551,8,25,1,25,1,25,1,25,1,25,1,25, - 3,25,558,8,25,1,26,1,26,1,26,1,26,1,26,1,26,3,26,566,8,26,1,27,1,27,1, - 27,1,28,1,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1, - 31,1,32,1,32,1,32,1,33,1,33,1,33,1,34,1,34,1,34,1,35,3,35,595,8,35,1, - 35,3,35,598,8,35,1,35,3,35,601,8,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36, - 1,36,5,36,611,8,36,10,36,12,36,614,9,36,1,36,1,36,1,36,1,36,1,36,1,37, - 1,37,1,37,5,37,624,8,37,10,37,12,37,627,9,37,1,37,5,37,630,8,37,10,37, - 12,37,633,9,37,1,37,1,37,1,38,4,38,638,8,38,11,38,12,38,639,1,39,1,39, - 1,39,1,39,0,1,38,40,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34, - 36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,0,5, - 1,0,82,84,1,0,115,116,1,0,119,120,2,0,113,113,118,118,1,0,85,86,735,0, - 88,1,0,0,0,2,90,1,0,0,0,4,93,1,0,0,0,6,128,1,0,0,0,8,130,1,0,0,0,10,137, - 1,0,0,0,12,150,1,0,0,0,14,158,1,0,0,0,16,162,1,0,0,0,18,171,1,0,0,0,20, - 175,1,0,0,0,22,202,1,0,0,0,24,246,1,0,0,0,26,248,1,0,0,0,28,264,1,0,0, - 0,30,279,1,0,0,0,32,283,1,0,0,0,34,295,1,0,0,0,36,303,1,0,0,0,38,400, - 1,0,0,0,40,503,1,0,0,0,42,528,1,0,0,0,44,530,1,0,0,0,46,540,1,0,0,0,48, - 547,1,0,0,0,50,550,1,0,0,0,52,565,1,0,0,0,54,567,1,0,0,0,56,570,1,0,0, - 0,58,572,1,0,0,0,60,576,1,0,0,0,62,580,1,0,0,0,64,584,1,0,0,0,66,587, - 1,0,0,0,68,590,1,0,0,0,70,594,1,0,0,0,72,606,1,0,0,0,74,620,1,0,0,0,76, - 637,1,0,0,0,78,641,1,0,0,0,80,89,3,4,2,0,81,89,3,6,3,0,82,89,3,20,10, - 0,83,89,3,32,16,0,84,89,3,2,1,0,85,89,3,8,4,0,86,89,3,22,11,0,87,89,3, - 24,12,0,88,80,1,0,0,0,88,81,1,0,0,0,88,82,1,0,0,0,88,83,1,0,0,0,88,84, - 1,0,0,0,88,85,1,0,0,0,88,86,1,0,0,0,88,87,1,0,0,0,89,1,1,0,0,0,90,91, - 5,1,0,0,91,92,5,120,0,0,92,3,1,0,0,0,93,98,5,2,0,0,94,99,5,114,0,0,95, - 99,5,115,0,0,96,99,5,116,0,0,97,99,3,10,5,0,98,94,1,0,0,0,98,95,1,0,0, - 0,98,96,1,0,0,0,98,97,1,0,0,0,99,100,1,0,0,0,100,102,5,120,0,0,101,103, - 3,64,32,0,102,101,1,0,0,0,102,103,1,0,0,0,103,105,1,0,0,0,104,106,3,68, - 34,0,105,104,1,0,0,0,105,106,1,0,0,0,106,108,1,0,0,0,107,109,3,66,33, - 0,108,107,1,0,0,0,108,109,1,0,0,0,109,110,1,0,0,0,110,111,5,3,0,0,111, - 112,5,120,0,0,112,5,1,0,0,0,113,118,5,4,0,0,114,119,5,78,0,0,115,119, - 5,80,0,0,116,117,5,81,0,0,117,119,5,120,0,0,118,114,1,0,0,0,118,115,1, - 0,0,0,118,116,1,0,0,0,119,120,1,0,0,0,120,121,5,5,0,0,121,129,5,120,0, - 0,122,123,5,6,0,0,123,124,7,0,0,0,124,125,5,5,0,0,125,129,5,120,0,0,126, - 127,5,7,0,0,127,129,5,120,0,0,128,113,1,0,0,0,128,122,1,0,0,0,128,126, - 1,0,0,0,129,7,1,0,0,0,130,131,5,8,0,0,131,132,5,120,0,0,132,133,5,3,0, - 0,133,134,7,1,0,0,134,135,5,9,0,0,135,136,5,120,0,0,136,9,1,0,0,0,137, - 138,5,10,0,0,138,144,5,103,0,0,139,140,3,12,6,0,140,141,5,11,0,0,141, - 143,1,0,0,0,142,139,1,0,0,0,143,146,1,0,0,0,144,142,1,0,0,0,144,145,1, - 0,0,0,145,147,1,0,0,0,146,144,1,0,0,0,147,148,3,12,6,0,148,149,5,104, - 0,0,149,11,1,0,0,0,150,151,3,16,8,0,151,155,5,12,0,0,152,154,3,14,7,0, - 153,152,1,0,0,0,154,157,1,0,0,0,155,153,1,0,0,0,155,156,1,0,0,0,156,13, - 1,0,0,0,157,155,1,0,0,0,158,160,5,117,0,0,159,161,3,16,8,0,160,159,1, - 0,0,0,160,161,1,0,0,0,161,15,1,0,0,0,162,166,5,103,0,0,163,165,3,18,9, - 0,164,163,1,0,0,0,165,168,1,0,0,0,166,164,1,0,0,0,166,167,1,0,0,0,167, - 169,1,0,0,0,168,166,1,0,0,0,169,170,5,104,0,0,170,17,1,0,0,0,171,172, - 3,78,39,0,172,173,5,13,0,0,173,174,7,2,0,0,174,19,1,0,0,0,175,176,5,14, - 0,0,176,177,3,24,12,0,177,178,5,15,0,0,178,179,5,120,0,0,179,180,5,16, - 0,0,180,181,5,120,0,0,181,182,5,17,0,0,182,183,5,120,0,0,183,187,1,0, - 0,0,184,185,5,18,0,0,185,186,5,19,0,0,186,188,5,120,0,0,187,184,1,0,0, - 0,187,188,1,0,0,0,188,191,1,0,0,0,189,190,5,20,0,0,190,192,5,118,0,0, - 191,189,1,0,0,0,191,192,1,0,0,0,192,194,1,0,0,0,193,195,3,30,15,0,194, - 193,1,0,0,0,194,195,1,0,0,0,195,197,1,0,0,0,196,198,3,26,13,0,197,196, - 1,0,0,0,197,198,1,0,0,0,198,200,1,0,0,0,199,201,3,28,14,0,200,199,1,0, - 0,0,200,201,1,0,0,0,201,21,1,0,0,0,202,203,5,21,0,0,203,204,3,24,12,0, - 204,205,5,22,0,0,205,219,5,120,0,0,206,207,5,23,0,0,207,208,7,1,0,0,208, - 209,5,120,0,0,209,210,5,24,0,0,210,211,5,118,0,0,211,212,5,25,0,0,212, - 213,5,118,0,0,213,214,5,26,0,0,214,217,5,118,0,0,215,216,5,27,0,0,216, - 218,5,119,0,0,217,215,1,0,0,0,217,218,1,0,0,0,218,220,1,0,0,0,219,206, - 1,0,0,0,219,220,1,0,0,0,220,223,1,0,0,0,221,222,5,79,0,0,222,224,5,120, - 0,0,223,221,1,0,0,0,223,224,1,0,0,0,224,227,1,0,0,0,225,226,5,28,0,0, - 226,228,5,120,0,0,227,225,1,0,0,0,227,228,1,0,0,0,228,230,1,0,0,0,229, - 231,3,26,13,0,230,229,1,0,0,0,230,231,1,0,0,0,231,233,1,0,0,0,232,234, - 3,28,14,0,233,232,1,0,0,0,233,234,1,0,0,0,234,236,1,0,0,0,235,237,3,8, - 4,0,236,235,1,0,0,0,236,237,1,0,0,0,237,23,1,0,0,0,238,239,5,29,0,0,239, - 247,5,120,0,0,240,241,5,30,0,0,241,247,3,40,20,0,242,243,5,31,0,0,243, - 244,5,120,0,0,244,245,5,32,0,0,245,247,5,118,0,0,246,238,1,0,0,0,246, - 240,1,0,0,0,246,242,1,0,0,0,247,25,1,0,0,0,248,252,5,33,0,0,249,250,5, - 18,0,0,250,251,5,34,0,0,251,253,5,120,0,0,252,249,1,0,0,0,252,253,1,0, - 0,0,253,257,1,0,0,0,254,255,5,35,0,0,255,256,5,36,0,0,256,258,5,118,0, - 0,257,254,1,0,0,0,257,258,1,0,0,0,258,262,1,0,0,0,259,260,5,18,0,0,260, - 261,5,37,0,0,261,263,5,120,0,0,262,259,1,0,0,0,262,263,1,0,0,0,263,27, - 1,0,0,0,264,268,5,38,0,0,265,266,5,18,0,0,266,267,5,37,0,0,267,269,5, - 120,0,0,268,265,1,0,0,0,268,269,1,0,0,0,269,271,1,0,0,0,270,272,3,58, - 29,0,271,270,1,0,0,0,271,272,1,0,0,0,272,274,1,0,0,0,273,275,3,60,30, - 0,274,273,1,0,0,0,274,275,1,0,0,0,275,277,1,0,0,0,276,278,3,62,31,0,277, - 276,1,0,0,0,277,278,1,0,0,0,278,29,1,0,0,0,279,280,5,4,0,0,280,281,5, - 39,0,0,281,31,1,0,0,0,282,284,5,102,0,0,283,282,1,0,0,0,283,284,1,0,0, - 0,284,285,1,0,0,0,285,286,5,40,0,0,286,287,5,120,0,0,287,289,5,103,0, - 0,288,290,3,34,17,0,289,288,1,0,0,0,290,291,1,0,0,0,291,289,1,0,0,0,291, - 292,1,0,0,0,292,293,1,0,0,0,293,294,5,104,0,0,294,33,1,0,0,0,295,296, - 5,31,0,0,296,298,5,120,0,0,297,299,3,36,18,0,298,297,1,0,0,0,298,299, - 1,0,0,0,299,300,1,0,0,0,300,301,5,41,0,0,301,302,3,38,19,0,302,35,1,0, - 0,0,303,304,5,42,0,0,304,305,5,118,0,0,305,37,1,0,0,0,306,307,6,19,-1, - 0,307,309,5,87,0,0,308,310,5,106,0,0,309,308,1,0,0,0,309,310,1,0,0,0, - 310,312,1,0,0,0,311,313,3,54,27,0,312,311,1,0,0,0,312,313,1,0,0,0,313, - 315,1,0,0,0,314,316,3,56,28,0,315,314,1,0,0,0,315,316,1,0,0,0,316,401, - 1,0,0,0,317,319,5,88,0,0,318,320,5,106,0,0,319,318,1,0,0,0,319,320,1, - 0,0,0,320,322,1,0,0,0,321,323,3,54,27,0,322,321,1,0,0,0,322,323,1,0,0, - 0,323,325,1,0,0,0,324,326,3,56,28,0,325,324,1,0,0,0,325,326,1,0,0,0,326, - 401,1,0,0,0,327,329,5,95,0,0,328,330,3,56,28,0,329,328,1,0,0,0,329,330, - 1,0,0,0,330,401,1,0,0,0,331,333,5,94,0,0,332,334,3,56,28,0,333,332,1, - 0,0,0,333,334,1,0,0,0,334,401,1,0,0,0,335,337,5,89,0,0,336,338,5,112, - 0,0,337,336,1,0,0,0,337,338,1,0,0,0,338,339,1,0,0,0,339,341,7,3,0,0,340, - 342,5,106,0,0,341,340,1,0,0,0,341,342,1,0,0,0,342,344,1,0,0,0,343,345, - 3,54,27,0,344,343,1,0,0,0,344,345,1,0,0,0,345,347,1,0,0,0,346,348,3,56, - 28,0,347,346,1,0,0,0,347,348,1,0,0,0,348,401,1,0,0,0,349,350,5,90,0,0, - 350,352,7,3,0,0,351,353,5,106,0,0,352,351,1,0,0,0,352,353,1,0,0,0,353, - 355,1,0,0,0,354,356,3,54,27,0,355,354,1,0,0,0,355,356,1,0,0,0,356,358, - 1,0,0,0,357,359,3,56,28,0,358,357,1,0,0,0,358,359,1,0,0,0,359,401,1,0, - 0,0,360,361,5,91,0,0,361,401,3,38,19,15,362,364,5,96,0,0,363,365,5,106, - 0,0,364,363,1,0,0,0,364,365,1,0,0,0,365,366,1,0,0,0,366,367,3,38,19,0, - 367,368,5,97,0,0,368,370,3,38,19,0,369,371,5,107,0,0,370,369,1,0,0,0, - 370,371,1,0,0,0,371,373,1,0,0,0,372,374,5,109,0,0,373,372,1,0,0,0,373, - 374,1,0,0,0,374,375,1,0,0,0,375,376,5,98,0,0,376,377,3,38,19,11,377,401, - 1,0,0,0,378,380,5,100,0,0,379,381,5,106,0,0,380,379,1,0,0,0,380,381,1, - 0,0,0,381,382,1,0,0,0,382,401,3,38,19,9,383,385,5,101,0,0,384,386,5,106, - 0,0,385,384,1,0,0,0,385,386,1,0,0,0,386,387,1,0,0,0,387,401,3,38,19,8, - 388,390,5,112,0,0,389,391,5,106,0,0,390,389,1,0,0,0,390,391,1,0,0,0,391, - 392,1,0,0,0,392,394,3,38,19,0,393,395,5,105,0,0,394,393,1,0,0,0,394,395, - 1,0,0,0,395,401,1,0,0,0,396,397,5,44,0,0,397,398,3,38,19,0,398,399,5, - 45,0,0,399,401,1,0,0,0,400,306,1,0,0,0,400,317,1,0,0,0,400,327,1,0,0, - 0,400,331,1,0,0,0,400,335,1,0,0,0,400,349,1,0,0,0,400,360,1,0,0,0,400, - 362,1,0,0,0,400,378,1,0,0,0,400,383,1,0,0,0,400,388,1,0,0,0,400,396,1, - 0,0,0,401,497,1,0,0,0,402,403,10,14,0,0,403,405,5,92,0,0,404,406,5,106, - 0,0,405,404,1,0,0,0,405,406,1,0,0,0,406,408,1,0,0,0,407,409,5,107,0,0, - 408,407,1,0,0,0,408,409,1,0,0,0,409,411,1,0,0,0,410,412,5,109,0,0,411, - 410,1,0,0,0,411,412,1,0,0,0,412,413,1,0,0,0,413,496,3,38,19,14,414,415, - 10,13,0,0,415,417,5,93,0,0,416,418,5,106,0,0,417,416,1,0,0,0,417,418, - 1,0,0,0,418,420,1,0,0,0,419,421,5,107,0,0,420,419,1,0,0,0,420,421,1,0, - 0,0,421,423,1,0,0,0,422,424,5,109,0,0,423,422,1,0,0,0,423,424,1,0,0,0, - 424,425,1,0,0,0,425,496,3,38,19,13,426,427,10,12,0,0,427,429,5,43,0,0, - 428,430,5,106,0,0,429,428,1,0,0,0,429,430,1,0,0,0,430,432,1,0,0,0,431, - 433,5,107,0,0,432,431,1,0,0,0,432,433,1,0,0,0,433,435,1,0,0,0,434,436, - 5,109,0,0,435,434,1,0,0,0,435,436,1,0,0,0,436,437,1,0,0,0,437,496,3,38, - 19,12,438,439,10,10,0,0,439,441,5,99,0,0,440,442,5,106,0,0,441,440,1, - 0,0,0,441,442,1,0,0,0,442,444,1,0,0,0,443,445,5,107,0,0,444,443,1,0,0, - 0,444,445,1,0,0,0,445,447,1,0,0,0,446,448,5,109,0,0,447,446,1,0,0,0,447, - 448,1,0,0,0,448,449,1,0,0,0,449,496,3,38,19,10,450,451,10,5,0,0,451,453, - 5,46,0,0,452,454,5,107,0,0,453,452,1,0,0,0,453,454,1,0,0,0,454,456,1, - 0,0,0,455,457,5,109,0,0,456,455,1,0,0,0,456,457,1,0,0,0,457,458,1,0,0, - 0,458,496,3,38,19,5,459,460,10,4,0,0,460,462,5,47,0,0,461,463,5,107,0, - 0,462,461,1,0,0,0,462,463,1,0,0,0,463,465,1,0,0,0,464,466,5,109,0,0,465, - 464,1,0,0,0,465,466,1,0,0,0,466,467,1,0,0,0,467,496,3,38,19,4,468,469, - 10,3,0,0,469,471,5,48,0,0,470,472,5,107,0,0,471,470,1,0,0,0,471,472,1, - 0,0,0,472,474,1,0,0,0,473,475,5,109,0,0,474,473,1,0,0,0,474,475,1,0,0, - 0,475,476,1,0,0,0,476,496,3,38,19,3,477,478,10,2,0,0,478,480,5,49,0,0, - 479,481,5,107,0,0,480,479,1,0,0,0,480,481,1,0,0,0,481,483,1,0,0,0,482, - 484,5,109,0,0,483,482,1,0,0,0,483,484,1,0,0,0,484,485,1,0,0,0,485,496, - 3,38,19,2,486,487,10,1,0,0,487,489,5,50,0,0,488,490,5,107,0,0,489,488, - 1,0,0,0,489,490,1,0,0,0,490,492,1,0,0,0,491,493,5,109,0,0,492,491,1,0, - 0,0,492,493,1,0,0,0,493,494,1,0,0,0,494,496,3,38,19,1,495,402,1,0,0,0, - 495,414,1,0,0,0,495,426,1,0,0,0,495,438,1,0,0,0,495,450,1,0,0,0,495,459, - 1,0,0,0,495,468,1,0,0,0,495,477,1,0,0,0,495,486,1,0,0,0,496,499,1,0,0, - 0,497,495,1,0,0,0,497,498,1,0,0,0,498,39,1,0,0,0,499,497,1,0,0,0,500, - 502,3,42,21,0,501,500,1,0,0,0,502,505,1,0,0,0,503,501,1,0,0,0,503,504, - 1,0,0,0,504,41,1,0,0,0,505,503,1,0,0,0,506,507,5,120,0,0,507,511,5,44, - 0,0,508,509,3,44,22,0,509,510,5,51,0,0,510,512,1,0,0,0,511,508,1,0,0, - 0,512,513,1,0,0,0,513,511,1,0,0,0,513,514,1,0,0,0,514,515,1,0,0,0,515, - 516,3,44,22,0,516,519,5,45,0,0,517,518,5,52,0,0,518,520,3,46,23,0,519, - 517,1,0,0,0,519,520,1,0,0,0,520,529,1,0,0,0,521,522,5,120,0,0,522,523, - 5,44,0,0,523,524,3,44,22,0,524,525,5,51,0,0,525,526,5,118,0,0,526,527, - 5,45,0,0,527,529,1,0,0,0,528,506,1,0,0,0,528,521,1,0,0,0,529,43,1,0,0, - 0,530,531,5,120,0,0,531,532,5,51,0,0,532,533,3,46,23,0,533,45,1,0,0,0, - 534,535,3,48,24,0,535,536,5,53,0,0,536,537,3,46,23,0,537,541,1,0,0,0, - 538,541,3,48,24,0,539,541,5,54,0,0,540,534,1,0,0,0,540,538,1,0,0,0,540, - 539,1,0,0,0,541,47,1,0,0,0,542,548,3,50,25,0,543,544,3,50,25,0,544,545, - 5,55,0,0,545,546,3,48,24,0,546,548,1,0,0,0,547,542,1,0,0,0,547,543,1, - 0,0,0,548,49,1,0,0,0,549,551,5,112,0,0,550,549,1,0,0,0,550,551,1,0,0, - 0,551,552,1,0,0,0,552,553,3,78,39,0,553,557,3,52,26,0,554,558,5,119,0, - 0,555,558,5,120,0,0,556,558,3,78,39,0,557,554,1,0,0,0,557,555,1,0,0,0, - 557,556,1,0,0,0,558,51,1,0,0,0,559,566,5,56,0,0,560,566,5,57,0,0,561, - 566,5,58,0,0,562,566,5,59,0,0,563,566,5,13,0,0,564,566,5,60,0,0,565,559, - 1,0,0,0,565,560,1,0,0,0,565,561,1,0,0,0,565,562,1,0,0,0,565,563,1,0,0, - 0,565,564,1,0,0,0,566,53,1,0,0,0,567,568,5,61,0,0,568,569,5,118,0,0,569, - 55,1,0,0,0,570,571,7,4,0,0,571,57,1,0,0,0,572,573,5,62,0,0,573,574,5, - 63,0,0,574,575,5,64,0,0,575,59,1,0,0,0,576,577,5,62,0,0,577,578,5,65, - 0,0,578,579,5,66,0,0,579,61,1,0,0,0,580,581,5,62,0,0,581,582,5,67,0,0, - 582,583,5,68,0,0,583,63,1,0,0,0,584,585,5,18,0,0,585,586,5,69,0,0,586, - 65,1,0,0,0,587,588,5,18,0,0,588,589,5,70,0,0,589,67,1,0,0,0,590,591,5, - 62,0,0,591,592,5,71,0,0,592,69,1,0,0,0,593,595,5,75,0,0,594,593,1,0,0, - 0,594,595,1,0,0,0,595,597,1,0,0,0,596,598,5,76,0,0,597,596,1,0,0,0,597, - 598,1,0,0,0,598,600,1,0,0,0,599,601,5,77,0,0,600,599,1,0,0,0,600,601, - 1,0,0,0,601,602,1,0,0,0,602,603,3,42,21,0,603,604,5,12,0,0,604,605,5, - 119,0,0,605,71,1,0,0,0,606,612,5,72,0,0,607,608,3,70,35,0,608,609,5,55, - 0,0,609,611,1,0,0,0,610,607,1,0,0,0,611,614,1,0,0,0,612,610,1,0,0,0,612, - 613,1,0,0,0,613,615,1,0,0,0,614,612,1,0,0,0,615,616,3,70,35,0,616,617, - 5,73,0,0,617,618,5,12,0,0,618,619,5,119,0,0,619,73,1,0,0,0,620,621,5, - 120,0,0,621,631,5,12,0,0,622,624,3,72,36,0,623,622,1,0,0,0,624,627,1, - 0,0,0,625,623,1,0,0,0,625,626,1,0,0,0,626,628,1,0,0,0,627,625,1,0,0,0, - 628,630,5,53,0,0,629,625,1,0,0,0,630,633,1,0,0,0,631,629,1,0,0,0,631, - 632,1,0,0,0,632,634,1,0,0,0,633,631,1,0,0,0,634,635,3,72,36,0,635,75, - 1,0,0,0,636,638,3,74,37,0,637,636,1,0,0,0,638,639,1,0,0,0,639,637,1,0, - 0,0,639,640,1,0,0,0,640,77,1,0,0,0,641,642,5,74,0,0,642,643,5,120,0,0, - 643,79,1,0,0,0,97,88,98,102,105,108,118,128,144,155,160,166,187,191,194, - 197,200,217,219,223,227,230,233,236,246,252,257,262,268,271,274,277,283, - 291,298,309,312,315,319,322,325,329,333,337,341,344,347,352,355,358,364, - 370,373,380,385,390,394,400,405,408,411,417,420,423,429,432,435,441,444, - 447,453,456,462,465,471,474,480,483,489,492,495,497,503,513,519,528,540, - 547,550,557,565,594,597,600,612,625,631,639 + 8,19,1,19,1,19,1,19,1,19,3,19,490,8,19,1,19,3,19,493,8,19,1,19,1,19,1, + 19,1,19,3,19,499,8,19,1,19,3,19,502,8,19,1,19,3,19,505,8,19,1,19,3,19, + 508,8,19,1,19,1,19,1,19,3,19,513,8,19,1,19,3,19,516,8,19,1,19,3,19,519, + 8,19,1,19,3,19,522,8,19,5,19,524,8,19,10,19,12,19,527,9,19,1,20,5,20, + 530,8,20,10,20,12,20,533,9,20,1,21,1,21,1,21,1,21,1,21,4,21,540,8,21, + 11,21,12,21,541,1,21,1,21,1,21,1,21,3,21,548,8,21,1,21,1,21,1,21,1,21, + 1,21,1,21,1,21,3,21,557,8,21,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23, + 1,23,1,23,3,23,569,8,23,1,24,1,24,1,24,1,24,1,24,3,24,576,8,24,1,25,3, + 25,579,8,25,1,25,1,25,1,25,1,25,1,25,3,25,586,8,25,1,26,1,26,1,26,1,26, + 1,26,1,26,3,26,594,8,26,1,27,1,27,1,27,1,28,1,28,1,29,1,29,1,29,1,29, + 1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,33,1,33,1,33, + 1,34,1,34,1,34,1,35,3,35,623,8,35,1,35,3,35,626,8,35,1,35,3,35,629,8, + 35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,5,36,639,8,36,10,36,12,36, + 642,9,36,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,5,37,652,8,37,10,37, + 12,37,655,9,37,1,37,5,37,658,8,37,10,37,12,37,661,9,37,1,37,1,37,1,38, + 4,38,666,8,38,11,38,12,38,667,1,39,1,39,1,39,1,39,0,1,38,40,0,2,4,6,8, + 10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54, + 56,58,60,62,64,66,68,70,72,74,76,78,0,5,1,0,84,86,1,0,117,118,1,0,121, + 122,2,0,115,115,120,120,1,0,87,88,773,0,88,1,0,0,0,2,90,1,0,0,0,4,93, + 1,0,0,0,6,128,1,0,0,0,8,130,1,0,0,0,10,137,1,0,0,0,12,150,1,0,0,0,14, + 158,1,0,0,0,16,162,1,0,0,0,18,171,1,0,0,0,20,175,1,0,0,0,22,202,1,0,0, + 0,24,246,1,0,0,0,26,248,1,0,0,0,28,264,1,0,0,0,30,279,1,0,0,0,32,283, + 1,0,0,0,34,295,1,0,0,0,36,303,1,0,0,0,38,400,1,0,0,0,40,531,1,0,0,0,42, + 556,1,0,0,0,44,558,1,0,0,0,46,568,1,0,0,0,48,575,1,0,0,0,50,578,1,0,0, + 0,52,593,1,0,0,0,54,595,1,0,0,0,56,598,1,0,0,0,58,600,1,0,0,0,60,604, + 1,0,0,0,62,608,1,0,0,0,64,612,1,0,0,0,66,615,1,0,0,0,68,618,1,0,0,0,70, + 622,1,0,0,0,72,634,1,0,0,0,74,648,1,0,0,0,76,665,1,0,0,0,78,669,1,0,0, + 0,80,89,3,4,2,0,81,89,3,6,3,0,82,89,3,20,10,0,83,89,3,32,16,0,84,89,3, + 2,1,0,85,89,3,8,4,0,86,89,3,22,11,0,87,89,3,24,12,0,88,80,1,0,0,0,88, + 81,1,0,0,0,88,82,1,0,0,0,88,83,1,0,0,0,88,84,1,0,0,0,88,85,1,0,0,0,88, + 86,1,0,0,0,88,87,1,0,0,0,89,1,1,0,0,0,90,91,5,1,0,0,91,92,5,122,0,0,92, + 3,1,0,0,0,93,98,5,2,0,0,94,99,5,116,0,0,95,99,5,117,0,0,96,99,5,118,0, + 0,97,99,3,10,5,0,98,94,1,0,0,0,98,95,1,0,0,0,98,96,1,0,0,0,98,97,1,0, + 0,0,99,100,1,0,0,0,100,102,5,122,0,0,101,103,3,64,32,0,102,101,1,0,0, + 0,102,103,1,0,0,0,103,105,1,0,0,0,104,106,3,68,34,0,105,104,1,0,0,0,105, + 106,1,0,0,0,106,108,1,0,0,0,107,109,3,66,33,0,108,107,1,0,0,0,108,109, + 1,0,0,0,109,110,1,0,0,0,110,111,5,3,0,0,111,112,5,122,0,0,112,5,1,0,0, + 0,113,118,5,4,0,0,114,119,5,80,0,0,115,119,5,82,0,0,116,117,5,83,0,0, + 117,119,5,122,0,0,118,114,1,0,0,0,118,115,1,0,0,0,118,116,1,0,0,0,119, + 120,1,0,0,0,120,121,5,5,0,0,121,129,5,122,0,0,122,123,5,6,0,0,123,124, + 7,0,0,0,124,125,5,5,0,0,125,129,5,122,0,0,126,127,5,7,0,0,127,129,5,122, + 0,0,128,113,1,0,0,0,128,122,1,0,0,0,128,126,1,0,0,0,129,7,1,0,0,0,130, + 131,5,8,0,0,131,132,5,122,0,0,132,133,5,3,0,0,133,134,7,1,0,0,134,135, + 5,9,0,0,135,136,5,122,0,0,136,9,1,0,0,0,137,138,5,10,0,0,138,144,5,105, + 0,0,139,140,3,12,6,0,140,141,5,11,0,0,141,143,1,0,0,0,142,139,1,0,0,0, + 143,146,1,0,0,0,144,142,1,0,0,0,144,145,1,0,0,0,145,147,1,0,0,0,146,144, + 1,0,0,0,147,148,3,12,6,0,148,149,5,106,0,0,149,11,1,0,0,0,150,151,3,16, + 8,0,151,155,5,12,0,0,152,154,3,14,7,0,153,152,1,0,0,0,154,157,1,0,0,0, + 155,153,1,0,0,0,155,156,1,0,0,0,156,13,1,0,0,0,157,155,1,0,0,0,158,160, + 5,119,0,0,159,161,3,16,8,0,160,159,1,0,0,0,160,161,1,0,0,0,161,15,1,0, + 0,0,162,166,5,105,0,0,163,165,3,18,9,0,164,163,1,0,0,0,165,168,1,0,0, + 0,166,164,1,0,0,0,166,167,1,0,0,0,167,169,1,0,0,0,168,166,1,0,0,0,169, + 170,5,106,0,0,170,17,1,0,0,0,171,172,3,78,39,0,172,173,5,13,0,0,173,174, + 7,2,0,0,174,19,1,0,0,0,175,176,5,14,0,0,176,177,3,24,12,0,177,178,5,15, + 0,0,178,179,5,122,0,0,179,180,5,16,0,0,180,181,5,122,0,0,181,182,5,17, + 0,0,182,183,5,122,0,0,183,187,1,0,0,0,184,185,5,18,0,0,185,186,5,19,0, + 0,186,188,5,122,0,0,187,184,1,0,0,0,187,188,1,0,0,0,188,191,1,0,0,0,189, + 190,5,20,0,0,190,192,5,120,0,0,191,189,1,0,0,0,191,192,1,0,0,0,192,194, + 1,0,0,0,193,195,3,30,15,0,194,193,1,0,0,0,194,195,1,0,0,0,195,197,1,0, + 0,0,196,198,3,26,13,0,197,196,1,0,0,0,197,198,1,0,0,0,198,200,1,0,0,0, + 199,201,3,28,14,0,200,199,1,0,0,0,200,201,1,0,0,0,201,21,1,0,0,0,202, + 203,5,21,0,0,203,204,3,24,12,0,204,205,5,22,0,0,205,219,5,122,0,0,206, + 207,5,23,0,0,207,208,7,1,0,0,208,209,5,122,0,0,209,210,5,24,0,0,210,211, + 5,120,0,0,211,212,5,25,0,0,212,213,5,120,0,0,213,214,5,26,0,0,214,217, + 5,120,0,0,215,216,5,27,0,0,216,218,5,121,0,0,217,215,1,0,0,0,217,218, + 1,0,0,0,218,220,1,0,0,0,219,206,1,0,0,0,219,220,1,0,0,0,220,223,1,0,0, + 0,221,222,5,81,0,0,222,224,5,122,0,0,223,221,1,0,0,0,223,224,1,0,0,0, + 224,227,1,0,0,0,225,226,5,28,0,0,226,228,5,122,0,0,227,225,1,0,0,0,227, + 228,1,0,0,0,228,230,1,0,0,0,229,231,3,26,13,0,230,229,1,0,0,0,230,231, + 1,0,0,0,231,233,1,0,0,0,232,234,3,28,14,0,233,232,1,0,0,0,233,234,1,0, + 0,0,234,236,1,0,0,0,235,237,3,8,4,0,236,235,1,0,0,0,236,237,1,0,0,0,237, + 23,1,0,0,0,238,239,5,29,0,0,239,247,5,122,0,0,240,241,5,30,0,0,241,247, + 3,40,20,0,242,243,5,31,0,0,243,244,5,122,0,0,244,245,5,32,0,0,245,247, + 5,120,0,0,246,238,1,0,0,0,246,240,1,0,0,0,246,242,1,0,0,0,247,25,1,0, + 0,0,248,252,5,33,0,0,249,250,5,18,0,0,250,251,5,34,0,0,251,253,5,122, + 0,0,252,249,1,0,0,0,252,253,1,0,0,0,253,257,1,0,0,0,254,255,5,35,0,0, + 255,256,5,36,0,0,256,258,5,120,0,0,257,254,1,0,0,0,257,258,1,0,0,0,258, + 262,1,0,0,0,259,260,5,18,0,0,260,261,5,37,0,0,261,263,5,122,0,0,262,259, + 1,0,0,0,262,263,1,0,0,0,263,27,1,0,0,0,264,268,5,38,0,0,265,266,5,18, + 0,0,266,267,5,37,0,0,267,269,5,122,0,0,268,265,1,0,0,0,268,269,1,0,0, + 0,269,271,1,0,0,0,270,272,3,58,29,0,271,270,1,0,0,0,271,272,1,0,0,0,272, + 274,1,0,0,0,273,275,3,60,30,0,274,273,1,0,0,0,274,275,1,0,0,0,275,277, + 1,0,0,0,276,278,3,62,31,0,277,276,1,0,0,0,277,278,1,0,0,0,278,29,1,0, + 0,0,279,280,5,4,0,0,280,281,5,39,0,0,281,31,1,0,0,0,282,284,5,104,0,0, + 283,282,1,0,0,0,283,284,1,0,0,0,284,285,1,0,0,0,285,286,5,40,0,0,286, + 287,5,122,0,0,287,289,5,105,0,0,288,290,3,34,17,0,289,288,1,0,0,0,290, + 291,1,0,0,0,291,289,1,0,0,0,291,292,1,0,0,0,292,293,1,0,0,0,293,294,5, + 106,0,0,294,33,1,0,0,0,295,296,5,31,0,0,296,298,5,122,0,0,297,299,3,36, + 18,0,298,297,1,0,0,0,298,299,1,0,0,0,299,300,1,0,0,0,300,301,5,41,0,0, + 301,302,3,38,19,0,302,35,1,0,0,0,303,304,5,42,0,0,304,305,5,120,0,0,305, + 37,1,0,0,0,306,307,6,19,-1,0,307,309,5,89,0,0,308,310,5,108,0,0,309,308, + 1,0,0,0,309,310,1,0,0,0,310,312,1,0,0,0,311,313,3,54,27,0,312,311,1,0, + 0,0,312,313,1,0,0,0,313,315,1,0,0,0,314,316,3,56,28,0,315,314,1,0,0,0, + 315,316,1,0,0,0,316,401,1,0,0,0,317,319,5,90,0,0,318,320,5,108,0,0,319, + 318,1,0,0,0,319,320,1,0,0,0,320,322,1,0,0,0,321,323,3,54,27,0,322,321, + 1,0,0,0,322,323,1,0,0,0,323,325,1,0,0,0,324,326,3,56,28,0,325,324,1,0, + 0,0,325,326,1,0,0,0,326,401,1,0,0,0,327,329,5,97,0,0,328,330,3,56,28, + 0,329,328,1,0,0,0,329,330,1,0,0,0,330,401,1,0,0,0,331,333,5,96,0,0,332, + 334,3,56,28,0,333,332,1,0,0,0,333,334,1,0,0,0,334,401,1,0,0,0,335,337, + 5,91,0,0,336,338,5,114,0,0,337,336,1,0,0,0,337,338,1,0,0,0,338,339,1, + 0,0,0,339,341,7,3,0,0,340,342,5,108,0,0,341,340,1,0,0,0,341,342,1,0,0, + 0,342,344,1,0,0,0,343,345,3,54,27,0,344,343,1,0,0,0,344,345,1,0,0,0,345, + 347,1,0,0,0,346,348,3,56,28,0,347,346,1,0,0,0,347,348,1,0,0,0,348,401, + 1,0,0,0,349,350,5,92,0,0,350,352,7,3,0,0,351,353,5,108,0,0,352,351,1, + 0,0,0,352,353,1,0,0,0,353,355,1,0,0,0,354,356,3,54,27,0,355,354,1,0,0, + 0,355,356,1,0,0,0,356,358,1,0,0,0,357,359,3,56,28,0,358,357,1,0,0,0,358, + 359,1,0,0,0,359,401,1,0,0,0,360,361,5,93,0,0,361,401,3,38,19,17,362,364, + 5,98,0,0,363,365,5,108,0,0,364,363,1,0,0,0,364,365,1,0,0,0,365,366,1, + 0,0,0,366,367,3,38,19,0,367,368,5,99,0,0,368,370,3,38,19,0,369,371,5, + 109,0,0,370,369,1,0,0,0,370,371,1,0,0,0,371,373,1,0,0,0,372,374,5,111, + 0,0,373,372,1,0,0,0,373,374,1,0,0,0,374,375,1,0,0,0,375,376,5,100,0,0, + 376,377,3,38,19,13,377,401,1,0,0,0,378,380,5,102,0,0,379,381,5,108,0, + 0,380,379,1,0,0,0,380,381,1,0,0,0,381,382,1,0,0,0,382,401,3,38,19,11, + 383,385,5,103,0,0,384,386,5,108,0,0,385,384,1,0,0,0,385,386,1,0,0,0,386, + 387,1,0,0,0,387,401,3,38,19,10,388,390,5,114,0,0,389,391,5,108,0,0,390, + 389,1,0,0,0,390,391,1,0,0,0,391,392,1,0,0,0,392,394,3,38,19,0,393,395, + 5,107,0,0,394,393,1,0,0,0,394,395,1,0,0,0,395,401,1,0,0,0,396,397,5,44, + 0,0,397,398,3,38,19,0,398,399,5,45,0,0,399,401,1,0,0,0,400,306,1,0,0, + 0,400,317,1,0,0,0,400,327,1,0,0,0,400,331,1,0,0,0,400,335,1,0,0,0,400, + 349,1,0,0,0,400,360,1,0,0,0,400,362,1,0,0,0,400,378,1,0,0,0,400,383,1, + 0,0,0,400,388,1,0,0,0,400,396,1,0,0,0,401,525,1,0,0,0,402,403,10,16,0, + 0,403,405,5,94,0,0,404,406,5,108,0,0,405,404,1,0,0,0,405,406,1,0,0,0, + 406,408,1,0,0,0,407,409,5,109,0,0,408,407,1,0,0,0,408,409,1,0,0,0,409, + 411,1,0,0,0,410,412,5,111,0,0,411,410,1,0,0,0,411,412,1,0,0,0,412,413, + 1,0,0,0,413,524,3,38,19,16,414,415,10,15,0,0,415,417,5,95,0,0,416,418, + 5,108,0,0,417,416,1,0,0,0,417,418,1,0,0,0,418,420,1,0,0,0,419,421,5,109, + 0,0,420,419,1,0,0,0,420,421,1,0,0,0,421,423,1,0,0,0,422,424,5,111,0,0, + 423,422,1,0,0,0,423,424,1,0,0,0,424,425,1,0,0,0,425,524,3,38,19,15,426, + 427,10,14,0,0,427,429,5,43,0,0,428,430,5,108,0,0,429,428,1,0,0,0,429, + 430,1,0,0,0,430,432,1,0,0,0,431,433,5,109,0,0,432,431,1,0,0,0,432,433, + 1,0,0,0,433,435,1,0,0,0,434,436,5,111,0,0,435,434,1,0,0,0,435,436,1,0, + 0,0,436,437,1,0,0,0,437,524,3,38,19,14,438,439,10,12,0,0,439,441,5,101, + 0,0,440,442,5,108,0,0,441,440,1,0,0,0,441,442,1,0,0,0,442,444,1,0,0,0, + 443,445,5,109,0,0,444,443,1,0,0,0,444,445,1,0,0,0,445,447,1,0,0,0,446, + 448,5,111,0,0,447,446,1,0,0,0,447,448,1,0,0,0,448,449,1,0,0,0,449,524, + 3,38,19,12,450,451,10,5,0,0,451,453,5,48,0,0,452,454,5,109,0,0,453,452, + 1,0,0,0,453,454,1,0,0,0,454,456,1,0,0,0,455,457,5,111,0,0,456,455,1,0, + 0,0,456,457,1,0,0,0,457,458,1,0,0,0,458,524,3,38,19,5,459,460,10,4,0, + 0,460,462,5,49,0,0,461,463,5,109,0,0,462,461,1,0,0,0,462,463,1,0,0,0, + 463,465,1,0,0,0,464,466,5,111,0,0,465,464,1,0,0,0,465,466,1,0,0,0,466, + 467,1,0,0,0,467,524,3,38,19,4,468,469,10,3,0,0,469,471,5,50,0,0,470,472, + 5,109,0,0,471,470,1,0,0,0,471,472,1,0,0,0,472,474,1,0,0,0,473,475,5,111, + 0,0,474,473,1,0,0,0,474,475,1,0,0,0,475,476,1,0,0,0,476,524,3,38,19,3, + 477,478,10,2,0,0,478,480,5,51,0,0,479,481,5,109,0,0,480,479,1,0,0,0,480, + 481,1,0,0,0,481,483,1,0,0,0,482,484,5,111,0,0,483,482,1,0,0,0,483,484, + 1,0,0,0,484,485,1,0,0,0,485,524,3,38,19,2,486,487,10,1,0,0,487,489,5, + 52,0,0,488,490,5,109,0,0,489,488,1,0,0,0,489,490,1,0,0,0,490,492,1,0, + 0,0,491,493,5,111,0,0,492,491,1,0,0,0,492,493,1,0,0,0,493,494,1,0,0,0, + 494,524,3,38,19,1,495,496,10,7,0,0,496,498,5,46,0,0,497,499,5,109,0,0, + 498,497,1,0,0,0,498,499,1,0,0,0,499,501,1,0,0,0,500,502,5,111,0,0,501, + 500,1,0,0,0,501,502,1,0,0,0,502,504,1,0,0,0,503,505,3,54,27,0,504,503, + 1,0,0,0,504,505,1,0,0,0,505,507,1,0,0,0,506,508,3,56,28,0,507,506,1,0, + 0,0,507,508,1,0,0,0,508,524,1,0,0,0,509,510,10,6,0,0,510,512,5,47,0,0, + 511,513,5,109,0,0,512,511,1,0,0,0,512,513,1,0,0,0,513,515,1,0,0,0,514, + 516,5,111,0,0,515,514,1,0,0,0,515,516,1,0,0,0,516,518,1,0,0,0,517,519, + 3,54,27,0,518,517,1,0,0,0,518,519,1,0,0,0,519,521,1,0,0,0,520,522,3,56, + 28,0,521,520,1,0,0,0,521,522,1,0,0,0,522,524,1,0,0,0,523,402,1,0,0,0, + 523,414,1,0,0,0,523,426,1,0,0,0,523,438,1,0,0,0,523,450,1,0,0,0,523,459, + 1,0,0,0,523,468,1,0,0,0,523,477,1,0,0,0,523,486,1,0,0,0,523,495,1,0,0, + 0,523,509,1,0,0,0,524,527,1,0,0,0,525,523,1,0,0,0,525,526,1,0,0,0,526, + 39,1,0,0,0,527,525,1,0,0,0,528,530,3,42,21,0,529,528,1,0,0,0,530,533, + 1,0,0,0,531,529,1,0,0,0,531,532,1,0,0,0,532,41,1,0,0,0,533,531,1,0,0, + 0,534,535,5,122,0,0,535,539,5,44,0,0,536,537,3,44,22,0,537,538,5,53,0, + 0,538,540,1,0,0,0,539,536,1,0,0,0,540,541,1,0,0,0,541,539,1,0,0,0,541, + 542,1,0,0,0,542,543,1,0,0,0,543,544,3,44,22,0,544,547,5,45,0,0,545,546, + 5,54,0,0,546,548,3,46,23,0,547,545,1,0,0,0,547,548,1,0,0,0,548,557,1, + 0,0,0,549,550,5,122,0,0,550,551,5,44,0,0,551,552,3,44,22,0,552,553,5, + 53,0,0,553,554,5,120,0,0,554,555,5,45,0,0,555,557,1,0,0,0,556,534,1,0, + 0,0,556,549,1,0,0,0,557,43,1,0,0,0,558,559,5,122,0,0,559,560,5,53,0,0, + 560,561,3,46,23,0,561,45,1,0,0,0,562,563,3,48,24,0,563,564,5,55,0,0,564, + 565,3,46,23,0,565,569,1,0,0,0,566,569,3,48,24,0,567,569,5,56,0,0,568, + 562,1,0,0,0,568,566,1,0,0,0,568,567,1,0,0,0,569,47,1,0,0,0,570,576,3, + 50,25,0,571,572,3,50,25,0,572,573,5,57,0,0,573,574,3,48,24,0,574,576, + 1,0,0,0,575,570,1,0,0,0,575,571,1,0,0,0,576,49,1,0,0,0,577,579,5,114, + 0,0,578,577,1,0,0,0,578,579,1,0,0,0,579,580,1,0,0,0,580,581,3,78,39,0, + 581,585,3,52,26,0,582,586,5,121,0,0,583,586,5,122,0,0,584,586,3,78,39, + 0,585,582,1,0,0,0,585,583,1,0,0,0,585,584,1,0,0,0,586,51,1,0,0,0,587, + 594,5,58,0,0,588,594,5,59,0,0,589,594,5,60,0,0,590,594,5,61,0,0,591,594, + 5,13,0,0,592,594,5,62,0,0,593,587,1,0,0,0,593,588,1,0,0,0,593,589,1,0, + 0,0,593,590,1,0,0,0,593,591,1,0,0,0,593,592,1,0,0,0,594,53,1,0,0,0,595, + 596,5,63,0,0,596,597,5,120,0,0,597,55,1,0,0,0,598,599,7,4,0,0,599,57, + 1,0,0,0,600,601,5,64,0,0,601,602,5,65,0,0,602,603,5,66,0,0,603,59,1,0, + 0,0,604,605,5,64,0,0,605,606,5,67,0,0,606,607,5,68,0,0,607,61,1,0,0,0, + 608,609,5,64,0,0,609,610,5,69,0,0,610,611,5,70,0,0,611,63,1,0,0,0,612, + 613,5,18,0,0,613,614,5,71,0,0,614,65,1,0,0,0,615,616,5,18,0,0,616,617, + 5,72,0,0,617,67,1,0,0,0,618,619,5,64,0,0,619,620,5,73,0,0,620,69,1,0, + 0,0,621,623,5,77,0,0,622,621,1,0,0,0,622,623,1,0,0,0,623,625,1,0,0,0, + 624,626,5,78,0,0,625,624,1,0,0,0,625,626,1,0,0,0,626,628,1,0,0,0,627, + 629,5,79,0,0,628,627,1,0,0,0,628,629,1,0,0,0,629,630,1,0,0,0,630,631, + 3,42,21,0,631,632,5,12,0,0,632,633,5,121,0,0,633,71,1,0,0,0,634,640,5, + 74,0,0,635,636,3,70,35,0,636,637,5,57,0,0,637,639,1,0,0,0,638,635,1,0, + 0,0,639,642,1,0,0,0,640,638,1,0,0,0,640,641,1,0,0,0,641,643,1,0,0,0,642, + 640,1,0,0,0,643,644,3,70,35,0,644,645,5,75,0,0,645,646,5,12,0,0,646,647, + 5,121,0,0,647,73,1,0,0,0,648,649,5,122,0,0,649,659,5,12,0,0,650,652,3, + 72,36,0,651,650,1,0,0,0,652,655,1,0,0,0,653,651,1,0,0,0,653,654,1,0,0, + 0,654,656,1,0,0,0,655,653,1,0,0,0,656,658,5,55,0,0,657,653,1,0,0,0,658, + 661,1,0,0,0,659,657,1,0,0,0,659,660,1,0,0,0,660,662,1,0,0,0,661,659,1, + 0,0,0,662,663,3,72,36,0,663,75,1,0,0,0,664,666,3,74,37,0,665,664,1,0, + 0,0,666,667,1,0,0,0,667,665,1,0,0,0,667,668,1,0,0,0,668,77,1,0,0,0,669, + 670,5,76,0,0,670,671,5,122,0,0,671,79,1,0,0,0,105,88,98,102,105,108,118, + 128,144,155,160,166,187,191,194,197,200,217,219,223,227,230,233,236,246, + 252,257,262,268,271,274,277,283,291,298,309,312,315,319,322,325,329,333, + 337,341,344,347,352,355,358,364,370,373,380,385,390,394,400,405,408,411, + 417,420,423,429,432,435,441,444,447,453,456,462,465,471,474,480,483,489, + 492,498,501,504,507,512,515,518,521,523,525,531,541,547,556,568,575,578, + 585,593,622,625,628,640,653,659,667 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -718,7 +731,7 @@ KnoBABQueryParser::Load_data_queryContext* KnoBABQueryParser::load_data_query() _errHandler->sync(this); _la = _input->LA(1); - if (_la == KnoBABQueryParser::T__61) { + if (_la == KnoBABQueryParser::T__63) { setState(104); no_stats(); } @@ -924,8 +937,8 @@ KnoBABQueryParser::Display_dataContext* KnoBABQueryParser::display_data() { match(KnoBABQueryParser::T__5); setState(123); _la = _input->LA(1); - if (!((((_la - 82) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 82)) & 7) != 0)) { + if (!((((_la - 84) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 84)) & 7) != 0)) { _errHandler->recoverInline(this); } else { @@ -1372,7 +1385,7 @@ KnoBABQueryParser::Data_partContext* KnoBABQueryParser::data_part() { setState(166); _errHandler->sync(this); _la = _input->LA(1); - while (_la == KnoBABQueryParser::T__73) { + while (_la == KnoBABQueryParser::T__75) { setState(163); field(); setState(168); @@ -2194,7 +2207,7 @@ KnoBABQueryParser::GroundingContext* KnoBABQueryParser::grounding() { _errHandler->sync(this); _la = _input->LA(1); - if (_la == KnoBABQueryParser::T__61) { + if (_la == KnoBABQueryParser::T__63) { setState(276); no_cream_off(); } @@ -2647,6 +2660,47 @@ std::any KnoBABQueryParser::OrContext::accept(tree::ParseTreeVisitor *visitor) { else return visitor->visitChildren(this); } +//----------------- And_next_BContext ------------------------------------------------------------------ + +KnoBABQueryParser::LtlfContext* KnoBABQueryParser::And_next_BContext::ltlf() { + return getRuleContext(0); +} + +tree::TerminalNode* KnoBABQueryParser::And_next_BContext::THETA() { + return getToken(KnoBABQueryParser::THETA, 0); +} + +tree::TerminalNode* KnoBABQueryParser::And_next_BContext::INV() { + return getToken(KnoBABQueryParser::INV, 0); +} + +KnoBABQueryParser::Declare_argumentsContext* KnoBABQueryParser::And_next_BContext::declare_arguments() { + return getRuleContext(0); +} + +KnoBABQueryParser::Declare_act_targetContext* KnoBABQueryParser::And_next_BContext::declare_act_target() { + return getRuleContext(0); +} + +KnoBABQueryParser::And_next_BContext::And_next_BContext(LtlfContext *ctx) { copyFrom(ctx); } + +void KnoBABQueryParser::And_next_BContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterAnd_next_B(this); +} +void KnoBABQueryParser::And_next_BContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitAnd_next_B(this); +} + +std::any KnoBABQueryParser::And_next_BContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitAnd_next_B(this); + else + return visitor->visitChildren(this); +} //----------------- LastContext ------------------------------------------------------------------ tree::TerminalNode* KnoBABQueryParser::LastContext::LAST() { @@ -3214,6 +3268,47 @@ std::any KnoBABQueryParser::UntilContext::accept(tree::ParseTreeVisitor *visitor else return visitor->visitChildren(this); } +//----------------- Next_and_BContext ------------------------------------------------------------------ + +KnoBABQueryParser::LtlfContext* KnoBABQueryParser::Next_and_BContext::ltlf() { + return getRuleContext(0); +} + +tree::TerminalNode* KnoBABQueryParser::Next_and_BContext::THETA() { + return getToken(KnoBABQueryParser::THETA, 0); +} + +tree::TerminalNode* KnoBABQueryParser::Next_and_BContext::INV() { + return getToken(KnoBABQueryParser::INV, 0); +} + +KnoBABQueryParser::Declare_argumentsContext* KnoBABQueryParser::Next_and_BContext::declare_arguments() { + return getRuleContext(0); +} + +KnoBABQueryParser::Declare_act_targetContext* KnoBABQueryParser::Next_and_BContext::declare_act_target() { + return getRuleContext(0); +} + +KnoBABQueryParser::Next_and_BContext::Next_and_BContext(LtlfContext *ctx) { copyFrom(ctx); } + +void KnoBABQueryParser::Next_and_BContext::enterRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->enterNext_and_B(this); +} +void KnoBABQueryParser::Next_and_BContext::exitRule(tree::ParseTreeListener *listener) { + auto parserListener = dynamic_cast(listener); + if (parserListener != nullptr) + parserListener->exitNext_and_B(this); +} + +std::any KnoBABQueryParser::Next_and_BContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitNext_and_B(this); + else + return visitor->visitChildren(this); +} //----------------- And_futureContext ------------------------------------------------------------------ std::vector KnoBABQueryParser::And_futureContext::ltlf() { @@ -3636,7 +3731,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { setState(360); match(KnoBABQueryParser::NEXT); setState(361); - ltlf(15); + ltlf(17); break; } @@ -3679,7 +3774,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { setState(375); match(KnoBABQueryParser::ELSE); setState(376); - ltlf(11); + ltlf(13); break; } @@ -3698,7 +3793,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { match(KnoBABQueryParser::TIMED); } setState(382); - ltlf(9); + ltlf(11); break; } @@ -3717,7 +3812,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { match(KnoBABQueryParser::TIMED); } setState(387); - ltlf(8); + ltlf(10); break; } @@ -3770,24 +3865,24 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { throw NoViableAltException(this); } _ctx->stop = _input->LT(-1); - setState(497); + setState(525); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 80, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 88, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(495); + setState(523); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 79, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 87, _ctx)) { case 1: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleLtlf); setState(402); - if (!(precpred(_ctx, 14))) throw FailedPredicateException(this, "precpred(_ctx, 14)"); + if (!(precpred(_ctx, 16))) throw FailedPredicateException(this, "precpred(_ctx, 16)"); setState(403); match(KnoBABQueryParser::OR); setState(405); @@ -3815,7 +3910,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { match(KnoBABQueryParser::INV); } setState(413); - ltlf(14); + ltlf(16); break; } @@ -3825,7 +3920,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { pushNewRecursionContext(newContext, startState, RuleLtlf); setState(414); - if (!(precpred(_ctx, 13))) throw FailedPredicateException(this, "precpred(_ctx, 13)"); + if (!(precpred(_ctx, 15))) throw FailedPredicateException(this, "precpred(_ctx, 15)"); setState(415); match(KnoBABQueryParser::AND); setState(417); @@ -3853,7 +3948,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { match(KnoBABQueryParser::INV); } setState(425); - ltlf(13); + ltlf(15); break; } @@ -3863,7 +3958,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { pushNewRecursionContext(newContext, startState, RuleLtlf); setState(426); - if (!(precpred(_ctx, 12))) throw FailedPredicateException(this, "precpred(_ctx, 12)"); + if (!(precpred(_ctx, 14))) throw FailedPredicateException(this, "precpred(_ctx, 14)"); setState(427); match(KnoBABQueryParser::T__42); setState(429); @@ -3891,7 +3986,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { match(KnoBABQueryParser::INV); } setState(437); - ltlf(12); + ltlf(14); break; } @@ -3901,7 +3996,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { pushNewRecursionContext(newContext, startState, RuleLtlf); setState(438); - if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); + if (!(precpred(_ctx, 12))) throw FailedPredicateException(this, "precpred(_ctx, 12)"); setState(439); match(KnoBABQueryParser::UNTIL); setState(441); @@ -3929,7 +4024,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { match(KnoBABQueryParser::INV); } setState(449); - ltlf(10); + ltlf(12); break; } @@ -3941,7 +4036,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, "precpred(_ctx, 5)"); setState(451); - match(KnoBABQueryParser::T__45); + match(KnoBABQueryParser::T__47); setState(453); _errHandler->sync(this); @@ -3971,7 +4066,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); setState(460); - match(KnoBABQueryParser::T__46); + match(KnoBABQueryParser::T__48); setState(462); _errHandler->sync(this); @@ -4001,7 +4096,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); setState(469); - match(KnoBABQueryParser::T__47); + match(KnoBABQueryParser::T__49); setState(471); _errHandler->sync(this); @@ -4031,7 +4126,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { if (!(precpred(_ctx, 2))) throw FailedPredicateException(this, "precpred(_ctx, 2)"); setState(478); - match(KnoBABQueryParser::T__48); + match(KnoBABQueryParser::T__50); setState(480); _errHandler->sync(this); @@ -4061,7 +4156,7 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { if (!(precpred(_ctx, 1))) throw FailedPredicateException(this, "precpred(_ctx, 1)"); setState(487); - match(KnoBABQueryParser::T__49); + match(KnoBABQueryParser::T__51); setState(489); _errHandler->sync(this); @@ -4083,13 +4178,141 @@ KnoBABQueryParser::LtlfContext* KnoBABQueryParser::ltlf(int precedence) { break; } + case 10: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleLtlf); + setState(495); + + if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(496); + match(KnoBABQueryParser::T__45); + setState(498); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 79, _ctx)) { + case 1: { + setState(497); + match(KnoBABQueryParser::THETA); + break; + } + + default: + break; + } + setState(501); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 80, _ctx)) { + case 1: { + setState(500); + match(KnoBABQueryParser::INV); + break; + } + + default: + break; + } + setState(504); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 81, _ctx)) { + case 1: { + setState(503); + declare_arguments(); + break; + } + + default: + break; + } + setState(507); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 82, _ctx)) { + case 1: { + setState(506); + declare_act_target(); + break; + } + + default: + break; + } + break; + } + + case 11: { + auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); + _localctx = newContext; + pushNewRecursionContext(newContext, startState, RuleLtlf); + setState(509); + + if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(510); + match(KnoBABQueryParser::T__46); + setState(512); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 83, _ctx)) { + case 1: { + setState(511); + match(KnoBABQueryParser::THETA); + break; + } + + default: + break; + } + setState(515); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 84, _ctx)) { + case 1: { + setState(514); + match(KnoBABQueryParser::INV); + break; + } + + default: + break; + } + setState(518); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 85, _ctx)) { + case 1: { + setState(517); + declare_arguments(); + break; + } + + default: + break; + } + setState(521); + _errHandler->sync(this); + + switch (getInterpreter()->adaptivePredict(_input, 86, _ctx)) { + case 1: { + setState(520); + declare_act_target(); + break; + } + + default: + break; + } + break; + } + default: break; } } - setState(499); + setState(527); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 80, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 88, _ctx); } } catch (RecognitionException &e) { @@ -4153,13 +4376,13 @@ KnoBABQueryParser::Data_aware_declareContext* KnoBABQueryParser::data_aware_decl }); try { enterOuterAlt(_localctx, 1); - setState(503); + setState(531); _errHandler->sync(this); _la = _input->LA(1); while (_la == KnoBABQueryParser::STRING) { - setState(500); + setState(528); declare(); - setState(505); + setState(533); _errHandler->sync(this); _la = _input->LA(1); } @@ -4273,48 +4496,48 @@ KnoBABQueryParser::DeclareContext* KnoBABQueryParser::declare() { }); try { size_t alt; - setState(528); + setState(556); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 84, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 92, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(506); + setState(534); antlrcpp::downCast(_localctx)->name = match(KnoBABQueryParser::STRING); - setState(507); + setState(535); match(KnoBABQueryParser::T__43); - setState(511); + setState(539); _errHandler->sync(this); alt = 1; do { switch (alt) { case 1: { - setState(508); + setState(536); fields(); - setState(509); - match(KnoBABQueryParser::T__50); + setState(537); + match(KnoBABQueryParser::T__52); break; } default: throw NoViableAltException(this); } - setState(513); + setState(541); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 82, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 90, _ctx); } while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER); - setState(515); + setState(543); fields(); - setState(516); + setState(544); match(KnoBABQueryParser::T__44); - setState(519); + setState(547); _errHandler->sync(this); _la = _input->LA(1); - if (_la == KnoBABQueryParser::T__51) { - setState(517); - match(KnoBABQueryParser::T__51); - setState(518); + if (_la == KnoBABQueryParser::T__53) { + setState(545); + match(KnoBABQueryParser::T__53); + setState(546); prop(); } break; @@ -4323,17 +4546,17 @@ KnoBABQueryParser::DeclareContext* KnoBABQueryParser::declare() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(521); + setState(549); antlrcpp::downCast(_localctx)->name = match(KnoBABQueryParser::STRING); - setState(522); + setState(550); match(KnoBABQueryParser::T__43); - setState(523); + setState(551); fields(); - setState(524); - match(KnoBABQueryParser::T__50); - setState(525); + setState(552); + match(KnoBABQueryParser::T__52); + setState(553); match(KnoBABQueryParser::INTNUMBER); - setState(526); + setState(554); match(KnoBABQueryParser::T__44); break; } @@ -4404,11 +4627,11 @@ KnoBABQueryParser::FieldsContext* KnoBABQueryParser::fields() { }); try { enterOuterAlt(_localctx, 1); - setState(530); + setState(558); antlrcpp::downCast(_localctx)->label = match(KnoBABQueryParser::STRING); - setState(531); - match(KnoBABQueryParser::T__50); - setState(532); + setState(559); + match(KnoBABQueryParser::T__52); + setState(560); prop(); } @@ -4523,17 +4746,17 @@ KnoBABQueryParser::PropContext* KnoBABQueryParser::prop() { exitRule(); }); try { - setState(540); + setState(568); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 85, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 93, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(534); + setState(562); prop_within_dijunction(); - setState(535); - match(KnoBABQueryParser::T__52); - setState(536); + setState(563); + match(KnoBABQueryParser::T__54); + setState(564); prop(); break; } @@ -4541,7 +4764,7 @@ KnoBABQueryParser::PropContext* KnoBABQueryParser::prop() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(538); + setState(566); prop_within_dijunction(); break; } @@ -4549,8 +4772,8 @@ KnoBABQueryParser::PropContext* KnoBABQueryParser::prop() { case 3: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 3); - setState(539); - match(KnoBABQueryParser::T__53); + setState(567); + match(KnoBABQueryParser::T__55); break; } @@ -4649,13 +4872,13 @@ KnoBABQueryParser::Prop_within_dijunctionContext* KnoBABQueryParser::prop_within exitRule(); }); try { - setState(547); + setState(575); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 86, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 94, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(542); + setState(570); atom(); break; } @@ -4663,11 +4886,11 @@ KnoBABQueryParser::Prop_within_dijunctionContext* KnoBABQueryParser::prop_within case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(543); + setState(571); atom(); - setState(544); - match(KnoBABQueryParser::T__54); - setState(545); + setState(572); + match(KnoBABQueryParser::T__56); + setState(573); prop_within_dijunction(); break; } @@ -4755,35 +4978,35 @@ KnoBABQueryParser::AtomContext* KnoBABQueryParser::atom() { }); try { enterOuterAlt(_localctx, 1); - setState(550); + setState(578); _errHandler->sync(this); _la = _input->LA(1); if (_la == KnoBABQueryParser::NEGATED) { - setState(549); + setState(577); antlrcpp::downCast(_localctx)->isnegated = match(KnoBABQueryParser::NEGATED); } - setState(552); + setState(580); var(); - setState(553); + setState(581); rel(); - setState(557); + setState(585); _errHandler->sync(this); switch (_input->LA(1)) { case KnoBABQueryParser::NUMBER: { - setState(554); + setState(582); match(KnoBABQueryParser::NUMBER); break; } case KnoBABQueryParser::STRING: { - setState(555); + setState(583); match(KnoBABQueryParser::STRING); break; } - case KnoBABQueryParser::T__73: { - setState(556); + case KnoBABQueryParser::T__75: { + setState(584); antlrcpp::downCast(_localctx)->leftvar = var(); break; } @@ -4955,54 +5178,54 @@ KnoBABQueryParser::RelContext* KnoBABQueryParser::rel() { exitRule(); }); try { - setState(565); + setState(593); _errHandler->sync(this); switch (_input->LA(1)) { - case KnoBABQueryParser::T__55: { + case KnoBABQueryParser::T__57: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(559); - match(KnoBABQueryParser::T__55); + setState(587); + match(KnoBABQueryParser::T__57); break; } - case KnoBABQueryParser::T__56: { + case KnoBABQueryParser::T__58: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(560); - match(KnoBABQueryParser::T__56); + setState(588); + match(KnoBABQueryParser::T__58); break; } - case KnoBABQueryParser::T__57: { + case KnoBABQueryParser::T__59: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 3); - setState(561); - match(KnoBABQueryParser::T__57); + setState(589); + match(KnoBABQueryParser::T__59); break; } - case KnoBABQueryParser::T__58: { + case KnoBABQueryParser::T__60: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 4); - setState(562); - match(KnoBABQueryParser::T__58); + setState(590); + match(KnoBABQueryParser::T__60); break; } case KnoBABQueryParser::T__12: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 5); - setState(563); + setState(591); match(KnoBABQueryParser::T__12); break; } - case KnoBABQueryParser::T__59: { + case KnoBABQueryParser::T__61: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 6); - setState(564); - match(KnoBABQueryParser::T__59); + setState(592); + match(KnoBABQueryParser::T__61); break; } @@ -5068,9 +5291,9 @@ KnoBABQueryParser::Declare_argumentsContext* KnoBABQueryParser::declare_argument }); try { enterOuterAlt(_localctx, 1); - setState(567); - match(KnoBABQueryParser::T__60); - setState(568); + setState(595); + match(KnoBABQueryParser::T__62); + setState(596); match(KnoBABQueryParser::INTNUMBER); } @@ -5136,7 +5359,7 @@ KnoBABQueryParser::Declare_act_targetContext* KnoBABQueryParser::declare_act_tar }); try { enterOuterAlt(_localctx, 1); - setState(570); + setState(598); _la = _input->LA(1); if (!(_la == KnoBABQueryParser::ACTIVATION @@ -5202,12 +5425,12 @@ KnoBABQueryParser::No_preliminary_fillContext* KnoBABQueryParser::no_preliminary }); try { enterOuterAlt(_localctx, 1); - setState(572); - match(KnoBABQueryParser::T__61); - setState(573); - match(KnoBABQueryParser::T__62); - setState(574); + setState(600); match(KnoBABQueryParser::T__63); + setState(601); + match(KnoBABQueryParser::T__64); + setState(602); + match(KnoBABQueryParser::T__65); } catch (RecognitionException &e) { @@ -5263,12 +5486,12 @@ KnoBABQueryParser::Act_for_attributesContext* KnoBABQueryParser::act_for_attribu }); try { enterOuterAlt(_localctx, 1); - setState(576); - match(KnoBABQueryParser::T__61); - setState(577); - match(KnoBABQueryParser::T__64); - setState(578); - match(KnoBABQueryParser::T__65); + setState(604); + match(KnoBABQueryParser::T__63); + setState(605); + match(KnoBABQueryParser::T__66); + setState(606); + match(KnoBABQueryParser::T__67); } catch (RecognitionException &e) { @@ -5324,12 +5547,12 @@ KnoBABQueryParser::No_cream_offContext* KnoBABQueryParser::no_cream_off() { }); try { enterOuterAlt(_localctx, 1); - setState(580); - match(KnoBABQueryParser::T__61); - setState(581); - match(KnoBABQueryParser::T__66); - setState(582); - match(KnoBABQueryParser::T__67); + setState(608); + match(KnoBABQueryParser::T__63); + setState(609); + match(KnoBABQueryParser::T__68); + setState(610); + match(KnoBABQueryParser::T__69); } catch (RecognitionException &e) { @@ -5385,10 +5608,10 @@ KnoBABQueryParser::With_dataContext* KnoBABQueryParser::with_data() { }); try { enterOuterAlt(_localctx, 1); - setState(584); + setState(612); match(KnoBABQueryParser::T__17); - setState(585); - match(KnoBABQueryParser::T__68); + setState(613); + match(KnoBABQueryParser::T__70); } catch (RecognitionException &e) { @@ -5444,10 +5667,10 @@ KnoBABQueryParser::With_missingContext* KnoBABQueryParser::with_missing() { }); try { enterOuterAlt(_localctx, 1); - setState(587); + setState(615); match(KnoBABQueryParser::T__17); - setState(588); - match(KnoBABQueryParser::T__69); + setState(616); + match(KnoBABQueryParser::T__71); } catch (RecognitionException &e) { @@ -5503,10 +5726,10 @@ KnoBABQueryParser::No_statsContext* KnoBABQueryParser::no_stats() { }); try { enterOuterAlt(_localctx, 1); - setState(590); - match(KnoBABQueryParser::T__61); - setState(591); - match(KnoBABQueryParser::T__70); + setState(618); + match(KnoBABQueryParser::T__63); + setState(619); + match(KnoBABQueryParser::T__72); } catch (RecognitionException &e) { @@ -5583,35 +5806,35 @@ KnoBABQueryParser::Rule_with_weightContext* KnoBABQueryParser::rule_with_weight( }); try { enterOuterAlt(_localctx, 1); - setState(594); + setState(622); _errHandler->sync(this); _la = _input->LA(1); if (_la == KnoBABQueryParser::VIOLATED) { - setState(593); + setState(621); match(KnoBABQueryParser::VIOLATED); } - setState(597); + setState(625); _errHandler->sync(this); _la = _input->LA(1); if (_la == KnoBABQueryParser::VAC_SAT) { - setState(596); + setState(624); match(KnoBABQueryParser::VAC_SAT); } - setState(600); + setState(628); _errHandler->sync(this); _la = _input->LA(1); if (_la == KnoBABQueryParser::SAT) { - setState(599); + setState(627); match(KnoBABQueryParser::SAT); } - setState(602); + setState(630); declare(); - setState(603); + setState(631); match(KnoBABQueryParser::T__11); - setState(604); + setState(632); match(KnoBABQueryParser::NUMBER); } @@ -5681,29 +5904,29 @@ KnoBABQueryParser::Conjunctive_subruleContext* KnoBABQueryParser::conjunctive_su try { size_t alt; enterOuterAlt(_localctx, 1); - setState(606); - match(KnoBABQueryParser::T__71); - setState(612); + setState(634); + match(KnoBABQueryParser::T__73); + setState(640); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 93, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 101, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(607); + setState(635); rule_with_weight(); - setState(608); - match(KnoBABQueryParser::T__54); + setState(636); + match(KnoBABQueryParser::T__56); } - setState(614); + setState(642); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 93, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 101, _ctx); } - setState(615); + setState(643); rule_with_weight(); - setState(616); - match(KnoBABQueryParser::T__72); - setState(617); + setState(644); + match(KnoBABQueryParser::T__74); + setState(645); match(KnoBABQueryParser::T__11); - setState(618); + setState(646); match(KnoBABQueryParser::NUMBER); } @@ -5774,33 +5997,33 @@ KnoBABQueryParser::Classification_ruleContext* KnoBABQueryParser::classification try { size_t alt; enterOuterAlt(_localctx, 1); - setState(620); + setState(648); antlrcpp::downCast(_localctx)->class_name = match(KnoBABQueryParser::STRING); - setState(621); + setState(649); match(KnoBABQueryParser::T__11); - setState(631); + setState(659); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 95, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 103, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(625); + setState(653); _errHandler->sync(this); _la = _input->LA(1); - while (_la == KnoBABQueryParser::T__71) { - setState(622); + while (_la == KnoBABQueryParser::T__73) { + setState(650); conjunctive_subrule(); - setState(627); + setState(655); _errHandler->sync(this); _la = _input->LA(1); } - setState(628); - match(KnoBABQueryParser::T__52); + setState(656); + match(KnoBABQueryParser::T__54); } - setState(633); + setState(661); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 95, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 103, _ctx); } - setState(634); + setState(662); conjunctive_subrule(); } @@ -5866,13 +6089,13 @@ KnoBABQueryParser::Model_classificationContext* KnoBABQueryParser::model_classif }); try { enterOuterAlt(_localctx, 1); - setState(637); + setState(665); _errHandler->sync(this); _la = _input->LA(1); do { - setState(636); + setState(664); classification_rule(); - setState(639); + setState(667); _errHandler->sync(this); _la = _input->LA(1); } while (_la == KnoBABQueryParser::STRING); @@ -5935,9 +6158,9 @@ KnoBABQueryParser::VarContext* KnoBABQueryParser::var() { }); try { enterOuterAlt(_localctx, 1); - setState(641); - match(KnoBABQueryParser::T__73); - setState(642); + setState(669); + match(KnoBABQueryParser::T__75); + setState(670); match(KnoBABQueryParser::STRING); } @@ -5962,15 +6185,17 @@ bool KnoBABQueryParser::sempred(RuleContext *context, size_t ruleIndex, size_t p bool KnoBABQueryParser::ltlfSempred(LtlfContext *_localctx, size_t predicateIndex) { switch (predicateIndex) { - case 0: return precpred(_ctx, 14); - case 1: return precpred(_ctx, 13); - case 2: return precpred(_ctx, 12); - case 3: return precpred(_ctx, 10); + case 0: return precpred(_ctx, 16); + case 1: return precpred(_ctx, 15); + case 2: return precpred(_ctx, 14); + case 3: return precpred(_ctx, 12); case 4: return precpred(_ctx, 5); case 5: return precpred(_ctx, 4); case 6: return precpred(_ctx, 3); case 7: return precpred(_ctx, 2); case 8: return precpred(_ctx, 1); + case 9: return precpred(_ctx, 7); + case 10: return precpred(_ctx, 6); default: break; diff --git a/src/knobab/server/query_manager/ServerQueryManager.cpp b/src/knobab/server/query_manager/ServerQueryManager.cpp index 3cace15..36df899 100755 --- a/src/knobab/server/query_manager/ServerQueryManager.cpp +++ b/src/knobab/server/query_manager/ServerQueryManager.cpp @@ -527,7 +527,8 @@ antlrcpp::Any ServerQueryManager::visitExists(KnoBABQueryParser::ExistsContext * ASSERT_ON_TIMING(context); auto argument = decleare_templates_determine(context->declare_arguments()); max_aspect = std::max(max_aspect, argument); - return {LTLfQuery::qEXISTS(context->JOLLY() != nullptr ? -1 : std::stoull(context->INTNUMBER()->getText()), argument, decleare_leaf_determine(context->declare_act_target()), GET_TIMING(context), context->NEGATED())}; + return {LTLfQuery::qEXISTS(context->JOLLY() != nullptr ? -1 : std::stoull(context->INTNUMBER()->getText()), + argument, decleare_leaf_determine(context->declare_act_target()), GET_TIMING(context), context->NEGATED())}; } antlrcpp::Any ServerQueryManager::visitNext(KnoBABQueryParser::NextContext *context) { @@ -1385,3 +1386,32 @@ std::any ServerQueryManager::visitAnd_wfuture_not_next(KnoBABQueryParser::And_wf return {LTLfQuery::qANDFUTURENOTWNEXTA(lhs, rhs, true, context->THETA() != nullptr, context->INV() != nullptr)}; } + +std::any ServerQueryManager::visitAnd_next_B(KnoBABQueryParser::And_next_BContext *ctx) { + ASSERT_ON_GIVEN_TIMING(true); + auto argument = decleare_templates_determine(ctx->declare_arguments()); + max_aspect = std::max(max_aspect, argument); + + fromNowOnTimedStack.push(fromNowOnTimed); + auto lhs = std::any_cast(visit(ctx->ltlf())); + fromNowOnTimed = fromNowOnTimedStack.top(); + fromNowOnTimedStack.pop(); + + return {LTLfQuery::qANDNEXT(lhs, argument, decleare_leaf_determine(ctx->declare_act_target()), true, ctx->THETA() != nullptr, + ctx->INV() != nullptr)}; +} + +std::any ServerQueryManager::visitNext_and_B(KnoBABQueryParser::Next_and_BContext *ctx) { + ASSERT_ON_GIVEN_TIMING(true); + auto argument = decleare_templates_determine(ctx->declare_arguments()); + max_aspect = std::max(max_aspect, argument); + + fromNowOnTimedStack.push(fromNowOnTimed); + fromNowOnTimed = true; + auto lhs = std::any_cast(visit(ctx->ltlf())); + fromNowOnTimed = fromNowOnTimedStack.top(); + fromNowOnTimedStack.pop(); + + return {LTLfQuery::qNEXTAND(lhs, argument, decleare_leaf_determine(ctx->declare_act_target()), true, ctx->THETA() != nullptr, + ctx->INV() != nullptr)}; +} diff --git a/src/knobab/tests/basic_operators_testing.cpp b/src/knobab/tests/basic_operators_testing.cpp index be24d22..c7f4854 100755 --- a/src/knobab/tests/basic_operators_testing.cpp +++ b/src/knobab/tests/basic_operators_testing.cpp @@ -158,7 +158,7 @@ TEST_CASE("basic_operators") { SECTION("ANDNEXT") { auto As = env.db.timed_dataless_exists("A", ActivationLeaf); Result out, expected; - and_next(As, out, env.db, env.db.event_label_mapper.get("B"), nullptr, nullptr); + and_next(As, out, env.db, nullptr, {"B"}, nullptr); DATA_DECREMENT_EMPLACE_CORRNEXTBACK(expected, 3, 0, true); DATA_DECREMENT_EMPLACE_CORRNEXTBACK(expected, 5, 0, true); DATA_DECREMENT_EMPLACE_CORRNEXTBACK(expected, 7, 0, true); diff --git a/src/knobab/tests/complete_response.cpp b/src/knobab/tests/complete_response.cpp index bc0ff22..582254f 100644 --- a/src/knobab/tests/complete_response.cpp +++ b/src/knobab/tests/complete_response.cpp @@ -55,10 +55,10 @@ const std::string query_plan_novel = "queryplan \"edbt24\" {\n" " template \"Absence1\" := ABSENCE 1 activation\n" " template \"Absence2\" := ABSENCE 2 activation\n" " template \"Precedence\" args 2 := ((EXISTS ~ 1 t #2) U (EXISTS 1 t #1 activation)) OR (ABSENCE 1 #2)\n" - " template \"ChainPrecedence\" args 2 := G(((LAST OR t (NEXT EXISTS ~ 1 t #1))) OR t ((NEXT EXISTS 1 t #1 activation) AND t THETA INV (EXISTS 1 t #2 target) ))\n" + " template \"ChainPrecedence\" args 2 := G(((LAST OR t (NEXT EXISTS ~ 1 t #1))) OR t ((EXISTS 1 t #1 activation) XB THETA INV #2 target ))\n" " template \"Choice\" args 2 := (EXISTS 1 t #1 activation) OR THETA (EXISTS 1 t #2 activation)\n" " template \"Response\" args 2 := G ( ((EXISTS ~ 1 t #1)) OR t ((EXISTS 1 t #1 activation) &Ft THETA (EXISTS 1 t #2 target)) )\n" - " template \"ChainResponse\" args 2 := G ( ((EXISTS ~ 1 t #1)) OR t ((EXISTS 1 t #1 activation) AND t THETA (NEXT EXISTS 1 t #2 target)))\n" + " template \"ChainResponse\" args 2 := G ( ((EXISTS ~ 1 t #1)) OR t ((EXISTS 1 t #1 activation) BX THETA #2 target))\n" " template \"RespExistence\" args 2 := ( ((ABSENCE 1 #1)) OR ((EXISTS 1 #1 activation) AND THETA (EXISTS 1 #2 target)))\n" " template \"ExclChoice\" args 2 := ((EXISTS 1 t #1 activation) OR THETA (EXISTS 1 t #2 activation)) AND ((ABSENCE 1 #1) OR (ABSENCE 1 #2))\n" " template \"CoExistence\" args 2 := ( ((ABSENCE 1 #1)) OR ((EXISTS 1 #1 activation) AND THETA (EXISTS 1 #2 target))) AND ( ((ABSENCE 1 #2)) OR ((EXISTS 1 #2 activation) AND THETA INV (EXISTS 1 #1 target)))\n" @@ -262,6 +262,106 @@ TEST_CASE("novelAltResponseHybrid") { } } +TEST_CASE("novelChainResponseHybrid") { + size_t pos, neg; + const std::vector log_parse_format_type{"HRF", "XES", "TAB"}; + std::ofstream f{"/home/giacomo/b.txt", std::ios_base::app}; + + auto root_folder = std::filesystem::current_path().parent_path(); + std::string base{"ChainResponse"}; + std::string operators{"Hybrid"}; + std::filesystem::path curr = root_folder / "data" / "testing" / "declare" / base; + auto sizes = root_folder / "data" /"testing"/"declare" / (base+"_pos_neg.txt"); + + ServerQueryManager sqm; + std::stringstream ss; + std::ifstream fs{sizes}; + fs >> pos >> neg; + auto declare_file_path = (root_folder / "data" /"testing"/"declare" / (base+".powerdecl")).string(); + std::ifstream t(declare_file_path); + std::stringstream buffer; + buffer << t.rdbuf(); + + ss << "load " + << log_parse_format_type.at((size_t)TAB_SEPARATED_EVENTS) + << " " + << std::quoted(curr.string()) + << " no stats as " + << std::quoted(base); + auto tmp = sqm.runQuery(ss.str()); + ss.str(std::string()); + ss.clear(); + + sqm.runQuery(query_plan_novel); + ss << "model-check declare " << buffer.str() << std::endl; + ss << " using \"TraceMaximumSatisfiability\" over " << std::quoted(base) << std::endl; + ss << " plan \"edbt24\" " << std::endl; + ss << " with operators " << std::quoted(operators); + std::string a,b; + std::tie(a,b) = sqm.runQuery(ss.str()); + auto js = nlohmann::json::parse(a); + std::vector max_sat_per_trace = js["TraceMaximumSatisfiability"].get>(); + + f << base<< " "<() << std::endl; + for (size_t i = 0; i log_parse_format_type{"HRF", "XES", "TAB"}; + std::ofstream f{"/home/giacomo/b.txt", std::ios_base::app}; + + auto root_folder = std::filesystem::current_path().parent_path(); + std::string base{"ChainPrecedence"}; + std::string operators{"Hybrid"}; + std::filesystem::path curr = root_folder / "data" / "testing" / "declare" / base; + auto sizes = root_folder / "data" /"testing"/"declare" / (base+"_pos_neg.txt"); + + ServerQueryManager sqm; + std::stringstream ss; + std::ifstream fs{sizes}; + fs >> pos >> neg; + auto declare_file_path = (root_folder / "data" /"testing"/"declare" / (base+".powerdecl")).string(); + std::ifstream t(declare_file_path); + std::stringstream buffer; + buffer << t.rdbuf(); + + ss << "load " + << log_parse_format_type.at((size_t)TAB_SEPARATED_EVENTS) + << " " + << std::quoted(curr.string()) + << " no stats as " + << std::quoted(base); + auto tmp = sqm.runQuery(ss.str()); + ss.str(std::string()); + ss.clear(); + + sqm.runQuery(query_plan_novel); + ss << "model-check declare " << buffer.str() << std::endl; + ss << " using \"TraceMaximumSatisfiability\" over " << std::quoted(base) << std::endl; + ss << " plan \"edbt24\" " << std::endl; + ss << " with operators " << std::quoted(operators); + std::string a,b; + std::tie(a,b) = sqm.runQuery(ss.str()); + auto js = nlohmann::json::parse(a); + std::vector max_sat_per_trace = js["TraceMaximumSatisfiability"].get>(); + + f << base<< " "<() << std::endl; + for (size_t i = 0; i log_parse_format_type{"HRF", "XES", "TAB"};