This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-206
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-206 by this push:
new 3f77b6f WIP.
3f77b6f is described below
commit 3f77b6f584b9799b65614abd27d11994129328d0
Author: Aaron Radzinski <[email protected]>
AuthorDate: Mon Mar 8 16:03:39 2021 -0800
WIP.
---
.../scala/org/apache/nlpcraft/common/package.scala | 8 +
.../intent/impl/NCIntentDslBaselCompiler.scala | 113 ++-
.../model/intent/impl/NCIntentDslCompiler.scala | 12 +-
.../model/intent/impl/antlr4/NCIntentDsl.g4 | 11 +-
.../model/intent/impl/antlr4/NCIntentDsl.interp | 4 +-
.../impl/antlr4/NCIntentDslBaseListener.java | 24 +
.../intent/impl/antlr4/NCIntentDslLexer.interp | 2 +-
.../model/intent/impl/antlr4/NCIntentDslLexer.java | 761 +++++++++----------
.../intent/impl/antlr4/NCIntentDslListener.java | 20 +
.../intent/impl/antlr4/NCIntentDslParser.java | 807 ++++++++++++---------
.../intent/utils/NCDslSynonym.scala} | 13 +-
.../nlpcraft/model/intent/utils/NCDslTerm.scala | 2 +-
.../model/intent/utils/NCDslTokenChecker.scala | 2 +-
.../probe/mgrs/deploy/NCDeployManager.scala | 6 +-
.../mgrs/model/NCModelSynonymDslCompiler.scala | 9 +-
.../dsl/compiler/NCIntentDslCompilerSpec.scala | 6 +-
.../nlpcraft/model/intent/dsl/compiler/test_ok.nc | 2 +-
17 files changed, 1018 insertions(+), 784 deletions(-)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
index d7701a7..29b2a92 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
@@ -155,6 +155,14 @@ package object common {
def fps: Long = 1000 / v
}
+ implicit class OptionEq1[T](private val opt: Option[T]) {
+ def === (x: Option[T]): Boolean = opt.isDefined && x.isDefined &&
opt.get == x.get
+ def === (x: T): Boolean = opt.isDefined && opt.get == x
+ }
+ implicit class OptionEq2[T](private val opt: T) {
+ def === (x: Option[T]): Boolean = x.isDefined && opt == x.get
+ }
+
/**
*
* @param f
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslBaselCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslBaselCompiler.scala
index 0ab72ba..0011b26 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslBaselCompiler.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslBaselCompiler.scala
@@ -67,6 +67,7 @@ trait NCIntentDslBaselCompiler {
//noinspection ComparingUnrelatedTypes
def isBoolean(v: Object): Boolean = v.isInstanceOf[Boolean]
def isString(v: Object): Boolean = v.isInstanceOf[String]
+ def isToken(v: Object): Boolean = v.isInstanceOf[NCToken]
def asJLong(v: Object): Long = v.asInstanceOf[JLong].longValue()
def asJDouble(v: Object): Double = v.asInstanceOf[JDouble].doubleValue()
def asString(v: Object): String = v.asInstanceOf[String]
@@ -438,9 +439,9 @@ trait NCIntentDslBaselCompiler {
val (v1, v2, f1, f2) = pop2()
if (!isString(v1))
- rtParamTypeError(fun, v1, "string")
+ throw rtParamTypeError(fun, v1, "string")
if (!isString(v2))
- rtParamTypeError(fun, v2, "string")
+ throw rtParamTypeError(fun, v2, "string")
asString(v1).split(asString(v2)).foreach { pushAny(_, f1 || f2) }
}
@@ -450,9 +451,9 @@ trait NCIntentDslBaselCompiler {
val (v1, v2, f1, f2) = pop2()
if (!isString(v1))
- rtParamTypeError(fun, v1, "string")
+ throw rtParamTypeError(fun, v1, "string")
if (!isString(v2))
- rtParamTypeError(fun, v2, "string")
+ throw rtParamTypeError(fun, v2, "string")
asString(v1).split(asString(v2)).foreach { s ⇒ pushAny(s.strip, f1
|| f2) }
}
@@ -475,7 +476,7 @@ trait NCIntentDslBaselCompiler {
}
def doMap(): Unit = {
if (stack.size % 2 != 0)
- rtParamNumError(fun)
+ throw rtParamNumError(fun)
val jm = new JHashMap[Object, Object]()
var f = false
@@ -510,6 +511,18 @@ trait NCIntentDslBaselCompiler {
def doCompMeta(): Unit = get1Str() match { case (s, _) ⇒
pushAny(termCtx.compMeta.get(s).orNull, false) }
def doIntentMeta(): Unit = get1Str() match { case (s, _) ⇒
pushAny(termCtx.intentMeta.get(s).orNull, false) }
def doFragMeta(): Unit = get1Str() match { case (s, _) ⇒
pushAny(termCtx.fragMeta.get(s).orNull, false) }
+ def doPartMeta(): Unit = {
+ ensureStack(2)
+
+ val (v1, v2, f1, f2) = pop2()
+
+ if (!isToken(v1))
+ throw rtParamTypeError(fun, v1, "token")
+ if (!isString(v2))
+ throw rtParamTypeError(fun, v2, "string")
+
+ pushAny(v1.asInstanceOf[NCToken].meta(v2.asInstanceOf[String]), f1
|| f2)
+ }
/*
* Math operations.
@@ -517,12 +530,12 @@ trait NCIntentDslBaselCompiler {
def doAbs(): Unit = get1Any() match {
case (a: JLong, f) ⇒ pushLong(Math.abs(a), f)
case (a: JDouble, f) ⇒ pushDouble(Math.abs(a), f)
- case x ⇒ rtParamTypeError(fun, x, "numeric")
+ case x ⇒ throw rtParamTypeError(fun, x, "numeric")
}
def doSquare(): Unit = get1Any() match {
case (a: JLong, f) ⇒ pushLong(a * a, f)
case (a: JDouble, f) ⇒ pushDouble(a * a, f)
- case x ⇒ rtParamTypeError(fun, x, "numeric")
+ case x ⇒ throw rtParamTypeError(fun, x, "numeric")
}
def doCeil(): Unit = get1Double() match { case (a: JDouble, f) ⇒
pushDouble(Math.ceil(a), f) }
def doFloor(): Unit = get1Double() match { case (a: JDouble, f) ⇒
pushDouble(Math.floor(a), f) }
@@ -555,21 +568,6 @@ trait NCIntentDslBaselCompiler {
def doAtan2(): Unit = get2Doubles() match { case (a1: JDouble, a2:
JDouble, f) ⇒ pushDouble(Math.atan2(a1, a2), f) }
/*
- * User operations.
- */
- def doUserId(): Unit = pushLong(termCtx.req.getUser.getId, false)
-
- /*
- * Company operations.
- */
- def doCompId(): Unit = pushLong(termCtx.req.getCompany.getId, false)
-
- /*
- * Request operations.
- */
- def doReqId(): Unit = pushAny(termCtx.req.getServerRequestId, false)
-
- /*
* Date-time operations.
*/
def doYear(): Unit = pushLong(LocalDate.now.getYear,false)
@@ -593,9 +591,55 @@ trait NCIntentDslBaselCompiler {
pushAny(v3, f1 || f3)
}
+ def token(): NCToken =
+ if (stack.nonEmpty && stack.top.isInstanceOf[NCToken])
stack.top.asInstanceOf[NCToken] else tok
+
+ def doPart(): Unit = {
+ ensureStack(2)
+
+ val (v1, v2, f1, f2) = pop2()
+
+ if (!isToken(v1))
+ throw rtParamTypeError(fun, v1, "token")
+ if (!isString(v2))
+ throw rtParamTypeError(fun, v2, "string")
+
+ val t = v1.asInstanceOf[NCToken]
+ val aliasId = v2.asInstanceOf[String]
+
+ val parts = t.findPartTokens(aliasId)
+
+ if (parts.isEmpty)
+ throw newRuntimeError(s"Cannot find part for token (use
'parts' function instead) [" +
+ s"id=${t.getId}, " +
+ s"aliasId=$aliasId" +
+ s"]")
+ else if (parts.size() > 1)
+ throw newRuntimeError(s"Too many parts found for token (use
'parts' function instead) [" +
+ s"id=${t.getId}, " +
+ s"aliasId=$aliasId" +
+ s"]")
+
+ pushAny(parts.get(0), f1 || f2)
+ }
+
+ def doParts(): Unit = {
+ ensureStack(2)
+
+ val (v1, v2, f1, f2) = pop2()
+
+ if (!isToken(v1))
+ throw rtParamTypeError(fun, v1, "token")
+ if (!isString(v2))
+ throw rtParamTypeError(fun, v2, "string")
+
+
pushAny(v1.asInstanceOf[NCToken].findPartTokens(v2.asInstanceOf[String]), f1 ||
f2)
+ }
+
fun match {
// Metadata access.
case "meta_token" ⇒ doTokenMeta()
+ case "meta_part" ⇒ doPartMeta()
case "meta_model" ⇒ doModelMeta()
case "meta_intent" ⇒ doIntentMeta()
case "meta_req" ⇒ doReqMeta()
@@ -612,24 +656,27 @@ trait NCIntentDslBaselCompiler {
case "if" ⇒ doIf()
// Token functions.
- case "id" ⇒ pushAny(tok.getId, true)
- case "ancestors" ⇒ pushAny(tok.getAncestors, true)
- case "parent" ⇒ pushAny(tok.getParentId, true)
- case "groups" ⇒ pushAny(tok.getGroups, true)
- case "value" ⇒ pushAny(tok.getValue, true)
- case "aliases" ⇒ pushAny(tok.getAliases, true)
- case "start_idx" ⇒ pushLong(tok.getStartCharIndex, true)
- case "end_idx" ⇒ pushLong(tok.getEndCharIndex, true)
+ case "id" ⇒ pushAny(token().getId, true)
+ case "ancestors" ⇒ pushAny(token().getAncestors, true)
+ case "parent" ⇒ pushAny(token().getParentId, true)
+ case "groups" ⇒ pushAny(token().getGroups, true)
+ case "value" ⇒ pushAny(token().getValue, true)
+ case "aliases" ⇒ pushAny(token().getAliases, true)
+ case "start_idx" ⇒ pushLong(token().getStartCharIndex, true)
+ case "end_idx" ⇒ pushLong(token().getEndCharIndex, true)
+ case "this" ⇒ pushAny(tok, true)
+ case "part" ⇒ doPart()
+ case "parts" ⇒ doParts()
// Request data.
- case "req_id" ⇒ doReqId()
+ case "req_id" ⇒ pushAny(termCtx.req.getServerRequestId, false)
case "req_normtext" ⇒
case "req_tstamp" ⇒
case "req_addr" ⇒
case "req_agent" ⇒
// User data.
- case "user_id" ⇒ doUserId()
+ case "user_id" ⇒ pushLong(termCtx.req.getUser.getId, false)
case "user_fname" ⇒
case "user_lname" ⇒
case "user_email" ⇒
@@ -637,7 +684,7 @@ trait NCIntentDslBaselCompiler {
case "user_signup_tstamp" ⇒
// Company data.
- case "comp_id" ⇒ doCompId()
+ case "comp_id" ⇒ pushLong(termCtx.req.getCompany.getId, false)
case "comp_name" ⇒
case "comp_website" ⇒
case "comp_country" ⇒
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
index 53a1eb0..1fdbd57 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
@@ -127,7 +127,7 @@ object NCIntentDslCompiler extends LazyLogging {
override def exitTermId(ctx: IDP.TermIdContext): Unit = {
termId = ctx.id().getText
- if (terms.exists(t ⇒ t.id != null && t.id == termId))
+ if (terms.exists(t ⇒ t.id === termId))
throw newSyntaxError(s"Duplicate term ID: $termId")(ctx.id())
}
@@ -158,8 +158,8 @@ object NCIntentDslCompiler extends LazyLogging {
val meta = if (fragMeta == null) Map.empty[String, Any]
else fragMeta
for (fragTerm ← frag.terms)
- if (terms.exists(t ⇒ t.id != null && t.id ==
fragTerm.id))
- throw newSyntaxError(s"Duplicate term ID
'${fragTerm.id}' in fragment '$id'.")(ctx.id())
+ if (terms.exists(t ⇒ t.id === fragTerm.id))
+ throw newSyntaxError(s"Duplicate term ID
'${fragTerm.id.get}' in fragment '$id'.")(ctx.id())
else
terms += fragTerm.cloneWithFragMeta(meta)
@@ -276,7 +276,7 @@ object NCIntentDslCompiler extends LazyLogging {
// Add term.
terms += NCDslTerm(
- termId,
+ Option(termId),
pred,
min,
max,
@@ -464,7 +464,7 @@ object NCIntentDslCompiler extends LazyLogging {
* @return
*/
@throws[NCE]
- def compilePath(
+ def compileIntent(
filePath: Path,
mdlId: String
): Set[NCDslIntent] = antlr4(U.readFile(filePath.toFile).mkString("\n"),
mdlId, filePath.getFileName.toString)
@@ -479,7 +479,7 @@ object NCIntentDslCompiler extends LazyLogging {
* @return
*/
@throws[NCE]
- def compile(
+ def compileIntent(
dsl: String,
mdlId: String,
srcName: String = "<inline>"
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
index 1de551b..01c16a3 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
@@ -18,7 +18,9 @@
grammar NCIntentDsl;
// Parser.
-dsl: dslItems EOF;
+dsl: dslItems EOF; // Intent DSL enty point.
+synonym: alias? LBRACE expr RBRACE EOF; // Synonym DSL entry point.
+alias: LBR id RBR;
dslItems
: dslItem
| dslItems dslItem
@@ -39,7 +41,8 @@ flowDecl: 'flow' ASSIGN (qstring | mtdDecl);
metaDecl: 'meta' ASSIGN jsonObj;
jsonObj
: LBRACE jsonPair (COMMA jsonPair)* RBRACE
- | LBRACE RBRACE
+ |
+ LBRACE RBRACE
;
jsonPair: qstring COLON jsonVal;
jsonVal
@@ -116,6 +119,7 @@ id
// Lexer.
FUN_NAME
: 'meta_token'
+ | 'meta_part'
| 'meta_model'
| 'meta_intent'
| 'meta_req'
@@ -127,6 +131,9 @@ FUN_NAME
| 'json'
| 'if'
| 'id'
+ | 'this'
+ | 'part'
+ | 'parts'
| 'ancestors'
| 'parent'
| 'groups'
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp
index 764d593..12a9541 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp
@@ -106,6 +106,8 @@ ErrorChar
rule names:
dsl
+synonym
+alias
dslItems
dslItem
frag
@@ -140,4 +142,4 @@ id
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 52, 314, 4, 2,
9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8,
4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9,
14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4,
20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9,
25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4,
31, 9, 31, 4, 32, 9, 32, 4, [...]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 52, 330, 4, 2,
9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8,
4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9,
14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4,
20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9,
25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4,
31, 9, 31, 4, 32, 9, 32, 4, [...]
\ No newline at end of file
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java
index c28c86a..3c6c2cf 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java
@@ -28,6 +28,30 @@ public class NCIntentDslBaseListener implements
NCIntentDslListener {
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterSynonym(NCIntentDslParser.SynonymContext
ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitSynonym(NCIntentDslParser.SynonymContext ctx)
{ }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterAlias(NCIntentDslParser.AliasContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitAlias(NCIntentDslParser.AliasContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterDslItems(NCIntentDslParser.DslItemsContext
ctx) { }
/**
* {@inheritDoc}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp
index 715fa06..b81ad08 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp
@@ -166,4 +166,4 @@ mode names:
DEFAULT_MODE
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 52, 1179, 8, 1,
4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8,
9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4,
14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9,
19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4,
25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9,
30, 4, 31, 9, 31, 4, 32, 9, [...]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 52, 1201, 8, 1,
4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8,
9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4,
14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9,
19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4,
25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9,
30, 4, 31, 9, 31, 4, 32, 9, [...]
\ No newline at end of file
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java
index 5ccf6b5..aeb35e2 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java
@@ -124,7 +124,7 @@ public class NCIntentDslLexer extends Lexer {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
-
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\64\u049b\b\1\4\2"+
+
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\64\u04b1\b\1\4\2"+
"\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
"\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
"\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
@@ -180,381 +180,390 @@ public class NCIntentDslLexer extends Lexer {
"\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3"+
"\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7"+
"\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3"+
-
"\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\5\7\u03d0\n"+
-
"\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\7\t\u03df\n\t\f"+
-
"\t\16\t\u03e2\13\t\3\t\3\t\3\n\3\n\3\n\3\n\7\n\u03ea\n\n\f\n\16\n\u03ed"+
-
"\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13\u03fa"+
-
"\n\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3"+
-
"\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\24\3\24\3\24\3\25\3"+
-
"\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3"+
- "\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3
\3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3"+
-
"%\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3-\7-\u044a\n-\f-"+
-
"\16-\u044d\13-\5-\u044f\n-\3.\3.\6.\u0453\n.\r.\16.\u0454\3/\3/\5/\u0459"+
-
"\n/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\62\3\62\6\62\u0465\n\62\r\62"+
-
"\16\62\u0466\3\62\3\62\3\62\3\62\3\62\3\62\3\62\7\62\u0470\n\62\f\62\16"+
-
"\62\u0473\13\62\3\63\3\63\3\63\3\63\7\63\u0479\n\63\f\63\16\63\u047c\13"+
-
"\63\3\63\5\63\u047f\n\63\3\63\5\63\u0482\n\63\3\63\3\63\3\63\3\63\7\63"+
-
"\u0488\n\63\f\63\16\63\u048b\13\63\3\63\3\63\5\63\u048f\n\63\3\63\3\63"+
-
"\3\64\6\64\u0494\n\64\r\64\16\64\u0495\3\64\3\64\3\65\3\65\3\u0489\2\66"+
-
"\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20"+
-
"\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37"+
- "=
?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\2a\2c\61e\62g\63i\64\3\2\16\3"+
-
"\2))\3\2$$\3\2\63;\4\2\62;aa\3\2\62;\4\2GGgg\4\2--//\17\2\u00a2\u0251"+
-
"\u025b\u0294\u02b2\u0371\u0402\u0501\u1e04\u1ef5\u1f03\u2001\u200e\u200f"+
-
"\u2041\u2042\u2072\u2191\u2c02\u2ff1\u3003\ud801\uf902\ufdd1\ufdf2\uffff"+
-
"\4\2C\\c|\4\2\f\f\17\17\3\3\f\f\5\2\13\f\16\17\"\"\2\u052d\2\3\3\2\2\2"+
-
"\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2"+
-
"\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2"+
-
"\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2"+
-
"\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2"+
-
"\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2"+
-
"\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2"+
-
"\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W"+
-
"\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2"+
-
"\2\2\2i\3\2\2\2\3k\3\2\2\2\5r\3\2\2\2\7z\3\2\2\2\t\177\3\2\2\2\13\u0084"+
-
"\3\2\2\2\r\u03cf\3\2\2\2\17\u03d1\3\2\2\2\21\u03da\3\2\2\2\23\u03e5\3"+
-
"\2\2\2\25\u03f9\3\2\2\2\27\u03fb\3\2\2\2\31\u0400\3\2\2\2\33\u0403\3\2"+
-
"\2\2\35\u0406\3\2\2\2\37\u0409\3\2\2\2!\u040c\3\2\2\2#\u040e\3\2\2\2%"+
-
"\u0410\3\2\2\2\'\u0413\3\2\2\2)\u0416\3\2\2\2+\u0418\3\2\2\2-\u041a\3"+
-
"\2\2\2/\u041c\3\2\2\2\61\u041e\3\2\2\2\63\u0420\3\2\2\2\65\u0422\3\2\2"+
-
"\2\67\u0424\3\2\2\29\u0426\3\2\2\2;\u0428\3\2\2\2=\u042a\3\2\2\2?\u042c"+
-
"\3\2\2\2A\u042e\3\2\2\2C\u0430\3\2\2\2E\u0432\3\2\2\2G\u0434\3\2\2\2I"+
-
"\u0436\3\2\2\2K\u0438\3\2\2\2M\u043a\3\2\2\2O\u043c\3\2\2\2Q\u043e\3\2"+
-
"\2\2S\u0440\3\2\2\2U\u0442\3\2\2\2W\u0444\3\2\2\2Y\u044e\3\2\2\2[\u0450"+
-
"\3\2\2\2]\u0456\3\2\2\2_\u045c\3\2\2\2a\u045e\3\2\2\2c\u0464\3\2\2\2e"+
-
"\u048e\3\2\2\2g\u0493\3\2\2\2i\u0499\3\2\2\2kl\7k\2\2lm\7p\2\2mn\7v\2"+
-
"\2no\7g\2\2op\7p\2\2pq\7v\2\2q\4\3\2\2\2rs\7q\2\2st\7t\2\2tu\7f\2\2uv"+
-
"\7g\2\2vw\7t\2\2wx\7g\2\2xy\7f\2\2y\6\3\2\2\2z{\7h\2\2{|\7n\2\2|}\7q\2"+
-
"\2}~\7y\2\2~\b\3\2\2\2\177\u0080\7o\2\2\u0080\u0081\7g\2\2\u0081\u0082"+
-
"\7v\2\2\u0082\u0083\7c\2\2\u0083\n\3\2\2\2\u0084\u0085\7v\2\2\u0085\u0086"+
-
"\7g\2\2\u0086\u0087\7t\2\2\u0087\u0088\7o\2\2\u0088\f\3\2\2\2\u0089\u008a"+
-
"\7o\2\2\u008a\u008b\7g\2\2\u008b\u008c\7v\2\2\u008c\u008d\7c\2\2\u008d"+
-
"\u008e\7a\2\2\u008e\u008f\7v\2\2\u008f\u0090\7q\2\2\u0090\u0091\7m\2\2"+
-
"\u0091\u0092\7g\2\2\u0092\u03d0\7p\2\2\u0093\u0094\7o\2\2\u0094\u0095"+
-
"\7g\2\2\u0095\u0096\7v\2\2\u0096\u0097\7c\2\2\u0097\u0098\7a\2\2\u0098"+
-
"\u0099\7o\2\2\u0099\u009a\7q\2\2\u009a\u009b\7f\2\2\u009b\u009c\7g\2\2"+
-
"\u009c\u03d0\7n\2\2\u009d\u009e\7o\2\2\u009e\u009f\7g\2\2\u009f\u00a0"+
-
"\7v\2\2\u00a0\u00a1\7c\2\2\u00a1\u00a2\7a\2\2\u00a2\u00a3\7k\2\2\u00a3"+
-
"\u00a4\7p\2\2\u00a4\u00a5\7v\2\2\u00a5\u00a6\7g\2\2\u00a6\u00a7\7p\2\2"+
-
"\u00a7\u03d0\7v\2\2\u00a8\u00a9\7o\2\2\u00a9\u00aa\7g\2\2\u00aa\u00ab"+
-
"\7v\2\2\u00ab\u00ac\7c\2\2\u00ac\u00ad\7a\2\2\u00ad\u00ae\7t\2\2\u00ae"+
-
"\u00af\7g\2\2\u00af\u03d0\7s\2\2\u00b0\u00b1\7o\2\2\u00b1\u00b2\7g\2\2"+
-
"\u00b2\u00b3\7v\2\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7a\2\2\u00b5\u00b6"+
-
"\7w\2\2\u00b6\u00b7\7u\2\2\u00b7\u00b8\7g\2\2\u00b8\u03d0\7t\2\2\u00b9"+
-
"\u00ba\7o\2\2\u00ba\u00bb\7g\2\2\u00bb\u00bc\7v\2\2\u00bc\u00bd\7c\2\2"+
-
"\u00bd\u00be\7a\2\2\u00be\u00bf\7e\2\2\u00bf\u00c0\7q\2\2\u00c0\u00c1"+
-
"\7o\2\2\u00c1\u00c2\7r\2\2\u00c2\u00c3\7c\2\2\u00c3\u00c4\7p\2\2\u00c4"+
-
"\u03d0\7{\2\2\u00c5\u00c6\7o\2\2\u00c6\u00c7\7g\2\2\u00c7\u00c8\7v\2\2"+
-
"\u00c8\u00c9\7c\2\2\u00c9\u00ca\7a\2\2\u00ca\u00cb\7u\2\2\u00cb\u00cc"+
-
"\7{\2\2\u00cc\u03d0\7u\2\2\u00cd\u00ce\7o\2\2\u00ce\u00cf\7g\2\2\u00cf"+
-
"\u00d0\7v\2\2\u00d0\u00d1\7c\2\2\u00d1\u00d2\7a\2\2\u00d2\u00d3\7e\2\2"+
-
"\u00d3\u00d4\7q\2\2\u00d4\u00d5\7p\2\2\u00d5\u03d0\7x\2\2\u00d6\u00d7"+
-
"\7o\2\2\u00d7\u00d8\7g\2\2\u00d8\u00d9\7v\2\2\u00d9\u00da\7c\2\2\u00da"+
-
"\u00db\7a\2\2\u00db\u00dc\7h\2\2\u00dc\u00dd\7t\2\2\u00dd\u00de\7c\2\2"+
-
"\u00de\u03d0\7i\2\2\u00df\u00e0\7l\2\2\u00e0\u00e1\7u\2\2\u00e1\u00e2"+
-
"\7q\2\2\u00e2\u03d0\7p\2\2\u00e3\u00e4\7k\2\2\u00e4\u03d0\7h\2\2\u00e5"+
-
"\u00e6\7k\2\2\u00e6\u03d0\7f\2\2\u00e7\u00e8\7c\2\2\u00e8\u00e9\7p\2\2"+
-
"\u00e9\u00ea\7e\2\2\u00ea\u00eb\7g\2\2\u00eb\u00ec\7u\2\2\u00ec\u00ed"+
-
"\7v\2\2\u00ed\u00ee\7q\2\2\u00ee\u00ef\7t\2\2\u00ef\u03d0\7u\2\2\u00f0"+
-
"\u00f1\7r\2\2\u00f1\u00f2\7c\2\2\u00f2\u00f3\7t\2\2\u00f3\u00f4\7g\2\2"+
-
"\u00f4\u00f5\7p\2\2\u00f5\u03d0\7v\2\2\u00f6\u00f7\7i\2\2\u00f7\u00f8"+
-
"\7t\2\2\u00f8\u00f9\7q\2\2\u00f9\u00fa\7w\2\2\u00fa\u00fb\7r\2\2\u00fb"+
-
"\u03d0\7u\2\2\u00fc\u00fd\7x\2\2\u00fd\u00fe\7c\2\2\u00fe\u00ff\7n\2\2"+
-
"\u00ff\u0100\7w\2\2\u0100\u03d0\7g\2\2\u0101\u0102\7c\2\2\u0102\u0103"+
-
"\7n\2\2\u0103\u0104\7k\2\2\u0104\u0105\7c\2\2\u0105\u0106\7u\2\2\u0106"+
-
"\u0107\7g\2\2\u0107\u03d0\7u\2\2\u0108\u0109\7u\2\2\u0109\u010a\7v\2\2"+
-
"\u010a\u010b\7c\2\2\u010b\u010c\7t\2\2\u010c\u010d\7v\2\2\u010d\u010e"+
-
"\7a\2\2\u010e\u010f\7k\2\2\u010f\u0110\7f\2\2\u0110\u03d0\7z\2\2\u0111"+
-
"\u0112\7g\2\2\u0112\u0113\7p\2\2\u0113\u0114\7f\2\2\u0114\u0115\7a\2\2"+
-
"\u0115\u0116\7k\2\2\u0116\u0117\7f\2\2\u0117\u03d0\7z\2\2\u0118\u0119"+
-
"\7t\2\2\u0119\u011a\7g\2\2\u011a\u011b\7s\2\2\u011b\u011c\7a\2\2\u011c"+
-
"\u011d\7k\2\2\u011d\u03d0\7f\2\2\u011e\u011f\7t\2\2\u011f\u0120\7g\2\2"+
-
"\u0120\u0121\7s\2\2\u0121\u0122\7a\2\2\u0122\u0123\7p\2\2\u0123\u0124"+
-
"\7q\2\2\u0124\u0125\7t\2\2\u0125\u0126\7o\2\2\u0126\u0127\7v\2\2\u0127"+
-
"\u0128\7g\2\2\u0128\u0129\7z\2\2\u0129\u03d0\7v\2\2\u012a\u012b\7t\2\2"+
-
"\u012b\u012c\7g\2\2\u012c\u012d\7s\2\2\u012d\u012e\7a\2\2\u012e\u012f"+
-
"\7v\2\2\u012f\u0130\7u\2\2\u0130\u0131\7v\2\2\u0131\u0132\7c\2\2\u0132"+
-
"\u0133\7o\2\2\u0133\u03d0\7r\2\2\u0134\u0135\7t\2\2\u0135\u0136\7g\2\2"+
-
"\u0136\u0137\7s\2\2\u0137\u0138\7a\2\2\u0138\u0139\7c\2\2\u0139\u013a"+
-
"\7f\2\2\u013a\u013b\7f\2\2\u013b\u03d0\7t\2\2\u013c\u013d\7t\2\2\u013d"+
-
"\u013e\7g\2\2\u013e\u013f\7s\2\2\u013f\u0140\7a\2\2\u0140\u0141\7c\2\2"+
-
"\u0141\u0142\7i\2\2\u0142\u0143\7g\2\2\u0143\u0144\7p\2\2\u0144\u03d0"+
-
"\7v\2\2\u0145\u0146\7w\2\2\u0146\u0147\7u\2\2\u0147\u0148\7g\2\2\u0148"+
-
"\u0149\7t\2\2\u0149\u014a\7a\2\2\u014a\u014b\7k\2\2\u014b\u03d0\7f\2\2"+
-
"\u014c\u014d\7w\2\2\u014d\u014e\7u\2\2\u014e\u014f\7g\2\2\u014f\u0150"+
-
"\7t\2\2\u0150\u0151\7a\2\2\u0151\u0152\7h\2\2\u0152\u0153\7p\2\2\u0153"+
-
"\u0154\7c\2\2\u0154\u0155\7o\2\2\u0155\u03d0\7g\2\2\u0156\u0157\7w\2\2"+
-
"\u0157\u0158\7u\2\2\u0158\u0159\7g\2\2\u0159\u015a\7t\2\2\u015a\u015b"+
-
"\7a\2\2\u015b\u015c\7n\2\2\u015c\u015d\7p\2\2\u015d\u015e\7c\2\2\u015e"+
-
"\u015f\7o\2\2\u015f\u03d0\7g\2\2\u0160\u0161\7w\2\2\u0161\u0162\7u\2\2"+
-
"\u0162\u0163\7g\2\2\u0163\u0164\7t\2\2\u0164\u0165\7a\2\2\u0165\u0166"+
-
"\7g\2\2\u0166\u0167\7o\2\2\u0167\u0168\7c\2\2\u0168\u0169\7k\2\2\u0169"+
-
"\u03d0\7n\2\2\u016a\u016b\7w\2\2\u016b\u016c\7u\2\2\u016c\u016d\7g\2\2"+
-
"\u016d\u016e\7t\2\2\u016e\u016f\7a\2\2\u016f\u0170\7c\2\2\u0170\u0171"+
-
"\7f\2\2\u0171\u0172\7o\2\2\u0172\u0173\7k\2\2\u0173\u03d0\7p\2\2\u0174"+
-
"\u0175\7w\2\2\u0175\u0176\7u\2\2\u0176\u0177\7g\2\2\u0177\u0178\7t\2\2"+
-
"\u0178\u0179\7a\2\2\u0179\u017a\7u\2\2\u017a\u017b\7k\2\2\u017b\u017c"+
-
"\7i\2\2\u017c\u017d\7p\2\2\u017d\u017e\7w\2\2\u017e\u017f\7r\2\2\u017f"+
-
"\u0180\7a\2\2\u0180\u0181\7v\2\2\u0181\u0182\7u\2\2\u0182\u0183\7v\2\2"+
-
"\u0183\u0184\7c\2\2\u0184\u0185\7o\2\2\u0185\u03d0\7r\2\2\u0186\u0187"+
-
"\7e\2\2\u0187\u0188\7q\2\2\u0188\u0189\7o\2\2\u0189\u018a\7r\2\2\u018a"+
-
"\u018b\7a\2\2\u018b\u018c\7k\2\2\u018c\u03d0\7f\2\2\u018d\u018e\7e\2\2"+
-
"\u018e\u018f\7q\2\2\u018f\u0190\7o\2\2\u0190\u0191\7r\2\2\u0191\u0192"+
-
"\7a\2\2\u0192\u0193\7p\2\2\u0193\u0194\7c\2\2\u0194\u0195\7o\2\2\u0195"+
-
"\u03d0\7g\2\2\u0196\u0197\7e\2\2\u0197\u0198\7q\2\2\u0198\u0199\7o\2\2"+
-
"\u0199\u019a\7r\2\2\u019a\u019b\7a\2\2\u019b\u019c\7y\2\2\u019c\u019d"+
-
"\7g\2\2\u019d\u019e\7d\2\2\u019e\u019f\7u\2\2\u019f\u01a0\7k\2\2\u01a0"+
-
"\u01a1\7v\2\2\u01a1\u03d0\7g\2\2\u01a2\u01a3\7e\2\2\u01a3\u01a4\7q\2\2"+
-
"\u01a4\u01a5\7o\2\2\u01a5\u01a6\7r\2\2\u01a6\u01a7\7a\2\2\u01a7\u01a8"+
-
"\7e\2\2\u01a8\u01a9\7q\2\2\u01a9\u01aa\7w\2\2\u01aa\u01ab\7p\2\2\u01ab"+
-
"\u01ac\7v\2\2\u01ac\u01ad\7t\2\2\u01ad\u03d0\7{\2\2\u01ae\u01af\7e\2\2"+
-
"\u01af\u01b0\7q\2\2\u01b0\u01b1\7o\2\2\u01b1\u01b2\7r\2\2\u01b2\u01b3"+
-
"\7a\2\2\u01b3\u01b4\7t\2\2\u01b4\u01b5\7g\2\2\u01b5\u01b6\7i\2\2\u01b6"+
-
"\u01b7\7k\2\2\u01b7\u01b8\7q\2\2\u01b8\u03d0\7p\2\2\u01b9\u01ba\7e\2\2"+
-
"\u01ba\u01bb\7q\2\2\u01bb\u01bc\7o\2\2\u01bc\u01bd\7r\2\2\u01bd\u01be"+
-
"\7a\2\2\u01be\u01bf\7e\2\2\u01bf\u01c0\7k\2\2\u01c0\u01c1\7v\2\2\u01c1"+
-
"\u03d0\7{\2\2\u01c2\u01c3\7e\2\2\u01c3\u01c4\7q\2\2\u01c4\u01c5\7o\2\2"+
-
"\u01c5\u01c6\7r\2\2\u01c6\u01c7\7a\2\2\u01c7\u01c8\7c\2\2\u01c8\u01c9"+
-
"\7f\2\2\u01c9\u01ca\7f\2\2\u01ca\u03d0\7t\2\2\u01cb\u01cc\7e\2\2\u01cc"+
-
"\u01cd\7q\2\2\u01cd\u01ce\7o\2\2\u01ce\u01cf\7r\2\2\u01cf\u01d0\7a\2\2"+
-
"\u01d0\u01d1\7r\2\2\u01d1\u01d2\7q\2\2\u01d2\u01d3\7u\2\2\u01d3\u01d4"+
-
"\7v\2\2\u01d4\u01d5\7e\2\2\u01d5\u01d6\7q\2\2\u01d6\u01d7\7f\2\2\u01d7"+
-
"\u03d0\7g\2\2\u01d8\u01d9\7v\2\2\u01d9\u01da\7t\2\2\u01da\u01db\7k\2\2"+
-
"\u01db\u03d0\7o\2\2\u01dc\u01dd\7u\2\2\u01dd\u01de\7v\2\2\u01de\u01df"+
-
"\7t\2\2\u01df\u01e0\7k\2\2\u01e0\u03d0\7r\2\2\u01e1\u01e2\7w\2\2\u01e2"+
-
"\u01e3\7r\2\2\u01e3\u01e4\7r\2\2\u01e4\u01e5\7g\2\2\u01e5\u01e6\7t\2\2"+
-
"\u01e6\u01e7\7e\2\2\u01e7\u01e8\7c\2\2\u01e8\u01e9\7u\2\2\u01e9\u03d0"+
-
"\7g\2\2\u01ea\u01eb\7n\2\2\u01eb\u01ec\7q\2\2\u01ec\u01ed\7y\2\2\u01ed"+
-
"\u01ee\7g\2\2\u01ee\u01ef\7t\2\2\u01ef\u01f0\7e\2\2\u01f0\u01f1\7c\2\2"+
-
"\u01f1\u01f2\7u\2\2\u01f2\u03d0\7g\2\2\u01f3\u01f4\7k\2\2\u01f4\u01f5"+
-
"\7u\2\2\u01f5\u01f6\7a\2\2\u01f6\u01f7\7c\2\2\u01f7\u01f8\7n\2\2\u01f8"+
-
"\u01f9\7r\2\2\u01f9\u01fa\7j\2\2\u01fa\u03d0\7c\2\2\u01fb\u01fc\7k\2\2"+
-
"\u01fc\u01fd\7u\2\2\u01fd\u01fe\7a\2\2\u01fe\u01ff\7c\2\2\u01ff\u0200"+
-
"\7n\2\2\u0200\u0201\7r\2\2\u0201\u0202\7j\2\2\u0202\u0203\7c\2\2\u0203"+
-
"\u0204\7p\2\2\u0204\u0205\7w\2\2\u0205\u03d0\7o\2\2\u0206\u0207\7k\2\2"+
-
"\u0207\u0208\7u\2\2\u0208\u0209\7a\2\2\u0209\u020a\7y\2\2\u020a\u020b"+
-
"\7j\2\2\u020b\u020c\7k\2\2\u020c\u020d\7v\2\2\u020d\u020e\7g\2\2\u020e"+
-
"\u020f\7u\2\2\u020f\u0210\7r\2\2\u0210\u0211\7c\2\2\u0211\u0212\7e\2\2"+
-
"\u0212\u03d0\7g\2\2\u0213\u0214\7k\2\2\u0214\u0215\7u\2\2\u0215\u0216"+
-
"\7a\2\2\u0216\u0217\7p\2\2\u0217\u0218\7w\2\2\u0218\u03d0\7o\2\2\u0219"+
-
"\u021a\7k\2\2\u021a\u021b\7u\2\2\u021b\u021c\7a\2\2\u021c\u021d\7p\2\2"+
-
"\u021d\u021e\7w\2\2\u021e\u021f\7o\2\2\u021f\u0220\7u\2\2\u0220\u0221"+
-
"\7r\2\2\u0221\u0222\7c\2\2\u0222\u0223\7e\2\2\u0223\u03d0\7g\2\2\u0224"+
-
"\u0225\7k\2\2\u0225\u0226\7u\2\2\u0226\u0227\7a\2\2\u0227\u0228\7c\2\2"+
-
"\u0228\u0229\7n\2\2\u0229\u022a\7r\2\2\u022a\u022b\7j\2\2\u022b\u022c"+
-
"\7c\2\2\u022c\u022d\7u\2\2\u022d\u022e\7r\2\2\u022e\u022f\7c\2\2\u022f"+
-
"\u0230\7e\2\2\u0230\u03d0\7g\2\2\u0231\u0232\7k\2\2\u0232\u0233\7u\2\2"+
-
"\u0233\u0234\7a\2\2\u0234\u0235\7c\2\2\u0235\u0236\7n\2\2\u0236\u0237"+
-
"\7r\2\2\u0237\u0238\7j\2\2\u0238\u0239\7c\2\2\u0239\u023a\7p\2\2\u023a"+
-
"\u023b\7w\2\2\u023b\u023c\7o\2\2\u023c\u023d\7u\2\2\u023d\u023e\7r\2\2"+
-
"\u023e\u023f\7c\2\2\u023f\u0240\7e\2\2\u0240\u03d0\7g\2\2\u0241\u0242"+
-
"\7u\2\2\u0242\u0243\7w\2\2\u0243\u0244\7d\2\2\u0244\u0245\7u\2\2\u0245"+
-
"\u0246\7v\2\2\u0246\u0247\7t\2\2\u0247\u0248\7k\2\2\u0248\u0249\7p\2\2"+
-
"\u0249\u03d0\7i\2\2\u024a\u024b\7e\2\2\u024b\u024c\7j\2\2\u024c\u024d"+
-
"\7c\2\2\u024d\u024e\7t\2\2\u024e\u024f\7C\2\2\u024f\u03d0\7v\2\2\u0250"+
-
"\u0251\7t\2\2\u0251\u0252\7g\2\2\u0252\u0253\7i\2\2\u0253\u0254\7g\2\2"+
-
"\u0254\u03d0\7z\2\2\u0255\u0256\7u\2\2\u0256\u0257\7q\2\2\u0257\u0258"+
-
"\7w\2\2\u0258\u0259\7p\2\2\u0259\u025a\7f\2\2\u025a\u025b\7g\2\2\u025b"+
-
"\u03d0\7z\2\2\u025c\u025d\7u\2\2\u025d\u025e\7r\2\2\u025e\u025f\7n\2\2"+
-
"\u025f\u0260\7k\2\2\u0260\u03d0\7v\2\2\u0261\u0262\7u\2\2\u0262\u0263"+
-
"\7r\2\2\u0263\u0264\7n\2\2\u0264\u0265\7k\2\2\u0265\u0266\7v\2\2\u0266"+
-
"\u0267\7a\2\2\u0267\u0268\7v\2\2\u0268\u0269\7t\2\2\u0269\u026a\7k\2\2"+
-
"\u026a\u03d0\7o\2\2\u026b\u026c\7t\2\2\u026c\u026d\7g\2\2\u026d\u026e"+
-
"\7r\2\2\u026e\u026f\7n\2\2\u026f\u0270\7c\2\2\u0270\u0271\7e\2\2\u0271"+
-
"\u03d0\7g\2\2\u0272\u0273\7c\2\2\u0273\u0274\7d\2\2\u0274\u03d0\7u\2\2"+
-
"\u0275\u0276\7e\2\2\u0276\u0277\7g\2\2\u0277\u0278\7k\2\2\u0278\u03d0"+
-
"\7n\2\2\u0279\u027a\7h\2\2\u027a\u027b\7n\2\2\u027b\u027c\7q\2\2\u027c"+
-
"\u027d\7q\2\2\u027d\u03d0\7t\2\2\u027e\u027f\7t\2\2\u027f\u0280\7k\2\2"+
-
"\u0280\u0281\7p\2\2\u0281\u03d0\7v\2\2\u0282\u0283\7t\2\2\u0283\u0284"+
-
"\7q\2\2\u0284\u0285\7w\2\2\u0285\u0286\7p\2\2\u0286\u03d0\7f\2\2\u0287"+
-
"\u0288\7u\2\2\u0288\u0289\7k\2\2\u0289\u028a\7i\2\2\u028a\u028b\7p\2\2"+
-
"\u028b\u028c\7w\2\2\u028c\u03d0\7o\2\2\u028d\u028e\7u\2\2\u028e\u028f"+
-
"\7s\2\2\u028f\u0290\7t\2\2\u0290\u03d0\7v\2\2\u0291\u0292\7e\2\2\u0292"+
-
"\u0293\7d\2\2\u0293\u0294\7t\2\2\u0294\u03d0\7v\2\2\u0295\u0296\7r\2\2"+
-
"\u0296\u03d0\7k\2\2\u0297\u0298\7g\2\2\u0298\u0299\7w\2\2\u0299\u029a"+
-
"\7n\2\2\u029a\u029b\7g\2\2\u029b\u03d0\7t\2\2\u029c\u029d\7c\2\2\u029d"+
-
"\u029e\7e\2\2\u029e\u029f\7q\2\2\u029f\u03d0\7u\2\2\u02a0\u02a1\7c\2\2"+
-
"\u02a1\u02a2\7u\2\2\u02a2\u02a3\7k\2\2\u02a3\u03d0\7p\2\2\u02a4\u02a5"+
-
"\7c\2\2\u02a5\u02a6\7v\2\2\u02a6\u02a7\7c\2\2\u02a7\u03d0\7p\2\2\u02a8"+
-
"\u02a9\7e\2\2\u02a9\u02aa\7q\2\2\u02aa\u03d0\7u\2\2\u02ab\u02ac\7u\2\2"+
-
"\u02ac\u02ad\7k\2\2\u02ad\u03d0\7p\2\2\u02ae\u02af\7v\2\2\u02af\u02b0"+
-
"\7c\2\2\u02b0\u03d0\7p\2\2\u02b1\u02b2\7e\2\2\u02b2\u02b3\7q\2\2\u02b3"+
-
"\u02b4\7u\2\2\u02b4\u03d0\7j\2\2\u02b5\u02b6\7u\2\2\u02b6\u02b7\7k\2\2"+
-
"\u02b7\u02b8\7p\2\2\u02b8\u03d0\7j\2\2\u02b9\u02ba\7v\2\2\u02ba\u02bb"+
-
"\7c\2\2\u02bb\u02bc\7p\2\2\u02bc\u03d0\7j\2\2\u02bd\u02be\7c\2\2\u02be"+
-
"\u02bf\7v\2\2\u02bf\u02c0\7p\2\2\u02c0\u03d0\7\64\2\2\u02c1\u02c2\7f\2"+
-
"\2\u02c2\u02c3\7g\2\2\u02c3\u02c4\7i\2\2\u02c4\u02c5\7t\2\2\u02c5\u02c6"+
-
"\7g\2\2\u02c6\u02c7\7g\2\2\u02c7\u03d0\7u\2\2\u02c8\u02c9\7t\2\2\u02c9"+
-
"\u02ca\7c\2\2\u02ca\u02cb\7f\2\2\u02cb\u02cc\7k\2\2\u02cc\u02cd\7c\2\2"+
-
"\u02cd\u02ce\7p\2\2\u02ce\u03d0\7u\2\2\u02cf\u02d0\7g\2\2\u02d0\u02d1"+
-
"\7z\2\2\u02d1\u03d0\7r\2\2\u02d2\u02d3\7g\2\2\u02d3\u02d4\7z\2\2\u02d4"+
-
"\u02d5\7r\2\2\u02d5\u02d6\7o\2\2\u02d6\u03d0\7\63\2\2\u02d7\u02d8\7j\2"+
-
"\2\u02d8\u02d9\7{\2\2\u02d9\u02da\7r\2\2\u02da\u02db\7q\2\2\u02db\u03d0"+
-
"\7v\2\2\u02dc\u02dd\7n\2\2\u02dd\u02de\7q\2\2\u02de\u03d0\7i\2\2\u02df"+
-
"\u02e0\7n\2\2\u02e0\u02e1\7q\2\2\u02e1\u02e2\7i\2\2\u02e2\u02e3\7\63\2"+
-
"\2\u02e3\u03d0\7\62\2\2\u02e4\u02e5\7n\2\2\u02e5\u02e6\7q\2\2\u02e6\u02e7"+
-
"\7i\2\2\u02e7\u02e8\7\63\2\2\u02e8\u03d0\7r\2\2\u02e9\u02ea\7r\2\2\u02ea"+
-
"\u02eb\7q\2\2\u02eb\u03d0\7y\2\2\u02ec\u02ed\7t\2\2\u02ed\u02ee\7c\2\2"+
-
"\u02ee\u02ef\7p\2\2\u02ef\u03d0\7f\2\2\u02f0\u02f1\7u\2\2\u02f1\u02f2"+
-
"\7s\2\2\u02f2\u02f3\7w\2\2\u02f3\u02f4\7c\2\2\u02f4\u02f5\7t\2\2\u02f5"+
-
"\u03d0\7g\2\2\u02f6\u02f7\7n\2\2\u02f7\u02f8\7k\2\2\u02f8\u02f9\7u\2\2"+
-
"\u02f9\u03d0\7v\2\2\u02fa\u02fb\7o\2\2\u02fb\u02fc\7c\2\2\u02fc\u03d0"+
-
"\7r\2\2\u02fd\u02fe\7i\2\2\u02fe\u02ff\7g\2\2\u02ff\u03d0\7v\2\2\u0300"+
-
"\u0301\7k\2\2\u0301\u0302\7p\2\2\u0302\u0303\7f\2\2\u0303\u0304\7g\2\2"+
-
"\u0304\u03d0\7z\2\2\u0305\u0306\7j\2\2\u0306\u0307\7c\2\2\u0307\u03d0"+
-
"\7u\2\2\u0308\u0309\7v\2\2\u0309\u030a\7c\2\2\u030a\u030b\7k\2\2\u030b"+
-
"\u03d0\7n\2\2\u030c\u030d\7c\2\2\u030d\u030e\7f\2\2\u030e\u03d0\7f\2\2"+
-
"\u030f\u0310\7t\2\2\u0310\u0311\7g\2\2\u0311\u0312\7o\2\2\u0312\u0313"+
-
"\7q\2\2\u0313\u0314\7x\2\2\u0314\u03d0\7g\2\2\u0315\u0316\7h\2\2\u0316"+
-
"\u0317\7k\2\2\u0317\u0318\7t\2\2\u0318\u0319\7u\2\2\u0319\u03d0\7v\2\2"+
-
"\u031a\u031b\7n\2\2\u031b\u031c\7c\2\2\u031c\u031d\7u\2\2\u031d\u03d0"+
-
"\7v\2\2\u031e\u031f\7m\2\2\u031f\u0320\7g\2\2\u0320\u0321\7{\2\2\u0321"+
-
"\u03d0\7u\2\2\u0322\u0323\7x\2\2\u0323\u0324\7c\2\2\u0324\u0325\7n\2\2"+
-
"\u0325\u0326\7w\2\2\u0326\u0327\7g\2\2\u0327\u03d0\7u\2\2\u0328\u0329"+
-
"\7n\2\2\u0329\u032a\7g\2\2\u032a\u032b\7p\2\2\u032b\u032c\7i\2\2\u032c"+
-
"\u032d\7v\2\2\u032d\u03d0\7j\2\2\u032e\u032f\7e\2\2\u032f\u0330\7q\2\2"+
-
"\u0330\u0331\7w\2\2\u0331\u0332\7p\2\2\u0332\u03d0\7v\2\2\u0333\u0334"+
-
"\7v\2\2\u0334\u0335\7c\2\2\u0335\u0336\7m\2\2\u0336\u03d0\7g\2\2\u0337"+
-
"\u0338\7f\2\2\u0338\u0339\7t\2\2\u0339\u033a\7q\2\2\u033a\u03d0\7r\2\2"+
-
"\u033b\u033c\7u\2\2\u033c\u033d\7k\2\2\u033d\u033e\7|\2\2\u033e\u03d0"+
-
"\7g\2\2\u033f\u0340\7t\2\2\u0340\u0341\7g\2\2\u0341\u0342\7x\2\2\u0342"+
-
"\u0343\7g\2\2\u0343\u0344\7t\2\2\u0344\u0345\7u\2\2\u0345\u03d0\7g\2\2"+
-
"\u0346\u0347\7k\2\2\u0347\u0348\7u\2\2\u0348\u0349\7a\2\2\u0349\u034a"+
-
"\7g\2\2\u034a\u034b\7o\2\2\u034b\u034c\7r\2\2\u034c\u034d\7v\2\2\u034d"+
-
"\u03d0\7{\2\2\u034e\u034f\7p\2\2\u034f\u0350\7q\2\2\u0350\u0351\7p\2\2"+
-
"\u0351\u0352\7a\2\2\u0352\u0353\7g\2\2\u0353\u0354\7o\2\2\u0354\u0355"+
-
"\7r\2\2\u0355\u0356\7v\2\2\u0356\u03d0\7{\2\2\u0357\u0358\7v\2\2\u0358"+
-
"\u0359\7q\2\2\u0359\u035a\7a\2\2\u035a\u035b\7u\2\2\u035b\u035c\7v\2\2"+
-
"\u035c\u035d\7t\2\2\u035d\u035e\7k\2\2\u035e\u035f\7p\2\2\u035f\u03d0"+
-
"\7i\2\2\u0360\u0361\7c\2\2\u0361\u0362\7x\2\2\u0362\u03d0\7i\2\2\u0363"+
-
"\u0364\7o\2\2\u0364\u0365\7c\2\2\u0365\u03d0\7z\2\2\u0366\u0367\7o\2\2"+
-
"\u0367\u0368\7k\2\2\u0368\u03d0\7p\2\2\u0369\u036a\7u\2\2\u036a\u036b"+
-
"\7v\2\2\u036b\u036c\7f\2\2\u036c\u036d\7g\2\2\u036d\u03d0\7x\2\2\u036e"+
-
"\u036f\7u\2\2\u036f\u0370\7w\2\2\u0370\u03d0\7o\2\2\u0371\u0372\7{\2\2"+
-
"\u0372\u0373\7g\2\2\u0373\u0374\7c\2\2\u0374\u03d0\7t\2\2\u0375\u0376"+
-
"\7o\2\2\u0376\u0377\7q\2\2\u0377\u0378\7p\2\2\u0378\u0379\7v\2\2\u0379"+
-
"\u03d0\7j\2\2\u037a\u037b\7f\2\2\u037b\u037c\7c\2\2\u037c\u037d\7{\2\2"+
-
"\u037d\u037e\7a\2\2\u037e\u037f\7q\2\2\u037f\u0380\7h\2\2\u0380\u0381"+
-
"\7a\2\2\u0381\u0382\7o\2\2\u0382\u0383\7q\2\2\u0383\u0384\7p\2\2\u0384"+
-
"\u0385\7v\2\2\u0385\u03d0\7j\2\2\u0386\u0387\7f\2\2\u0387\u0388\7c\2\2"+
-
"\u0388\u0389\7{\2\2\u0389\u038a\7a\2\2\u038a\u038b\7q\2\2\u038b\u038c"+
-
"\7h\2\2\u038c\u038d\7a\2\2\u038d\u038e\7y\2\2\u038e\u038f\7g\2\2\u038f"+
-
"\u0390\7g\2\2\u0390\u03d0\7m\2\2\u0391\u0392\7f\2\2\u0392\u0393\7c\2\2"+
-
"\u0393\u0394\7{\2\2\u0394\u0395\7a\2\2\u0395\u0396\7q\2\2\u0396\u0397"+
-
"\7h\2\2\u0397\u0398\7a\2\2\u0398\u0399\7{\2\2\u0399\u039a\7g\2\2\u039a"+
-
"\u039b\7c\2\2\u039b\u03d0\7t\2\2\u039c\u039d\7j\2\2\u039d\u039e\7q\2\2"+
-
"\u039e\u039f\7w\2\2\u039f\u03d0\7t\2\2\u03a0\u03a1\7o\2\2\u03a1\u03a2"+
-
"\7k\2\2\u03a2\u03a3\7p\2\2\u03a3\u03a4\7w\2\2\u03a4\u03a5\7v\2\2\u03a5"+
-
"\u03d0\7g\2\2\u03a6\u03a7\7u\2\2\u03a7\u03a8\7g\2\2\u03a8\u03a9\7e\2\2"+
-
"\u03a9\u03aa\7q\2\2\u03aa\u03ab\7p\2\2\u03ab\u03d0\7f\2\2\u03ac\u03ad"+
-
"\7y\2\2\u03ad\u03ae\7g\2\2\u03ae\u03af\7g\2\2\u03af\u03b0\7m\2\2\u03b0"+
-
"\u03b1\7a\2\2\u03b1\u03b2\7q\2\2\u03b2\u03b3\7h\2\2\u03b3\u03b4\7a\2\2"+
-
"\u03b4\u03b5\7o\2\2\u03b5\u03b6\7q\2\2\u03b6\u03b7\7p\2\2\u03b7\u03b8"+
-
"\7v\2\2\u03b8\u03d0\7j\2\2\u03b9\u03ba\7y\2\2\u03ba\u03bb\7g\2\2\u03bb"+
-
"\u03bc\7g\2\2\u03bc\u03bd\7m\2\2\u03bd\u03be\7a\2\2\u03be\u03bf\7q\2\2"+
-
"\u03bf\u03c0\7h\2\2\u03c0\u03c1\7a\2\2\u03c1\u03c2\7{\2\2\u03c2\u03c3"+
-
"\7g\2\2\u03c3\u03c4\7c\2\2\u03c4\u03d0\7t\2\2\u03c5\u03c6\7s\2\2\u03c6"+
-
"\u03c7\7w\2\2\u03c7\u03c8\7c\2\2\u03c8\u03c9\7t\2\2\u03c9\u03ca\7v\2\2"+
-
"\u03ca\u03cb\7g\2\2\u03cb\u03d0\7t\2\2\u03cc\u03cd\7p\2\2\u03cd\u03ce"+
-
"\7q\2\2\u03ce\u03d0\7y\2\2\u03cf\u0089\3\2\2\2\u03cf\u0093\3\2\2\2\u03cf"+
-
"\u009d\3\2\2\2\u03cf\u00a8\3\2\2\2\u03cf\u00b0\3\2\2\2\u03cf\u00b9\3\2"+
-
"\2\2\u03cf\u00c5\3\2\2\2\u03cf\u00cd\3\2\2\2\u03cf\u00d6\3\2\2\2\u03cf"+
-
"\u00df\3\2\2\2\u03cf\u00e3\3\2\2\2\u03cf\u00e5\3\2\2\2\u03cf\u00e7\3\2"+
-
"\2\2\u03cf\u00f0\3\2\2\2\u03cf\u00f6\3\2\2\2\u03cf\u00fc\3\2\2\2\u03cf"+
-
"\u0101\3\2\2\2\u03cf\u0108\3\2\2\2\u03cf\u0111\3\2\2\2\u03cf\u0118\3\2"+
-
"\2\2\u03cf\u011e\3\2\2\2\u03cf\u012a\3\2\2\2\u03cf\u0134\3\2\2\2\u03cf"+
-
"\u013c\3\2\2\2\u03cf\u0145\3\2\2\2\u03cf\u014c\3\2\2\2\u03cf\u0156\3\2"+
-
"\2\2\u03cf\u0160\3\2\2\2\u03cf\u016a\3\2\2\2\u03cf\u0174\3\2\2\2\u03cf"+
-
"\u0186\3\2\2\2\u03cf\u018d\3\2\2\2\u03cf\u0196\3\2\2\2\u03cf\u01a2\3\2"+
-
"\2\2\u03cf\u01ae\3\2\2\2\u03cf\u01b9\3\2\2\2\u03cf\u01c2\3\2\2\2\u03cf"+
-
"\u01cb\3\2\2\2\u03cf\u01d8\3\2\2\2\u03cf\u01dc\3\2\2\2\u03cf\u01e1\3\2"+
-
"\2\2\u03cf\u01ea\3\2\2\2\u03cf\u01f3\3\2\2\2\u03cf\u01fb\3\2\2\2\u03cf"+
-
"\u0206\3\2\2\2\u03cf\u0213\3\2\2\2\u03cf\u0219\3\2\2\2\u03cf\u0224\3\2"+
-
"\2\2\u03cf\u0231\3\2\2\2\u03cf\u0241\3\2\2\2\u03cf\u024a\3\2\2\2\u03cf"+
-
"\u0250\3\2\2\2\u03cf\u0255\3\2\2\2\u03cf\u025c\3\2\2\2\u03cf\u0261\3\2"+
-
"\2\2\u03cf\u026b\3\2\2\2\u03cf\u0272\3\2\2\2\u03cf\u0275\3\2\2\2\u03cf"+
-
"\u0279\3\2\2\2\u03cf\u027e\3\2\2\2\u03cf\u0282\3\2\2\2\u03cf\u0287\3\2"+
-
"\2\2\u03cf\u028d\3\2\2\2\u03cf\u0291\3\2\2\2\u03cf\u0295\3\2\2\2\u03cf"+
-
"\u0297\3\2\2\2\u03cf\u029c\3\2\2\2\u03cf\u02a0\3\2\2\2\u03cf\u02a4\3\2"+
-
"\2\2\u03cf\u02a8\3\2\2\2\u03cf\u02ab\3\2\2\2\u03cf\u02ae\3\2\2\2\u03cf"+
-
"\u02b1\3\2\2\2\u03cf\u02b5\3\2\2\2\u03cf\u02b9\3\2\2\2\u03cf\u02bd\3\2"+
-
"\2\2\u03cf\u02c1\3\2\2\2\u03cf\u02c8\3\2\2\2\u03cf\u02cf\3\2\2\2\u03cf"+
-
"\u02d2\3\2\2\2\u03cf\u02d7\3\2\2\2\u03cf\u02dc\3\2\2\2\u03cf\u02df\3\2"+
-
"\2\2\u03cf\u02e4\3\2\2\2\u03cf\u02e9\3\2\2\2\u03cf\u02ec\3\2\2\2\u03cf"+
-
"\u02f0\3\2\2\2\u03cf\u02f6\3\2\2\2\u03cf\u02fa\3\2\2\2\u03cf\u02fd\3\2"+
-
"\2\2\u03cf\u0300\3\2\2\2\u03cf\u0305\3\2\2\2\u03cf\u0308\3\2\2\2\u03cf"+
-
"\u030c\3\2\2\2\u03cf\u030f\3\2\2\2\u03cf\u0315\3\2\2\2\u03cf\u031a\3\2"+
-
"\2\2\u03cf\u031e\3\2\2\2\u03cf\u0322\3\2\2\2\u03cf\u0328\3\2\2\2\u03cf"+
-
"\u032e\3\2\2\2\u03cf\u0333\3\2\2\2\u03cf\u0337\3\2\2\2\u03cf\u033b\3\2"+
-
"\2\2\u03cf\u033f\3\2\2\2\u03cf\u0346\3\2\2\2\u03cf\u034e\3\2\2\2\u03cf"+
-
"\u0357\3\2\2\2\u03cf\u0360\3\2\2\2\u03cf\u0363\3\2\2\2\u03cf\u0366\3\2"+
-
"\2\2\u03cf\u0369\3\2\2\2\u03cf\u036e\3\2\2\2\u03cf\u0371\3\2\2\2\u03cf"+
-
"\u0375\3\2\2\2\u03cf\u037a\3\2\2\2\u03cf\u0386\3\2\2\2\u03cf\u0391\3\2"+
-
"\2\2\u03cf\u039c\3\2\2\2\u03cf\u03a0\3\2\2\2\u03cf\u03a6\3\2\2\2\u03cf"+
-
"\u03ac\3\2\2\2\u03cf\u03b9\3\2\2\2\u03cf\u03c5\3\2\2\2\u03cf\u03cc\3\2"+
-
"\2\2\u03d0\16\3\2\2\2\u03d1\u03d2\7h\2\2\u03d2\u03d3\7t\2\2\u03d3\u03d4"+
-
"\7c\2\2\u03d4\u03d5\7i\2\2\u03d5\u03d6\7o\2\2\u03d6\u03d7\7g\2\2\u03d7"+
-
"\u03d8\7p\2\2\u03d8\u03d9\7v\2\2\u03d9\20\3\2\2\2\u03da\u03e0\5\65\33"+
-
"\2\u03db\u03df\n\2\2\2\u03dc\u03dd\7^\2\2\u03dd\u03df\7)\2\2\u03de\u03db"+
-
"\3\2\2\2\u03de\u03dc\3\2\2\2\u03df\u03e2\3\2\2\2\u03e0\u03de\3\2\2\2\u03e0"+
-
"\u03e1\3\2\2\2\u03e1\u03e3\3\2\2\2\u03e2\u03e0\3\2\2\2\u03e3\u03e4\5\65"+
-
"\33\2\u03e4\22\3\2\2\2\u03e5\u03eb\5\67\34\2\u03e6\u03ea\n\3\2\2\u03e7"+
-
"\u03e8\7^\2\2\u03e8\u03ea\7$\2\2\u03e9\u03e6\3\2\2\2\u03e9\u03e7\3\2\2"+
-
"\2\u03ea\u03ed\3\2\2\2\u03eb\u03e9\3\2\2\2\u03eb\u03ec\3\2\2\2\u03ec\u03ee"+
-
"\3\2\2\2\u03ed\u03eb\3\2\2\2\u03ee\u03ef\5\67\34\2\u03ef\24\3\2\2\2\u03f0"+
-
"\u03f1\7v\2\2\u03f1\u03f2\7t\2\2\u03f2\u03f3\7w\2\2\u03f3\u03fa\7g\2\2"+
-
"\u03f4\u03f5\7h\2\2\u03f5\u03f6\7c\2\2\u03f6\u03f7\7n\2\2\u03f7\u03f8"+
-
"\7u\2\2\u03f8\u03fa\7g\2\2\u03f9\u03f0\3\2\2\2\u03f9\u03f4\3\2\2\2\u03fa"+
-
"\26\3\2\2\2\u03fb\u03fc\7p\2\2\u03fc\u03fd\7w\2\2\u03fd\u03fe\7n\2\2\u03fe"+
-
"\u03ff\7n\2\2\u03ff\30\3\2\2\2\u0400\u0401\7?\2\2\u0401\u0402\7?\2\2\u0402"+
-
"\32\3\2\2\2\u0403\u0404\7#\2\2\u0404\u0405\7?\2\2\u0405\34\3\2\2\2\u0406"+
-
"\u0407\7@\2\2\u0407\u0408\7?\2\2\u0408\36\3\2\2\2\u0409\u040a\7>\2\2\u040a"+
- "\u040b\7?\2\2\u040b
\3\2\2\2\u040c\u040d\7@\2\2\u040d\"\3\2\2\2\u040e"+
-
"\u040f\7>\2\2\u040f$\3\2\2\2\u0410\u0411\7(\2\2\u0411\u0412\7(\2\2\u0412"+
-
"&\3\2\2\2\u0413\u0414\7~\2\2\u0414\u0415\7~\2\2\u0415(\3\2\2\2\u0416\u0417"+
-
"\7~\2\2\u0417*\3\2\2\2\u0418\u0419\7#\2\2\u0419,\3\2\2\2\u041a\u041b\7"+
-
"*\2\2\u041b.\3\2\2\2\u041c\u041d\7+\2\2\u041d\60\3\2\2\2\u041e\u041f\7"+
-
"}\2\2\u041f\62\3\2\2\2\u0420\u0421\7\177\2\2\u0421\64\3\2\2\2\u0422\u0423"+
-
"\7)\2\2\u0423\66\3\2\2\2\u0424\u0425\7$\2\2\u04258\3\2\2\2\u0426\u0427"+
-
"\7\u0080\2\2\u0427:\3\2\2\2\u0428\u0429\7]\2\2\u0429<\3\2\2\2\u042a\u042b"+
-
"\7_\2\2\u042b>\3\2\2\2\u042c\u042d\7%\2\2\u042d@\3\2\2\2\u042e\u042f\7"+
-
".\2\2\u042fB\3\2\2\2\u0430\u0431\7<\2\2\u0431D\3\2\2\2\u0432\u0433\7/"+
-
"\2\2\u0433F\3\2\2\2\u0434\u0435\7\60\2\2\u0435H\3\2\2\2\u0436\u0437\7"+
-
"a\2\2\u0437J\3\2\2\2\u0438\u0439\7?\2\2\u0439L\3\2\2\2\u043a\u043b\7-"+
-
"\2\2\u043bN\3\2\2\2\u043c\u043d\7A\2\2\u043dP\3\2\2\2\u043e\u043f\7,\2"+
-
"\2\u043fR\3\2\2\2\u0440\u0441\7\61\2\2\u0441T\3\2\2\2\u0442\u0443\7\'"+
-
"\2\2\u0443V\3\2\2\2\u0444\u0445\7&\2\2\u0445X\3\2\2\2\u0446\u044f\7\62"+
-
"\2\2\u0447\u044b\t\4\2\2\u0448\u044a\t\5\2\2\u0449\u0448\3\2\2\2\u044a"+
-
"\u044d\3\2\2\2\u044b\u0449\3\2\2\2\u044b\u044c\3\2\2\2\u044c\u044f\3\2"+
-
"\2\2\u044d\u044b\3\2\2\2\u044e\u0446\3\2\2\2\u044e\u0447\3\2\2\2\u044f"+
-
"Z\3\2\2\2\u0450\u0452\5G$\2\u0451\u0453\t\6\2\2\u0452\u0451\3\2\2\2\u0453"+
-
"\u0454\3\2\2\2\u0454\u0452\3\2\2\2\u0454\u0455\3\2\2\2\u0455\\\3\2\2\2"+
-
"\u0456\u0458\t\7\2\2\u0457\u0459\t\b\2\2\u0458\u0457\3\2\2\2\u0458\u0459"+
-
"\3\2\2\2\u0459\u045a\3\2\2\2\u045a\u045b\5Y-\2\u045b^\3\2\2\2\u045c\u045d"+
-
"\t\t\2\2\u045d`\3\2\2\2\u045e\u045f\t\n\2\2\u045fb\3\2\2\2\u0460\u0465"+
-
"\5_\60\2\u0461\u0465\5I%\2\u0462\u0465\5a\61\2\u0463\u0465\5W,\2\u0464"+
-
"\u0460\3\2\2\2\u0464\u0461\3\2\2\2\u0464\u0462\3\2\2\2\u0464\u0463\3\2"+
-
"\2\2\u0465\u0466\3\2\2\2\u0466\u0464\3\2\2\2\u0466\u0467\3\2\2\2\u0467"+
-
"\u0471\3\2\2\2\u0468\u0470\5_\60\2\u0469\u0470\5W,\2\u046a\u0470\5a\61"+
-
"\2\u046b\u0470\t\6\2\2\u046c\u0470\5C\"\2\u046d\u0470\5E#\2\u046e\u0470"+
-
"\5I%\2\u046f\u0468\3\2\2\2\u046f\u0469\3\2\2\2\u046f\u046a\3\2\2\2\u046f"+
-
"\u046b\3\2\2\2\u046f\u046c\3\2\2\2\u046f\u046d\3\2\2\2\u046f\u046e\3\2"+
-
"\2\2\u0470\u0473\3\2\2\2\u0471\u046f\3\2\2\2\u0471\u0472\3\2\2\2\u0472"+
-
"d\3\2\2\2\u0473\u0471\3\2\2\2\u0474\u0475\7\61\2\2\u0475\u0476\7\61\2"+
-
"\2\u0476\u047a\3\2\2\2\u0477\u0479\n\13\2\2\u0478\u0477\3\2\2\2\u0479"+
-
"\u047c\3\2\2\2\u047a\u0478\3\2\2\2\u047a\u047b\3\2\2\2\u047b\u047e\3\2"+
-
"\2\2\u047c\u047a\3\2\2\2\u047d\u047f\7\17\2\2\u047e\u047d\3\2\2\2\u047e"+
-
"\u047f\3\2\2\2\u047f\u0481\3\2\2\2\u0480\u0482\t\f\2\2\u0481\u0480\3\2"+
-
"\2\2\u0482\u048f\3\2\2\2\u0483\u0484\7\61\2\2\u0484\u0485\7,\2\2\u0485"+
-
"\u0489\3\2\2\2\u0486\u0488\13\2\2\2\u0487\u0486\3\2\2\2\u0488\u048b\3"+
-
"\2\2\2\u0489\u048a\3\2\2\2\u0489\u0487\3\2\2\2\u048a\u048c\3\2\2\2\u048b"+
-
"\u0489\3\2\2\2\u048c\u048d\7,\2\2\u048d\u048f\7\61\2\2\u048e\u0474\3\2"+
-
"\2\2\u048e\u0483\3\2\2\2\u048f\u0490\3\2\2\2\u0490\u0491\b\63\2\2\u0491"+
-
"f\3\2\2\2\u0492\u0494\t\r\2\2\u0493\u0492\3\2\2\2\u0494\u0495\3\2\2\2"+
-
"\u0495\u0493\3\2\2\2\u0495\u0496\3\2\2\2\u0496\u0497\3\2\2\2\u0497\u0498"+
-
"\b\64\2\2\u0498h\3\2\2\2\u0499\u049a\13\2\2\2\u049aj\3\2\2\2\27\2\u03cf"+
-
"\u03de\u03e0\u03e9\u03eb\u03f9\u044b\u044e\u0454\u0458\u0464\u0466\u046f"+
- "\u0471\u047a\u047e\u0481\u0489\u048e\u0495\3\b\2\2";
+
"\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7"+
+
"\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3"+
+
"\7\3\7\5\7\u03e6\n\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3"+
+
"\t\7\t\u03f5\n\t\f\t\16\t\u03f8\13\t\3\t\3\t\3\n\3\n\3\n\3\n\7\n\u0400"+
+
"\n\n\f\n\16\n\u0403\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3"+
+
"\13\3\13\5\13\u0410\n\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16"+
+
"\3\17\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\24"+
+
"\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32"+
+ "\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3
\3!\3!\3\"\3\""+
+
"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3"+
+
"-\7-\u0460\n-\f-\16-\u0463\13-\5-\u0465\n-\3.\3.\6.\u0469\n.\r.\16.\u046a"+
+
"\3/\3/\5/\u046f\n/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\62\3\62\6\62"+
+
"\u047b\n\62\r\62\16\62\u047c\3\62\3\62\3\62\3\62\3\62\3\62\3\62\7\62\u0486"+
+
"\n\62\f\62\16\62\u0489\13\62\3\63\3\63\3\63\3\63\7\63\u048f\n\63\f\63"+
+
"\16\63\u0492\13\63\3\63\5\63\u0495\n\63\3\63\5\63\u0498\n\63\3\63\3\63"+
+
"\3\63\3\63\7\63\u049e\n\63\f\63\16\63\u04a1\13\63\3\63\3\63\5\63\u04a5"+
+
"\n\63\3\63\3\63\3\64\6\64\u04aa\n\64\r\64\16\64\u04ab\3\64\3\64\3\65\3"+
+
"\65\3\u049f\2\66\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31"+
+
"\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65"+
+ "\34\67\359\36;\37=
?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\2a\2c\61e\62"+
+
"g\63i\64\3\2\16\3\2))\3\2$$\3\2\63;\4\2\62;aa\3\2\62;\4\2GGgg\4\2--//"+
+
"\17\2\u00a2\u0251\u025b\u0294\u02b2\u0371\u0402\u0501\u1e04\u1ef5\u1f03"+
+
"\u2001\u200e\u200f\u2041\u2042\u2072\u2191\u2c02\u2ff1\u3003\ud801\uf902"+
+
"\ufdd1\ufdf2\uffff\4\2C\\c|\4\2\f\f\17\17\3\3\f\f\5\2\13\f\16\17\"\"\2"+
+
"\u0547\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2"+
+
"\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3"+
+
"\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2"+
+
"\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2"+
+
"/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2"+
+
"\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2"+
+
"G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3"+
+
"\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2c\3\2\2"+
+
"\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\3k\3\2\2\2\5r\3\2\2\2\7z\3\2\2\2\t"+
+
"\177\3\2\2\2\13\u0084\3\2\2\2\r\u03e5\3\2\2\2\17\u03e7\3\2\2\2\21\u03f0"+
+
"\3\2\2\2\23\u03fb\3\2\2\2\25\u040f\3\2\2\2\27\u0411\3\2\2\2\31\u0416\3"+
+
"\2\2\2\33\u0419\3\2\2\2\35\u041c\3\2\2\2\37\u041f\3\2\2\2!\u0422\3\2\2"+
+
"\2#\u0424\3\2\2\2%\u0426\3\2\2\2\'\u0429\3\2\2\2)\u042c\3\2\2\2+\u042e"+
+
"\3\2\2\2-\u0430\3\2\2\2/\u0432\3\2\2\2\61\u0434\3\2\2\2\63\u0436\3\2\2"+
+
"\2\65\u0438\3\2\2\2\67\u043a\3\2\2\29\u043c\3\2\2\2;\u043e\3\2\2\2=\u0440"+
+
"\3\2\2\2?\u0442\3\2\2\2A\u0444\3\2\2\2C\u0446\3\2\2\2E\u0448\3\2\2\2G"+
+
"\u044a\3\2\2\2I\u044c\3\2\2\2K\u044e\3\2\2\2M\u0450\3\2\2\2O\u0452\3\2"+
+
"\2\2Q\u0454\3\2\2\2S\u0456\3\2\2\2U\u0458\3\2\2\2W\u045a\3\2\2\2Y\u0464"+
+
"\3\2\2\2[\u0466\3\2\2\2]\u046c\3\2\2\2_\u0472\3\2\2\2a\u0474\3\2\2\2c"+
+
"\u047a\3\2\2\2e\u04a4\3\2\2\2g\u04a9\3\2\2\2i\u04af\3\2\2\2kl\7k\2\2l"+
+
"m\7p\2\2mn\7v\2\2no\7g\2\2op\7p\2\2pq\7v\2\2q\4\3\2\2\2rs\7q\2\2st\7t"+
+
"\2\2tu\7f\2\2uv\7g\2\2vw\7t\2\2wx\7g\2\2xy\7f\2\2y\6\3\2\2\2z{\7h\2\2"+
+
"{|\7n\2\2|}\7q\2\2}~\7y\2\2~\b\3\2\2\2\177\u0080\7o\2\2\u0080\u0081\7"+
+
"g\2\2\u0081\u0082\7v\2\2\u0082\u0083\7c\2\2\u0083\n\3\2\2\2\u0084\u0085"+
+
"\7v\2\2\u0085\u0086\7g\2\2\u0086\u0087\7t\2\2\u0087\u0088\7o\2\2\u0088"+
+
"\f\3\2\2\2\u0089\u008a\7o\2\2\u008a\u008b\7g\2\2\u008b\u008c\7v\2\2\u008c"+
+
"\u008d\7c\2\2\u008d\u008e\7a\2\2\u008e\u008f\7v\2\2\u008f\u0090\7q\2\2"+
+
"\u0090\u0091\7m\2\2\u0091\u0092\7g\2\2\u0092\u03e6\7p\2\2\u0093\u0094"+
+
"\7o\2\2\u0094\u0095\7g\2\2\u0095\u0096\7v\2\2\u0096\u0097\7c\2\2\u0097"+
+
"\u0098\7a\2\2\u0098\u0099\7r\2\2\u0099\u009a\7c\2\2\u009a\u009b\7t\2\2"+
+
"\u009b\u03e6\7v\2\2\u009c\u009d\7o\2\2\u009d\u009e\7g\2\2\u009e\u009f"+
+
"\7v\2\2\u009f\u00a0\7c\2\2\u00a0\u00a1\7a\2\2\u00a1\u00a2\7o\2\2\u00a2"+
+
"\u00a3\7q\2\2\u00a3\u00a4\7f\2\2\u00a4\u00a5\7g\2\2\u00a5\u03e6\7n\2\2"+
+
"\u00a6\u00a7\7o\2\2\u00a7\u00a8\7g\2\2\u00a8\u00a9\7v\2\2\u00a9\u00aa"+
+
"\7c\2\2\u00aa\u00ab\7a\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7p\2\2\u00ad"+
+
"\u00ae\7v\2\2\u00ae\u00af\7g\2\2\u00af\u00b0\7p\2\2\u00b0\u03e6\7v\2\2"+
+
"\u00b1\u00b2\7o\2\2\u00b2\u00b3\7g\2\2\u00b3\u00b4\7v\2\2\u00b4\u00b5"+
+
"\7c\2\2\u00b5\u00b6\7a\2\2\u00b6\u00b7\7t\2\2\u00b7\u00b8\7g\2\2\u00b8"+
+
"\u03e6\7s\2\2\u00b9\u00ba\7o\2\2\u00ba\u00bb\7g\2\2\u00bb\u00bc\7v\2\2"+
+
"\u00bc\u00bd\7c\2\2\u00bd\u00be\7a\2\2\u00be\u00bf\7w\2\2\u00bf\u00c0"+
+
"\7u\2\2\u00c0\u00c1\7g\2\2\u00c1\u03e6\7t\2\2\u00c2\u00c3\7o\2\2\u00c3"+
+
"\u00c4\7g\2\2\u00c4\u00c5\7v\2\2\u00c5\u00c6\7c\2\2\u00c6\u00c7\7a\2\2"+
+
"\u00c7\u00c8\7e\2\2\u00c8\u00c9\7q\2\2\u00c9\u00ca\7o\2\2\u00ca\u00cb"+
+
"\7r\2\2\u00cb\u00cc\7c\2\2\u00cc\u00cd\7p\2\2\u00cd\u03e6\7{\2\2\u00ce"+
+
"\u00cf\7o\2\2\u00cf\u00d0\7g\2\2\u00d0\u00d1\7v\2\2\u00d1\u00d2\7c\2\2"+
+
"\u00d2\u00d3\7a\2\2\u00d3\u00d4\7u\2\2\u00d4\u00d5\7{\2\2\u00d5\u03e6"+
+
"\7u\2\2\u00d6\u00d7\7o\2\2\u00d7\u00d8\7g\2\2\u00d8\u00d9\7v\2\2\u00d9"+
+
"\u00da\7c\2\2\u00da\u00db\7a\2\2\u00db\u00dc\7e\2\2\u00dc\u00dd\7q\2\2"+
+
"\u00dd\u00de\7p\2\2\u00de\u03e6\7x\2\2\u00df\u00e0\7o\2\2\u00e0\u00e1"+
+
"\7g\2\2\u00e1\u00e2\7v\2\2\u00e2\u00e3\7c\2\2\u00e3\u00e4\7a\2\2\u00e4"+
+
"\u00e5\7h\2\2\u00e5\u00e6\7t\2\2\u00e6\u00e7\7c\2\2\u00e7\u03e6\7i\2\2"+
+
"\u00e8\u00e9\7l\2\2\u00e9\u00ea\7u\2\2\u00ea\u00eb\7q\2\2\u00eb\u03e6"+
+
"\7p\2\2\u00ec\u00ed\7k\2\2\u00ed\u03e6\7h\2\2\u00ee\u00ef\7k\2\2\u00ef"+
+
"\u03e6\7f\2\2\u00f0\u00f1\7v\2\2\u00f1\u00f2\7j\2\2\u00f2\u00f3\7k\2\2"+
+
"\u00f3\u03e6\7u\2\2\u00f4\u00f5\7r\2\2\u00f5\u00f6\7c\2\2\u00f6\u00f7"+
+
"\7t\2\2\u00f7\u03e6\7v\2\2\u00f8\u00f9\7r\2\2\u00f9\u00fa\7c\2\2\u00fa"+
+
"\u00fb\7t\2\2\u00fb\u00fc\7v\2\2\u00fc\u03e6\7u\2\2\u00fd\u00fe\7c\2\2"+
+
"\u00fe\u00ff\7p\2\2\u00ff\u0100\7e\2\2\u0100\u0101\7g\2\2\u0101\u0102"+
+
"\7u\2\2\u0102\u0103\7v\2\2\u0103\u0104\7q\2\2\u0104\u0105\7t\2\2\u0105"+
+
"\u03e6\7u\2\2\u0106\u0107\7r\2\2\u0107\u0108\7c\2\2\u0108\u0109\7t\2\2"+
+
"\u0109\u010a\7g\2\2\u010a\u010b\7p\2\2\u010b\u03e6\7v\2\2\u010c\u010d"+
+
"\7i\2\2\u010d\u010e\7t\2\2\u010e\u010f\7q\2\2\u010f\u0110\7w\2\2\u0110"+
+
"\u0111\7r\2\2\u0111\u03e6\7u\2\2\u0112\u0113\7x\2\2\u0113\u0114\7c\2\2"+
+
"\u0114\u0115\7n\2\2\u0115\u0116\7w\2\2\u0116\u03e6\7g\2\2\u0117\u0118"+
+
"\7c\2\2\u0118\u0119\7n\2\2\u0119\u011a\7k\2\2\u011a\u011b\7c\2\2\u011b"+
+
"\u011c\7u\2\2\u011c\u011d\7g\2\2\u011d\u03e6\7u\2\2\u011e\u011f\7u\2\2"+
+
"\u011f\u0120\7v\2\2\u0120\u0121\7c\2\2\u0121\u0122\7t\2\2\u0122\u0123"+
+
"\7v\2\2\u0123\u0124\7a\2\2\u0124\u0125\7k\2\2\u0125\u0126\7f\2\2\u0126"+
+
"\u03e6\7z\2\2\u0127\u0128\7g\2\2\u0128\u0129\7p\2\2\u0129\u012a\7f\2\2"+
+
"\u012a\u012b\7a\2\2\u012b\u012c\7k\2\2\u012c\u012d\7f\2\2\u012d\u03e6"+
+
"\7z\2\2\u012e\u012f\7t\2\2\u012f\u0130\7g\2\2\u0130\u0131\7s\2\2\u0131"+
+
"\u0132\7a\2\2\u0132\u0133\7k\2\2\u0133\u03e6\7f\2\2\u0134\u0135\7t\2\2"+
+
"\u0135\u0136\7g\2\2\u0136\u0137\7s\2\2\u0137\u0138\7a\2\2\u0138\u0139"+
+
"\7p\2\2\u0139\u013a\7q\2\2\u013a\u013b\7t\2\2\u013b\u013c\7o\2\2\u013c"+
+
"\u013d\7v\2\2\u013d\u013e\7g\2\2\u013e\u013f\7z\2\2\u013f\u03e6\7v\2\2"+
+
"\u0140\u0141\7t\2\2\u0141\u0142\7g\2\2\u0142\u0143\7s\2\2\u0143\u0144"+
+
"\7a\2\2\u0144\u0145\7v\2\2\u0145\u0146\7u\2\2\u0146\u0147\7v\2\2\u0147"+
+
"\u0148\7c\2\2\u0148\u0149\7o\2\2\u0149\u03e6\7r\2\2\u014a\u014b\7t\2\2"+
+
"\u014b\u014c\7g\2\2\u014c\u014d\7s\2\2\u014d\u014e\7a\2\2\u014e\u014f"+
+
"\7c\2\2\u014f\u0150\7f\2\2\u0150\u0151\7f\2\2\u0151\u03e6\7t\2\2\u0152"+
+
"\u0153\7t\2\2\u0153\u0154\7g\2\2\u0154\u0155\7s\2\2\u0155\u0156\7a\2\2"+
+
"\u0156\u0157\7c\2\2\u0157\u0158\7i\2\2\u0158\u0159\7g\2\2\u0159\u015a"+
+
"\7p\2\2\u015a\u03e6\7v\2\2\u015b\u015c\7w\2\2\u015c\u015d\7u\2\2\u015d"+
+
"\u015e\7g\2\2\u015e\u015f\7t\2\2\u015f\u0160\7a\2\2\u0160\u0161\7k\2\2"+
+
"\u0161\u03e6\7f\2\2\u0162\u0163\7w\2\2\u0163\u0164\7u\2\2\u0164\u0165"+
+
"\7g\2\2\u0165\u0166\7t\2\2\u0166\u0167\7a\2\2\u0167\u0168\7h\2\2\u0168"+
+
"\u0169\7p\2\2\u0169\u016a\7c\2\2\u016a\u016b\7o\2\2\u016b\u03e6\7g\2\2"+
+
"\u016c\u016d\7w\2\2\u016d\u016e\7u\2\2\u016e\u016f\7g\2\2\u016f\u0170"+
+
"\7t\2\2\u0170\u0171\7a\2\2\u0171\u0172\7n\2\2\u0172\u0173\7p\2\2\u0173"+
+
"\u0174\7c\2\2\u0174\u0175\7o\2\2\u0175\u03e6\7g\2\2\u0176\u0177\7w\2\2"+
+
"\u0177\u0178\7u\2\2\u0178\u0179\7g\2\2\u0179\u017a\7t\2\2\u017a\u017b"+
+
"\7a\2\2\u017b\u017c\7g\2\2\u017c\u017d\7o\2\2\u017d\u017e\7c\2\2\u017e"+
+
"\u017f\7k\2\2\u017f\u03e6\7n\2\2\u0180\u0181\7w\2\2\u0181\u0182\7u\2\2"+
+
"\u0182\u0183\7g\2\2\u0183\u0184\7t\2\2\u0184\u0185\7a\2\2\u0185\u0186"+
+
"\7c\2\2\u0186\u0187\7f\2\2\u0187\u0188\7o\2\2\u0188\u0189\7k\2\2\u0189"+
+
"\u03e6\7p\2\2\u018a\u018b\7w\2\2\u018b\u018c\7u\2\2\u018c\u018d\7g\2\2"+
+
"\u018d\u018e\7t\2\2\u018e\u018f\7a\2\2\u018f\u0190\7u\2\2\u0190\u0191"+
+
"\7k\2\2\u0191\u0192\7i\2\2\u0192\u0193\7p\2\2\u0193\u0194\7w\2\2\u0194"+
+
"\u0195\7r\2\2\u0195\u0196\7a\2\2\u0196\u0197\7v\2\2\u0197\u0198\7u\2\2"+
+
"\u0198\u0199\7v\2\2\u0199\u019a\7c\2\2\u019a\u019b\7o\2\2\u019b\u03e6"+
+
"\7r\2\2\u019c\u019d\7e\2\2\u019d\u019e\7q\2\2\u019e\u019f\7o\2\2\u019f"+
+
"\u01a0\7r\2\2\u01a0\u01a1\7a\2\2\u01a1\u01a2\7k\2\2\u01a2\u03e6\7f\2\2"+
+
"\u01a3\u01a4\7e\2\2\u01a4\u01a5\7q\2\2\u01a5\u01a6\7o\2\2\u01a6\u01a7"+
+
"\7r\2\2\u01a7\u01a8\7a\2\2\u01a8\u01a9\7p\2\2\u01a9\u01aa\7c\2\2\u01aa"+
+
"\u01ab\7o\2\2\u01ab\u03e6\7g\2\2\u01ac\u01ad\7e\2\2\u01ad\u01ae\7q\2\2"+
+
"\u01ae\u01af\7o\2\2\u01af\u01b0\7r\2\2\u01b0\u01b1\7a\2\2\u01b1\u01b2"+
+
"\7y\2\2\u01b2\u01b3\7g\2\2\u01b3\u01b4\7d\2\2\u01b4\u01b5\7u\2\2\u01b5"+
+
"\u01b6\7k\2\2\u01b6\u01b7\7v\2\2\u01b7\u03e6\7g\2\2\u01b8\u01b9\7e\2\2"+
+
"\u01b9\u01ba\7q\2\2\u01ba\u01bb\7o\2\2\u01bb\u01bc\7r\2\2\u01bc\u01bd"+
+
"\7a\2\2\u01bd\u01be\7e\2\2\u01be\u01bf\7q\2\2\u01bf\u01c0\7w\2\2\u01c0"+
+
"\u01c1\7p\2\2\u01c1\u01c2\7v\2\2\u01c2\u01c3\7t\2\2\u01c3\u03e6\7{\2\2"+
+
"\u01c4\u01c5\7e\2\2\u01c5\u01c6\7q\2\2\u01c6\u01c7\7o\2\2\u01c7\u01c8"+
+
"\7r\2\2\u01c8\u01c9\7a\2\2\u01c9\u01ca\7t\2\2\u01ca\u01cb\7g\2\2\u01cb"+
+
"\u01cc\7i\2\2\u01cc\u01cd\7k\2\2\u01cd\u01ce\7q\2\2\u01ce\u03e6\7p\2\2"+
+
"\u01cf\u01d0\7e\2\2\u01d0\u01d1\7q\2\2\u01d1\u01d2\7o\2\2\u01d2\u01d3"+
+
"\7r\2\2\u01d3\u01d4\7a\2\2\u01d4\u01d5\7e\2\2\u01d5\u01d6\7k\2\2\u01d6"+
+
"\u01d7\7v\2\2\u01d7\u03e6\7{\2\2\u01d8\u01d9\7e\2\2\u01d9\u01da\7q\2\2"+
+
"\u01da\u01db\7o\2\2\u01db\u01dc\7r\2\2\u01dc\u01dd\7a\2\2\u01dd\u01de"+
+
"\7c\2\2\u01de\u01df\7f\2\2\u01df\u01e0\7f\2\2\u01e0\u03e6\7t\2\2\u01e1"+
+
"\u01e2\7e\2\2\u01e2\u01e3\7q\2\2\u01e3\u01e4\7o\2\2\u01e4\u01e5\7r\2\2"+
+
"\u01e5\u01e6\7a\2\2\u01e6\u01e7\7r\2\2\u01e7\u01e8\7q\2\2\u01e8\u01e9"+
+
"\7u\2\2\u01e9\u01ea\7v\2\2\u01ea\u01eb\7e\2\2\u01eb\u01ec\7q\2\2\u01ec"+
+
"\u01ed\7f\2\2\u01ed\u03e6\7g\2\2\u01ee\u01ef\7v\2\2\u01ef\u01f0\7t\2\2"+
+
"\u01f0\u01f1\7k\2\2\u01f1\u03e6\7o\2\2\u01f2\u01f3\7u\2\2\u01f3\u01f4"+
+
"\7v\2\2\u01f4\u01f5\7t\2\2\u01f5\u01f6\7k\2\2\u01f6\u03e6\7r\2\2\u01f7"+
+
"\u01f8\7w\2\2\u01f8\u01f9\7r\2\2\u01f9\u01fa\7r\2\2\u01fa\u01fb\7g\2\2"+
+
"\u01fb\u01fc\7t\2\2\u01fc\u01fd\7e\2\2\u01fd\u01fe\7c\2\2\u01fe\u01ff"+
+
"\7u\2\2\u01ff\u03e6\7g\2\2\u0200\u0201\7n\2\2\u0201\u0202\7q\2\2\u0202"+
+
"\u0203\7y\2\2\u0203\u0204\7g\2\2\u0204\u0205\7t\2\2\u0205\u0206\7e\2\2"+
+
"\u0206\u0207\7c\2\2\u0207\u0208\7u\2\2\u0208\u03e6\7g\2\2\u0209\u020a"+
+
"\7k\2\2\u020a\u020b\7u\2\2\u020b\u020c\7a\2\2\u020c\u020d\7c\2\2\u020d"+
+
"\u020e\7n\2\2\u020e\u020f\7r\2\2\u020f\u0210\7j\2\2\u0210\u03e6\7c\2\2"+
+
"\u0211\u0212\7k\2\2\u0212\u0213\7u\2\2\u0213\u0214\7a\2\2\u0214\u0215"+
+
"\7c\2\2\u0215\u0216\7n\2\2\u0216\u0217\7r\2\2\u0217\u0218\7j\2\2\u0218"+
+
"\u0219\7c\2\2\u0219\u021a\7p\2\2\u021a\u021b\7w\2\2\u021b\u03e6\7o\2\2"+
+
"\u021c\u021d\7k\2\2\u021d\u021e\7u\2\2\u021e\u021f\7a\2\2\u021f\u0220"+
+
"\7y\2\2\u0220\u0221\7j\2\2\u0221\u0222\7k\2\2\u0222\u0223\7v\2\2\u0223"+
+
"\u0224\7g\2\2\u0224\u0225\7u\2\2\u0225\u0226\7r\2\2\u0226\u0227\7c\2\2"+
+
"\u0227\u0228\7e\2\2\u0228\u03e6\7g\2\2\u0229\u022a\7k\2\2\u022a\u022b"+
+
"\7u\2\2\u022b\u022c\7a\2\2\u022c\u022d\7p\2\2\u022d\u022e\7w\2\2\u022e"+
+
"\u03e6\7o\2\2\u022f\u0230\7k\2\2\u0230\u0231\7u\2\2\u0231\u0232\7a\2\2"+
+
"\u0232\u0233\7p\2\2\u0233\u0234\7w\2\2\u0234\u0235\7o\2\2\u0235\u0236"+
+
"\7u\2\2\u0236\u0237\7r\2\2\u0237\u0238\7c\2\2\u0238\u0239\7e\2\2\u0239"+
+
"\u03e6\7g\2\2\u023a\u023b\7k\2\2\u023b\u023c\7u\2\2\u023c\u023d\7a\2\2"+
+
"\u023d\u023e\7c\2\2\u023e\u023f\7n\2\2\u023f\u0240\7r\2\2\u0240\u0241"+
+
"\7j\2\2\u0241\u0242\7c\2\2\u0242\u0243\7u\2\2\u0243\u0244\7r\2\2\u0244"+
+
"\u0245\7c\2\2\u0245\u0246\7e\2\2\u0246\u03e6\7g\2\2\u0247\u0248\7k\2\2"+
+
"\u0248\u0249\7u\2\2\u0249\u024a\7a\2\2\u024a\u024b\7c\2\2\u024b\u024c"+
+
"\7n\2\2\u024c\u024d\7r\2\2\u024d\u024e\7j\2\2\u024e\u024f\7c\2\2\u024f"+
+
"\u0250\7p\2\2\u0250\u0251\7w\2\2\u0251\u0252\7o\2\2\u0252\u0253\7u\2\2"+
+
"\u0253\u0254\7r\2\2\u0254\u0255\7c\2\2\u0255\u0256\7e\2\2\u0256\u03e6"+
+
"\7g\2\2\u0257\u0258\7u\2\2\u0258\u0259\7w\2\2\u0259\u025a\7d\2\2\u025a"+
+
"\u025b\7u\2\2\u025b\u025c\7v\2\2\u025c\u025d\7t\2\2\u025d\u025e\7k\2\2"+
+
"\u025e\u025f\7p\2\2\u025f\u03e6\7i\2\2\u0260\u0261\7e\2\2\u0261\u0262"+
+
"\7j\2\2\u0262\u0263\7c\2\2\u0263\u0264\7t\2\2\u0264\u0265\7C\2\2\u0265"+
+
"\u03e6\7v\2\2\u0266\u0267\7t\2\2\u0267\u0268\7g\2\2\u0268\u0269\7i\2\2"+
+
"\u0269\u026a\7g\2\2\u026a\u03e6\7z\2\2\u026b\u026c\7u\2\2\u026c\u026d"+
+
"\7q\2\2\u026d\u026e\7w\2\2\u026e\u026f\7p\2\2\u026f\u0270\7f\2\2\u0270"+
+
"\u0271\7g\2\2\u0271\u03e6\7z\2\2\u0272\u0273\7u\2\2\u0273\u0274\7r\2\2"+
+
"\u0274\u0275\7n\2\2\u0275\u0276\7k\2\2\u0276\u03e6\7v\2\2\u0277\u0278"+
+
"\7u\2\2\u0278\u0279\7r\2\2\u0279\u027a\7n\2\2\u027a\u027b\7k\2\2\u027b"+
+
"\u027c\7v\2\2\u027c\u027d\7a\2\2\u027d\u027e\7v\2\2\u027e\u027f\7t\2\2"+
+
"\u027f\u0280\7k\2\2\u0280\u03e6\7o\2\2\u0281\u0282\7t\2\2\u0282\u0283"+
+
"\7g\2\2\u0283\u0284\7r\2\2\u0284\u0285\7n\2\2\u0285\u0286\7c\2\2\u0286"+
+
"\u0287\7e\2\2\u0287\u03e6\7g\2\2\u0288\u0289\7c\2\2\u0289\u028a\7d\2\2"+
+
"\u028a\u03e6\7u\2\2\u028b\u028c\7e\2\2\u028c\u028d\7g\2\2\u028d\u028e"+
+
"\7k\2\2\u028e\u03e6\7n\2\2\u028f\u0290\7h\2\2\u0290\u0291\7n\2\2\u0291"+
+
"\u0292\7q\2\2\u0292\u0293\7q\2\2\u0293\u03e6\7t\2\2\u0294\u0295\7t\2\2"+
+
"\u0295\u0296\7k\2\2\u0296\u0297\7p\2\2\u0297\u03e6\7v\2\2\u0298\u0299"+
+
"\7t\2\2\u0299\u029a\7q\2\2\u029a\u029b\7w\2\2\u029b\u029c\7p\2\2\u029c"+
+
"\u03e6\7f\2\2\u029d\u029e\7u\2\2\u029e\u029f\7k\2\2\u029f\u02a0\7i\2\2"+
+
"\u02a0\u02a1\7p\2\2\u02a1\u02a2\7w\2\2\u02a2\u03e6\7o\2\2\u02a3\u02a4"+
+
"\7u\2\2\u02a4\u02a5\7s\2\2\u02a5\u02a6\7t\2\2\u02a6\u03e6\7v\2\2\u02a7"+
+
"\u02a8\7e\2\2\u02a8\u02a9\7d\2\2\u02a9\u02aa\7t\2\2\u02aa\u03e6\7v\2\2"+
+
"\u02ab\u02ac\7r\2\2\u02ac\u03e6\7k\2\2\u02ad\u02ae\7g\2\2\u02ae\u02af"+
+
"\7w\2\2\u02af\u02b0\7n\2\2\u02b0\u02b1\7g\2\2\u02b1\u03e6\7t\2\2\u02b2"+
+
"\u02b3\7c\2\2\u02b3\u02b4\7e\2\2\u02b4\u02b5\7q\2\2\u02b5\u03e6\7u\2\2"+
+
"\u02b6\u02b7\7c\2\2\u02b7\u02b8\7u\2\2\u02b8\u02b9\7k\2\2\u02b9\u03e6"+
+
"\7p\2\2\u02ba\u02bb\7c\2\2\u02bb\u02bc\7v\2\2\u02bc\u02bd\7c\2\2\u02bd"+
+
"\u03e6\7p\2\2\u02be\u02bf\7e\2\2\u02bf\u02c0\7q\2\2\u02c0\u03e6\7u\2\2"+
+
"\u02c1\u02c2\7u\2\2\u02c2\u02c3\7k\2\2\u02c3\u03e6\7p\2\2\u02c4\u02c5"+
+
"\7v\2\2\u02c5\u02c6\7c\2\2\u02c6\u03e6\7p\2\2\u02c7\u02c8\7e\2\2\u02c8"+
+
"\u02c9\7q\2\2\u02c9\u02ca\7u\2\2\u02ca\u03e6\7j\2\2\u02cb\u02cc\7u\2\2"+
+
"\u02cc\u02cd\7k\2\2\u02cd\u02ce\7p\2\2\u02ce\u03e6\7j\2\2\u02cf\u02d0"+
+
"\7v\2\2\u02d0\u02d1\7c\2\2\u02d1\u02d2\7p\2\2\u02d2\u03e6\7j\2\2\u02d3"+
+
"\u02d4\7c\2\2\u02d4\u02d5\7v\2\2\u02d5\u02d6\7p\2\2\u02d6\u03e6\7\64\2"+
+
"\2\u02d7\u02d8\7f\2\2\u02d8\u02d9\7g\2\2\u02d9\u02da\7i\2\2\u02da\u02db"+
+
"\7t\2\2\u02db\u02dc\7g\2\2\u02dc\u02dd\7g\2\2\u02dd\u03e6\7u\2\2\u02de"+
+
"\u02df\7t\2\2\u02df\u02e0\7c\2\2\u02e0\u02e1\7f\2\2\u02e1\u02e2\7k\2\2"+
+
"\u02e2\u02e3\7c\2\2\u02e3\u02e4\7p\2\2\u02e4\u03e6\7u\2\2\u02e5\u02e6"+
+
"\7g\2\2\u02e6\u02e7\7z\2\2\u02e7\u03e6\7r\2\2\u02e8\u02e9\7g\2\2\u02e9"+
+
"\u02ea\7z\2\2\u02ea\u02eb\7r\2\2\u02eb\u02ec\7o\2\2\u02ec\u03e6\7\63\2"+
+
"\2\u02ed\u02ee\7j\2\2\u02ee\u02ef\7{\2\2\u02ef\u02f0\7r\2\2\u02f0\u02f1"+
+
"\7q\2\2\u02f1\u03e6\7v\2\2\u02f2\u02f3\7n\2\2\u02f3\u02f4\7q\2\2\u02f4"+
+
"\u03e6\7i\2\2\u02f5\u02f6\7n\2\2\u02f6\u02f7\7q\2\2\u02f7\u02f8\7i\2\2"+
+
"\u02f8\u02f9\7\63\2\2\u02f9\u03e6\7\62\2\2\u02fa\u02fb\7n\2\2\u02fb\u02fc"+
+
"\7q\2\2\u02fc\u02fd\7i\2\2\u02fd\u02fe\7\63\2\2\u02fe\u03e6\7r\2\2\u02ff"+
+
"\u0300\7r\2\2\u0300\u0301\7q\2\2\u0301\u03e6\7y\2\2\u0302\u0303\7t\2\2"+
+
"\u0303\u0304\7c\2\2\u0304\u0305\7p\2\2\u0305\u03e6\7f\2\2\u0306\u0307"+
+
"\7u\2\2\u0307\u0308\7s\2\2\u0308\u0309\7w\2\2\u0309\u030a\7c\2\2\u030a"+
+
"\u030b\7t\2\2\u030b\u03e6\7g\2\2\u030c\u030d\7n\2\2\u030d\u030e\7k\2\2"+
+
"\u030e\u030f\7u\2\2\u030f\u03e6\7v\2\2\u0310\u0311\7o\2\2\u0311\u0312"+
+
"\7c\2\2\u0312\u03e6\7r\2\2\u0313\u0314\7i\2\2\u0314\u0315\7g\2\2\u0315"+
+
"\u03e6\7v\2\2\u0316\u0317\7k\2\2\u0317\u0318\7p\2\2\u0318\u0319\7f\2\2"+
+
"\u0319\u031a\7g\2\2\u031a\u03e6\7z\2\2\u031b\u031c\7j\2\2\u031c\u031d"+
+
"\7c\2\2\u031d\u03e6\7u\2\2\u031e\u031f\7v\2\2\u031f\u0320\7c\2\2\u0320"+
+
"\u0321\7k\2\2\u0321\u03e6\7n\2\2\u0322\u0323\7c\2\2\u0323\u0324\7f\2\2"+
+
"\u0324\u03e6\7f\2\2\u0325\u0326\7t\2\2\u0326\u0327\7g\2\2\u0327\u0328"+
+
"\7o\2\2\u0328\u0329\7q\2\2\u0329\u032a\7x\2\2\u032a\u03e6\7g\2\2\u032b"+
+
"\u032c\7h\2\2\u032c\u032d\7k\2\2\u032d\u032e\7t\2\2\u032e\u032f\7u\2\2"+
+
"\u032f\u03e6\7v\2\2\u0330\u0331\7n\2\2\u0331\u0332\7c\2\2\u0332\u0333"+
+
"\7u\2\2\u0333\u03e6\7v\2\2\u0334\u0335\7m\2\2\u0335\u0336\7g\2\2\u0336"+
+
"\u0337\7{\2\2\u0337\u03e6\7u\2\2\u0338\u0339\7x\2\2\u0339\u033a\7c\2\2"+
+
"\u033a\u033b\7n\2\2\u033b\u033c\7w\2\2\u033c\u033d\7g\2\2\u033d\u03e6"+
+
"\7u\2\2\u033e\u033f\7n\2\2\u033f\u0340\7g\2\2\u0340\u0341\7p\2\2\u0341"+
+
"\u0342\7i\2\2\u0342\u0343\7v\2\2\u0343\u03e6\7j\2\2\u0344\u0345\7e\2\2"+
+
"\u0345\u0346\7q\2\2\u0346\u0347\7w\2\2\u0347\u0348\7p\2\2\u0348\u03e6"+
+
"\7v\2\2\u0349\u034a\7v\2\2\u034a\u034b\7c\2\2\u034b\u034c\7m\2\2\u034c"+
+
"\u03e6\7g\2\2\u034d\u034e\7f\2\2\u034e\u034f\7t\2\2\u034f\u0350\7q\2\2"+
+
"\u0350\u03e6\7r\2\2\u0351\u0352\7u\2\2\u0352\u0353\7k\2\2\u0353\u0354"+
+
"\7|\2\2\u0354\u03e6\7g\2\2\u0355\u0356\7t\2\2\u0356\u0357\7g\2\2\u0357"+
+
"\u0358\7x\2\2\u0358\u0359\7g\2\2\u0359\u035a\7t\2\2\u035a\u035b\7u\2\2"+
+
"\u035b\u03e6\7g\2\2\u035c\u035d\7k\2\2\u035d\u035e\7u\2\2\u035e\u035f"+
+
"\7a\2\2\u035f\u0360\7g\2\2\u0360\u0361\7o\2\2\u0361\u0362\7r\2\2\u0362"+
+
"\u0363\7v\2\2\u0363\u03e6\7{\2\2\u0364\u0365\7p\2\2\u0365\u0366\7q\2\2"+
+
"\u0366\u0367\7p\2\2\u0367\u0368\7a\2\2\u0368\u0369\7g\2\2\u0369\u036a"+
+
"\7o\2\2\u036a\u036b\7r\2\2\u036b\u036c\7v\2\2\u036c\u03e6\7{\2\2\u036d"+
+
"\u036e\7v\2\2\u036e\u036f\7q\2\2\u036f\u0370\7a\2\2\u0370\u0371\7u\2\2"+
+
"\u0371\u0372\7v\2\2\u0372\u0373\7t\2\2\u0373\u0374\7k\2\2\u0374\u0375"+
+
"\7p\2\2\u0375\u03e6\7i\2\2\u0376\u0377\7c\2\2\u0377\u0378\7x\2\2\u0378"+
+
"\u03e6\7i\2\2\u0379\u037a\7o\2\2\u037a\u037b\7c\2\2\u037b\u03e6\7z\2\2"+
+
"\u037c\u037d\7o\2\2\u037d\u037e\7k\2\2\u037e\u03e6\7p\2\2\u037f\u0380"+
+
"\7u\2\2\u0380\u0381\7v\2\2\u0381\u0382\7f\2\2\u0382\u0383\7g\2\2\u0383"+
+
"\u03e6\7x\2\2\u0384\u0385\7u\2\2\u0385\u0386\7w\2\2\u0386\u03e6\7o\2\2"+
+
"\u0387\u0388\7{\2\2\u0388\u0389\7g\2\2\u0389\u038a\7c\2\2\u038a\u03e6"+
+
"\7t\2\2\u038b\u038c\7o\2\2\u038c\u038d\7q\2\2\u038d\u038e\7p\2\2\u038e"+
+
"\u038f\7v\2\2\u038f\u03e6\7j\2\2\u0390\u0391\7f\2\2\u0391\u0392\7c\2\2"+
+
"\u0392\u0393\7{\2\2\u0393\u0394\7a\2\2\u0394\u0395\7q\2\2\u0395\u0396"+
+
"\7h\2\2\u0396\u0397\7a\2\2\u0397\u0398\7o\2\2\u0398\u0399\7q\2\2\u0399"+
+
"\u039a\7p\2\2\u039a\u039b\7v\2\2\u039b\u03e6\7j\2\2\u039c\u039d\7f\2\2"+
+
"\u039d\u039e\7c\2\2\u039e\u039f\7{\2\2\u039f\u03a0\7a\2\2\u03a0\u03a1"+
+
"\7q\2\2\u03a1\u03a2\7h\2\2\u03a2\u03a3\7a\2\2\u03a3\u03a4\7y\2\2\u03a4"+
+
"\u03a5\7g\2\2\u03a5\u03a6\7g\2\2\u03a6\u03e6\7m\2\2\u03a7\u03a8\7f\2\2"+
+
"\u03a8\u03a9\7c\2\2\u03a9\u03aa\7{\2\2\u03aa\u03ab\7a\2\2\u03ab\u03ac"+
+
"\7q\2\2\u03ac\u03ad\7h\2\2\u03ad\u03ae\7a\2\2\u03ae\u03af\7{\2\2\u03af"+
+
"\u03b0\7g\2\2\u03b0\u03b1\7c\2\2\u03b1\u03e6\7t\2\2\u03b2\u03b3\7j\2\2"+
+
"\u03b3\u03b4\7q\2\2\u03b4\u03b5\7w\2\2\u03b5\u03e6\7t\2\2\u03b6\u03b7"+
+
"\7o\2\2\u03b7\u03b8\7k\2\2\u03b8\u03b9\7p\2\2\u03b9\u03ba\7w\2\2\u03ba"+
+
"\u03bb\7v\2\2\u03bb\u03e6\7g\2\2\u03bc\u03bd\7u\2\2\u03bd\u03be\7g\2\2"+
+
"\u03be\u03bf\7e\2\2\u03bf\u03c0\7q\2\2\u03c0\u03c1\7p\2\2\u03c1\u03e6"+
+
"\7f\2\2\u03c2\u03c3\7y\2\2\u03c3\u03c4\7g\2\2\u03c4\u03c5\7g\2\2\u03c5"+
+
"\u03c6\7m\2\2\u03c6\u03c7\7a\2\2\u03c7\u03c8\7q\2\2\u03c8\u03c9\7h\2\2"+
+
"\u03c9\u03ca\7a\2\2\u03ca\u03cb\7o\2\2\u03cb\u03cc\7q\2\2\u03cc\u03cd"+
+
"\7p\2\2\u03cd\u03ce\7v\2\2\u03ce\u03e6\7j\2\2\u03cf\u03d0\7y\2\2\u03d0"+
+
"\u03d1\7g\2\2\u03d1\u03d2\7g\2\2\u03d2\u03d3\7m\2\2\u03d3\u03d4\7a\2\2"+
+
"\u03d4\u03d5\7q\2\2\u03d5\u03d6\7h\2\2\u03d6\u03d7\7a\2\2\u03d7\u03d8"+
+
"\7{\2\2\u03d8\u03d9\7g\2\2\u03d9\u03da\7c\2\2\u03da\u03e6\7t\2\2\u03db"+
+
"\u03dc\7s\2\2\u03dc\u03dd\7w\2\2\u03dd\u03de\7c\2\2\u03de\u03df\7t\2\2"+
+
"\u03df\u03e0\7v\2\2\u03e0\u03e1\7g\2\2\u03e1\u03e6\7t\2\2\u03e2\u03e3"+
+
"\7p\2\2\u03e3\u03e4\7q\2\2\u03e4\u03e6\7y\2\2\u03e5\u0089\3\2\2\2\u03e5"+
+
"\u0093\3\2\2\2\u03e5\u009c\3\2\2\2\u03e5\u00a6\3\2\2\2\u03e5\u00b1\3\2"+
+
"\2\2\u03e5\u00b9\3\2\2\2\u03e5\u00c2\3\2\2\2\u03e5\u00ce\3\2\2\2\u03e5"+
+
"\u00d6\3\2\2\2\u03e5\u00df\3\2\2\2\u03e5\u00e8\3\2\2\2\u03e5\u00ec\3\2"+
+
"\2\2\u03e5\u00ee\3\2\2\2\u03e5\u00f0\3\2\2\2\u03e5\u00f4\3\2\2\2\u03e5"+
+
"\u00f8\3\2\2\2\u03e5\u00fd\3\2\2\2\u03e5\u0106\3\2\2\2\u03e5\u010c\3\2"+
+
"\2\2\u03e5\u0112\3\2\2\2\u03e5\u0117\3\2\2\2\u03e5\u011e\3\2\2\2\u03e5"+
+
"\u0127\3\2\2\2\u03e5\u012e\3\2\2\2\u03e5\u0134\3\2\2\2\u03e5\u0140\3\2"+
+
"\2\2\u03e5\u014a\3\2\2\2\u03e5\u0152\3\2\2\2\u03e5\u015b\3\2\2\2\u03e5"+
+
"\u0162\3\2\2\2\u03e5\u016c\3\2\2\2\u03e5\u0176\3\2\2\2\u03e5\u0180\3\2"+
+
"\2\2\u03e5\u018a\3\2\2\2\u03e5\u019c\3\2\2\2\u03e5\u01a3\3\2\2\2\u03e5"+
+
"\u01ac\3\2\2\2\u03e5\u01b8\3\2\2\2\u03e5\u01c4\3\2\2\2\u03e5\u01cf\3\2"+
+
"\2\2\u03e5\u01d8\3\2\2\2\u03e5\u01e1\3\2\2\2\u03e5\u01ee\3\2\2\2\u03e5"+
+
"\u01f2\3\2\2\2\u03e5\u01f7\3\2\2\2\u03e5\u0200\3\2\2\2\u03e5\u0209\3\2"+
+
"\2\2\u03e5\u0211\3\2\2\2\u03e5\u021c\3\2\2\2\u03e5\u0229\3\2\2\2\u03e5"+
+
"\u022f\3\2\2\2\u03e5\u023a\3\2\2\2\u03e5\u0247\3\2\2\2\u03e5\u0257\3\2"+
+
"\2\2\u03e5\u0260\3\2\2\2\u03e5\u0266\3\2\2\2\u03e5\u026b\3\2\2\2\u03e5"+
+
"\u0272\3\2\2\2\u03e5\u0277\3\2\2\2\u03e5\u0281\3\2\2\2\u03e5\u0288\3\2"+
+
"\2\2\u03e5\u028b\3\2\2\2\u03e5\u028f\3\2\2\2\u03e5\u0294\3\2\2\2\u03e5"+
+
"\u0298\3\2\2\2\u03e5\u029d\3\2\2\2\u03e5\u02a3\3\2\2\2\u03e5\u02a7\3\2"+
+
"\2\2\u03e5\u02ab\3\2\2\2\u03e5\u02ad\3\2\2\2\u03e5\u02b2\3\2\2\2\u03e5"+
+
"\u02b6\3\2\2\2\u03e5\u02ba\3\2\2\2\u03e5\u02be\3\2\2\2\u03e5\u02c1\3\2"+
+
"\2\2\u03e5\u02c4\3\2\2\2\u03e5\u02c7\3\2\2\2\u03e5\u02cb\3\2\2\2\u03e5"+
+
"\u02cf\3\2\2\2\u03e5\u02d3\3\2\2\2\u03e5\u02d7\3\2\2\2\u03e5\u02de\3\2"+
+
"\2\2\u03e5\u02e5\3\2\2\2\u03e5\u02e8\3\2\2\2\u03e5\u02ed\3\2\2\2\u03e5"+
+
"\u02f2\3\2\2\2\u03e5\u02f5\3\2\2\2\u03e5\u02fa\3\2\2\2\u03e5\u02ff\3\2"+
+
"\2\2\u03e5\u0302\3\2\2\2\u03e5\u0306\3\2\2\2\u03e5\u030c\3\2\2\2\u03e5"+
+
"\u0310\3\2\2\2\u03e5\u0313\3\2\2\2\u03e5\u0316\3\2\2\2\u03e5\u031b\3\2"+
+
"\2\2\u03e5\u031e\3\2\2\2\u03e5\u0322\3\2\2\2\u03e5\u0325\3\2\2\2\u03e5"+
+
"\u032b\3\2\2\2\u03e5\u0330\3\2\2\2\u03e5\u0334\3\2\2\2\u03e5\u0338\3\2"+
+
"\2\2\u03e5\u033e\3\2\2\2\u03e5\u0344\3\2\2\2\u03e5\u0349\3\2\2\2\u03e5"+
+
"\u034d\3\2\2\2\u03e5\u0351\3\2\2\2\u03e5\u0355\3\2\2\2\u03e5\u035c\3\2"+
+
"\2\2\u03e5\u0364\3\2\2\2\u03e5\u036d\3\2\2\2\u03e5\u0376\3\2\2\2\u03e5"+
+
"\u0379\3\2\2\2\u03e5\u037c\3\2\2\2\u03e5\u037f\3\2\2\2\u03e5\u0384\3\2"+
+
"\2\2\u03e5\u0387\3\2\2\2\u03e5\u038b\3\2\2\2\u03e5\u0390\3\2\2\2\u03e5"+
+
"\u039c\3\2\2\2\u03e5\u03a7\3\2\2\2\u03e5\u03b2\3\2\2\2\u03e5\u03b6\3\2"+
+
"\2\2\u03e5\u03bc\3\2\2\2\u03e5\u03c2\3\2\2\2\u03e5\u03cf\3\2\2\2\u03e5"+
+
"\u03db\3\2\2\2\u03e5\u03e2\3\2\2\2\u03e6\16\3\2\2\2\u03e7\u03e8\7h\2\2"+
+
"\u03e8\u03e9\7t\2\2\u03e9\u03ea\7c\2\2\u03ea\u03eb\7i\2\2\u03eb\u03ec"+
+
"\7o\2\2\u03ec\u03ed\7g\2\2\u03ed\u03ee\7p\2\2\u03ee\u03ef\7v\2\2\u03ef"+
+
"\20\3\2\2\2\u03f0\u03f6\5\65\33\2\u03f1\u03f5\n\2\2\2\u03f2\u03f3\7^\2"+
+
"\2\u03f3\u03f5\7)\2\2\u03f4\u03f1\3\2\2\2\u03f4\u03f2\3\2\2\2\u03f5\u03f8"+
+
"\3\2\2\2\u03f6\u03f4\3\2\2\2\u03f6\u03f7\3\2\2\2\u03f7\u03f9\3\2\2\2\u03f8"+
+
"\u03f6\3\2\2\2\u03f9\u03fa\5\65\33\2\u03fa\22\3\2\2\2\u03fb\u0401\5\67"+
+
"\34\2\u03fc\u0400\n\3\2\2\u03fd\u03fe\7^\2\2\u03fe\u0400\7$\2\2\u03ff"+
+
"\u03fc\3\2\2\2\u03ff\u03fd\3\2\2\2\u0400\u0403\3\2\2\2\u0401\u03ff\3\2"+
+
"\2\2\u0401\u0402\3\2\2\2\u0402\u0404\3\2\2\2\u0403\u0401\3\2\2\2\u0404"+
+
"\u0405\5\67\34\2\u0405\24\3\2\2\2\u0406\u0407\7v\2\2\u0407\u0408\7t\2"+
+
"\2\u0408\u0409\7w\2\2\u0409\u0410\7g\2\2\u040a\u040b\7h\2\2\u040b\u040c"+
+
"\7c\2\2\u040c\u040d\7n\2\2\u040d\u040e\7u\2\2\u040e\u0410\7g\2\2\u040f"+
+
"\u0406\3\2\2\2\u040f\u040a\3\2\2\2\u0410\26\3\2\2\2\u0411\u0412\7p\2\2"+
+
"\u0412\u0413\7w\2\2\u0413\u0414\7n\2\2\u0414\u0415\7n\2\2\u0415\30\3\2"+
+
"\2\2\u0416\u0417\7?\2\2\u0417\u0418\7?\2\2\u0418\32\3\2\2\2\u0419\u041a"+
+
"\7#\2\2\u041a\u041b\7?\2\2\u041b\34\3\2\2\2\u041c\u041d\7@\2\2\u041d\u041e"+
+
"\7?\2\2\u041e\36\3\2\2\2\u041f\u0420\7>\2\2\u0420\u0421\7?\2\2\u0421 "+
+
"\3\2\2\2\u0422\u0423\7@\2\2\u0423\"\3\2\2\2\u0424\u0425\7>\2\2\u0425$"+
+
"\3\2\2\2\u0426\u0427\7(\2\2\u0427\u0428\7(\2\2\u0428&\3\2\2\2\u0429\u042a"+
+
"\7~\2\2\u042a\u042b\7~\2\2\u042b(\3\2\2\2\u042c\u042d\7~\2\2\u042d*\3"+
+
"\2\2\2\u042e\u042f\7#\2\2\u042f,\3\2\2\2\u0430\u0431\7*\2\2\u0431.\3\2"+
+
"\2\2\u0432\u0433\7+\2\2\u0433\60\3\2\2\2\u0434\u0435\7}\2\2\u0435\62\3"+
+
"\2\2\2\u0436\u0437\7\177\2\2\u0437\64\3\2\2\2\u0438\u0439\7)\2\2\u0439"+
+
"\66\3\2\2\2\u043a\u043b\7$\2\2\u043b8\3\2\2\2\u043c\u043d\7\u0080\2\2"+
+
"\u043d:\3\2\2\2\u043e\u043f\7]\2\2\u043f<\3\2\2\2\u0440\u0441\7_\2\2\u0441"+
+
">\3\2\2\2\u0442\u0443\7%\2\2\u0443@\3\2\2\2\u0444\u0445\7.\2\2\u0445B"+
+
"\3\2\2\2\u0446\u0447\7<\2\2\u0447D\3\2\2\2\u0448\u0449\7/\2\2\u0449F\3"+
+
"\2\2\2\u044a\u044b\7\60\2\2\u044bH\3\2\2\2\u044c\u044d\7a\2\2\u044dJ\3"+
+
"\2\2\2\u044e\u044f\7?\2\2\u044fL\3\2\2\2\u0450\u0451\7-\2\2\u0451N\3\2"+
+
"\2\2\u0452\u0453\7A\2\2\u0453P\3\2\2\2\u0454\u0455\7,\2\2\u0455R\3\2\2"+
+
"\2\u0456\u0457\7\61\2\2\u0457T\3\2\2\2\u0458\u0459\7\'\2\2\u0459V\3\2"+
+
"\2\2\u045a\u045b\7&\2\2\u045bX\3\2\2\2\u045c\u0465\7\62\2\2\u045d\u0461"+
+
"\t\4\2\2\u045e\u0460\t\5\2\2\u045f\u045e\3\2\2\2\u0460\u0463\3\2\2\2\u0461"+
+
"\u045f\3\2\2\2\u0461\u0462\3\2\2\2\u0462\u0465\3\2\2\2\u0463\u0461\3\2"+
+
"\2\2\u0464\u045c\3\2\2\2\u0464\u045d\3\2\2\2\u0465Z\3\2\2\2\u0466\u0468"+
+
"\5G$\2\u0467\u0469\t\6\2\2\u0468\u0467\3\2\2\2\u0469\u046a\3\2\2\2\u046a"+
+
"\u0468\3\2\2\2\u046a\u046b\3\2\2\2\u046b\\\3\2\2\2\u046c\u046e\t\7\2\2"+
+
"\u046d\u046f\t\b\2\2\u046e\u046d\3\2\2\2\u046e\u046f\3\2\2\2\u046f\u0470"+
+
"\3\2\2\2\u0470\u0471\5Y-\2\u0471^\3\2\2\2\u0472\u0473\t\t\2\2\u0473`\3"+
+
"\2\2\2\u0474\u0475\t\n\2\2\u0475b\3\2\2\2\u0476\u047b\5_\60\2\u0477\u047b"+
+
"\5I%\2\u0478\u047b\5a\61\2\u0479\u047b\5W,\2\u047a\u0476\3\2\2\2\u047a"+
+
"\u0477\3\2\2\2\u047a\u0478\3\2\2\2\u047a\u0479\3\2\2\2\u047b\u047c\3\2"+
+
"\2\2\u047c\u047a\3\2\2\2\u047c\u047d\3\2\2\2\u047d\u0487\3\2\2\2\u047e"+
+
"\u0486\5_\60\2\u047f\u0486\5W,\2\u0480\u0486\5a\61\2\u0481\u0486\t\6\2"+
+
"\2\u0482\u0486\5C\"\2\u0483\u0486\5E#\2\u0484\u0486\5I%\2\u0485\u047e"+
+
"\3\2\2\2\u0485\u047f\3\2\2\2\u0485\u0480\3\2\2\2\u0485\u0481\3\2\2\2\u0485"+
+
"\u0482\3\2\2\2\u0485\u0483\3\2\2\2\u0485\u0484\3\2\2\2\u0486\u0489\3\2"+
+
"\2\2\u0487\u0485\3\2\2\2\u0487\u0488\3\2\2\2\u0488d\3\2\2\2\u0489\u0487"+
+
"\3\2\2\2\u048a\u048b\7\61\2\2\u048b\u048c\7\61\2\2\u048c\u0490\3\2\2\2"+
+
"\u048d\u048f\n\13\2\2\u048e\u048d\3\2\2\2\u048f\u0492\3\2\2\2\u0490\u048e"+
+
"\3\2\2\2\u0490\u0491\3\2\2\2\u0491\u0494\3\2\2\2\u0492\u0490\3\2\2\2\u0493"+
+
"\u0495\7\17\2\2\u0494\u0493\3\2\2\2\u0494\u0495\3\2\2\2\u0495\u0497\3"+
+
"\2\2\2\u0496\u0498\t\f\2\2\u0497\u0496\3\2\2\2\u0498\u04a5\3\2\2\2\u0499"+
+
"\u049a\7\61\2\2\u049a\u049b\7,\2\2\u049b\u049f\3\2\2\2\u049c\u049e\13"+
+
"\2\2\2\u049d\u049c\3\2\2\2\u049e\u04a1\3\2\2\2\u049f\u04a0\3\2\2\2\u049f"+
+
"\u049d\3\2\2\2\u04a0\u04a2\3\2\2\2\u04a1\u049f\3\2\2\2\u04a2\u04a3\7,"+
+
"\2\2\u04a3\u04a5\7\61\2\2\u04a4\u048a\3\2\2\2\u04a4\u0499\3\2\2\2\u04a5"+
+
"\u04a6\3\2\2\2\u04a6\u04a7\b\63\2\2\u04a7f\3\2\2\2\u04a8\u04aa\t\r\2\2"+
+
"\u04a9\u04a8\3\2\2\2\u04aa\u04ab\3\2\2\2\u04ab\u04a9\3\2\2\2\u04ab\u04ac"+
+
"\3\2\2\2\u04ac\u04ad\3\2\2\2\u04ad\u04ae\b\64\2\2\u04aeh\3\2\2\2\u04af"+
+
"\u04b0\13\2\2\2\u04b0j\3\2\2\2\27\2\u03e5\u03f4\u03f6\u03ff\u0401\u040f"+
+
"\u0461\u0464\u046a\u046e\u047a\u047c\u0485\u0487\u0490\u0494\u0497\u049f"+
+ "\u04a4\u04ab\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java
index 88a072e..904069b 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java
@@ -18,6 +18,26 @@ public interface NCIntentDslListener extends
ParseTreeListener {
*/
void exitDsl(NCIntentDslParser.DslContext ctx);
/**
+ * Enter a parse tree produced by {@link NCIntentDslParser#synonym}.
+ * @param ctx the parse tree
+ */
+ void enterSynonym(NCIntentDslParser.SynonymContext ctx);
+ /**
+ * Exit a parse tree produced by {@link NCIntentDslParser#synonym}.
+ * @param ctx the parse tree
+ */
+ void exitSynonym(NCIntentDslParser.SynonymContext ctx);
+ /**
+ * Enter a parse tree produced by {@link NCIntentDslParser#alias}.
+ * @param ctx the parse tree
+ */
+ void enterAlias(NCIntentDslParser.AliasContext ctx);
+ /**
+ * Exit a parse tree produced by {@link NCIntentDslParser#alias}.
+ * @param ctx the parse tree
+ */
+ void exitAlias(NCIntentDslParser.AliasContext ctx);
+ /**
* Enter a parse tree produced by {@link NCIntentDslParser#dslItems}.
* @param ctx the parse tree
*/
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java
index deada0d..976d4c3 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java
@@ -25,21 +25,21 @@ public class NCIntentDslParser extends Parser {
DIV=41, MOD=42, DOLLAR=43, INT=44, REAL=45, EXP=46, ID=47,
COMMENT=48,
WS=49, ErrorChar=50;
public static final int
- RULE_dsl = 0, RULE_dslItems = 1, RULE_dslItem = 2, RULE_frag =
3, RULE_fragId = 4,
- RULE_fragRef = 5, RULE_fragMeta = 6, RULE_intent = 7,
RULE_intentId = 8,
- RULE_orderedDecl = 9, RULE_mtdDecl = 10, RULE_flowDecl = 11,
RULE_metaDecl = 12,
- RULE_jsonObj = 13, RULE_jsonPair = 14, RULE_jsonVal = 15,
RULE_jsonArr = 16,
- RULE_terms = 17, RULE_termItem = 18, RULE_termEq = 19,
RULE_term = 20,
- RULE_mtdRef = 21, RULE_javaFqn = 22, RULE_termId = 23,
RULE_expr = 24,
- RULE_paramList = 25, RULE_atom = 26, RULE_qstring = 27,
RULE_minMax = 28,
- RULE_minMaxShortcut = 29, RULE_minMaxRange = 30, RULE_id = 31;
+ RULE_dsl = 0, RULE_synonym = 1, RULE_alias = 2, RULE_dslItems =
3, RULE_dslItem = 4,
+ RULE_frag = 5, RULE_fragId = 6, RULE_fragRef = 7, RULE_fragMeta
= 8, RULE_intent = 9,
+ RULE_intentId = 10, RULE_orderedDecl = 11, RULE_mtdDecl = 12,
RULE_flowDecl = 13,
+ RULE_metaDecl = 14, RULE_jsonObj = 15, RULE_jsonPair = 16,
RULE_jsonVal = 17,
+ RULE_jsonArr = 18, RULE_terms = 19, RULE_termItem = 20,
RULE_termEq = 21,
+ RULE_term = 22, RULE_mtdRef = 23, RULE_javaFqn = 24,
RULE_termId = 25,
+ RULE_expr = 26, RULE_paramList = 27, RULE_atom = 28,
RULE_qstring = 29,
+ RULE_minMax = 30, RULE_minMaxShortcut = 31, RULE_minMaxRange =
32, RULE_id = 33;
private static String[] makeRuleNames() {
return new String[] {
- "dsl", "dslItems", "dslItem", "frag", "fragId",
"fragRef", "fragMeta",
- "intent", "intentId", "orderedDecl", "mtdDecl",
"flowDecl", "metaDecl",
- "jsonObj", "jsonPair", "jsonVal", "jsonArr", "terms",
"termItem", "termEq",
- "term", "mtdRef", "javaFqn", "termId", "expr",
"paramList", "atom", "qstring",
- "minMax", "minMaxShortcut", "minMaxRange", "id"
+ "dsl", "synonym", "alias", "dslItems", "dslItem",
"frag", "fragId", "fragRef",
+ "fragMeta", "intent", "intentId", "orderedDecl",
"mtdDecl", "flowDecl",
+ "metaDecl", "jsonObj", "jsonPair", "jsonVal",
"jsonArr", "terms", "termItem",
+ "termEq", "term", "mtdRef", "javaFqn", "termId",
"expr", "paramList",
+ "atom", "qstring", "minMax", "minMaxShortcut",
"minMaxRange", "id"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -140,9 +140,9 @@ public class NCIntentDslParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(64);
+ setState(68);
dslItems(0);
- setState(65);
+ setState(69);
match(EOF);
}
}
@@ -157,6 +157,113 @@ public class NCIntentDslParser extends Parser {
return _localctx;
}
+ public static class SynonymContext extends ParserRuleContext {
+ public TerminalNode LBRACE() { return
getToken(NCIntentDslParser.LBRACE, 0); }
+ public ExprContext expr() {
+ return getRuleContext(ExprContext.class,0);
+ }
+ public TerminalNode RBRACE() { return
getToken(NCIntentDslParser.RBRACE, 0); }
+ public TerminalNode EOF() { return
getToken(NCIntentDslParser.EOF, 0); }
+ public AliasContext alias() {
+ return getRuleContext(AliasContext.class,0);
+ }
+ public SynonymContext(ParserRuleContext parent, int
invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_synonym; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof NCIntentDslListener )
((NCIntentDslListener)listener).enterSynonym(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof NCIntentDslListener )
((NCIntentDslListener)listener).exitSynonym(this);
+ }
+ }
+
+ public final SynonymContext synonym() throws RecognitionException {
+ SynonymContext _localctx = new SynonymContext(_ctx, getState());
+ enterRule(_localctx, 2, RULE_synonym);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(72);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LBR) {
+ {
+ setState(71);
+ alias();
+ }
+ }
+
+ setState(74);
+ match(LBRACE);
+ setState(75);
+ expr(0);
+ setState(76);
+ match(RBRACE);
+ setState(77);
+ match(EOF);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AliasContext extends ParserRuleContext {
+ public TerminalNode LBR() { return
getToken(NCIntentDslParser.LBR, 0); }
+ public IdContext id() {
+ return getRuleContext(IdContext.class,0);
+ }
+ public TerminalNode RBR() { return
getToken(NCIntentDslParser.RBR, 0); }
+ public AliasContext(ParserRuleContext parent, int
invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_alias; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof NCIntentDslListener )
((NCIntentDslListener)listener).enterAlias(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof NCIntentDslListener )
((NCIntentDslListener)listener).exitAlias(this);
+ }
+ }
+
+ public final AliasContext alias() throws RecognitionException {
+ AliasContext _localctx = new AliasContext(_ctx, getState());
+ enterRule(_localctx, 4, RULE_alias);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(79);
+ match(LBR);
+ setState(80);
+ id();
+ setState(81);
+ match(RBR);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class DslItemsContext extends ParserRuleContext {
public DslItemContext dslItem() {
return getRuleContext(DslItemContext.class,0);
@@ -187,20 +294,20 @@ public class NCIntentDslParser extends Parser {
int _parentState = getState();
DslItemsContext _localctx = new DslItemsContext(_ctx,
_parentState);
DslItemsContext _prevctx = _localctx;
- int _startState = 2;
- enterRecursionRule(_localctx, 2, RULE_dslItems, _p);
+ int _startState = 6;
+ enterRecursionRule(_localctx, 6, RULE_dslItems, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(68);
+ setState(84);
dslItem();
}
_ctx.stop = _input.LT(-1);
- setState(74);
+ setState(90);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,0,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,1,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
@@ -209,16 +316,16 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
DslItemsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx,
_startState, RULE_dslItems);
- setState(70);
+ setState(86);
if (!(precpred(_ctx, 1))) throw new
FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(71);
+ setState(87);
dslItem();
}
}
}
- setState(76);
+ setState(92);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,0,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,1,_ctx);
}
}
}
@@ -256,22 +363,22 @@ public class NCIntentDslParser extends Parser {
public final DslItemContext dslItem() throws RecognitionException {
DslItemContext _localctx = new DslItemContext(_ctx, getState());
- enterRule(_localctx, 4, RULE_dslItem);
+ enterRule(_localctx, 8, RULE_dslItem);
try {
- setState(79);
+ setState(95);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__0:
enterOuterAlt(_localctx, 1);
{
- setState(77);
+ setState(93);
intent();
}
break;
case FRAG:
enterOuterAlt(_localctx, 2);
{
- setState(78);
+ setState(94);
frag();
}
break;
@@ -313,13 +420,13 @@ public class NCIntentDslParser extends Parser {
public final FragContext frag() throws RecognitionException {
FragContext _localctx = new FragContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_frag);
+ enterRule(_localctx, 10, RULE_frag);
try {
enterOuterAlt(_localctx, 1);
{
- setState(81);
+ setState(97);
fragId();
- setState(82);
+ setState(98);
terms(0);
}
}
@@ -356,15 +463,15 @@ public class NCIntentDslParser extends Parser {
public final FragIdContext fragId() throws RecognitionException {
FragIdContext _localctx = new FragIdContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_fragId);
+ enterRule(_localctx, 12, RULE_fragId);
try {
enterOuterAlt(_localctx, 1);
{
- setState(84);
+ setState(100);
match(FRAG);
- setState(85);
+ setState(101);
match(ASSIGN);
- setState(86);
+ setState(102);
id();
}
}
@@ -405,28 +512,28 @@ public class NCIntentDslParser extends Parser {
public final FragRefContext fragRef() throws RecognitionException {
FragRefContext _localctx = new FragRefContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_fragRef);
+ enterRule(_localctx, 14, RULE_fragRef);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(88);
+ setState(104);
match(FRAG);
- setState(89);
+ setState(105);
match(LPAR);
- setState(90);
+ setState(106);
id();
- setState(92);
+ setState(108);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(91);
+ setState(107);
fragMeta();
}
}
- setState(94);
+ setState(110);
match(RPAR);
}
}
@@ -462,13 +569,13 @@ public class NCIntentDslParser extends Parser {
public final FragMetaContext fragMeta() throws RecognitionException {
FragMetaContext _localctx = new FragMetaContext(_ctx,
getState());
- enterRule(_localctx, 12, RULE_fragMeta);
+ enterRule(_localctx, 16, RULE_fragMeta);
try {
enterOuterAlt(_localctx, 1);
{
- setState(96);
+ setState(112);
match(COMMA);
- setState(97);
+ setState(113);
jsonObj();
}
}
@@ -515,44 +622,44 @@ public class NCIntentDslParser extends Parser {
public final IntentContext intent() throws RecognitionException {
IntentContext _localctx = new IntentContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_intent);
+ enterRule(_localctx, 18, RULE_intent);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(99);
+ setState(115);
intentId();
- setState(101);
+ setState(117);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__1) {
{
- setState(100);
+ setState(116);
orderedDecl();
}
}
- setState(104);
+ setState(120);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__2) {
{
- setState(103);
+ setState(119);
flowDecl();
}
}
- setState(107);
+ setState(123);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__3) {
{
- setState(106);
+ setState(122);
metaDecl();
}
}
- setState(109);
+ setState(125);
terms(0);
}
}
@@ -588,15 +695,15 @@ public class NCIntentDslParser extends Parser {
public final IntentIdContext intentId() throws RecognitionException {
IntentIdContext _localctx = new IntentIdContext(_ctx,
getState());
- enterRule(_localctx, 16, RULE_intentId);
+ enterRule(_localctx, 20, RULE_intentId);
try {
enterOuterAlt(_localctx, 1);
{
- setState(111);
+ setState(127);
match(T__0);
- setState(112);
+ setState(128);
match(ASSIGN);
- setState(113);
+ setState(129);
id();
}
}
@@ -630,15 +737,15 @@ public class NCIntentDslParser extends Parser {
public final OrderedDeclContext orderedDecl() throws
RecognitionException {
OrderedDeclContext _localctx = new OrderedDeclContext(_ctx,
getState());
- enterRule(_localctx, 18, RULE_orderedDecl);
+ enterRule(_localctx, 22, RULE_orderedDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(115);
+ setState(131);
match(T__1);
- setState(116);
+ setState(132);
match(ASSIGN);
- setState(117);
+ setState(133);
match(BOOL);
}
}
@@ -677,15 +784,15 @@ public class NCIntentDslParser extends Parser {
public final MtdDeclContext mtdDecl() throws RecognitionException {
MtdDeclContext _localctx = new MtdDeclContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_mtdDecl);
+ enterRule(_localctx, 24, RULE_mtdDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(119);
+ setState(135);
match(DIV);
- setState(120);
+ setState(136);
mtdRef();
- setState(121);
+ setState(137);
match(DIV);
}
}
@@ -724,27 +831,27 @@ public class NCIntentDslParser extends Parser {
public final FlowDeclContext flowDecl() throws RecognitionException {
FlowDeclContext _localctx = new FlowDeclContext(_ctx,
getState());
- enterRule(_localctx, 22, RULE_flowDecl);
+ enterRule(_localctx, 26, RULE_flowDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(123);
+ setState(139);
match(T__2);
- setState(124);
+ setState(140);
match(ASSIGN);
- setState(127);
+ setState(143);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SQSTRING:
case DQSTRING:
{
- setState(125);
+ setState(141);
qstring();
}
break;
case DIV:
{
- setState(126);
+ setState(142);
mtdDecl();
}
break;
@@ -785,15 +892,15 @@ public class NCIntentDslParser extends Parser {
public final MetaDeclContext metaDecl() throws RecognitionException {
MetaDeclContext _localctx = new MetaDeclContext(_ctx,
getState());
- enterRule(_localctx, 24, RULE_metaDecl);
+ enterRule(_localctx, 28, RULE_metaDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(129);
+ setState(145);
match(T__3);
- setState(130);
+ setState(146);
match(ASSIGN);
- setState(131);
+ setState(147);
jsonObj();
}
}
@@ -837,45 +944,45 @@ public class NCIntentDslParser extends Parser {
public final JsonObjContext jsonObj() throws RecognitionException {
JsonObjContext _localctx = new JsonObjContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_jsonObj);
+ enterRule(_localctx, 30, RULE_jsonObj);
int _la;
try {
- setState(146);
+ setState(162);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,8,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,9,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(133);
+ setState(149);
match(LBRACE);
- setState(134);
+ setState(150);
jsonPair();
- setState(139);
+ setState(155);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(135);
+ setState(151);
match(COMMA);
- setState(136);
+ setState(152);
jsonPair();
}
}
- setState(141);
+ setState(157);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(142);
+ setState(158);
match(RBRACE);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(144);
+ setState(160);
match(LBRACE);
- setState(145);
+ setState(161);
match(RBRACE);
}
break;
@@ -916,15 +1023,15 @@ public class NCIntentDslParser extends Parser {
public final JsonPairContext jsonPair() throws RecognitionException {
JsonPairContext _localctx = new JsonPairContext(_ctx,
getState());
- enterRule(_localctx, 28, RULE_jsonPair);
+ enterRule(_localctx, 32, RULE_jsonPair);
try {
enterOuterAlt(_localctx, 1);
{
- setState(148);
+ setState(164);
qstring();
- setState(149);
+ setState(165);
match(COLON);
- setState(150);
+ setState(166);
jsonVal();
}
}
@@ -971,17 +1078,17 @@ public class NCIntentDslParser extends Parser {
public final JsonValContext jsonVal() throws RecognitionException {
JsonValContext _localctx = new JsonValContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_jsonVal);
+ enterRule(_localctx, 34, RULE_jsonVal);
int _la;
try {
- setState(167);
+ setState(183);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SQSTRING:
case DQSTRING:
enterOuterAlt(_localctx, 1);
{
- setState(152);
+ setState(168);
qstring();
}
break;
@@ -989,34 +1096,34 @@ public class NCIntentDslParser extends Parser {
case INT:
enterOuterAlt(_localctx, 2);
{
- setState(154);
+ setState(170);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==MINUS) {
{
- setState(153);
+ setState(169);
match(MINUS);
}
}
- setState(156);
+ setState(172);
match(INT);
- setState(158);
+ setState(174);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==REAL) {
{
- setState(157);
+ setState(173);
match(REAL);
}
}
- setState(161);
+ setState(177);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==EXP) {
{
- setState(160);
+ setState(176);
match(EXP);
}
}
@@ -1026,28 +1133,28 @@ public class NCIntentDslParser extends Parser {
case LBRACE:
enterOuterAlt(_localctx, 3);
{
- setState(163);
+ setState(179);
jsonObj();
}
break;
case LBR:
enterOuterAlt(_localctx, 4);
{
- setState(164);
+ setState(180);
jsonArr();
}
break;
case BOOL:
enterOuterAlt(_localctx, 5);
{
- setState(165);
+ setState(181);
match(BOOL);
}
break;
case NULL:
enterOuterAlt(_localctx, 6);
{
- setState(166);
+ setState(182);
match(NULL);
}
break;
@@ -1095,45 +1202,45 @@ public class NCIntentDslParser extends Parser {
public final JsonArrContext jsonArr() throws RecognitionException {
JsonArrContext _localctx = new JsonArrContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_jsonArr);
+ enterRule(_localctx, 36, RULE_jsonArr);
int _la;
try {
- setState(182);
+ setState(198);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,14,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,15,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(169);
+ setState(185);
match(LBR);
- setState(170);
+ setState(186);
jsonVal();
- setState(175);
+ setState(191);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(171);
+ setState(187);
match(COMMA);
- setState(172);
+ setState(188);
jsonVal();
}
}
- setState(177);
+ setState(193);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(178);
+ setState(194);
match(RBR);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(180);
+ setState(196);
match(LBR);
- setState(181);
+ setState(197);
match(RBR);
}
break;
@@ -1180,20 +1287,20 @@ public class NCIntentDslParser extends Parser {
int _parentState = getState();
TermsContext _localctx = new TermsContext(_ctx, _parentState);
TermsContext _prevctx = _localctx;
- int _startState = 34;
- enterRecursionRule(_localctx, 34, RULE_terms, _p);
+ int _startState = 38;
+ enterRecursionRule(_localctx, 38, RULE_terms, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(185);
+ setState(201);
termItem();
}
_ctx.stop = _input.LT(-1);
- setState(191);
+ setState(207);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,15,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
@@ -1202,16 +1309,16 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
TermsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx,
_startState, RULE_terms);
- setState(187);
+ setState(203);
if (!(precpred(_ctx, 1))) throw new
FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(188);
+ setState(204);
termItem();
}
}
}
- setState(193);
+ setState(209);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,15,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,16,_ctx);
}
}
}
@@ -1249,22 +1356,22 @@ public class NCIntentDslParser extends Parser {
public final TermItemContext termItem() throws RecognitionException {
TermItemContext _localctx = new TermItemContext(_ctx,
getState());
- enterRule(_localctx, 36, RULE_termItem);
+ enterRule(_localctx, 40, RULE_termItem);
try {
- setState(196);
+ setState(212);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__4:
enterOuterAlt(_localctx, 1);
{
- setState(194);
+ setState(210);
term();
}
break;
case FRAG:
enterOuterAlt(_localctx, 2);
{
- setState(195);
+ setState(211);
fragRef();
}
break;
@@ -1302,12 +1409,12 @@ public class NCIntentDslParser extends Parser {
public final TermEqContext termEq() throws RecognitionException {
TermEqContext _localctx = new TermEqContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_termEq);
+ enterRule(_localctx, 42, RULE_termEq);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(198);
+ setState(214);
_la = _input.LA(1);
if ( !(_la==TILDA || _la==ASSIGN) ) {
_errHandler.recoverInline(this);
@@ -1364,55 +1471,55 @@ public class NCIntentDslParser extends Parser {
public final TermContext term() throws RecognitionException {
TermContext _localctx = new TermContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_term);
+ enterRule(_localctx, 44, RULE_term);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(200);
+ setState(216);
match(T__4);
- setState(202);
+ setState(218);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==LPAR) {
{
- setState(201);
+ setState(217);
termId();
}
}
- setState(204);
+ setState(220);
termEq();
- setState(210);
+ setState(226);
_errHandler.sync(this);
switch (_input.LA(1)) {
case LBRACE:
{
{
- setState(205);
+ setState(221);
match(LBRACE);
- setState(206);
+ setState(222);
expr(0);
- setState(207);
+ setState(223);
match(RBRACE);
}
}
break;
case DIV:
{
- setState(209);
+ setState(225);
mtdDecl();
}
break;
default:
throw new NoViableAltException(this);
}
- setState(213);
+ setState(229);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,19,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,20,_ctx) ) {
case 1:
{
- setState(212);
+ setState(228);
minMax();
}
break;
@@ -1454,24 +1561,24 @@ public class NCIntentDslParser extends Parser {
public final MtdRefContext mtdRef() throws RecognitionException {
MtdRefContext _localctx = new MtdRefContext(_ctx, getState());
- enterRule(_localctx, 42, RULE_mtdRef);
+ enterRule(_localctx, 46, RULE_mtdRef);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(216);
+ setState(232);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==FUN_NAME || _la==ID) {
{
- setState(215);
+ setState(231);
javaFqn(0);
}
}
- setState(218);
+ setState(234);
match(POUND);
- setState(219);
+ setState(235);
id();
}
}
@@ -1517,20 +1624,20 @@ public class NCIntentDslParser extends Parser {
int _parentState = getState();
JavaFqnContext _localctx = new JavaFqnContext(_ctx,
_parentState);
JavaFqnContext _prevctx = _localctx;
- int _startState = 44;
- enterRecursionRule(_localctx, 44, RULE_javaFqn, _p);
+ int _startState = 48;
+ enterRecursionRule(_localctx, 48, RULE_javaFqn, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(222);
+ setState(238);
id();
}
_ctx.stop = _input.LT(-1);
- setState(229);
+ setState(245);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
@@ -1539,18 +1646,18 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
JavaFqnContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx,
_startState, RULE_javaFqn);
- setState(224);
+ setState(240);
if (!(precpred(_ctx, 1))) throw new
FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(225);
+ setState(241);
match(DOT);
- setState(226);
+ setState(242);
id();
}
}
}
- setState(231);
+ setState(247);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,22,_ctx);
}
}
}
@@ -1587,15 +1694,15 @@ public class NCIntentDslParser extends Parser {
public final TermIdContext termId() throws RecognitionException {
TermIdContext _localctx = new TermIdContext(_ctx, getState());
- enterRule(_localctx, 46, RULE_termId);
+ enterRule(_localctx, 50, RULE_termId);
try {
enterOuterAlt(_localctx, 1);
{
- setState(232);
+ setState(248);
match(LPAR);
- setState(233);
+ setState(249);
id();
- setState(234);
+ setState(250);
match(RPAR);
}
}
@@ -1798,14 +1905,14 @@ public class NCIntentDslParser extends Parser {
int _parentState = getState();
ExprContext _localctx = new ExprContext(_ctx, _parentState);
ExprContext _prevctx = _localctx;
- int _startState = 48;
- enterRecursionRule(_localctx, 48, RULE_expr, _p);
+ int _startState = 52;
+ enterRecursionRule(_localctx, 52, RULE_expr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(250);
+ setState(266);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NOT:
@@ -1815,7 +1922,7 @@ public class NCIntentDslParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(237);
+ setState(253);
((UnaryExprContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==NOT || _la==MINUS) ) {
@@ -1826,7 +1933,7 @@ public class NCIntentDslParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(238);
+ setState(254);
expr(9);
}
break;
@@ -1835,11 +1942,11 @@ public class NCIntentDslParser extends Parser {
_localctx = new ParExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(239);
+ setState(255);
match(LPAR);
- setState(240);
+ setState(256);
expr(0);
- setState(241);
+ setState(257);
match(RPAR);
}
break;
@@ -1852,7 +1959,7 @@ public class NCIntentDslParser extends Parser {
_localctx = new AtomExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(243);
+ setState(259);
atom();
}
break;
@@ -1861,21 +1968,21 @@ public class NCIntentDslParser extends Parser {
_localctx = new CallExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(244);
+ setState(260);
match(FUN_NAME);
- setState(245);
+ setState(261);
match(LPAR);
- setState(247);
+ setState(263);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) &
((1L << FUN_NAME) | (1L << SQSTRING) | (1L << DQSTRING) | (1L << BOOL) | (1L <<
NULL) | (1L << NOT) | (1L << LPAR) | (1L << MINUS) | (1L << INT))) != 0)) {
{
- setState(246);
+ setState(262);
paramList(0);
}
}
- setState(249);
+ setState(265);
match(RPAR);
}
break;
@@ -1883,24 +1990,24 @@ public class NCIntentDslParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(269);
+ setState(285);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(267);
+ setState(283);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,24,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,25,_ctx) ) {
case 1:
{
_localctx = new
MultExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(252);
+ setState(268);
if (!(precpred(_ctx, 7))) throw
new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(253);
+ setState(269);
((MultExprContext)_localctx).op
= _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 &&
((1L << _la) & ((1L << MULT) | (1L << DIV) | (1L << MOD))) != 0)) ) {
@@ -1911,7 +2018,7 @@ public class NCIntentDslParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(254);
+ setState(270);
expr(8);
}
break;
@@ -1919,9 +2026,9 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
PlusExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(255);
+ setState(271);
if (!(precpred(_ctx, 6))) throw
new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(256);
+ setState(272);
((PlusExprContext)_localctx).op
= _input.LT(1);
_la = _input.LA(1);
if ( !(_la==MINUS || _la==PLUS)
) {
@@ -1932,7 +2039,7 @@ public class NCIntentDslParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(257);
+ setState(273);
expr(7);
}
break;
@@ -1940,9 +2047,9 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
CompExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(258);
+ setState(274);
if (!(precpred(_ctx, 5))) throw
new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(259);
+ setState(275);
((CompExprContext)_localctx).op
= _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 &&
((1L << _la) & ((1L << GTEQ) | (1L << LTEQ) | (1L << GT) | (1L << LT))) != 0))
) {
@@ -1953,7 +2060,7 @@ public class NCIntentDslParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(260);
+ setState(276);
expr(6);
}
break;
@@ -1961,9 +2068,9 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
EqExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(261);
+ setState(277);
if (!(precpred(_ctx, 4))) throw
new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(262);
+ setState(278);
((EqExprContext)_localctx).op =
_input.LT(1);
_la = _input.LA(1);
if ( !(_la==EQ || _la==NEQ) ) {
@@ -1974,7 +2081,7 @@ public class NCIntentDslParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(263);
+ setState(279);
expr(5);
}
break;
@@ -1982,9 +2089,9 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
LogExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(264);
+ setState(280);
if (!(precpred(_ctx, 3))) throw
new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(265);
+ setState(281);
((LogExprContext)_localctx).op
= _input.LT(1);
_la = _input.LA(1);
if ( !(_la==AND || _la==OR) ) {
@@ -1995,16 +2102,16 @@ public class NCIntentDslParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(266);
+ setState(282);
expr(4);
}
break;
}
}
}
- setState(271);
+ setState(287);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,25,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,26,_ctx);
}
}
}
@@ -2050,20 +2157,20 @@ public class NCIntentDslParser extends Parser {
int _parentState = getState();
ParamListContext _localctx = new ParamListContext(_ctx,
_parentState);
ParamListContext _prevctx = _localctx;
- int _startState = 50;
- enterRecursionRule(_localctx, 50, RULE_paramList, _p);
+ int _startState = 54;
+ enterRecursionRule(_localctx, 54, RULE_paramList, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(273);
+ setState(289);
expr(0);
}
_ctx.stop = _input.LT(-1);
- setState(280);
+ setState(296);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,26,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,27,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
@@ -2072,18 +2179,18 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
ParamListContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx,
_startState, RULE_paramList);
- setState(275);
+ setState(291);
if (!(precpred(_ctx, 1))) throw new
FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(276);
+ setState(292);
match(COMMA);
- setState(277);
+ setState(293);
expr(0);
}
}
}
- setState(282);
+ setState(298);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,26,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,27,_ctx);
}
}
}
@@ -2123,39 +2230,39 @@ public class NCIntentDslParser extends Parser {
public final AtomContext atom() throws RecognitionException {
AtomContext _localctx = new AtomContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_atom);
+ enterRule(_localctx, 56, RULE_atom);
try {
- setState(293);
+ setState(309);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NULL:
enterOuterAlt(_localctx, 1);
{
- setState(283);
+ setState(299);
match(NULL);
}
break;
case INT:
enterOuterAlt(_localctx, 2);
{
- setState(284);
+ setState(300);
match(INT);
- setState(286);
+ setState(302);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,27,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,28,_ctx) ) {
case 1:
{
- setState(285);
+ setState(301);
match(REAL);
}
break;
}
- setState(289);
+ setState(305);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,28,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,29,_ctx) ) {
case 1:
{
- setState(288);
+ setState(304);
match(EXP);
}
break;
@@ -2165,7 +2272,7 @@ public class NCIntentDslParser extends Parser {
case BOOL:
enterOuterAlt(_localctx, 3);
{
- setState(291);
+ setState(307);
match(BOOL);
}
break;
@@ -2173,7 +2280,7 @@ public class NCIntentDslParser extends Parser {
case DQSTRING:
enterOuterAlt(_localctx, 4);
{
- setState(292);
+ setState(308);
qstring();
}
break;
@@ -2211,12 +2318,12 @@ public class NCIntentDslParser extends Parser {
public final QstringContext qstring() throws RecognitionException {
QstringContext _localctx = new QstringContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_qstring);
+ enterRule(_localctx, 58, RULE_qstring);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(295);
+ setState(311);
_la = _input.LA(1);
if ( !(_la==SQSTRING || _la==DQSTRING) ) {
_errHandler.recoverInline(this);
@@ -2262,9 +2369,9 @@ public class NCIntentDslParser extends Parser {
public final MinMaxContext minMax() throws RecognitionException {
MinMaxContext _localctx = new MinMaxContext(_ctx, getState());
- enterRule(_localctx, 56, RULE_minMax);
+ enterRule(_localctx, 60, RULE_minMax);
try {
- setState(299);
+ setState(315);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PLUS:
@@ -2272,14 +2379,14 @@ public class NCIntentDslParser extends Parser {
case MULT:
enterOuterAlt(_localctx, 1);
{
- setState(297);
+ setState(313);
minMaxShortcut();
}
break;
case LBR:
enterOuterAlt(_localctx, 2);
{
- setState(298);
+ setState(314);
minMaxRange();
}
break;
@@ -2318,12 +2425,12 @@ public class NCIntentDslParser extends Parser {
public final MinMaxShortcutContext minMaxShortcut() throws
RecognitionException {
MinMaxShortcutContext _localctx = new
MinMaxShortcutContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_minMaxShortcut);
+ enterRule(_localctx, 62, RULE_minMaxShortcut);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(301);
+ setState(317);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L <<
PLUS) | (1L << QUESTION) | (1L << MULT))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2370,19 +2477,19 @@ public class NCIntentDslParser extends Parser {
public final MinMaxRangeContext minMaxRange() throws
RecognitionException {
MinMaxRangeContext _localctx = new MinMaxRangeContext(_ctx,
getState());
- enterRule(_localctx, 60, RULE_minMaxRange);
+ enterRule(_localctx, 64, RULE_minMaxRange);
try {
enterOuterAlt(_localctx, 1);
{
- setState(303);
+ setState(319);
match(LBR);
- setState(304);
+ setState(320);
match(INT);
- setState(305);
+ setState(321);
match(COMMA);
- setState(306);
+ setState(322);
match(INT);
- setState(307);
+ setState(323);
match(RBR);
}
}
@@ -2416,12 +2523,12 @@ public class NCIntentDslParser extends Parser {
public final IdContext id() throws RecognitionException {
IdContext _localctx = new IdContext(_ctx, getState());
- enterRule(_localctx, 62, RULE_id);
+ enterRule(_localctx, 66, RULE_id);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(309);
+ setState(325);
_la = _input.LA(1);
if ( !(_la==FUN_NAME || _la==ID) ) {
_errHandler.recoverInline(this);
@@ -2446,15 +2553,15 @@ public class NCIntentDslParser extends Parser {
public boolean sempred(RuleContext _localctx, int ruleIndex, int
predIndex) {
switch (ruleIndex) {
- case 1:
+ case 3:
return dslItems_sempred((DslItemsContext)_localctx,
predIndex);
- case 17:
+ case 19:
return terms_sempred((TermsContext)_localctx,
predIndex);
- case 22:
- return javaFqn_sempred((JavaFqnContext)_localctx,
predIndex);
case 24:
+ return javaFqn_sempred((JavaFqnContext)_localctx,
predIndex);
+ case 26:
return expr_sempred((ExprContext)_localctx, predIndex);
- case 25:
+ case 27:
return paramList_sempred((ParamListContext)_localctx,
predIndex);
}
return true;
@@ -2504,114 +2611,120 @@ public class NCIntentDslParser extends Parser {
}
public static final String _serializedATN =
-
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\64\u013a\4\2\t\2"+
+
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\64\u014a\4\2\t\2"+
"\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4
\t \4!"+
-
"\t!\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\7\3K\n\3\f\3\16\3N\13\3\3\4\3\4\5"+
-
"\4R\n\4\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\5\7_\n\7\3\7\3\7\3"+
-
"\b\3\b\3\b\3\t\3\t\5\th\n\t\3\t\5\tk\n\t\3\t\5\tn\n\t\3\t\3\t\3\n\3\n"+
-
"\3\n\3\n\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\5\r\u0082"+
-
"\n\r\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\7\17\u008c\n\17\f\17\16\17"+
-
"\u008f\13\17\3\17\3\17\3\17\3\17\5\17\u0095\n\17\3\20\3\20\3\20\3\20\3"+
-
"\21\3\21\5\21\u009d\n\21\3\21\3\21\5\21\u00a1\n\21\3\21\5\21\u00a4\n\21"+
-
"\3\21\3\21\3\21\3\21\5\21\u00aa\n\21\3\22\3\22\3\22\3\22\7\22\u00b0\n"+
-
"\22\f\22\16\22\u00b3\13\22\3\22\3\22\3\22\3\22\5\22\u00b9\n\22\3\23\3"+
-
"\23\3\23\3\23\3\23\7\23\u00c0\n\23\f\23\16\23\u00c3\13\23\3\24\3\24\5"+
-
"\24\u00c7\n\24\3\25\3\25\3\26\3\26\5\26\u00cd\n\26\3\26\3\26\3\26\3\26"+
-
"\3\26\3\26\5\26\u00d5\n\26\3\26\5\26\u00d8\n\26\3\27\5\27\u00db\n\27\3"+
-
"\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\7\30\u00e6\n\30\f\30\16\30"+
-
"\u00e9\13\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3"+
-
"\32\3\32\3\32\3\32\5\32\u00fa\n\32\3\32\5\32\u00fd\n\32\3\32\3\32\3\32"+
-
"\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\7\32\u010e"+
-
"\n\32\f\32\16\32\u0111\13\32\3\33\3\33\3\33\3\33\3\33\3\33\7\33\u0119"+
-
"\n\33\f\33\16\33\u011c\13\33\3\34\3\34\3\34\5\34\u0121\n\34\3\34\5\34"+
-
"\u0124\n\34\3\34\3\34\5\34\u0128\n\34\3\35\3\35\3\36\3\36\5\36\u012e\n"+
- "\36\3\37\3\37\3 \3 \3 \3 \3 \3
\3!\3!\3!\2\7\4$.\62\64\"\2\4\6\b\n\f\16"+
- "\20\22\24\26\30\32\34\36
\"$&(*,.\60\62\64\668:<>@\2\f\4\2\36\36\'\'\4"+
-
"\2\27\27$$\3\2*,\4\2$$((\3\2\20\23\3\2\16\17\3\2\24\25\3\2\n\13\3\2(*"+
-
"\4\2\b\b\61\61\2\u0143\2B\3\2\2\2\4E\3\2\2\2\6Q\3\2\2\2\bS\3\2\2\2\nV"+
-
"\3\2\2\2\fZ\3\2\2\2\16b\3\2\2\2\20e\3\2\2\2\22q\3\2\2\2\24u\3\2\2\2\26"+
-
"y\3\2\2\2\30}\3\2\2\2\32\u0083\3\2\2\2\34\u0094\3\2\2\2\36\u0096\3\2\2"+
- "\2
\u00a9\3\2\2\2\"\u00b8\3\2\2\2$\u00ba\3\2\2\2&\u00c6\3\2\2\2(\u00c8"+
-
"\3\2\2\2*\u00ca\3\2\2\2,\u00da\3\2\2\2.\u00df\3\2\2\2\60\u00ea\3\2\2\2"+
-
"\62\u00fc\3\2\2\2\64\u0112\3\2\2\2\66\u0127\3\2\2\28\u0129\3\2\2\2:\u012d"+
-
"\3\2\2\2<\u012f\3\2\2\2>\u0131\3\2\2\2@\u0137\3\2\2\2BC\5\4\3\2CD\7\2"+
-
"\2\3D\3\3\2\2\2EF\b\3\1\2FG\5\6\4\2GL\3\2\2\2HI\f\3\2\2IK\5\6\4\2JH\3"+
-
"\2\2\2KN\3\2\2\2LJ\3\2\2\2LM\3\2\2\2M\5\3\2\2\2NL\3\2\2\2OR\5\20\t\2P"+
-
"R\5\b\5\2QO\3\2\2\2QP\3\2\2\2R\7\3\2\2\2ST\5\n\6\2TU\5$\23\2U\t\3\2\2"+
-
"\2VW\7\t\2\2WX\7\'\2\2XY\5@!\2Y\13\3\2\2\2Z[\7\t\2\2[\\\7\30\2\2\\^\5"+
-
"@!\2]_\5\16\b\2^]\3\2\2\2^_\3\2\2\2_`\3\2\2\2`a\7\31\2\2a\r\3\2\2\2bc"+
-
"\7\"\2\2cd\5\34\17\2d\17\3\2\2\2eg\5\22\n\2fh\5\24\13\2gf\3\2\2\2gh\3"+
-
"\2\2\2hj\3\2\2\2ik\5\30\r\2ji\3\2\2\2jk\3\2\2\2km\3\2\2\2ln\5\32\16\2"+
-
"ml\3\2\2\2mn\3\2\2\2no\3\2\2\2op\5$\23\2p\21\3\2\2\2qr\7\3\2\2rs\7\'\2"+
-
"\2st\5@!\2t\23\3\2\2\2uv\7\4\2\2vw\7\'\2\2wx\7\f\2\2x\25\3\2\2\2yz\7+"+
-
"\2\2z{\5,\27\2{|\7+\2\2|\27\3\2\2\2}~\7\5\2\2~\u0081\7\'\2\2\177\u0082"+
-
"\58\35\2\u0080\u0082\5\26\f\2\u0081\177\3\2\2\2\u0081\u0080\3\2\2\2\u0082"+
-
"\31\3\2\2\2\u0083\u0084\7\6\2\2\u0084\u0085\7\'\2\2\u0085\u0086\5\34\17"+
-
"\2\u0086\33\3\2\2\2\u0087\u0088\7\32\2\2\u0088\u008d\5\36\20\2\u0089\u008a"+
-
"\7\"\2\2\u008a\u008c\5\36\20\2\u008b\u0089\3\2\2\2\u008c\u008f\3\2\2\2"+
-
"\u008d\u008b\3\2\2\2\u008d\u008e\3\2\2\2\u008e\u0090\3\2\2\2\u008f\u008d"+
-
"\3\2\2\2\u0090\u0091\7\33\2\2\u0091\u0095\3\2\2\2\u0092\u0093\7\32\2\2"+
-
"\u0093\u0095\7\33\2\2\u0094\u0087\3\2\2\2\u0094\u0092\3\2\2\2\u0095\35"+
- "\3\2\2\2\u0096\u0097\58\35\2\u0097\u0098\7#\2\2\u0098\u0099\5
\21\2\u0099"+
-
"\37\3\2\2\2\u009a\u00aa\58\35\2\u009b\u009d\7$\2\2\u009c\u009b\3\2\2\2"+
-
"\u009c\u009d\3\2\2\2\u009d\u009e\3\2\2\2\u009e\u00a0\7.\2\2\u009f\u00a1"+
-
"\7/\2\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a3\3\2\2\2\u00a2"+
-
"\u00a4\7\60\2\2\u00a3\u00a2\3\2\2\2\u00a3\u00a4\3\2\2\2\u00a4\u00aa\3"+
-
"\2\2\2\u00a5\u00aa\5\34\17\2\u00a6\u00aa\5\"\22\2\u00a7\u00aa\7\f\2\2"+
-
"\u00a8\u00aa\7\r\2\2\u00a9\u009a\3\2\2\2\u00a9\u009c\3\2\2\2\u00a9\u00a5"+
-
"\3\2\2\2\u00a9\u00a6\3\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00a8\3\2\2\2\u00aa"+
- "!\3\2\2\2\u00ab\u00ac\7\37\2\2\u00ac\u00b1\5
\21\2\u00ad\u00ae\7\"\2\2"+
- "\u00ae\u00b0\5
\21\2\u00af\u00ad\3\2\2\2\u00b0\u00b3\3\2\2\2\u00b1\u00af"+
-
"\3\2\2\2\u00b1\u00b2\3\2\2\2\u00b2\u00b4\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b4"+
- "\u00b5\7
\2\2\u00b5\u00b9\3\2\2\2\u00b6\u00b7\7\37\2\2\u00b7\u00b9\7 "+
-
"\2\2\u00b8\u00ab\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b9#\3\2\2\2\u00ba\u00bb"+
-
"\b\23\1\2\u00bb\u00bc\5&\24\2\u00bc\u00c1\3\2\2\2\u00bd\u00be\f\3\2\2"+
-
"\u00be\u00c0\5&\24\2\u00bf\u00bd\3\2\2\2\u00c0\u00c3\3\2\2\2\u00c1\u00bf"+
-
"\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2%\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c4"+
-
"\u00c7\5*\26\2\u00c5\u00c7\5\f\7\2\u00c6\u00c4\3\2\2\2\u00c6\u00c5\3\2"+
-
"\2\2\u00c7\'\3\2\2\2\u00c8\u00c9\t\2\2\2\u00c9)\3\2\2\2\u00ca\u00cc\7"+
-
"\7\2\2\u00cb\u00cd\5\60\31\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd"+
-
"\u00ce\3\2\2\2\u00ce\u00d4\5(\25\2\u00cf\u00d0\7\32\2\2\u00d0\u00d1\5"+
-
"\62\32\2\u00d1\u00d2\7\33\2\2\u00d2\u00d5\3\2\2\2\u00d3\u00d5\5\26\f\2"+
-
"\u00d4\u00cf\3\2\2\2\u00d4\u00d3\3\2\2\2\u00d5\u00d7\3\2\2\2\u00d6\u00d8"+
-
"\5:\36\2\u00d7\u00d6\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8+\3\2\2\2\u00d9"+
-
"\u00db\5.\30\2\u00da\u00d9\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\3\2"+
-
"\2\2\u00dc\u00dd\7!\2\2\u00dd\u00de\5@!\2\u00de-\3\2\2\2\u00df\u00e0\b"+
-
"\30\1\2\u00e0\u00e1\5@!\2\u00e1\u00e7\3\2\2\2\u00e2\u00e3\f\3\2\2\u00e3"+
-
"\u00e4\7%\2\2\u00e4\u00e6\5@!\2\u00e5\u00e2\3\2\2\2\u00e6\u00e9\3\2\2"+
-
"\2\u00e7\u00e5\3\2\2\2\u00e7\u00e8\3\2\2\2\u00e8/\3\2\2\2\u00e9\u00e7"+
-
"\3\2\2\2\u00ea\u00eb\7\30\2\2\u00eb\u00ec\5@!\2\u00ec\u00ed\7\31\2\2\u00ed"+
-
"\61\3\2\2\2\u00ee\u00ef\b\32\1\2\u00ef\u00f0\t\3\2\2\u00f0\u00fd\5\62"+
-
"\32\13\u00f1\u00f2\7\30\2\2\u00f2\u00f3\5\62\32\2\u00f3\u00f4\7\31\2\2"+
-
"\u00f4\u00fd\3\2\2\2\u00f5\u00fd\5\66\34\2\u00f6\u00f7\7\b\2\2\u00f7\u00f9"+
-
"\7\30\2\2\u00f8\u00fa\5\64\33\2\u00f9\u00f8\3\2\2\2\u00f9\u00fa\3\2\2"+
-
"\2\u00fa\u00fb\3\2\2\2\u00fb\u00fd\7\31\2\2\u00fc\u00ee\3\2\2\2\u00fc"+
-
"\u00f1\3\2\2\2\u00fc\u00f5\3\2\2\2\u00fc\u00f6\3\2\2\2\u00fd\u010f\3\2"+
-
"\2\2\u00fe\u00ff\f\t\2\2\u00ff\u0100\t\4\2\2\u0100\u010e\5\62\32\n\u0101"+
-
"\u0102\f\b\2\2\u0102\u0103\t\5\2\2\u0103\u010e\5\62\32\t\u0104\u0105\f"+
-
"\7\2\2\u0105\u0106\t\6\2\2\u0106\u010e\5\62\32\b\u0107\u0108\f\6\2\2\u0108"+
-
"\u0109\t\7\2\2\u0109\u010e\5\62\32\7\u010a\u010b\f\5\2\2\u010b\u010c\t"+
-
"\b\2\2\u010c\u010e\5\62\32\6\u010d\u00fe\3\2\2\2\u010d\u0101\3\2\2\2\u010d"+
-
"\u0104\3\2\2\2\u010d\u0107\3\2\2\2\u010d\u010a\3\2\2\2\u010e\u0111\3\2"+
-
"\2\2\u010f\u010d\3\2\2\2\u010f\u0110\3\2\2\2\u0110\63\3\2\2\2\u0111\u010f"+
-
"\3\2\2\2\u0112\u0113\b\33\1\2\u0113\u0114\5\62\32\2\u0114\u011a\3\2\2"+
-
"\2\u0115\u0116\f\3\2\2\u0116\u0117\7\"\2\2\u0117\u0119\5\62\32\2\u0118"+
-
"\u0115\3\2\2\2\u0119\u011c\3\2\2\2\u011a\u0118\3\2\2\2\u011a\u011b\3\2"+
-
"\2\2\u011b\65\3\2\2\2\u011c\u011a\3\2\2\2\u011d\u0128\7\r\2\2\u011e\u0120"+
-
"\7.\2\2\u011f\u0121\7/\2\2\u0120\u011f\3\2\2\2\u0120\u0121\3\2\2\2\u0121"+
-
"\u0123\3\2\2\2\u0122\u0124\7\60\2\2\u0123\u0122\3\2\2\2\u0123\u0124\3"+
-
"\2\2\2\u0124\u0128\3\2\2\2\u0125\u0128\7\f\2\2\u0126\u0128\58\35\2\u0127"+
-
"\u011d\3\2\2\2\u0127\u011e\3\2\2\2\u0127\u0125\3\2\2\2\u0127\u0126\3\2"+
-
"\2\2\u0128\67\3\2\2\2\u0129\u012a\t\t\2\2\u012a9\3\2\2\2\u012b\u012e\5"+
- "<\37\2\u012c\u012e\5>
\2\u012d\u012b\3\2\2\2\u012d\u012c\3\2\2\2\u012e"+
-
";\3\2\2\2\u012f\u0130\t\n\2\2\u0130=\3\2\2\2\u0131\u0132\7\37\2\2\u0132"+
-
"\u0133\7.\2\2\u0133\u0134\7\"\2\2\u0134\u0135\7.\2\2\u0135\u0136\7 \2"+
-
"\2\u0136?\3\2\2\2\u0137\u0138\t\13\2\2\u0138A\3\2\2\2!LQ^gjm\u0081\u008d"+
-
"\u0094\u009c\u00a0\u00a3\u00a9\u00b1\u00b8\u00c1\u00c6\u00cc\u00d4\u00d7"+
-
"\u00da\u00e7\u00f9\u00fc\u010d\u010f\u011a\u0120\u0123\u0127\u012d";
+
"\t!\4\"\t\"\4#\t#\3\2\3\2\3\2\3\3\5\3K\n\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4"+
+
"\3\4\3\4\3\5\3\5\3\5\3\5\3\5\7\5[\n\5\f\5\16\5^\13\5\3\6\3\6\5\6b\n\6"+
+
"\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\5\to\n\t\3\t\3\t\3\n\3\n"+
+
"\3\n\3\13\3\13\5\13x\n\13\3\13\5\13{\n\13\3\13\5\13~\n\13\3\13\3\13\3"+
+
"\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17"+
+
"\5\17\u0092\n\17\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\7\21\u009c\n"+
+
"\21\f\21\16\21\u009f\13\21\3\21\3\21\3\21\3\21\5\21\u00a5\n\21\3\22\3"+
+
"\22\3\22\3\22\3\23\3\23\5\23\u00ad\n\23\3\23\3\23\5\23\u00b1\n\23\3\23"+
+
"\5\23\u00b4\n\23\3\23\3\23\3\23\3\23\5\23\u00ba\n\23\3\24\3\24\3\24\3"+
+
"\24\7\24\u00c0\n\24\f\24\16\24\u00c3\13\24\3\24\3\24\3\24\3\24\5\24\u00c9"+
+
"\n\24\3\25\3\25\3\25\3\25\3\25\7\25\u00d0\n\25\f\25\16\25\u00d3\13\25"+
+
"\3\26\3\26\5\26\u00d7\n\26\3\27\3\27\3\30\3\30\5\30\u00dd\n\30\3\30\3"+
+
"\30\3\30\3\30\3\30\3\30\5\30\u00e5\n\30\3\30\5\30\u00e8\n\30\3\31\5\31"+
+
"\u00eb\n\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\7\32\u00f6\n"+
+
"\32\f\32\16\32\u00f9\13\32\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34"+
+
"\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u010a\n\34\3\34\5\34\u010d\n\34\3"+
+
"\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3"+
+
"\34\7\34\u011e\n\34\f\34\16\34\u0121\13\34\3\35\3\35\3\35\3\35\3\35\3"+
+
"\35\7\35\u0129\n\35\f\35\16\35\u012c\13\35\3\36\3\36\3\36\5\36\u0131\n"+
+ "\36\3\36\5\36\u0134\n\36\3\36\3\36\5\36\u0138\n\36\3\37\3\37\3
\3 \5 "+
+ "\u013e\n
\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\2\7\b(\62\668$\2\4\6"+
+ "\b\n\f\16\20\22\24\26\30\32\34\36
\"$&(*,.\60\62\64\668:<>@BD\2\f\4\2"+
+
"\36\36\'\'\4\2\27\27$$\3\2*,\4\2$$((\3\2\20\23\3\2\16\17\3\2\24\25\3\2"+
+
"\n\13\3\2(*\4\2\b\b\61\61\2\u0152\2F\3\2\2\2\4J\3\2\2\2\6Q\3\2\2\2\bU"+
+
"\3\2\2\2\na\3\2\2\2\fc\3\2\2\2\16f\3\2\2\2\20j\3\2\2\2\22r\3\2\2\2\24"+
+
"u\3\2\2\2\26\u0081\3\2\2\2\30\u0085\3\2\2\2\32\u0089\3\2\2\2\34\u008d"+
+ "\3\2\2\2\36\u0093\3\2\2\2
\u00a4\3\2\2\2\"\u00a6\3\2\2\2$\u00b9\3\2\2"+
+
"\2&\u00c8\3\2\2\2(\u00ca\3\2\2\2*\u00d6\3\2\2\2,\u00d8\3\2\2\2.\u00da"+
+
"\3\2\2\2\60\u00ea\3\2\2\2\62\u00ef\3\2\2\2\64\u00fa\3\2\2\2\66\u010c\3"+
+
"\2\2\28\u0122\3\2\2\2:\u0137\3\2\2\2<\u0139\3\2\2\2>\u013d\3\2\2\2@\u013f"+
+
"\3\2\2\2B\u0141\3\2\2\2D\u0147\3\2\2\2FG\5\b\5\2GH\7\2\2\3H\3\3\2\2\2"+
+
"IK\5\6\4\2JI\3\2\2\2JK\3\2\2\2KL\3\2\2\2LM\7\32\2\2MN\5\66\34\2NO\7\33"+
+ "\2\2OP\7\2\2\3P\5\3\2\2\2QR\7\37\2\2RS\5D#\2ST\7
\2\2T\7\3\2\2\2UV\b\5"+
+
"\1\2VW\5\n\6\2W\\\3\2\2\2XY\f\3\2\2Y[\5\n\6\2ZX\3\2\2\2[^\3\2\2\2\\Z\3"+
+
"\2\2\2\\]\3\2\2\2]\t\3\2\2\2^\\\3\2\2\2_b\5\24\13\2`b\5\f\7\2a_\3\2\2"+
+
"\2a`\3\2\2\2b\13\3\2\2\2cd\5\16\b\2de\5(\25\2e\r\3\2\2\2fg\7\t\2\2gh\7"+
+
"\'\2\2hi\5D#\2i\17\3\2\2\2jk\7\t\2\2kl\7\30\2\2ln\5D#\2mo\5\22\n\2nm\3"+
+
"\2\2\2no\3\2\2\2op\3\2\2\2pq\7\31\2\2q\21\3\2\2\2rs\7\"\2\2st\5 \21\2"+
+
"t\23\3\2\2\2uw\5\26\f\2vx\5\30\r\2wv\3\2\2\2wx\3\2\2\2xz\3\2\2\2y{\5\34"+
+
"\17\2zy\3\2\2\2z{\3\2\2\2{}\3\2\2\2|~\5\36\20\2}|\3\2\2\2}~\3\2\2\2~\177"+
+
"\3\2\2\2\177\u0080\5(\25\2\u0080\25\3\2\2\2\u0081\u0082\7\3\2\2\u0082"+
+
"\u0083\7\'\2\2\u0083\u0084\5D#\2\u0084\27\3\2\2\2\u0085\u0086\7\4\2\2"+
+
"\u0086\u0087\7\'\2\2\u0087\u0088\7\f\2\2\u0088\31\3\2\2\2\u0089\u008a"+
+
"\7+\2\2\u008a\u008b\5\60\31\2\u008b\u008c\7+\2\2\u008c\33\3\2\2\2\u008d"+
+
"\u008e\7\5\2\2\u008e\u0091\7\'\2\2\u008f\u0092\5<\37\2\u0090\u0092\5\32"+
+
"\16\2\u0091\u008f\3\2\2\2\u0091\u0090\3\2\2\2\u0092\35\3\2\2\2\u0093\u0094"+
+ "\7\6\2\2\u0094\u0095\7\'\2\2\u0095\u0096\5
\21\2\u0096\37\3\2\2\2\u0097"+
+
"\u0098\7\32\2\2\u0098\u009d\5\"\22\2\u0099\u009a\7\"\2\2\u009a\u009c\5"+
+
"\"\22\2\u009b\u0099\3\2\2\2\u009c\u009f\3\2\2\2\u009d\u009b\3\2\2\2\u009d"+
+
"\u009e\3\2\2\2\u009e\u00a0\3\2\2\2\u009f\u009d\3\2\2\2\u00a0\u00a1\7\33"+
+
"\2\2\u00a1\u00a5\3\2\2\2\u00a2\u00a3\7\32\2\2\u00a3\u00a5\7\33\2\2\u00a4"+
+
"\u0097\3\2\2\2\u00a4\u00a2\3\2\2\2\u00a5!\3\2\2\2\u00a6\u00a7\5<\37\2"+
+
"\u00a7\u00a8\7#\2\2\u00a8\u00a9\5$\23\2\u00a9#\3\2\2\2\u00aa\u00ba\5<"+
+
"\37\2\u00ab\u00ad\7$\2\2\u00ac\u00ab\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad"+
+
"\u00ae\3\2\2\2\u00ae\u00b0\7.\2\2\u00af\u00b1\7/\2\2\u00b0\u00af\3\2\2"+
+
"\2\u00b0\u00b1\3\2\2\2\u00b1\u00b3\3\2\2\2\u00b2\u00b4\7\60\2\2\u00b3"+
+
"\u00b2\3\2\2\2\u00b3\u00b4\3\2\2\2\u00b4\u00ba\3\2\2\2\u00b5\u00ba\5 "+
+
"\21\2\u00b6\u00ba\5&\24\2\u00b7\u00ba\7\f\2\2\u00b8\u00ba\7\r\2\2\u00b9"+
+
"\u00aa\3\2\2\2\u00b9\u00ac\3\2\2\2\u00b9\u00b5\3\2\2\2\u00b9\u00b6\3\2"+
+
"\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00b8\3\2\2\2\u00ba%\3\2\2\2\u00bb\u00bc"+
+
"\7\37\2\2\u00bc\u00c1\5$\23\2\u00bd\u00be\7\"\2\2\u00be\u00c0\5$\23\2"+
+
"\u00bf\u00bd\3\2\2\2\u00c0\u00c3\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2"+
+ "\3\2\2\2\u00c2\u00c4\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c4\u00c5\7
\2\2\u00c5"+
+ "\u00c9\3\2\2\2\u00c6\u00c7\7\37\2\2\u00c7\u00c9\7
\2\2\u00c8\u00bb\3\2"+
+
"\2\2\u00c8\u00c6\3\2\2\2\u00c9\'\3\2\2\2\u00ca\u00cb\b\25\1\2\u00cb\u00cc"+
+
"\5*\26\2\u00cc\u00d1\3\2\2\2\u00cd\u00ce\f\3\2\2\u00ce\u00d0\5*\26\2\u00cf"+
+
"\u00cd\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d1\u00d2\3\2"+
+
"\2\2\u00d2)\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d4\u00d7\5.\30\2\u00d5\u00d7"+
+
"\5\20\t\2\u00d6\u00d4\3\2\2\2\u00d6\u00d5\3\2\2\2\u00d7+\3\2\2\2\u00d8"+
+
"\u00d9\t\2\2\2\u00d9-\3\2\2\2\u00da\u00dc\7\7\2\2\u00db\u00dd\5\64\33"+
+
"\2\u00dc\u00db\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\u00e4"+
+
"\5,\27\2\u00df\u00e0\7\32\2\2\u00e0\u00e1\5\66\34\2\u00e1\u00e2\7\33\2"+
+
"\2\u00e2\u00e5\3\2\2\2\u00e3\u00e5\5\32\16\2\u00e4\u00df\3\2\2\2\u00e4"+
+ "\u00e3\3\2\2\2\u00e5\u00e7\3\2\2\2\u00e6\u00e8\5>
\2\u00e7\u00e6\3\2\2"+
+
"\2\u00e7\u00e8\3\2\2\2\u00e8/\3\2\2\2\u00e9\u00eb\5\62\32\2\u00ea\u00e9"+
+
"\3\2\2\2\u00ea\u00eb\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\u00ed\7!\2\2\u00ed"+
+
"\u00ee\5D#\2\u00ee\61\3\2\2\2\u00ef\u00f0\b\32\1\2\u00f0\u00f1\5D#\2\u00f1"+
+
"\u00f7\3\2\2\2\u00f2\u00f3\f\3\2\2\u00f3\u00f4\7%\2\2\u00f4\u00f6\5D#"+
+
"\2\u00f5\u00f2\3\2\2\2\u00f6\u00f9\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f7\u00f8"+
+
"\3\2\2\2\u00f8\63\3\2\2\2\u00f9\u00f7\3\2\2\2\u00fa\u00fb\7\30\2\2\u00fb"+
+
"\u00fc\5D#\2\u00fc\u00fd\7\31\2\2\u00fd\65\3\2\2\2\u00fe\u00ff\b\34\1"+
+
"\2\u00ff\u0100\t\3\2\2\u0100\u010d\5\66\34\13\u0101\u0102\7\30\2\2\u0102"+
+
"\u0103\5\66\34\2\u0103\u0104\7\31\2\2\u0104\u010d\3\2\2\2\u0105\u010d"+
+
"\5:\36\2\u0106\u0107\7\b\2\2\u0107\u0109\7\30\2\2\u0108\u010a\58\35\2"+
+
"\u0109\u0108\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010b\3\2\2\2\u010b\u010d"+
+
"\7\31\2\2\u010c\u00fe\3\2\2\2\u010c\u0101\3\2\2\2\u010c\u0105\3\2\2\2"+
+
"\u010c\u0106\3\2\2\2\u010d\u011f\3\2\2\2\u010e\u010f\f\t\2\2\u010f\u0110"+
+
"\t\4\2\2\u0110\u011e\5\66\34\n\u0111\u0112\f\b\2\2\u0112\u0113\t\5\2\2"+
+
"\u0113\u011e\5\66\34\t\u0114\u0115\f\7\2\2\u0115\u0116\t\6\2\2\u0116\u011e"+
+
"\5\66\34\b\u0117\u0118\f\6\2\2\u0118\u0119\t\7\2\2\u0119\u011e\5\66\34"+
+
"\7\u011a\u011b\f\5\2\2\u011b\u011c\t\b\2\2\u011c\u011e\5\66\34\6\u011d"+
+
"\u010e\3\2\2\2\u011d\u0111\3\2\2\2\u011d\u0114\3\2\2\2\u011d\u0117\3\2"+
+
"\2\2\u011d\u011a\3\2\2\2\u011e\u0121\3\2\2\2\u011f\u011d\3\2\2\2\u011f"+
+
"\u0120\3\2\2\2\u0120\67\3\2\2\2\u0121\u011f\3\2\2\2\u0122\u0123\b\35\1"+
+
"\2\u0123\u0124\5\66\34\2\u0124\u012a\3\2\2\2\u0125\u0126\f\3\2\2\u0126"+
+
"\u0127\7\"\2\2\u0127\u0129\5\66\34\2\u0128\u0125\3\2\2\2\u0129\u012c\3"+
+
"\2\2\2\u012a\u0128\3\2\2\2\u012a\u012b\3\2\2\2\u012b9\3\2\2\2\u012c\u012a"+
+
"\3\2\2\2\u012d\u0138\7\r\2\2\u012e\u0130\7.\2\2\u012f\u0131\7/\2\2\u0130"+
+
"\u012f\3\2\2\2\u0130\u0131\3\2\2\2\u0131\u0133\3\2\2\2\u0132\u0134\7\60"+
+
"\2\2\u0133\u0132\3\2\2\2\u0133\u0134\3\2\2\2\u0134\u0138\3\2\2\2\u0135"+
+
"\u0138\7\f\2\2\u0136\u0138\5<\37\2\u0137\u012d\3\2\2\2\u0137\u012e\3\2"+
+
"\2\2\u0137\u0135\3\2\2\2\u0137\u0136\3\2\2\2\u0138;\3\2\2\2\u0139\u013a"+
+
"\t\t\2\2\u013a=\3\2\2\2\u013b\u013e\5@!\2\u013c\u013e\5B\"\2\u013d\u013b"+
+
"\3\2\2\2\u013d\u013c\3\2\2\2\u013e?\3\2\2\2\u013f\u0140\t\n\2\2\u0140"+
+
"A\3\2\2\2\u0141\u0142\7\37\2\2\u0142\u0143\7.\2\2\u0143\u0144\7\"\2\2"+
+ "\u0144\u0145\7.\2\2\u0145\u0146\7
\2\2\u0146C\3\2\2\2\u0147\u0148\t\13"+
+
"\2\2\u0148E\3\2\2\2\"J\\anwz}\u0091\u009d\u00a4\u00ac\u00b0\u00b3\u00b9"+
+
"\u00c1\u00c8\u00d1\u00d6\u00dc\u00e4\u00e7\u00ea\u00f7\u0109\u010c\u011d"+
+ "\u011f\u012a\u0130\u0133\u0137\u013d";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDsl.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslSynonym.scala
similarity index 81%
rename from
nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDsl.scala
rename to
nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslSynonym.scala
index de8784e..8c9ea03 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDsl.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslSynonym.scala
@@ -15,14 +15,17 @@
* limitations under the License.
*/
-package org.apache.nlpcraft.probe.mgrs.model
+package org.apache.nlpcraft.model.intent.utils
import org.apache.nlpcraft.model.NCToken
/**
- * Synonym DSL compilation unit.
+ * DSl synonym.
+ *
+ * @param alias
+ * @param pred
*/
-case class NCModelSynonymDsl(
- alias: String,
- predicate: java.util.function.Function[NCToken, java.lang.Boolean]
+case class NCDslSynonym(
+ alias: Option[String],
+ pred: (NCToken, NCDslTermContext) ⇒ Boolean,
)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.scala
index 58ebb2f..97e8efd 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.scala
@@ -29,7 +29,7 @@ import org.apache.nlpcraft.model.NCToken
* @param conv
*/
case class NCDslTerm(
- id: String, // Could be null.
+ id: Option[String],
pred: (NCToken, NCDslTermContext) ⇒ (Boolean/*Predicate.*/,
Boolean/*Whether or not token was used.*/),
min: Int,
max: Int,
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenChecker.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenChecker.scala
index 24344a2..6bfce61 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenChecker.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenChecker.scala
@@ -23,7 +23,7 @@ import org.apache.nlpcraft.common._
import scala.collection.mutable
/**
- * Scala-based checks.
+ * Token checker.
*/
object NCDslTokenChecker {
/**
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
index e94fdbd..f470529 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
@@ -1473,7 +1473,7 @@ object NCDeployManager extends NCService with
DecorateAsScala {
val mStr = method2Str(m)
// Process inline intent declarations by @NCIntent annotation.
- for (ann ← m.getAnnotationsByType(CLS_INTENT); intent ←
NCIntentDslCompiler.compile(ann.value(), mdl.getId, mStr))
+ for (ann ← m.getAnnotationsByType(CLS_INTENT); intent ←
NCIntentDslCompiler.compileIntent(ann.value(), mdl.getId, mStr))
intents += (intent → prepareCallback(m, mdl, intent))
// Process intent references from @NCIntentRef annotation.
@@ -1485,7 +1485,7 @@ object NCDeployManager extends NCService with
DecorateAsScala {
val compiledIntents = adapter
.getIntents
.asScala
- .flatMap(NCIntentDslCompiler.compile(_, mdl.getId,
mStr))
+ .flatMap(NCIntentDslCompiler.compileIntent(_,
mdl.getId, mStr))
U.getDups(compiledIntents.toSeq.map(_.id)) match {
case ids if ids.nonEmpty ⇒
@@ -1554,7 +1554,7 @@ object NCDeployManager extends NCService with
DecorateAsScala {
val distinct = seqSeq.map(_.distinct).distinct
for (ann ← intAnns) {
- for (intent ← NCIntentDslCompiler.compile(ann.value(),
mdlId, mStr))
+ for (intent ←
NCIntentDslCompiler.compileIntent(ann.value(), mdlId, mStr))
samples += (intent.id → distinct)
}
for (ann ← refAnns)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala
index 2b2b714..92faf7b 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala
@@ -22,7 +22,8 @@ import org.antlr.v4.runtime._
import org.antlr.v4.runtime.tree._
import org.apache.nlpcraft.common._
import org.apache.nlpcraft.model.NCToken
-import org.apache.nlpcraft.model.intent.utils.NCDslTokenPredicate
+import org.apache.nlpcraft.model.intent.utils
+import org.apache.nlpcraft.model.intent.utils._
import org.apache.nlpcraft.probe.mgrs.model.antlr4.{NCSynonymDslBaseListener,
NCSynonymDslLexer, NCSynonymDslParser}
import scala.collection.JavaConverters._
@@ -69,8 +70,8 @@ object NCModelSynonymDslCompiler extends LazyLogging {
*
* @return
*/
- def getCompiledSynonymDsl: NCModelSynonymDsl = {
- NCModelSynonymDsl(alias, toJavaFunc(alias, predStack.pop()))
+ def getCompiledSynonymDsl: NCDslSynonym = {
+ utils.NCDslSynonym(alias, toJavaFunc(alias, predStack.pop()))
}
// override def exitRvalSingle(ctx:
NCSynonymDslParser.RvalSingleContext): Unit = {
@@ -264,7 +265,7 @@ object NCModelSynonymDslCompiler extends LazyLogging {
* @param dsl Synonym DSL to parse.
* @return
*/
- def parse(dsl: String): NCModelSynonymDsl = {
+ def parse(dsl: String): NCDslSynonym = {
require(dsl != null)
// ANTLR4 armature.
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCIntentDslCompilerSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCIntentDslCompilerSpec.scala
index 63d3e68..a7b2d95 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCIntentDslCompilerSpec.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCIntentDslCompilerSpec.scala
@@ -35,7 +35,7 @@ class NCIntentDslCompilerSpec {
*/
private def checkCompileOk(dsl: String): Unit =
try {
- NCIntentDslCompiler.compile(dsl, MODEL_ID)
+ NCIntentDslCompiler.compileIntent(dsl, MODEL_ID)
assert(true)
}
@@ -49,7 +49,7 @@ class NCIntentDslCompilerSpec {
*/
private def checkPathCompileOk(path: Path): Unit =
try {
- NCIntentDslCompiler.compilePath(path, MODEL_ID)
+ NCIntentDslCompiler.compileIntent(path, MODEL_ID)
assert(true)
}
@@ -63,7 +63,7 @@ class NCIntentDslCompilerSpec {
*/
private def checkCompileError(txt: String): Unit =
try {
- NCIntentDslCompiler.compile(txt, MODEL_ID)
+ NCIntentDslCompiler.compileIntent(txt, MODEL_ID)
assert(false)
} catch {
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/test_ok.nc
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/test_ok.nc
index 0042488..cd0a137 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/test_ok.nc
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/test_ok.nc
@@ -21,7 +21,7 @@
// Re-usable predicate #1.
fragment=p1
- term={1 == 2}
+ term={id(part("alias")) == 2}
// Intent #1.
intent=i1