diff --git a/agama/engine/src/main/java/io/jans/agama/engine/script/LogUtils.java b/agama/engine/src/main/java/io/jans/agama/engine/script/LogUtils.java index ba8a7239fde..861a7ed0e3b 100644 --- a/agama/engine/src/main/java/io/jans/agama/engine/script/LogUtils.java +++ b/agama/engine/src/main/java/io/jans/agama/engine/script/LogUtils.java @@ -15,6 +15,8 @@ import io.jans.agama.model.EngineConfig; import io.jans.util.Pair; +import io.jans.service.cdi.util.CdiUtil; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,7 +26,7 @@ public class LogUtils { //MUST be a single character string private static final String PLACEHOLDER = "%"; - private static final int MAX_ITERABLE_ITEMS = ScriptUtils.managedBean(EngineConfig.class) + private static final int MAX_ITERABLE_ITEMS = CdiUtil.bean(EngineConfig.class) .getMaxItemsLoggedInCollections(); private enum LogLevel { diff --git a/agama/engine/src/main/java/io/jans/agama/engine/script/ScriptUtils.java b/agama/engine/src/main/java/io/jans/agama/engine/script/ScriptUtils.java index a5d8ef68a6a..5a905ba95ed 100644 --- a/agama/engine/src/main/java/io/jans/agama/engine/script/ScriptUtils.java +++ b/agama/engine/src/main/java/io/jans/agama/engine/script/ScriptUtils.java @@ -10,10 +10,13 @@ import io.jans.agama.engine.misc.PrimitiveUtils; import io.jans.agama.engine.service.ActionService; import io.jans.agama.engine.service.FlowService; +import io.jans.service.cdi.util.CdiUtil; import io.jans.util.Pair; + import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.NativeContinuation; +import org.mozilla.javascript.NativeJavaObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -98,19 +101,20 @@ public static boolean testEquality(Object a, Object b) { } //Issue a call to this method only if the request scope is active - public static Function prepareSubflow(String qname, String parentBasepath, String[] pathOverrides) - throws IOException { - return managedBean(FlowService.class).prepareSubflow(qname, parentBasepath, pathOverrides); + public static Pair prepareSubflow(String qname, String parentBasepath, + String[] pathOverrides) throws IOException { + + return CdiUtil.bean(FlowService.class).prepareSubflow(qname, parentBasepath, pathOverrides); } public static Object callAction(Object instance, String actionClassName, String methodName, Object[] params) throws Exception { - return managedBean(ActionService.class).callAction(instance, actionClassName, methodName, params); + return CdiUtil.bean(ActionService.class).callAction(instance, actionClassName, methodName, params); //TODO: remove? //if (Map.class.isInstance(value) && !NativeJavaMap.class.equals(value.getClass())) { - // Scriptable scope = managedBean(FlowService.class).getGlobalScope(); + // Scriptable scope = CdiUtil.bean(FlowService.class).getGlobalScope(); // return new NativeJavaMap(scope, value); //} @@ -118,7 +122,7 @@ public static Object callAction(Object instance, String actionClassName, String //Issue a call to this method only if the request scope is active public static void closeSubflow() throws IOException { - managedBean(FlowService.class).closeSubflow(); + CdiUtil.bean(FlowService.class).closeSubflow(); } private static String simpleName(Class cls) { @@ -134,9 +138,5 @@ private static String simpleName(Class cls) { return name; } - - public static T managedBean(Class cls) { - return CDI.current().select(cls).get(); - } } diff --git a/agama/engine/src/main/java/io/jans/agama/engine/service/FlowService.java b/agama/engine/src/main/java/io/jans/agama/engine/service/FlowService.java index 8a9d656dd9b..192ed5c5e74 100644 --- a/agama/engine/src/main/java/io/jans/agama/engine/service/FlowService.java +++ b/agama/engine/src/main/java/io/jans/agama/engine/service/FlowService.java @@ -38,6 +38,7 @@ import org.mozilla.javascript.NativeContinuation; import org.mozilla.javascript.NativeJavaList; import org.mozilla.javascript.NativeJavaMap; +import org.mozilla.javascript.NativeJavaObject; import org.mozilla.javascript.NativeObject; import org.mozilla.javascript.RhinoException; import org.mozilla.javascript.Scriptable; @@ -113,7 +114,7 @@ public FlowStatus startFlow(FlowStatus status) throws FlowCrashException { logger.info("Executing function {}", funcName); Function f = (Function) globalScope.get(funcName, globalScope); - Object[] params = getFlowParams(fl.getInputs(), status.getJsonInput()); + Object[] params = getFuncParams(fl, status.getJsonInput()); NativeObject result = (NativeObject) scriptCtx.callFunctionWithContinuations(f, globalScope, params); finishFlow(result, status); @@ -175,9 +176,9 @@ public FlowStatus continueFlow(FlowStatus status, String jsonParameters, boolean } // This is called in the middle of a cx.resumeContinuation invocation (see util.js#_flowCall) - public Function prepareSubflow(String subflowName, String parentBasepath, String[] pathOverrides) - throws IOException { - + public Pair prepareSubflow(String subflowName, String parentBasepath, + String[] pathOverrides) throws IOException { + Flow flow = aps.getFlow(subflowName, false); FlowMetadata fl = flow.getMetadata(); String funcName = fl.getFuncName(); @@ -193,13 +194,14 @@ public Function prepareSubflow(String subflowName, String parentBasepath, String Function f = (Function) globalScope.get(funcName, globalScope); //The values set below are useful when saving the state, see method processPause - ParentFlowData pfd = new ParentFlowData(); + ParentFlowData pfd = new ParentFlowData(); pfd.setParentBasepath(parentBasepath); pfd.setPathOverrides(pathOverrides); parentFlowData = pfd; logger.info("Evaluating subflow code"); - return f; + Map configs = Optional.ofNullable(fl.getProperties()).orElse(Collections.emptyMap()); + return new Pair<>(f, wrapListOrMap(configs)); } @@ -312,38 +314,49 @@ private String computeTemplatePath(String path, ParentFlowData pfd) { } - private Object[] getFlowParams(List inputNames, String strParams) throws JsonProcessingException { - - List inputs = Optional.ofNullable(inputNames).orElse(Collections.emptyList()); - Object[] params = new Object[inputs.size()]; + private Object[] getFuncParams(FlowMetadata metadata, String strParams) throws JsonProcessingException { + + List inputs = Optional.ofNullable(metadata.getInputs()).orElse(Collections.emptyList()); + Map configs = Optional.ofNullable(metadata.getProperties()).orElse(Collections.emptyMap()); + Object[] params = new Object[inputs.size() + 1]; + params[0] = wrapListOrMap(configs); + if (strParams != null) { Map map = mapper.readValue(strParams, new TypeReference>(){}); - for (int i = 0; i < params.length; i++) { - params[i] = map.get(inputs.get(i)); + for (int i = 1; i < params.length; i++) { + params[i] = map.get(inputs.get(i - 1)); } } - for (int i = 0; i < params.length; i++) { - String input = inputs.get(i); + for (int i = 1; i < params.length; i++) { + String input = inputs.get(i - 1); if (params[i] == null) { logger.warn("Setting parameter '{}' to null", input); } else { logger.debug("Setting parameter '{}' to an instance of {}", input, params[i].getClass().getName()); - //This helps prevent exception "Invalid JavaScript value of type ..." - //when typeof is applied over this param in JavaScript code - if (Map.class.isInstance(params[i])) { - params[i] = new NativeJavaMap(globalScope, params[i]); - } else if (List.class.isInstance(params[i])) { - params[i] = new NativeJavaList(globalScope, params[i]); - } + NativeJavaObject wrapped = wrapListOrMap(params[i]); + params[i] = wrapped == null ? params[i] : wrapped; } } return params; } + private NativeJavaObject wrapListOrMap(Object obj) { + + //This helps prevent exception "Invalid JavaScript value of type ..." + //when typeof is applied over this param in JavaScript code + if (Map.class.isInstance(obj)) { + return new NativeJavaMap(globalScope, obj); + } else if (List.class.isInstance(obj)) { + return new NativeJavaList(globalScope, obj); + } + return null; + + } + private void makeCrashException(Exception e) throws FlowCrashException { String msg; diff --git a/agama/engine/src/main/java/io/jans/agama/engine/servlet/ExecutionServlet.java b/agama/engine/src/main/java/io/jans/agama/engine/servlet/ExecutionServlet.java index 25270d6b084..ebb70c5231c 100644 --- a/agama/engine/src/main/java/io/jans/agama/engine/servlet/ExecutionServlet.java +++ b/agama/engine/src/main/java/io/jans/agama/engine/servlet/ExecutionServlet.java @@ -30,6 +30,10 @@ public class ExecutionServlet extends BaseServlet { public static final String URL_PREFIX = "/fl/"; public static final String CALLBACK_PATH = URL_PREFIX + "callback"; public static final String ABORT_PATH = URL_PREFIX + "abort"; + + //TODO: put string in agama resource bundle + private static final String NO_ACTIVE_FLOW = "No flow running currently " + + "or your flow may have already finished/timed out"; @Inject private Logger logger; @@ -48,7 +52,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) String path = request.getServletPath(); if (fstatus == null || fstatus.getStartedAt() == FlowStatus.FINISHED) { - sendNotFound(response); + sendNotFound(response, NO_ACTIVE_FLOW); return; } @@ -97,7 +101,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) String path = request.getServletPath(); if (fstatus == null || fstatus.getStartedAt() == FlowStatus.FINISHED) { - sendNotFound(response); + sendNotFound(response, NO_ACTIVE_FLOW); return; } @@ -135,7 +139,7 @@ public void service(HttpServletRequest request, HttpServletResponse response) response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); } } else { - sendNotFound(response); + sendNotFound(response, null); logger.debug("Unexpected path {}", path); } @@ -181,8 +185,8 @@ private boolean processCallback(HttpServletRequest request, HttpServletResponse if (fstatus.isAllowCallbackResume()) { continueFlow(request, response, fstatus, true, false); } else { - logger.warn("Unexpected incoming response at flow callback endpoint"); - sendNotFound(response); + logger.warn("Unexpected incoming request at flow callback endpoint"); + sendNotFound(response, null); } return true; } @@ -190,8 +194,14 @@ private boolean processCallback(HttpServletRequest request, HttpServletResponse } - private void sendNotFound(HttpServletResponse response) { - response.setStatus(HttpServletResponse.SC_NOT_FOUND); + private void sendNotFound(HttpServletResponse response, String msg) throws IOException { + + if (msg == null) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + } else { + response.sendError(HttpServletResponse.SC_NOT_FOUND, msg); + } + } private void sendRedirect(HttpServletResponse response, String contextPath, FlowStatus fls, diff --git a/agama/model/src/main/java/io/jans/agama/model/FlowMetadata.java b/agama/model/src/main/java/io/jans/agama/model/FlowMetadata.java index 0ae5d26bc85..e0200e86a38 100644 --- a/agama/model/src/main/java/io/jans/agama/model/FlowMetadata.java +++ b/agama/model/src/main/java/io/jans/agama/model/FlowMetadata.java @@ -15,7 +15,7 @@ public class FlowMetadata { private long timestamp; private String description; - private Map customProps; + private Map properties; public String getFuncName() { return funcName; @@ -65,12 +65,12 @@ public void setDescription(String description) { this.description = description; } - public Map getCustomProps() { - return customProps; + public Map getProperties() { + return properties; } - public void setCustomProps(Map customProps) { - this.customProps = customProps; + public void setProperties(Map properties) { + this.properties = properties; } } diff --git a/agama/transpiler/grammar/AuthnFlow.g4 b/agama/transpiler/grammar/AuthnFlow.g4 new file mode 100644 index 00000000000..bbcabcb39c2 --- /dev/null +++ b/agama/transpiler/grammar/AuthnFlow.g4 @@ -0,0 +1,214 @@ +// Whenever this file is edited, Class org.gluu.flowless.dsl.Transpiler and its dependants MUST BE reviewed +grammar AuthnFlow; + +/* + * Fix for Python-like indentation tokens. See https://github.com/yshavit/antlr-denter + */ + +tokens { INDENT, DEDENT } + +@lexer::header { + import com.yuvalshavit.antlr4.DenterHelper; +} + +@lexer::members { + private final DenterHelper denter = DenterHelper.builder() + .nl(NL) + .indent(AuthnFlowParser.INDENT) + .dedent(AuthnFlowParser.DEDENT) + .pullToken(AuthnFlowLexer.super::nextToken); + + @Override + public Token nextToken() { + return denter.nextToken(); + } +} + +NL: '\r'? '\n' [\t ]* ; + +/* + * Parser Rules + */ + +flow: header statement+ ; + +header: FLOWSTART WS qname WS? INDENT base configs? inputs? DEDENT NL* ; +// header always ends in a NL + +qname: ALPHANUM | QNAME ; //if flow name is a single word, it is not identified as QNAME but ALPHANUM by parser + +base: BASE WS STRING WS? NL; + +configs: CONFIGS WS short_var WS? NL ; + +inputs: FLOWINPUTS (WS short_var)+ WS? NL ; + +short_var: ALPHANUM ; //created for convenience for code generator + +statement: flow_call | action_call | rrf_call | assignment | log | rfac | finish | ifelse | choice | loop | loopy ; + +preassign: variable WS? EQ WS? ; + +preassign_catch: variable? WS? '|' WS? short_var WS? EQ WS? ; + +variable: short_var | QNAME | DOTEXPR | DOTIDXEXPR ; + +flow_call: preassign? FLOWCALL WS ('$' variable | qname) argument* WS? (overrides | NL) ; + +overrides: INDENT OVERRIDE WS STRING (WS STRING)* WS? NL DEDENT ; +//I don't get why the NL is needed above + +action_call: (preassign | preassign_catch)? ACTIONCALL WS (static_call | oo_call) WS? NL ; + +rrf_call: preassign? RRFCALL WS STRING (WS variable)? (WS BOOL)? WS? (stchk_block | NL) ; + +log: LOG argument+ WS? NL ; + +static_call: qname '#' ALPHANUM argument* ; + +oo_call: variable WS ALPHANUM argument* ; + +argument: WS simple_expr ; + +simple_expr: literal | variable | (MINUS variable) ; + +literal: BOOL | STRING | UINT | SINT | DECIMAL | NUL; + +expression: object_expr | array_expr | simple_expr ; + +array_expr: '[' WS? expression* (SPCOMMA expression)* WS? ']' ; + +object_expr: '{' WS? keypair* (SPCOMMA keypair)* WS? '}' ; + +assignment: preassign expression WS? NL ; + +keypair: ALPHANUM WS? ':' WS? expression ; + +rfac: preassign? RFAC WS (STRING | variable) NL; + +finish: FINISH WS (BOOL | variable) WS? NL ; + +choice: MATCH WS simple_expr WS TO WS? INDENT option+ DEDENT elseblock? ; + +option: simple_expr WS? INDENT statement+ DEDENT ; + +ifelse: caseof INDENT statement+ DEDENT elseblock? ; + +caseof: WHEN WS boolean_expr boolean_op_expr* ; + +boolean_op_expr: NL* (AND | OR) WS? NL* boolean_expr ; + +boolean_expr: simple_expr WS IS WS (NOT WS)? simple_expr WS? ; + +elseblock: OTHERWISE WS? INDENT statement+ DEDENT ; + +loop: preassign? ITERATE WS variable WS USE WS short_var INDENT statement+ quit_stmt? DEDENT ; + +loopy: preassign? REPEAT WS (variable | UINT) WS MAXTIMES WS? INDENT statement+ quit_stmt? DEDENT ; + +quit_stmt: QUIT WS caseof NL statement* ; + +stchk_block: INDENT STATUS_CHK WS? INDENT stchk_open action_call? stchk_close DEDENT DEDENT ; + +stchk_open: OPEN WS (variable | UINT) WS SECS WS? NL; + +stchk_close: CLOSE WS caseof WS? NL; + +/* + * Lexer Rules + */ + +fragment DIGIT : [0-9] ; +fragment CH : [a-zA-Z] ; +fragment ALNUM : CH ('_' | CH | DIGIT)* ; +fragment SPACES: [\t ]+ ; +fragment COMMA: ',' ; + +COMMENT: '//' ~[\r\n]* -> skip ; + +FLOWSTART: 'Flow' ; + +BASE: 'Basepath' ; + +CONFIGS: 'Configs' ; + +FLOWINPUTS: 'Inputs' ; + +LOG: 'Log' ; + +FLOWCALL: 'Trigger' ; + +ACTIONCALL: 'Call' ; + +RRFCALL: 'RRF' ; + +STATUS_CHK: 'Status checker' ; + +OPEN: 'Open for' ; + +CLOSE: 'Close' ; + +OVERRIDE: 'Override templates' ; + +WHEN: 'When' ; + +OTHERWISE: 'Otherwise' ; + +REPEAT: 'Repeat' ; + +ITERATE: 'Iterate over' ; + +MATCH: 'Match' ; + +QUIT: 'Quit' ; + +FINISH: 'Finish' ; + +RFAC: 'RFAC' ; + +IS: 'is' ; + +NOT: 'not' ; + +AND: 'and' ; + +OR: 'or' ; + +SECS: 'seconds' ; + +TO: 'to' ; + +MAXTIMES: 'times max' ; + +USE: 'using' ; + +EQ: '=' ; + +MINUS: '-' ; + +NUL: 'null' ; + +BOOL: 'false' | 'true' ; + +STRING: '"' [\u0009\u0020\u0021\u0023-\u007E\u0080-\u008C\u00A0-\uFFFF]* '"' ; +//horizontal tab, space, exclamation mark, ASCII chars from hash(#) to tilde(~), plus other printable unicode chars + +UINT : DIGIT+ ; + +SINT : MINUS UINT ; + +DECIMAL: (SINT | UINT) '.' UINT ; + +ALPHANUM: ALNUM ; + +QNAME: ALNUM ('.' ALNUM)* ; + +EVALNUM: '.' ( STRING | ('$'? ALNUM) ) ; + +DOTEXPR: ALNUM EVALNUM* ; + +DOTIDXEXPR: DOTEXPR ('[' SPACES? (UINT | ALNUM) SPACES? ']' EVALNUM*)+ ; + +SPCOMMA: SPACES? NL* COMMA SPACES? NL* ; + +WS: SPACES ; //Entails "spaces" (plural) diff --git a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseListener.java b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseListener.java index 40c15266604..16b7db5d3e4 100644 --- a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseListener.java +++ b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseListener.java @@ -59,6 +59,18 @@ public class AuthnFlowBaseListener implements AuthnFlowListener { *

The default implementation does nothing.

*/ @Override public void exitBase(AuthnFlowParser.BaseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConfigs(AuthnFlowParser.ConfigsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConfigs(AuthnFlowParser.ConfigsContext ctx) { } /** * {@inheritDoc} * @@ -460,49 +472,37 @@ public class AuthnFlowBaseListener implements AuthnFlowListener { * *

The default implementation does nothing.

*/ - @Override public void enterStatusr_block(AuthnFlowParser.Statusr_blockContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitStatusr_block(AuthnFlowParser.Statusr_blockContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterStatusr_allow(AuthnFlowParser.Statusr_allowContext ctx) { } + @Override public void enterStchk_block(AuthnFlowParser.Stchk_blockContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitStatusr_allow(AuthnFlowParser.Statusr_allowContext ctx) { } + @Override public void exitStchk_block(AuthnFlowParser.Stchk_blockContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterStatusr_reply(AuthnFlowParser.Statusr_replyContext ctx) { } + @Override public void enterStchk_open(AuthnFlowParser.Stchk_openContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitStatusr_reply(AuthnFlowParser.Statusr_replyContext ctx) { } + @Override public void exitStchk_open(AuthnFlowParser.Stchk_openContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterStatusr_until(AuthnFlowParser.Statusr_untilContext ctx) { } + @Override public void enterStchk_close(AuthnFlowParser.Stchk_closeContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitStatusr_until(AuthnFlowParser.Statusr_untilContext ctx) { } + @Override public void exitStchk_close(AuthnFlowParser.Stchk_closeContext ctx) { } /** * {@inheritDoc} diff --git a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseVisitor.java b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseVisitor.java index 2ef2f2627d5..e9ed56d81de 100644 --- a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseVisitor.java +++ b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowBaseVisitor.java @@ -39,6 +39,13 @@ public class AuthnFlowBaseVisitor extends AbstractParseTreeVisitor impleme * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitBase(AuthnFlowParser.BaseContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitConfigs(AuthnFlowParser.ConfigsContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -276,26 +283,19 @@ public class AuthnFlowBaseVisitor extends AbstractParseTreeVisitor impleme *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitStatusr_block(AuthnFlowParser.Statusr_blockContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitStatusr_allow(AuthnFlowParser.Statusr_allowContext ctx) { return visitChildren(ctx); } + @Override public T visitStchk_block(AuthnFlowParser.Stchk_blockContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitStatusr_reply(AuthnFlowParser.Statusr_replyContext ctx) { return visitChildren(ctx); } + @Override public T visitStchk_open(AuthnFlowParser.Stchk_openContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitStatusr_until(AuthnFlowParser.Statusr_untilContext ctx) { return visitChildren(ctx); } + @Override public T visitStchk_close(AuthnFlowParser.Stchk_closeContext ctx) { return visitChildren(ctx); } } \ No newline at end of file diff --git a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowLexer.java b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowLexer.java index acfb9f2354a..d2f95140a54 100644 --- a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowLexer.java +++ b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowLexer.java @@ -21,8 +21,8 @@ public class AuthnFlowLexer extends Lexer { new PredictionContextCache(); public static final int T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, NL=9, - COMMENT=10, FLOWSTART=11, BASE=12, FLOWINPUTS=13, LOG=14, FLOWCALL=15, - ACTIONCALL=16, RRFCALL=17, STATUS_REQ=18, ALLOW=19, REPLY=20, UNTIL=21, + COMMENT=10, FLOWSTART=11, BASE=12, CONFIGS=13, FLOWINPUTS=14, LOG=15, + FLOWCALL=16, ACTIONCALL=17, RRFCALL=18, STATUS_CHK=19, OPEN=20, CLOSE=21, OVERRIDE=22, WHEN=23, OTHERWISE=24, REPEAT=25, ITERATE=26, MATCH=27, QUIT=28, FINISH=29, RFAC=30, IS=31, NOT=32, AND=33, OR=34, SECS=35, TO=36, MAXTIMES=37, USE=38, EQ=39, MINUS=40, NUL=41, BOOL=42, STRING=43, UINT=44, SINT=45, @@ -40,8 +40,8 @@ private static String[] makeRuleNames() { return new String[] { "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "NL", "DIGIT", "CH", "ALNUM", "SPACES", "COMMA", "COMMENT", "FLOWSTART", "BASE", - "FLOWINPUTS", "LOG", "FLOWCALL", "ACTIONCALL", "RRFCALL", "STATUS_REQ", - "ALLOW", "REPLY", "UNTIL", "OVERRIDE", "WHEN", "OTHERWISE", "REPEAT", + "CONFIGS", "FLOWINPUTS", "LOG", "FLOWCALL", "ACTIONCALL", "RRFCALL", + "STATUS_CHK", "OPEN", "CLOSE", "OVERRIDE", "WHEN", "OTHERWISE", "REPEAT", "ITERATE", "MATCH", "QUIT", "FINISH", "RFAC", "IS", "NOT", "AND", "OR", "SECS", "TO", "MAXTIMES", "USE", "EQ", "MINUS", "NUL", "BOOL", "STRING", "UINT", "SINT", "DECIMAL", "ALPHANUM", "QNAME", "EVALNUM", "DOTEXPR", @@ -53,8 +53,8 @@ private static String[] makeRuleNames() { private static String[] makeLiteralNames() { return new String[] { null, "'|'", "'$'", "'#'", "'['", "']'", "'{'", "'}'", "':'", null, null, - "'Flow'", "'Basepath'", "'Inputs'", "'Log'", "'Trigger'", "'Call'", "'RRF'", - "'Status requests'", "'Allow for'", "'Reply'", "'Until'", "'Override templates'", + "'Flow'", "'Basepath'", "'Configs'", "'Inputs'", "'Log'", "'Trigger'", + "'Call'", "'RRF'", "'Status checker'", "'Open for'", "'Close'", "'Override templates'", "'When'", "'Otherwise'", "'Repeat'", "'Iterate over'", "'Match'", "'Quit'", "'Finish'", "'RFAC'", "'is'", "'not'", "'and'", "'or'", "'seconds'", "'to'", "'times max'", "'using'", "'='", "'-'", "'null'" @@ -64,8 +64,8 @@ private static String[] makeLiteralNames() { private static String[] makeSymbolicNames() { return new String[] { null, null, null, null, null, null, null, null, null, "NL", "COMMENT", - "FLOWSTART", "BASE", "FLOWINPUTS", "LOG", "FLOWCALL", "ACTIONCALL", "RRFCALL", - "STATUS_REQ", "ALLOW", "REPLY", "UNTIL", "OVERRIDE", "WHEN", "OTHERWISE", + "FLOWSTART", "BASE", "CONFIGS", "FLOWINPUTS", "LOG", "FLOWCALL", "ACTIONCALL", + "RRFCALL", "STATUS_CHK", "OPEN", "CLOSE", "OVERRIDE", "WHEN", "OTHERWISE", "REPEAT", "ITERATE", "MATCH", "QUIT", "FINISH", "RFAC", "IS", "NOT", "AND", "OR", "SECS", "TO", "MAXTIMES", "USE", "EQ", "MINUS", "NUL", "BOOL", "STRING", "UINT", "SINT", "DECIMAL", "ALPHANUM", "QNAME", "EVALNUM", @@ -156,11 +156,11 @@ public AuthnFlowLexer(CharStream input) { "\3\r\3\r\7\r\u009a\n\r\f\r\16\r\u009d\13\r\3\16\6\16\u00a0\n\16\r\16\16"+ "\16\u00a1\3\17\3\17\3\20\3\20\3\20\3\20\7\20\u00aa\n\20\f\20\16\20\u00ad"+ "\13\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22"+ - "\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24"+ - "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\27"+ - "\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ - "\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31"+ - "\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\34"+ + "\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24"+ + "\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26"+ + "\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\31\3\31\3\31"+ + "\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\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\33\3\33\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\3\34\3\34\3\34\3\34"+ "\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36"+ "\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 "+ @@ -193,8 +193,8 @@ public AuthnFlowLexer(CharStream input) { "\3\2\2\2\13\177\3\2\2\2\r\u0081\3\2\2\2\17\u0083\3\2\2\2\21\u0085\3\2"+ "\2\2\23\u0088\3\2\2\2\25\u0091\3\2\2\2\27\u0093\3\2\2\2\31\u0095\3\2\2"+ "\2\33\u009f\3\2\2\2\35\u00a3\3\2\2\2\37\u00a5\3\2\2\2!\u00b0\3\2\2\2#"+ - "\u00b5\3\2\2\2%\u00be\3\2\2\2\'\u00c5\3\2\2\2)\u00c9\3\2\2\2+\u00d1\3"+ - "\2\2\2-\u00d6\3\2\2\2/\u00da\3\2\2\2\61\u00ea\3\2\2\2\63\u00f4\3\2\2\2"+ + "\u00b5\3\2\2\2%\u00be\3\2\2\2\'\u00c6\3\2\2\2)\u00cd\3\2\2\2+\u00d1\3"+ + "\2\2\2-\u00d9\3\2\2\2/\u00de\3\2\2\2\61\u00e2\3\2\2\2\63\u00f1\3\2\2\2"+ "\65\u00fa\3\2\2\2\67\u0100\3\2\2\29\u0113\3\2\2\2;\u0118\3\2\2\2=\u0122"+ "\3\2\2\2?\u0129\3\2\2\2A\u0136\3\2\2\2C\u013c\3\2\2\2E\u0141\3\2\2\2G"+ "\u0148\3\2\2\2I\u014d\3\2\2\2K\u0150\3\2\2\2M\u0154\3\2\2\2O\u0158\3\2"+ @@ -222,24 +222,24 @@ public AuthnFlowLexer(CharStream input) { "\u00b1\u00b2\7n\2\2\u00b2\u00b3\7q\2\2\u00b3\u00b4\7y\2\2\u00b4\"\3\2"+ "\2\2\u00b5\u00b6\7D\2\2\u00b6\u00b7\7c\2\2\u00b7\u00b8\7u\2\2\u00b8\u00b9"+ "\7g\2\2\u00b9\u00ba\7r\2\2\u00ba\u00bb\7c\2\2\u00bb\u00bc\7v\2\2\u00bc"+ - "\u00bd\7j\2\2\u00bd$\3\2\2\2\u00be\u00bf\7K\2\2\u00bf\u00c0\7p\2\2\u00c0"+ - "\u00c1\7r\2\2\u00c1\u00c2\7w\2\2\u00c2\u00c3\7v\2\2\u00c3\u00c4\7u\2\2"+ - "\u00c4&\3\2\2\2\u00c5\u00c6\7N\2\2\u00c6\u00c7\7q\2\2\u00c7\u00c8\7i\2"+ - "\2\u00c8(\3\2\2\2\u00c9\u00ca\7V\2\2\u00ca\u00cb\7t\2\2\u00cb\u00cc\7"+ - "k\2\2\u00cc\u00cd\7i\2\2\u00cd\u00ce\7i\2\2\u00ce\u00cf\7g\2\2\u00cf\u00d0"+ - "\7t\2\2\u00d0*\3\2\2\2\u00d1\u00d2\7E\2\2\u00d2\u00d3\7c\2\2\u00d3\u00d4"+ - "\7n\2\2\u00d4\u00d5\7n\2\2\u00d5,\3\2\2\2\u00d6\u00d7\7T\2\2\u00d7\u00d8"+ - "\7T\2\2\u00d8\u00d9\7H\2\2\u00d9.\3\2\2\2\u00da\u00db\7U\2\2\u00db\u00dc"+ - "\7v\2\2\u00dc\u00dd\7c\2\2\u00dd\u00de\7v\2\2\u00de\u00df\7w\2\2\u00df"+ - "\u00e0\7u\2\2\u00e0\u00e1\7\"\2\2\u00e1\u00e2\7t\2\2\u00e2\u00e3\7g\2"+ - "\2\u00e3\u00e4\7s\2\2\u00e4\u00e5\7w\2\2\u00e5\u00e6\7g\2\2\u00e6\u00e7"+ - "\7u\2\2\u00e7\u00e8\7v\2\2\u00e8\u00e9\7u\2\2\u00e9\60\3\2\2\2\u00ea\u00eb"+ - "\7C\2\2\u00eb\u00ec\7n\2\2\u00ec\u00ed\7n\2\2\u00ed\u00ee\7q\2\2\u00ee"+ - "\u00ef\7y\2\2\u00ef\u00f0\7\"\2\2\u00f0\u00f1\7h\2\2\u00f1\u00f2\7q\2"+ - "\2\u00f2\u00f3\7t\2\2\u00f3\62\3\2\2\2\u00f4\u00f5\7T\2\2\u00f5\u00f6"+ - "\7g\2\2\u00f6\u00f7\7r\2\2\u00f7\u00f8\7n\2\2\u00f8\u00f9\7{\2\2\u00f9"+ - "\64\3\2\2\2\u00fa\u00fb\7W\2\2\u00fb\u00fc\7p\2\2\u00fc\u00fd\7v\2\2\u00fd"+ - "\u00fe\7k\2\2\u00fe\u00ff\7n\2\2\u00ff\66\3\2\2\2\u0100\u0101\7Q\2\2\u0101"+ + "\u00bd\7j\2\2\u00bd$\3\2\2\2\u00be\u00bf\7E\2\2\u00bf\u00c0\7q\2\2\u00c0"+ + "\u00c1\7p\2\2\u00c1\u00c2\7h\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4\7i\2\2"+ + "\u00c4\u00c5\7u\2\2\u00c5&\3\2\2\2\u00c6\u00c7\7K\2\2\u00c7\u00c8\7p\2"+ + "\2\u00c8\u00c9\7r\2\2\u00c9\u00ca\7w\2\2\u00ca\u00cb\7v\2\2\u00cb\u00cc"+ + "\7u\2\2\u00cc(\3\2\2\2\u00cd\u00ce\7N\2\2\u00ce\u00cf\7q\2\2\u00cf\u00d0"+ + "\7i\2\2\u00d0*\3\2\2\2\u00d1\u00d2\7V\2\2\u00d2\u00d3\7t\2\2\u00d3\u00d4"+ + "\7k\2\2\u00d4\u00d5\7i\2\2\u00d5\u00d6\7i\2\2\u00d6\u00d7\7g\2\2\u00d7"+ + "\u00d8\7t\2\2\u00d8,\3\2\2\2\u00d9\u00da\7E\2\2\u00da\u00db\7c\2\2\u00db"+ + "\u00dc\7n\2\2\u00dc\u00dd\7n\2\2\u00dd.\3\2\2\2\u00de\u00df\7T\2\2\u00df"+ + "\u00e0\7T\2\2\u00e0\u00e1\7H\2\2\u00e1\60\3\2\2\2\u00e2\u00e3\7U\2\2\u00e3"+ + "\u00e4\7v\2\2\u00e4\u00e5\7c\2\2\u00e5\u00e6\7v\2\2\u00e6\u00e7\7w\2\2"+ + "\u00e7\u00e8\7u\2\2\u00e8\u00e9\7\"\2\2\u00e9\u00ea\7e\2\2\u00ea\u00eb"+ + "\7j\2\2\u00eb\u00ec\7g\2\2\u00ec\u00ed\7e\2\2\u00ed\u00ee\7m\2\2\u00ee"+ + "\u00ef\7g\2\2\u00ef\u00f0\7t\2\2\u00f0\62\3\2\2\2\u00f1\u00f2\7Q\2\2\u00f2"+ + "\u00f3\7r\2\2\u00f3\u00f4\7g\2\2\u00f4\u00f5\7p\2\2\u00f5\u00f6\7\"\2"+ + "\2\u00f6\u00f7\7h\2\2\u00f7\u00f8\7q\2\2\u00f8\u00f9\7t\2\2\u00f9\64\3"+ + "\2\2\2\u00fa\u00fb\7E\2\2\u00fb\u00fc\7n\2\2\u00fc\u00fd\7q\2\2\u00fd"+ + "\u00fe\7u\2\2\u00fe\u00ff\7g\2\2\u00ff\66\3\2\2\2\u0100\u0101\7Q\2\2\u0101"+ "\u0102\7x\2\2\u0102\u0103\7g\2\2\u0103\u0104\7t\2\2\u0104\u0105\7t\2\2"+ "\u0105\u0106\7k\2\2\u0106\u0107\7f\2\2\u0107\u0108\7g\2\2\u0108\u0109"+ "\7\"\2\2\u0109\u010a\7v\2\2\u010a\u010b\7g\2\2\u010b\u010c\7o\2\2\u010c"+ diff --git a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowListener.java b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowListener.java index a0194be97f1..344148256db 100644 --- a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowListener.java +++ b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowListener.java @@ -47,6 +47,16 @@ public interface AuthnFlowListener extends ParseTreeListener { * @param ctx the parse tree */ void exitBase(AuthnFlowParser.BaseContext ctx); + /** + * Enter a parse tree produced by {@link AuthnFlowParser#configs}. + * @param ctx the parse tree + */ + void enterConfigs(AuthnFlowParser.ConfigsContext ctx); + /** + * Exit a parse tree produced by {@link AuthnFlowParser#configs}. + * @param ctx the parse tree + */ + void exitConfigs(AuthnFlowParser.ConfigsContext ctx); /** * Enter a parse tree produced by {@link AuthnFlowParser#inputs}. * @param ctx the parse tree @@ -378,43 +388,33 @@ public interface AuthnFlowListener extends ParseTreeListener { */ void exitQuit_stmt(AuthnFlowParser.Quit_stmtContext ctx); /** - * Enter a parse tree produced by {@link AuthnFlowParser#statusr_block}. - * @param ctx the parse tree - */ - void enterStatusr_block(AuthnFlowParser.Statusr_blockContext ctx); - /** - * Exit a parse tree produced by {@link AuthnFlowParser#statusr_block}. - * @param ctx the parse tree - */ - void exitStatusr_block(AuthnFlowParser.Statusr_blockContext ctx); - /** - * Enter a parse tree produced by {@link AuthnFlowParser#statusr_allow}. + * Enter a parse tree produced by {@link AuthnFlowParser#stchk_block}. * @param ctx the parse tree */ - void enterStatusr_allow(AuthnFlowParser.Statusr_allowContext ctx); + void enterStchk_block(AuthnFlowParser.Stchk_blockContext ctx); /** - * Exit a parse tree produced by {@link AuthnFlowParser#statusr_allow}. + * Exit a parse tree produced by {@link AuthnFlowParser#stchk_block}. * @param ctx the parse tree */ - void exitStatusr_allow(AuthnFlowParser.Statusr_allowContext ctx); + void exitStchk_block(AuthnFlowParser.Stchk_blockContext ctx); /** - * Enter a parse tree produced by {@link AuthnFlowParser#statusr_reply}. + * Enter a parse tree produced by {@link AuthnFlowParser#stchk_open}. * @param ctx the parse tree */ - void enterStatusr_reply(AuthnFlowParser.Statusr_replyContext ctx); + void enterStchk_open(AuthnFlowParser.Stchk_openContext ctx); /** - * Exit a parse tree produced by {@link AuthnFlowParser#statusr_reply}. + * Exit a parse tree produced by {@link AuthnFlowParser#stchk_open}. * @param ctx the parse tree */ - void exitStatusr_reply(AuthnFlowParser.Statusr_replyContext ctx); + void exitStchk_open(AuthnFlowParser.Stchk_openContext ctx); /** - * Enter a parse tree produced by {@link AuthnFlowParser#statusr_until}. + * Enter a parse tree produced by {@link AuthnFlowParser#stchk_close}. * @param ctx the parse tree */ - void enterStatusr_until(AuthnFlowParser.Statusr_untilContext ctx); + void enterStchk_close(AuthnFlowParser.Stchk_closeContext ctx); /** - * Exit a parse tree produced by {@link AuthnFlowParser#statusr_until}. + * Exit a parse tree produced by {@link AuthnFlowParser#stchk_close}. * @param ctx the parse tree */ - void exitStatusr_until(AuthnFlowParser.Statusr_untilContext ctx); + void exitStchk_close(AuthnFlowParser.Stchk_closeContext ctx); } \ No newline at end of file diff --git a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowParser.java b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowParser.java index 00f9d9cd2dd..3e355b8d666 100644 --- a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowParser.java +++ b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowParser.java @@ -18,34 +18,33 @@ public class AuthnFlowParser extends Parser { new PredictionContextCache(); public static final int T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, NL=9, - COMMENT=10, FLOWSTART=11, BASE=12, FLOWINPUTS=13, LOG=14, FLOWCALL=15, - ACTIONCALL=16, RRFCALL=17, STATUS_REQ=18, ALLOW=19, REPLY=20, UNTIL=21, + COMMENT=10, FLOWSTART=11, BASE=12, CONFIGS=13, FLOWINPUTS=14, LOG=15, + FLOWCALL=16, ACTIONCALL=17, RRFCALL=18, STATUS_CHK=19, OPEN=20, CLOSE=21, OVERRIDE=22, WHEN=23, OTHERWISE=24, REPEAT=25, ITERATE=26, MATCH=27, QUIT=28, FINISH=29, RFAC=30, IS=31, NOT=32, AND=33, OR=34, SECS=35, TO=36, MAXTIMES=37, USE=38, EQ=39, MINUS=40, NUL=41, BOOL=42, STRING=43, UINT=44, SINT=45, DECIMAL=46, ALPHANUM=47, QNAME=48, EVALNUM=49, DOTEXPR=50, DOTIDXEXPR=51, SPCOMMA=52, WS=53, INDENT=54, DEDENT=55; public static final int - RULE_flow = 0, RULE_header = 1, RULE_qname = 2, RULE_base = 3, RULE_inputs = 4, - RULE_short_var = 5, RULE_statement = 6, RULE_preassign = 7, RULE_preassign_catch = 8, - RULE_variable = 9, RULE_flow_call = 10, RULE_overrides = 11, RULE_action_call = 12, - RULE_rrf_call = 13, RULE_log = 14, RULE_static_call = 15, RULE_oo_call = 16, - RULE_argument = 17, RULE_simple_expr = 18, RULE_literal = 19, RULE_expression = 20, - RULE_array_expr = 21, RULE_object_expr = 22, RULE_assignment = 23, RULE_keypair = 24, - RULE_rfac = 25, RULE_finish = 26, RULE_choice = 27, RULE_option = 28, - RULE_ifelse = 29, RULE_caseof = 30, RULE_boolean_op_expr = 31, RULE_boolean_expr = 32, - RULE_elseblock = 33, RULE_loop = 34, RULE_loopy = 35, RULE_quit_stmt = 36, - RULE_statusr_block = 37, RULE_statusr_allow = 38, RULE_statusr_reply = 39, - RULE_statusr_until = 40; + RULE_flow = 0, RULE_header = 1, RULE_qname = 2, RULE_base = 3, RULE_configs = 4, + RULE_inputs = 5, RULE_short_var = 6, RULE_statement = 7, RULE_preassign = 8, + RULE_preassign_catch = 9, RULE_variable = 10, RULE_flow_call = 11, RULE_overrides = 12, + RULE_action_call = 13, RULE_rrf_call = 14, RULE_log = 15, RULE_static_call = 16, + RULE_oo_call = 17, RULE_argument = 18, RULE_simple_expr = 19, RULE_literal = 20, + RULE_expression = 21, RULE_array_expr = 22, RULE_object_expr = 23, RULE_assignment = 24, + RULE_keypair = 25, RULE_rfac = 26, RULE_finish = 27, RULE_choice = 28, + RULE_option = 29, RULE_ifelse = 30, RULE_caseof = 31, RULE_boolean_op_expr = 32, + RULE_boolean_expr = 33, RULE_elseblock = 34, RULE_loop = 35, RULE_loopy = 36, + RULE_quit_stmt = 37, RULE_stchk_block = 38, RULE_stchk_open = 39, RULE_stchk_close = 40; private static String[] makeRuleNames() { return new String[] { - "flow", "header", "qname", "base", "inputs", "short_var", "statement", - "preassign", "preassign_catch", "variable", "flow_call", "overrides", - "action_call", "rrf_call", "log", "static_call", "oo_call", "argument", - "simple_expr", "literal", "expression", "array_expr", "object_expr", + "flow", "header", "qname", "base", "configs", "inputs", "short_var", + "statement", "preassign", "preassign_catch", "variable", "flow_call", + "overrides", "action_call", "rrf_call", "log", "static_call", "oo_call", + "argument", "simple_expr", "literal", "expression", "array_expr", "object_expr", "assignment", "keypair", "rfac", "finish", "choice", "option", "ifelse", "caseof", "boolean_op_expr", "boolean_expr", "elseblock", "loop", "loopy", - "quit_stmt", "statusr_block", "statusr_allow", "statusr_reply", "statusr_until" + "quit_stmt", "stchk_block", "stchk_open", "stchk_close" }; } public static final String[] ruleNames = makeRuleNames(); @@ -53,8 +52,8 @@ private static String[] makeRuleNames() { private static String[] makeLiteralNames() { return new String[] { null, "'|'", "'$'", "'#'", "'['", "']'", "'{'", "'}'", "':'", null, null, - "'Flow'", "'Basepath'", "'Inputs'", "'Log'", "'Trigger'", "'Call'", "'RRF'", - "'Status requests'", "'Allow for'", "'Reply'", "'Until'", "'Override templates'", + "'Flow'", "'Basepath'", "'Configs'", "'Inputs'", "'Log'", "'Trigger'", + "'Call'", "'RRF'", "'Status checker'", "'Open for'", "'Close'", "'Override templates'", "'When'", "'Otherwise'", "'Repeat'", "'Iterate over'", "'Match'", "'Quit'", "'Finish'", "'RFAC'", "'is'", "'not'", "'and'", "'or'", "'seconds'", "'to'", "'times max'", "'using'", "'='", "'-'", "'null'" @@ -64,8 +63,8 @@ private static String[] makeLiteralNames() { private static String[] makeSymbolicNames() { return new String[] { null, null, null, null, null, null, null, null, null, "NL", "COMMENT", - "FLOWSTART", "BASE", "FLOWINPUTS", "LOG", "FLOWCALL", "ACTIONCALL", "RRFCALL", - "STATUS_REQ", "ALLOW", "REPLY", "UNTIL", "OVERRIDE", "WHEN", "OTHERWISE", + "FLOWSTART", "BASE", "CONFIGS", "FLOWINPUTS", "LOG", "FLOWCALL", "ACTIONCALL", + "RRFCALL", "STATUS_CHK", "OPEN", "CLOSE", "OVERRIDE", "WHEN", "OTHERWISE", "REPEAT", "ITERATE", "MATCH", "QUIT", "FINISH", "RFAC", "IS", "NOT", "AND", "OR", "SECS", "TO", "MAXTIMES", "USE", "EQ", "MINUS", "NUL", "BOOL", "STRING", "UINT", "SINT", "DECIMAL", "ALPHANUM", "QNAME", "EVALNUM", @@ -202,6 +201,9 @@ public BaseContext base() { return getRuleContext(BaseContext.class,0); } public TerminalNode DEDENT() { return getToken(AuthnFlowParser.DEDENT, 0); } + public ConfigsContext configs() { + return getRuleContext(ConfigsContext.class,0); + } public InputsContext inputs() { return getRuleContext(InputsContext.class,0); } @@ -258,26 +260,36 @@ public final HeaderContext header() throws RecognitionException { setState(97); _errHandler.sync(this); _la = _input.LA(1); - if (_la==FLOWINPUTS) { + if (_la==CONFIGS) { { setState(96); + configs(); + } + } + + setState(100); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FLOWINPUTS) { + { + setState(99); inputs(); } } - setState(99); + setState(102); match(DEDENT); - setState(103); + setState(106); _errHandler.sync(this); _la = _input.LA(1); while (_la==NL) { { { - setState(100); + setState(103); match(NL); } } - setState(105); + setState(108); _errHandler.sync(this); _la = _input.LA(1); } @@ -323,7 +335,7 @@ public final QnameContext qname() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(106); + setState(109); _la = _input.LA(1); if ( !(_la==ALPHANUM || _la==QNAME) ) { _errHandler.recoverInline(this); @@ -380,23 +392,90 @@ public final BaseContext base() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(108); + setState(111); match(BASE); - setState(109); + setState(112); match(WS); - setState(110); + setState(113); match(STRING); - setState(112); + setState(115); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==WS) { + { + setState(114); + match(WS); + } + } + + setState(117); + match(NL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConfigsContext extends ParserRuleContext { + public TerminalNode CONFIGS() { return getToken(AuthnFlowParser.CONFIGS, 0); } + public List WS() { return getTokens(AuthnFlowParser.WS); } + public TerminalNode WS(int i) { + return getToken(AuthnFlowParser.WS, i); + } + public Short_varContext short_var() { + return getRuleContext(Short_varContext.class,0); + } + public TerminalNode NL() { return getToken(AuthnFlowParser.NL, 0); } + public ConfigsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_configs; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterConfigs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitConfigs(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitConfigs(this); + else return visitor.visitChildren(this); + } + } + + public final ConfigsContext configs() throws RecognitionException { + ConfigsContext _localctx = new ConfigsContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_configs); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(119); + match(CONFIGS); + setState(120); + match(WS); + setState(121); + short_var(); + setState(123); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(111); + setState(122); match(WS); } } - setState(114); + setState(125); match(NL); } } @@ -445,15 +524,15 @@ public T accept(ParseTreeVisitor visitor) { public final InputsContext inputs() throws RecognitionException { InputsContext _localctx = new InputsContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_inputs); + enterRule(_localctx, 10, RULE_inputs); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(116); + setState(127); match(FLOWINPUTS); - setState(119); + setState(130); _errHandler.sync(this); _alt = 1; do { @@ -461,9 +540,9 @@ public final InputsContext inputs() throws RecognitionException { case 1: { { - setState(117); + setState(128); match(WS); - setState(118); + setState(129); short_var(); } } @@ -471,21 +550,21 @@ public final InputsContext inputs() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(121); + setState(132); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); - setState(124); + setState(135); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(123); + setState(134); match(WS); } } - setState(126); + setState(137); match(NL); } } @@ -523,11 +602,11 @@ public T accept(ParseTreeVisitor visitor) { public final Short_varContext short_var() throws RecognitionException { Short_varContext _localctx = new Short_varContext(_ctx, getState()); - enterRule(_localctx, 10, RULE_short_var); + enterRule(_localctx, 12, RULE_short_var); try { enterOuterAlt(_localctx, 1); { - setState(128); + setState(139); match(ALPHANUM); } } @@ -597,85 +676,85 @@ public T accept(ParseTreeVisitor visitor) { public final StatementContext statement() throws RecognitionException { StatementContext _localctx = new StatementContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_statement); + enterRule(_localctx, 14, RULE_statement); try { - setState(141); + setState(152); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(130); + setState(141); flow_call(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(131); + setState(142); action_call(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(132); + setState(143); rrf_call(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(133); + setState(144); assignment(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(134); + setState(145); log(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(135); + setState(146); rfac(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(136); + setState(147); finish(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(137); + setState(148); ifelse(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(138); + setState(149); choice(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(139); + setState(150); loop(); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(140); + setState(151); loopy(); } break; @@ -722,31 +801,31 @@ public T accept(ParseTreeVisitor visitor) { public final PreassignContext preassign() throws RecognitionException { PreassignContext _localctx = new PreassignContext(_ctx, getState()); - enterRule(_localctx, 14, RULE_preassign); + enterRule(_localctx, 16, RULE_preassign); int _la; try { enterOuterAlt(_localctx, 1); { - setState(143); + setState(154); variable(); - setState(145); + setState(156); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(144); + setState(155); match(WS); } } - setState(147); + setState(158); match(EQ); - setState(149); + setState(160); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(148); + setState(159); match(WS); } } @@ -797,63 +876,63 @@ public T accept(ParseTreeVisitor visitor) { public final Preassign_catchContext preassign_catch() throws RecognitionException { Preassign_catchContext _localctx = new Preassign_catchContext(_ctx, getState()); - enterRule(_localctx, 16, RULE_preassign_catch); + enterRule(_localctx, 18, RULE_preassign_catch); int _la; try { enterOuterAlt(_localctx, 1); { - setState(152); + setState(163); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0)) { { - setState(151); + setState(162); variable(); } } - setState(155); + setState(166); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(154); + setState(165); match(WS); } } - setState(157); + setState(168); match(T__0); - setState(159); + setState(170); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(158); + setState(169); match(WS); } } - setState(161); + setState(172); short_var(); - setState(163); + setState(174); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(162); + setState(173); match(WS); } } - setState(165); + setState(176); match(EQ); - setState(167); + setState(178); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(166); + setState(177); match(WS); } } @@ -899,36 +978,36 @@ public T accept(ParseTreeVisitor visitor) { public final VariableContext variable() throws RecognitionException { VariableContext _localctx = new VariableContext(_ctx, getState()); - enterRule(_localctx, 18, RULE_variable); + enterRule(_localctx, 20, RULE_variable); try { - setState(173); + setState(184); _errHandler.sync(this); switch (_input.LA(1)) { case ALPHANUM: enterOuterAlt(_localctx, 1); { - setState(169); + setState(180); short_var(); } break; case QNAME: enterOuterAlt(_localctx, 2); { - setState(170); + setState(181); match(QNAME); } break; case DOTEXPR: enterOuterAlt(_localctx, 3); { - setState(171); + setState(182); match(DOTEXPR); } break; case DOTIDXEXPR: enterOuterAlt(_localctx, 4); { - setState(172); + setState(183); match(DOTIDXEXPR); } break; @@ -993,85 +1072,85 @@ public T accept(ParseTreeVisitor visitor) { public final Flow_callContext flow_call() throws RecognitionException { Flow_callContext _localctx = new Flow_callContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_flow_call); + enterRule(_localctx, 22, RULE_flow_call); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(176); + setState(187); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0)) { { - setState(175); + setState(186); preassign(); } } - setState(178); + setState(189); match(FLOWCALL); - setState(179); + setState(190); match(WS); - setState(183); + setState(194); _errHandler.sync(this); switch (_input.LA(1)) { case T__1: { - setState(180); + setState(191); match(T__1); - setState(181); + setState(192); variable(); } break; case ALPHANUM: case QNAME: { - setState(182); + setState(193); qname(); } break; default: throw new NoViableAltException(this); } - setState(188); + setState(199); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,18,_ctx); + _alt = getInterpreter().adaptivePredict(_input,20,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(185); + setState(196); argument(); } } } - setState(190); + setState(201); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,18,_ctx); + _alt = getInterpreter().adaptivePredict(_input,20,_ctx); } - setState(192); + setState(203); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(191); + setState(202); match(WS); } } - setState(196); + setState(207); _errHandler.sync(this); switch (_input.LA(1)) { case INDENT: { - setState(194); + setState(205); overrides(); } break; case NL: { - setState(195); + setState(206); match(NL); } break; @@ -1125,51 +1204,51 @@ public T accept(ParseTreeVisitor visitor) { public final OverridesContext overrides() throws RecognitionException { OverridesContext _localctx = new OverridesContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_overrides); + enterRule(_localctx, 24, RULE_overrides); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(198); + setState(209); match(INDENT); - setState(199); + setState(210); match(OVERRIDE); - setState(200); + setState(211); match(WS); - setState(201); + setState(212); match(STRING); - setState(206); + setState(217); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,21,_ctx); + _alt = getInterpreter().adaptivePredict(_input,23,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(202); + setState(213); match(WS); - setState(203); + setState(214); match(STRING); } } } - setState(208); + setState(219); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,21,_ctx); + _alt = getInterpreter().adaptivePredict(_input,23,_ctx); } - setState(210); + setState(221); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(209); + setState(220); match(WS); } } - setState(212); + setState(223); match(NL); - setState(213); + setState(224); match(DEDENT); } } @@ -1224,58 +1303,58 @@ public T accept(ParseTreeVisitor visitor) { public final Action_callContext action_call() throws RecognitionException { Action_callContext _localctx = new Action_callContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_action_call); + enterRule(_localctx, 26, RULE_action_call); int _la; try { enterOuterAlt(_localctx, 1); { - setState(217); + setState(228); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) { case 1: { - setState(215); + setState(226); preassign(); } break; case 2: { - setState(216); + setState(227); preassign_catch(); } break; } - setState(219); + setState(230); match(ACTIONCALL); - setState(220); + setState(231); match(WS); - setState(223); + setState(234); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { case 1: { - setState(221); + setState(232); static_call(); } break; case 2: { - setState(222); + setState(233); oo_call(); } break; } - setState(226); + setState(237); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(225); + setState(236); match(WS); } } - setState(228); + setState(239); match(NL); } } @@ -1297,8 +1376,8 @@ public TerminalNode WS(int i) { return getToken(AuthnFlowParser.WS, i); } public TerminalNode STRING() { return getToken(AuthnFlowParser.STRING, 0); } - public Statusr_blockContext statusr_block() { - return getRuleContext(Statusr_blockContext.class,0); + public Stchk_blockContext stchk_block() { + return getRuleContext(Stchk_blockContext.class,0); } public TerminalNode NL() { return getToken(AuthnFlowParser.NL, 0); } public PreassignContext preassign() { @@ -1329,73 +1408,73 @@ public T accept(ParseTreeVisitor visitor) { public final Rrf_callContext rrf_call() throws RecognitionException { Rrf_callContext _localctx = new Rrf_callContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_rrf_call); + enterRule(_localctx, 28, RULE_rrf_call); int _la; try { enterOuterAlt(_localctx, 1); { - setState(231); + setState(242); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0)) { { - setState(230); + setState(241); preassign(); } } - setState(233); + setState(244); match(RRFCALL); - setState(234); + setState(245); match(WS); - setState(235); + setState(246); match(STRING); - setState(238); + setState(249); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { case 1: { - setState(236); + setState(247); match(WS); - setState(237); + setState(248); variable(); } break; } - setState(242); + setState(253); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { case 1: { - setState(240); + setState(251); match(WS); - setState(241); + setState(252); match(BOOL); } break; } - setState(245); + setState(256); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(244); + setState(255); match(WS); } } - setState(249); + setState(260); _errHandler.sync(this); switch (_input.LA(1)) { case INDENT: { - setState(247); - statusr_block(); + setState(258); + stchk_block(); } break; case NL: { - setState(248); + setState(259); match(NL); } break; @@ -1446,15 +1525,15 @@ public T accept(ParseTreeVisitor visitor) { public final LogContext log() throws RecognitionException { LogContext _localctx = new LogContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_log); + enterRule(_localctx, 30, RULE_log); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(251); + setState(262); match(LOG); - setState(253); + setState(264); _errHandler.sync(this); _alt = 1; do { @@ -1462,7 +1541,7 @@ public final LogContext log() throws RecognitionException { case 1: { { - setState(252); + setState(263); argument(); } } @@ -1470,21 +1549,21 @@ public final LogContext log() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(255); + setState(266); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); - setState(258); + setState(269); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(257); + setState(268); match(WS); } } - setState(260); + setState(271); match(NL); } } @@ -1531,32 +1610,32 @@ public T accept(ParseTreeVisitor visitor) { public final Static_callContext static_call() throws RecognitionException { Static_callContext _localctx = new Static_callContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_static_call); + enterRule(_localctx, 32, RULE_static_call); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(262); + setState(273); qname(); - setState(263); + setState(274); match(T__2); - setState(264); + setState(275); match(ALPHANUM); - setState(268); + setState(279); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(265); + setState(276); argument(); } } } - setState(270); + setState(281); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } } } @@ -1604,32 +1683,32 @@ public T accept(ParseTreeVisitor visitor) { public final Oo_callContext oo_call() throws RecognitionException { Oo_callContext _localctx = new Oo_callContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_oo_call); + enterRule(_localctx, 34, RULE_oo_call); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(271); + setState(282); variable(); - setState(272); + setState(283); match(WS); - setState(273); + setState(284); match(ALPHANUM); - setState(277); + setState(288); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(274); + setState(285); argument(); } } } - setState(279); + setState(290); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); } } } @@ -1670,13 +1749,13 @@ public T accept(ParseTreeVisitor visitor) { public final ArgumentContext argument() throws RecognitionException { ArgumentContext _localctx = new ArgumentContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_argument); + enterRule(_localctx, 36, RULE_argument); try { enterOuterAlt(_localctx, 1); { - setState(280); + setState(291); match(WS); - setState(281); + setState(292); simple_expr(); } } @@ -1720,9 +1799,9 @@ public T accept(ParseTreeVisitor visitor) { public final Simple_exprContext simple_expr() throws RecognitionException { Simple_exprContext _localctx = new Simple_exprContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_simple_expr); + enterRule(_localctx, 38, RULE_simple_expr); try { - setState(287); + setState(298); _errHandler.sync(this); switch (_input.LA(1)) { case NUL: @@ -1733,7 +1812,7 @@ public final Simple_exprContext simple_expr() throws RecognitionException { case DECIMAL: enterOuterAlt(_localctx, 1); { - setState(283); + setState(294); literal(); } break; @@ -1743,7 +1822,7 @@ public final Simple_exprContext simple_expr() throws RecognitionException { case DOTIDXEXPR: enterOuterAlt(_localctx, 2); { - setState(284); + setState(295); variable(); } break; @@ -1751,9 +1830,9 @@ public final Simple_exprContext simple_expr() throws RecognitionException { enterOuterAlt(_localctx, 3); { { - setState(285); + setState(296); match(MINUS); - setState(286); + setState(297); variable(); } } @@ -1801,12 +1880,12 @@ public T accept(ParseTreeVisitor visitor) { public final LiteralContext literal() throws RecognitionException { LiteralContext _localctx = new LiteralContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_literal); + enterRule(_localctx, 40, RULE_literal); int _la; try { enterOuterAlt(_localctx, 1); { - setState(289); + setState(300); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NUL) | (1L << BOOL) | (1L << STRING) | (1L << UINT) | (1L << SINT) | (1L << DECIMAL))) != 0)) ) { _errHandler.recoverInline(this); @@ -1860,22 +1939,22 @@ public T accept(ParseTreeVisitor visitor) { public final ExpressionContext expression() throws RecognitionException { ExpressionContext _localctx = new ExpressionContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_expression); + enterRule(_localctx, 42, RULE_expression); try { - setState(294); + setState(305); _errHandler.sync(this); switch (_input.LA(1)) { case T__5: enterOuterAlt(_localctx, 1); { - setState(291); + setState(302); object_expr(); } break; case T__3: enterOuterAlt(_localctx, 2); { - setState(292); + setState(303); array_expr(); } break; @@ -1892,7 +1971,7 @@ public final ExpressionContext expression() throws RecognitionException { case DOTIDXEXPR: enterOuterAlt(_localctx, 3); { - setState(293); + setState(304); simple_expr(); } break; @@ -1947,64 +2026,64 @@ public T accept(ParseTreeVisitor visitor) { public final Array_exprContext array_expr() throws RecognitionException { Array_exprContext _localctx = new Array_exprContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_array_expr); + enterRule(_localctx, 44, RULE_array_expr); int _la; try { enterOuterAlt(_localctx, 1); { - setState(296); + setState(307); match(T__3); - setState(298); + setState(309); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { - setState(297); + setState(308); match(WS); } break; } - setState(303); + setState(314); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << MINUS) | (1L << NUL) | (1L << BOOL) | (1L << STRING) | (1L << UINT) | (1L << SINT) | (1L << DECIMAL) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0)) { { { - setState(300); + setState(311); expression(); } } - setState(305); + setState(316); _errHandler.sync(this); _la = _input.LA(1); } - setState(310); + setState(321); _errHandler.sync(this); _la = _input.LA(1); while (_la==SPCOMMA) { { { - setState(306); + setState(317); match(SPCOMMA); - setState(307); + setState(318); expression(); } } - setState(312); + setState(323); _errHandler.sync(this); _la = _input.LA(1); } - setState(314); + setState(325); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(313); + setState(324); match(WS); } } - setState(316); + setState(327); match(T__4); } } @@ -2055,64 +2134,64 @@ public T accept(ParseTreeVisitor visitor) { public final Object_exprContext object_expr() throws RecognitionException { Object_exprContext _localctx = new Object_exprContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_object_expr); + enterRule(_localctx, 46, RULE_object_expr); int _la; try { enterOuterAlt(_localctx, 1); { - setState(318); + setState(329); match(T__5); - setState(320); + setState(331); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { case 1: { - setState(319); + setState(330); match(WS); } break; } - setState(325); + setState(336); _errHandler.sync(this); _la = _input.LA(1); while (_la==ALPHANUM) { { { - setState(322); + setState(333); keypair(); } } - setState(327); + setState(338); _errHandler.sync(this); _la = _input.LA(1); } - setState(332); + setState(343); _errHandler.sync(this); _la = _input.LA(1); while (_la==SPCOMMA) { { { - setState(328); + setState(339); match(SPCOMMA); - setState(329); + setState(340); keypair(); } } - setState(334); + setState(345); _errHandler.sync(this); _la = _input.LA(1); } - setState(336); + setState(347); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(335); + setState(346); match(WS); } } - setState(338); + setState(349); match(T__6); } } @@ -2157,26 +2236,26 @@ public T accept(ParseTreeVisitor visitor) { public final AssignmentContext assignment() throws RecognitionException { AssignmentContext _localctx = new AssignmentContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_assignment); + enterRule(_localctx, 48, RULE_assignment); int _la; try { enterOuterAlt(_localctx, 1); { - setState(340); + setState(351); preassign(); - setState(341); + setState(352); expression(); - setState(343); + setState(354); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(342); + setState(353); match(WS); } } - setState(345); + setState(356); match(NL); } } @@ -2221,36 +2300,36 @@ public T accept(ParseTreeVisitor visitor) { public final KeypairContext keypair() throws RecognitionException { KeypairContext _localctx = new KeypairContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_keypair); + enterRule(_localctx, 50, RULE_keypair); int _la; try { enterOuterAlt(_localctx, 1); { - setState(347); + setState(358); match(ALPHANUM); - setState(349); + setState(360); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(348); + setState(359); match(WS); } } - setState(351); + setState(362); match(T__7); - setState(353); + setState(364); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(352); + setState(363); match(WS); } } - setState(355); + setState(366); expression(); } } @@ -2297,31 +2376,31 @@ public T accept(ParseTreeVisitor visitor) { public final RfacContext rfac() throws RecognitionException { RfacContext _localctx = new RfacContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_rfac); + enterRule(_localctx, 52, RULE_rfac); int _la; try { enterOuterAlt(_localctx, 1); { - setState(358); + setState(369); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0)) { { - setState(357); + setState(368); preassign(); } } - setState(360); + setState(371); match(RFAC); - setState(361); + setState(372); match(WS); - setState(364); + setState(375); _errHandler.sync(this); switch (_input.LA(1)) { case STRING: { - setState(362); + setState(373); match(STRING); } break; @@ -2330,14 +2409,14 @@ public final RfacContext rfac() throws RecognitionException { case DOTEXPR: case DOTIDXEXPR: { - setState(363); + setState(374); variable(); } break; default: throw new NoViableAltException(this); } - setState(366); + setState(377); match(NL); } } @@ -2384,21 +2463,21 @@ public T accept(ParseTreeVisitor visitor) { public final FinishContext finish() throws RecognitionException { FinishContext _localctx = new FinishContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_finish); + enterRule(_localctx, 54, RULE_finish); int _la; try { enterOuterAlt(_localctx, 1); { - setState(368); + setState(379); match(FINISH); - setState(369); + setState(380); match(WS); - setState(372); + setState(383); _errHandler.sync(this); switch (_input.LA(1)) { case BOOL: { - setState(370); + setState(381); match(BOOL); } break; @@ -2407,24 +2486,24 @@ public final FinishContext finish() throws RecognitionException { case DOTEXPR: case DOTIDXEXPR: { - setState(371); + setState(382); variable(); } break; default: throw new NoViableAltException(this); } - setState(375); + setState(386); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(374); + setState(385); match(WS); } } - setState(377); + setState(388); match(NL); } } @@ -2481,55 +2560,55 @@ public T accept(ParseTreeVisitor visitor) { public final ChoiceContext choice() throws RecognitionException { ChoiceContext _localctx = new ChoiceContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_choice); + enterRule(_localctx, 56, RULE_choice); int _la; try { enterOuterAlt(_localctx, 1); { - setState(379); + setState(390); match(MATCH); - setState(380); + setState(391); match(WS); - setState(381); + setState(392); simple_expr(); - setState(382); + setState(393); match(WS); - setState(383); + setState(394); match(TO); - setState(385); + setState(396); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(384); + setState(395); match(WS); } } - setState(387); + setState(398); match(INDENT); - setState(389); + setState(400); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(388); + setState(399); option(); } } - setState(391); + setState(402); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << MINUS) | (1L << NUL) | (1L << BOOL) | (1L << STRING) | (1L << UINT) | (1L << SINT) | (1L << DECIMAL) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0) ); - setState(393); + setState(404); match(DEDENT); - setState(395); + setState(406); _errHandler.sync(this); _la = _input.LA(1); if (_la==OTHERWISE) { { - setState(394); + setState(405); elseblock(); } } @@ -2581,40 +2660,40 @@ public T accept(ParseTreeVisitor visitor) { public final OptionContext option() throws RecognitionException { OptionContext _localctx = new OptionContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_option); + enterRule(_localctx, 58, RULE_option); int _la; try { enterOuterAlt(_localctx, 1); { - setState(397); + setState(408); simple_expr(); - setState(399); + setState(410); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(398); + setState(409); match(WS); } } - setState(401); + setState(412); match(INDENT); - setState(403); + setState(414); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(402); + setState(413); statement(); } } - setState(405); + setState(416); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << LOG) | (1L << FLOWCALL) | (1L << ACTIONCALL) | (1L << RRFCALL) | (1L << WHEN) | (1L << REPEAT) | (1L << ITERATE) | (1L << MATCH) | (1L << FINISH) | (1L << RFAC) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR) | (1L << WS))) != 0) ); - setState(407); + setState(418); match(DEDENT); } } @@ -2665,37 +2744,37 @@ public T accept(ParseTreeVisitor visitor) { public final IfelseContext ifelse() throws RecognitionException { IfelseContext _localctx = new IfelseContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_ifelse); + enterRule(_localctx, 60, RULE_ifelse); int _la; try { enterOuterAlt(_localctx, 1); { - setState(409); + setState(420); caseof(); - setState(410); + setState(421); match(INDENT); - setState(412); + setState(423); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(411); + setState(422); statement(); } } - setState(414); + setState(425); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << LOG) | (1L << FLOWCALL) | (1L << ACTIONCALL) | (1L << RRFCALL) | (1L << WHEN) | (1L << REPEAT) | (1L << ITERATE) | (1L << MATCH) | (1L << FINISH) | (1L << RFAC) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR) | (1L << WS))) != 0) ); - setState(416); + setState(427); match(DEDENT); - setState(418); + setState(429); _errHandler.sync(this); _la = _input.LA(1); if (_la==OTHERWISE) { { - setState(417); + setState(428); elseblock(); } } @@ -2746,32 +2825,32 @@ public T accept(ParseTreeVisitor visitor) { public final CaseofContext caseof() throws RecognitionException { CaseofContext _localctx = new CaseofContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_caseof); + enterRule(_localctx, 62, RULE_caseof); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(420); + setState(431); match(WHEN); - setState(421); + setState(432); match(WS); - setState(422); + setState(433); boolean_expr(); - setState(426); + setState(437); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,59,_ctx); + _alt = getInterpreter().adaptivePredict(_input,61,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(423); + setState(434); boolean_op_expr(); } } } - setState(428); + setState(439); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,59,_ctx); + _alt = getInterpreter().adaptivePredict(_input,61,_ctx); } } } @@ -2818,26 +2897,26 @@ public T accept(ParseTreeVisitor visitor) { public final Boolean_op_exprContext boolean_op_expr() throws RecognitionException { Boolean_op_exprContext _localctx = new Boolean_op_exprContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_boolean_op_expr); + enterRule(_localctx, 64, RULE_boolean_op_expr); int _la; try { enterOuterAlt(_localctx, 1); { - setState(432); + setState(443); _errHandler.sync(this); _la = _input.LA(1); while (_la==NL) { { { - setState(429); + setState(440); match(NL); } } - setState(434); + setState(445); _errHandler.sync(this); _la = _input.LA(1); } - setState(435); + setState(446); _la = _input.LA(1); if ( !(_la==AND || _la==OR) ) { _errHandler.recoverInline(this); @@ -2847,31 +2926,31 @@ public final Boolean_op_exprContext boolean_op_expr() throws RecognitionExceptio _errHandler.reportMatch(this); consume(); } - setState(437); + setState(448); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(436); + setState(447); match(WS); } } - setState(442); + setState(453); _errHandler.sync(this); _la = _input.LA(1); while (_la==NL) { { { - setState(439); + setState(450); match(NL); } } - setState(444); + setState(455); _errHandler.sync(this); _la = _input.LA(1); } - setState(445); + setState(456); boolean_expr(); } } @@ -2920,39 +2999,39 @@ public T accept(ParseTreeVisitor visitor) { public final Boolean_exprContext boolean_expr() throws RecognitionException { Boolean_exprContext _localctx = new Boolean_exprContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_boolean_expr); + enterRule(_localctx, 66, RULE_boolean_expr); int _la; try { enterOuterAlt(_localctx, 1); { - setState(447); + setState(458); simple_expr(); - setState(448); + setState(459); match(WS); - setState(449); + setState(460); match(IS); - setState(450); + setState(461); match(WS); - setState(453); + setState(464); _errHandler.sync(this); _la = _input.LA(1); if (_la==NOT) { { - setState(451); + setState(462); match(NOT); - setState(452); + setState(463); match(WS); } } - setState(455); + setState(466); simple_expr(); - setState(457); + setState(468); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) { case 1: { - setState(456); + setState(467); match(WS); } break; @@ -3002,40 +3081,40 @@ public T accept(ParseTreeVisitor visitor) { public final ElseblockContext elseblock() throws RecognitionException { ElseblockContext _localctx = new ElseblockContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_elseblock); + enterRule(_localctx, 68, RULE_elseblock); int _la; try { enterOuterAlt(_localctx, 1); { - setState(459); + setState(470); match(OTHERWISE); - setState(461); + setState(472); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(460); + setState(471); match(WS); } } - setState(463); + setState(474); match(INDENT); - setState(465); + setState(476); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(464); + setState(475); statement(); } } - setState(467); + setState(478); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << LOG) | (1L << FLOWCALL) | (1L << ACTIONCALL) | (1L << RRFCALL) | (1L << WHEN) | (1L << REPEAT) | (1L << ITERATE) | (1L << MATCH) | (1L << FINISH) | (1L << RFAC) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR) | (1L << WS))) != 0) ); - setState(469); + setState(480); match(DEDENT); } } @@ -3098,62 +3177,62 @@ public T accept(ParseTreeVisitor visitor) { public final LoopContext loop() throws RecognitionException { LoopContext _localctx = new LoopContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_loop); + enterRule(_localctx, 70, RULE_loop); int _la; try { enterOuterAlt(_localctx, 1); { - setState(472); + setState(483); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0)) { { - setState(471); + setState(482); preassign(); } } - setState(474); + setState(485); match(ITERATE); - setState(475); + setState(486); match(WS); - setState(476); + setState(487); variable(); - setState(477); + setState(488); match(WS); - setState(478); + setState(489); match(USE); - setState(479); + setState(490); match(WS); - setState(480); + setState(491); short_var(); - setState(481); + setState(492); match(INDENT); - setState(483); + setState(494); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(482); + setState(493); statement(); } } - setState(485); + setState(496); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << LOG) | (1L << FLOWCALL) | (1L << ACTIONCALL) | (1L << RRFCALL) | (1L << WHEN) | (1L << REPEAT) | (1L << ITERATE) | (1L << MATCH) | (1L << FINISH) | (1L << RFAC) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR) | (1L << WS))) != 0) ); - setState(488); + setState(499); _errHandler.sync(this); _la = _input.LA(1); if (_la==QUIT) { { - setState(487); + setState(498); quit_stmt(); } } - setState(490); + setState(501); match(DEDENT); } } @@ -3214,26 +3293,26 @@ public T accept(ParseTreeVisitor visitor) { public final LoopyContext loopy() throws RecognitionException { LoopyContext _localctx = new LoopyContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_loopy); + enterRule(_localctx, 72, RULE_loopy); int _la; try { enterOuterAlt(_localctx, 1); { - setState(493); + setState(504); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR))) != 0)) { { - setState(492); + setState(503); preassign(); } } - setState(495); + setState(506); match(REPEAT); - setState(496); + setState(507); match(WS); - setState(499); + setState(510); _errHandler.sync(this); switch (_input.LA(1)) { case ALPHANUM: @@ -3241,60 +3320,60 @@ public final LoopyContext loopy() throws RecognitionException { case DOTEXPR: case DOTIDXEXPR: { - setState(497); + setState(508); variable(); } break; case UINT: { - setState(498); + setState(509); match(UINT); } break; default: throw new NoViableAltException(this); } - setState(501); + setState(512); match(WS); - setState(502); + setState(513); match(MAXTIMES); - setState(504); + setState(515); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(503); + setState(514); match(WS); } } - setState(506); + setState(517); match(INDENT); - setState(508); + setState(519); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(507); + setState(518); statement(); } } - setState(510); + setState(521); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << LOG) | (1L << FLOWCALL) | (1L << ACTIONCALL) | (1L << RRFCALL) | (1L << WHEN) | (1L << REPEAT) | (1L << ITERATE) | (1L << MATCH) | (1L << FINISH) | (1L << RFAC) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR) | (1L << WS))) != 0) ); - setState(513); + setState(524); _errHandler.sync(this); _la = _input.LA(1); if (_la==QUIT) { { - setState(512); + setState(523); quit_stmt(); } } - setState(515); + setState(526); match(DEDENT); } } @@ -3343,30 +3422,30 @@ public T accept(ParseTreeVisitor visitor) { public final Quit_stmtContext quit_stmt() throws RecognitionException { Quit_stmtContext _localctx = new Quit_stmtContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_quit_stmt); + enterRule(_localctx, 74, RULE_quit_stmt); int _la; try { enterOuterAlt(_localctx, 1); { - setState(517); + setState(528); match(QUIT); - setState(518); + setState(529); match(WS); - setState(519); + setState(530); caseof(); - setState(520); + setState(531); match(NL); - setState(524); + setState(535); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << LOG) | (1L << FLOWCALL) | (1L << ACTIONCALL) | (1L << RRFCALL) | (1L << WHEN) | (1L << REPEAT) | (1L << ITERATE) | (1L << MATCH) | (1L << FINISH) | (1L << RFAC) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR) | (1L << WS))) != 0)) { { { - setState(521); + setState(532); statement(); } } - setState(526); + setState(537); _errHandler.sync(this); _la = _input.LA(1); } @@ -3383,77 +3462,85 @@ public final Quit_stmtContext quit_stmt() throws RecognitionException { return _localctx; } - public static class Statusr_blockContext extends ParserRuleContext { + public static class Stchk_blockContext extends ParserRuleContext { public List INDENT() { return getTokens(AuthnFlowParser.INDENT); } public TerminalNode INDENT(int i) { return getToken(AuthnFlowParser.INDENT, i); } - public TerminalNode STATUS_REQ() { return getToken(AuthnFlowParser.STATUS_REQ, 0); } - public Statusr_allowContext statusr_allow() { - return getRuleContext(Statusr_allowContext.class,0); + public TerminalNode STATUS_CHK() { return getToken(AuthnFlowParser.STATUS_CHK, 0); } + public Stchk_openContext stchk_open() { + return getRuleContext(Stchk_openContext.class,0); } - public Statusr_replyContext statusr_reply() { - return getRuleContext(Statusr_replyContext.class,0); - } - public Statusr_untilContext statusr_until() { - return getRuleContext(Statusr_untilContext.class,0); + public Stchk_closeContext stchk_close() { + return getRuleContext(Stchk_closeContext.class,0); } public List DEDENT() { return getTokens(AuthnFlowParser.DEDENT); } public TerminalNode DEDENT(int i) { return getToken(AuthnFlowParser.DEDENT, i); } public TerminalNode WS() { return getToken(AuthnFlowParser.WS, 0); } - public Statusr_blockContext(ParserRuleContext parent, int invokingState) { + public Action_callContext action_call() { + return getRuleContext(Action_callContext.class,0); + } + public Stchk_blockContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_statusr_block; } + @Override public int getRuleIndex() { return RULE_stchk_block; } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterStatusr_block(this); + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterStchk_block(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitStatusr_block(this); + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitStchk_block(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitStatusr_block(this); + if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitStchk_block(this); else return visitor.visitChildren(this); } } - public final Statusr_blockContext statusr_block() throws RecognitionException { - Statusr_blockContext _localctx = new Statusr_blockContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_statusr_block); + public final Stchk_blockContext stchk_block() throws RecognitionException { + Stchk_blockContext _localctx = new Stchk_blockContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_stchk_block); int _la; try { enterOuterAlt(_localctx, 1); { - setState(527); + setState(538); match(INDENT); - setState(528); - match(STATUS_REQ); - setState(530); + setState(539); + match(STATUS_CHK); + setState(541); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(529); + setState(540); match(WS); } } - setState(532); + setState(543); match(INDENT); - setState(533); - statusr_allow(); - setState(534); - statusr_reply(); - setState(535); - statusr_until(); - setState(536); + setState(544); + stchk_open(); + setState(546); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ACTIONCALL) | (1L << ALPHANUM) | (1L << QNAME) | (1L << DOTEXPR) | (1L << DOTIDXEXPR) | (1L << WS))) != 0)) { + { + setState(545); + action_call(); + } + } + + setState(548); + stchk_close(); + setState(549); match(DEDENT); - setState(537); + setState(550); match(DEDENT); } } @@ -3468,8 +3555,8 @@ public final Statusr_blockContext statusr_block() throws RecognitionException { return _localctx; } - public static class Statusr_allowContext extends ParserRuleContext { - public TerminalNode ALLOW() { return getToken(AuthnFlowParser.ALLOW, 0); } + public static class Stchk_openContext extends ParserRuleContext { + public TerminalNode OPEN() { return getToken(AuthnFlowParser.OPEN, 0); } public List WS() { return getTokens(AuthnFlowParser.WS); } public TerminalNode WS(int i) { return getToken(AuthnFlowParser.WS, i); @@ -3480,37 +3567,37 @@ public VariableContext variable() { return getRuleContext(VariableContext.class,0); } public TerminalNode UINT() { return getToken(AuthnFlowParser.UINT, 0); } - public Statusr_allowContext(ParserRuleContext parent, int invokingState) { + public Stchk_openContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_statusr_allow; } + @Override public int getRuleIndex() { return RULE_stchk_open; } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterStatusr_allow(this); + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterStchk_open(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitStatusr_allow(this); + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitStchk_open(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitStatusr_allow(this); + if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitStchk_open(this); else return visitor.visitChildren(this); } } - public final Statusr_allowContext statusr_allow() throws RecognitionException { - Statusr_allowContext _localctx = new Statusr_allowContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_statusr_allow); + public final Stchk_openContext stchk_open() throws RecognitionException { + Stchk_openContext _localctx = new Stchk_openContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_stchk_open); int _la; try { enterOuterAlt(_localctx, 1); { - setState(539); - match(ALLOW); - setState(540); + setState(552); + match(OPEN); + setState(553); match(WS); - setState(543); + setState(556); _errHandler.sync(this); switch (_input.LA(1)) { case ALPHANUM: @@ -3518,101 +3605,34 @@ public final Statusr_allowContext statusr_allow() throws RecognitionException { case DOTEXPR: case DOTIDXEXPR: { - setState(541); + setState(554); variable(); } break; case UINT: { - setState(542); + setState(555); match(UINT); } break; default: throw new NoViableAltException(this); } - setState(545); + setState(558); match(WS); - setState(546); + setState(559); match(SECS); - setState(548); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==WS) { - { - setState(547); - match(WS); - } - } - - setState(550); - match(NL); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class Statusr_replyContext extends ParserRuleContext { - public TerminalNode REPLY() { return getToken(AuthnFlowParser.REPLY, 0); } - public List WS() { return getTokens(AuthnFlowParser.WS); } - public TerminalNode WS(int i) { - return getToken(AuthnFlowParser.WS, i); - } - public Static_callContext static_call() { - return getRuleContext(Static_callContext.class,0); - } - public TerminalNode NL() { return getToken(AuthnFlowParser.NL, 0); } - public Statusr_replyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_statusr_reply; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterStatusr_reply(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitStatusr_reply(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitStatusr_reply(this); - else return visitor.visitChildren(this); - } - } - - public final Statusr_replyContext statusr_reply() throws RecognitionException { - Statusr_replyContext _localctx = new Statusr_replyContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_statusr_reply); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(552); - match(REPLY); - setState(553); - match(WS); - setState(554); - static_call(); - setState(556); + setState(561); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(555); + setState(560); match(WS); } } - setState(558); + setState(563); match(NL); } } @@ -3627,59 +3647,59 @@ public final Statusr_replyContext statusr_reply() throws RecognitionException { return _localctx; } - public static class Statusr_untilContext extends ParserRuleContext { - public TerminalNode UNTIL() { return getToken(AuthnFlowParser.UNTIL, 0); } + public static class Stchk_closeContext extends ParserRuleContext { + public TerminalNode CLOSE() { return getToken(AuthnFlowParser.CLOSE, 0); } public List WS() { return getTokens(AuthnFlowParser.WS); } public TerminalNode WS(int i) { return getToken(AuthnFlowParser.WS, i); } - public Boolean_exprContext boolean_expr() { - return getRuleContext(Boolean_exprContext.class,0); + public CaseofContext caseof() { + return getRuleContext(CaseofContext.class,0); } public TerminalNode NL() { return getToken(AuthnFlowParser.NL, 0); } - public Statusr_untilContext(ParserRuleContext parent, int invokingState) { + public Stchk_closeContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_statusr_until; } + @Override public int getRuleIndex() { return RULE_stchk_close; } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterStatusr_until(this); + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).enterStchk_close(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitStatusr_until(this); + if ( listener instanceof AuthnFlowListener ) ((AuthnFlowListener)listener).exitStchk_close(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitStatusr_until(this); + if ( visitor instanceof AuthnFlowVisitor ) return ((AuthnFlowVisitor)visitor).visitStchk_close(this); else return visitor.visitChildren(this); } } - public final Statusr_untilContext statusr_until() throws RecognitionException { - Statusr_untilContext _localctx = new Statusr_untilContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_statusr_until); + public final Stchk_closeContext stchk_close() throws RecognitionException { + Stchk_closeContext _localctx = new Stchk_closeContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_stchk_close); int _la; try { enterOuterAlt(_localctx, 1); { - setState(560); - match(UNTIL); - setState(561); + setState(565); + match(CLOSE); + setState(566); match(WS); - setState(562); - boolean_expr(); - setState(564); + setState(567); + caseof(); + setState(569); _errHandler.sync(this); _la = _input.LA(1); if (_la==WS) { { - setState(563); + setState(568); match(WS); } } - setState(566); + setState(571); match(NL); } } @@ -3695,223 +3715,226 @@ public final Statusr_untilContext statusr_until() throws RecognitionException { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\39\u023b\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\39\u0240\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!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\3\2\3\2"+ "\6\2W\n\2\r\2\16\2X\3\3\3\3\3\3\3\3\5\3_\n\3\3\3\3\3\3\3\5\3d\n\3\3\3"+ - "\3\3\7\3h\n\3\f\3\16\3k\13\3\3\4\3\4\3\5\3\5\3\5\3\5\5\5s\n\5\3\5\3\5"+ - "\3\6\3\6\3\6\6\6z\n\6\r\6\16\6{\3\6\5\6\177\n\6\3\6\3\6\3\7\3\7\3\b\3"+ - "\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u0090\n\b\3\t\3\t\5\t\u0094"+ - "\n\t\3\t\3\t\5\t\u0098\n\t\3\n\5\n\u009b\n\n\3\n\5\n\u009e\n\n\3\n\3\n"+ - "\5\n\u00a2\n\n\3\n\3\n\5\n\u00a6\n\n\3\n\3\n\5\n\u00aa\n\n\3\13\3\13\3"+ - "\13\3\13\5\13\u00b0\n\13\3\f\5\f\u00b3\n\f\3\f\3\f\3\f\3\f\3\f\5\f\u00ba"+ - "\n\f\3\f\7\f\u00bd\n\f\f\f\16\f\u00c0\13\f\3\f\5\f\u00c3\n\f\3\f\3\f\5"+ - "\f\u00c7\n\f\3\r\3\r\3\r\3\r\3\r\3\r\7\r\u00cf\n\r\f\r\16\r\u00d2\13\r"+ - "\3\r\5\r\u00d5\n\r\3\r\3\r\3\r\3\16\3\16\5\16\u00dc\n\16\3\16\3\16\3\16"+ - "\3\16\5\16\u00e2\n\16\3\16\5\16\u00e5\n\16\3\16\3\16\3\17\5\17\u00ea\n"+ - "\17\3\17\3\17\3\17\3\17\3\17\5\17\u00f1\n\17\3\17\3\17\5\17\u00f5\n\17"+ - "\3\17\5\17\u00f8\n\17\3\17\3\17\5\17\u00fc\n\17\3\20\3\20\6\20\u0100\n"+ - "\20\r\20\16\20\u0101\3\20\5\20\u0105\n\20\3\20\3\20\3\21\3\21\3\21\3\21"+ - "\7\21\u010d\n\21\f\21\16\21\u0110\13\21\3\22\3\22\3\22\3\22\7\22\u0116"+ - "\n\22\f\22\16\22\u0119\13\22\3\23\3\23\3\23\3\24\3\24\3\24\3\24\5\24\u0122"+ - "\n\24\3\25\3\25\3\26\3\26\3\26\5\26\u0129\n\26\3\27\3\27\5\27\u012d\n"+ - "\27\3\27\7\27\u0130\n\27\f\27\16\27\u0133\13\27\3\27\3\27\7\27\u0137\n"+ - "\27\f\27\16\27\u013a\13\27\3\27\5\27\u013d\n\27\3\27\3\27\3\30\3\30\5"+ - "\30\u0143\n\30\3\30\7\30\u0146\n\30\f\30\16\30\u0149\13\30\3\30\3\30\7"+ - "\30\u014d\n\30\f\30\16\30\u0150\13\30\3\30\5\30\u0153\n\30\3\30\3\30\3"+ - "\31\3\31\3\31\5\31\u015a\n\31\3\31\3\31\3\32\3\32\5\32\u0160\n\32\3\32"+ - "\3\32\5\32\u0164\n\32\3\32\3\32\3\33\5\33\u0169\n\33\3\33\3\33\3\33\3"+ - "\33\5\33\u016f\n\33\3\33\3\33\3\34\3\34\3\34\3\34\5\34\u0177\n\34\3\34"+ - "\5\34\u017a\n\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u0184\n"+ - "\35\3\35\3\35\6\35\u0188\n\35\r\35\16\35\u0189\3\35\3\35\5\35\u018e\n"+ - "\35\3\36\3\36\5\36\u0192\n\36\3\36\3\36\6\36\u0196\n\36\r\36\16\36\u0197"+ - "\3\36\3\36\3\37\3\37\3\37\6\37\u019f\n\37\r\37\16\37\u01a0\3\37\3\37\5"+ - "\37\u01a5\n\37\3 \3 \3 \3 \7 \u01ab\n \f \16 \u01ae\13 \3!\7!\u01b1\n"+ - "!\f!\16!\u01b4\13!\3!\3!\5!\u01b8\n!\3!\7!\u01bb\n!\f!\16!\u01be\13!\3"+ - "!\3!\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u01c8\n\"\3\"\3\"\5\"\u01cc\n\"\3#\3"+ - "#\5#\u01d0\n#\3#\3#\6#\u01d4\n#\r#\16#\u01d5\3#\3#\3$\5$\u01db\n$\3$\3"+ - "$\3$\3$\3$\3$\3$\3$\3$\6$\u01e6\n$\r$\16$\u01e7\3$\5$\u01eb\n$\3$\3$\3"+ - "%\5%\u01f0\n%\3%\3%\3%\3%\5%\u01f6\n%\3%\3%\3%\5%\u01fb\n%\3%\3%\6%\u01ff"+ - "\n%\r%\16%\u0200\3%\5%\u0204\n%\3%\3%\3&\3&\3&\3&\3&\7&\u020d\n&\f&\16"+ - "&\u0210\13&\3\'\3\'\3\'\5\'\u0215\n\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3"+ - "(\3(\3(\5(\u0222\n(\3(\3(\3(\5(\u0227\n(\3(\3(\3)\3)\3)\3)\5)\u022f\n"+ - ")\3)\3)\3*\3*\3*\3*\5*\u0237\n*\3*\3*\3*\2\2+\2\4\6\b\n\f\16\20\22\24"+ - "\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPR\2\5\3\2\61\62\3\2+"+ - "\60\3\2#$\2\u0270\2T\3\2\2\2\4Z\3\2\2\2\6l\3\2\2\2\bn\3\2\2\2\nv\3\2\2"+ - "\2\f\u0082\3\2\2\2\16\u008f\3\2\2\2\20\u0091\3\2\2\2\22\u009a\3\2\2\2"+ - "\24\u00af\3\2\2\2\26\u00b2\3\2\2\2\30\u00c8\3\2\2\2\32\u00db\3\2\2\2\34"+ - "\u00e9\3\2\2\2\36\u00fd\3\2\2\2 \u0108\3\2\2\2\"\u0111\3\2\2\2$\u011a"+ - "\3\2\2\2&\u0121\3\2\2\2(\u0123\3\2\2\2*\u0128\3\2\2\2,\u012a\3\2\2\2."+ - "\u0140\3\2\2\2\60\u0156\3\2\2\2\62\u015d\3\2\2\2\64\u0168\3\2\2\2\66\u0172"+ - "\3\2\2\28\u017d\3\2\2\2:\u018f\3\2\2\2<\u019b\3\2\2\2>\u01a6\3\2\2\2@"+ - "\u01b2\3\2\2\2B\u01c1\3\2\2\2D\u01cd\3\2\2\2F\u01da\3\2\2\2H\u01ef\3\2"+ - "\2\2J\u0207\3\2\2\2L\u0211\3\2\2\2N\u021d\3\2\2\2P\u022a\3\2\2\2R\u0232"+ - "\3\2\2\2TV\5\4\3\2UW\5\16\b\2VU\3\2\2\2WX\3\2\2\2XV\3\2\2\2XY\3\2\2\2"+ - "Y\3\3\2\2\2Z[\7\r\2\2[\\\7\67\2\2\\^\5\6\4\2]_\7\67\2\2^]\3\2\2\2^_\3"+ - "\2\2\2_`\3\2\2\2`a\78\2\2ac\5\b\5\2bd\5\n\6\2cb\3\2\2\2cd\3\2\2\2de\3"+ - "\2\2\2ei\79\2\2fh\7\13\2\2gf\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2j\5"+ - "\3\2\2\2ki\3\2\2\2lm\t\2\2\2m\7\3\2\2\2no\7\16\2\2op\7\67\2\2pr\7-\2\2"+ - "qs\7\67\2\2rq\3\2\2\2rs\3\2\2\2st\3\2\2\2tu\7\13\2\2u\t\3\2\2\2vy\7\17"+ - "\2\2wx\7\67\2\2xz\5\f\7\2yw\3\2\2\2z{\3\2\2\2{y\3\2\2\2{|\3\2\2\2|~\3"+ - "\2\2\2}\177\7\67\2\2~}\3\2\2\2~\177\3\2\2\2\177\u0080\3\2\2\2\u0080\u0081"+ - "\7\13\2\2\u0081\13\3\2\2\2\u0082\u0083\7\61\2\2\u0083\r\3\2\2\2\u0084"+ - "\u0090\5\26\f\2\u0085\u0090\5\32\16\2\u0086\u0090\5\34\17\2\u0087\u0090"+ - "\5\60\31\2\u0088\u0090\5\36\20\2\u0089\u0090\5\64\33\2\u008a\u0090\5\66"+ - "\34\2\u008b\u0090\5<\37\2\u008c\u0090\58\35\2\u008d\u0090\5F$\2\u008e"+ - "\u0090\5H%\2\u008f\u0084\3\2\2\2\u008f\u0085\3\2\2\2\u008f\u0086\3\2\2"+ - "\2\u008f\u0087\3\2\2\2\u008f\u0088\3\2\2\2\u008f\u0089\3\2\2\2\u008f\u008a"+ - "\3\2\2\2\u008f\u008b\3\2\2\2\u008f\u008c\3\2\2\2\u008f\u008d\3\2\2\2\u008f"+ - "\u008e\3\2\2\2\u0090\17\3\2\2\2\u0091\u0093\5\24\13\2\u0092\u0094\7\67"+ - "\2\2\u0093\u0092\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u0095\3\2\2\2\u0095"+ - "\u0097\7)\2\2\u0096\u0098\7\67\2\2\u0097\u0096\3\2\2\2\u0097\u0098\3\2"+ - "\2\2\u0098\21\3\2\2\2\u0099\u009b\5\24\13\2\u009a\u0099\3\2\2\2\u009a"+ - "\u009b\3\2\2\2\u009b\u009d\3\2\2\2\u009c\u009e\7\67\2\2\u009d\u009c\3"+ - "\2\2\2\u009d\u009e\3\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a1\7\3\2\2\u00a0"+ - "\u00a2\7\67\2\2\u00a1\u00a0\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a3\3"+ - "\2\2\2\u00a3\u00a5\5\f\7\2\u00a4\u00a6\7\67\2\2\u00a5\u00a4\3\2\2\2\u00a5"+ - "\u00a6\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a9\7)\2\2\u00a8\u00aa\7\67"+ - "\2\2\u00a9\u00a8\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\23\3\2\2\2\u00ab\u00b0"+ - "\5\f\7\2\u00ac\u00b0\7\62\2\2\u00ad\u00b0\7\64\2\2\u00ae\u00b0\7\65\2"+ - "\2\u00af\u00ab\3\2\2\2\u00af\u00ac\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00ae"+ - "\3\2\2\2\u00b0\25\3\2\2\2\u00b1\u00b3\5\20\t\2\u00b2\u00b1\3\2\2\2\u00b2"+ - "\u00b3\3\2\2\2\u00b3\u00b4\3\2\2\2\u00b4\u00b5\7\21\2\2\u00b5\u00b9\7"+ - "\67\2\2\u00b6\u00b7\7\4\2\2\u00b7\u00ba\5\24\13\2\u00b8\u00ba\5\6\4\2"+ - "\u00b9\u00b6\3\2\2\2\u00b9\u00b8\3\2\2\2\u00ba\u00be\3\2\2\2\u00bb\u00bd"+ - "\5$\23\2\u00bc\u00bb\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00be"+ - "\u00bf\3\2\2\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2\u00c1\u00c3\7\67"+ - "\2\2\u00c2\u00c1\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c6\3\2\2\2\u00c4"+ - "\u00c7\5\30\r\2\u00c5\u00c7\7\13\2\2\u00c6\u00c4\3\2\2\2\u00c6\u00c5\3"+ - "\2\2\2\u00c7\27\3\2\2\2\u00c8\u00c9\78\2\2\u00c9\u00ca\7\30\2\2\u00ca"+ - "\u00cb\7\67\2\2\u00cb\u00d0\7-\2\2\u00cc\u00cd\7\67\2\2\u00cd\u00cf\7"+ - "-\2\2\u00ce\u00cc\3\2\2\2\u00cf\u00d2\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d0"+ - "\u00d1\3\2\2\2\u00d1\u00d4\3\2\2\2\u00d2\u00d0\3\2\2\2\u00d3\u00d5\7\67"+ - "\2\2\u00d4\u00d3\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\3\2\2\2\u00d6"+ - "\u00d7\7\13\2\2\u00d7\u00d8\79\2\2\u00d8\31\3\2\2\2\u00d9\u00dc\5\20\t"+ - "\2\u00da\u00dc\5\22\n\2\u00db\u00d9\3\2\2\2\u00db\u00da\3\2\2\2\u00db"+ - "\u00dc\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00de\7\22\2\2\u00de\u00e1\7"+ - "\67\2\2\u00df\u00e2\5 \21\2\u00e0\u00e2\5\"\22\2\u00e1\u00df\3\2\2\2\u00e1"+ - "\u00e0\3\2\2\2\u00e2\u00e4\3\2\2\2\u00e3\u00e5\7\67\2\2\u00e4\u00e3\3"+ - "\2\2\2\u00e4\u00e5\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e7\7\13\2\2\u00e7"+ - "\33\3\2\2\2\u00e8\u00ea\5\20\t\2\u00e9\u00e8\3\2\2\2\u00e9\u00ea\3\2\2"+ - "\2\u00ea\u00eb\3\2\2\2\u00eb\u00ec\7\23\2\2\u00ec\u00ed\7\67\2\2\u00ed"+ - "\u00f0\7-\2\2\u00ee\u00ef\7\67\2\2\u00ef\u00f1\5\24\13\2\u00f0\u00ee\3"+ - "\2\2\2\u00f0\u00f1\3\2\2\2\u00f1\u00f4\3\2\2\2\u00f2\u00f3\7\67\2\2\u00f3"+ - "\u00f5\7,\2\2\u00f4\u00f2\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f7\3\2"+ - "\2\2\u00f6\u00f8\7\67\2\2\u00f7\u00f6\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8"+ - "\u00fb\3\2\2\2\u00f9\u00fc\5L\'\2\u00fa\u00fc\7\13\2\2\u00fb\u00f9\3\2"+ - "\2\2\u00fb\u00fa\3\2\2\2\u00fc\35\3\2\2\2\u00fd\u00ff\7\20\2\2\u00fe\u0100"+ - "\5$\23\2\u00ff\u00fe\3\2\2\2\u0100\u0101\3\2\2\2\u0101\u00ff\3\2\2\2\u0101"+ - "\u0102\3\2\2\2\u0102\u0104\3\2\2\2\u0103\u0105\7\67\2\2\u0104\u0103\3"+ - "\2\2\2\u0104\u0105\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u0107\7\13\2\2\u0107"+ - "\37\3\2\2\2\u0108\u0109\5\6\4\2\u0109\u010a\7\5\2\2\u010a\u010e\7\61\2"+ - "\2\u010b\u010d\5$\23\2\u010c\u010b\3\2\2\2\u010d\u0110\3\2\2\2\u010e\u010c"+ - "\3\2\2\2\u010e\u010f\3\2\2\2\u010f!\3\2\2\2\u0110\u010e\3\2\2\2\u0111"+ - "\u0112\5\24\13\2\u0112\u0113\7\67\2\2\u0113\u0117\7\61\2\2\u0114\u0116"+ - "\5$\23\2\u0115\u0114\3\2\2\2\u0116\u0119\3\2\2\2\u0117\u0115\3\2\2\2\u0117"+ - "\u0118\3\2\2\2\u0118#\3\2\2\2\u0119\u0117\3\2\2\2\u011a\u011b\7\67\2\2"+ - "\u011b\u011c\5&\24\2\u011c%\3\2\2\2\u011d\u0122\5(\25\2\u011e\u0122\5"+ - "\24\13\2\u011f\u0120\7*\2\2\u0120\u0122\5\24\13\2\u0121\u011d\3\2\2\2"+ - "\u0121\u011e\3\2\2\2\u0121\u011f\3\2\2\2\u0122\'\3\2\2\2\u0123\u0124\t"+ - "\3\2\2\u0124)\3\2\2\2\u0125\u0129\5.\30\2\u0126\u0129\5,\27\2\u0127\u0129"+ - "\5&\24\2\u0128\u0125\3\2\2\2\u0128\u0126\3\2\2\2\u0128\u0127\3\2\2\2\u0129"+ - "+\3\2\2\2\u012a\u012c\7\6\2\2\u012b\u012d\7\67\2\2\u012c\u012b\3\2\2\2"+ - "\u012c\u012d\3\2\2\2\u012d\u0131\3\2\2\2\u012e\u0130\5*\26\2\u012f\u012e"+ - "\3\2\2\2\u0130\u0133\3\2\2\2\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2\u0132"+ - "\u0138\3\2\2\2\u0133\u0131\3\2\2\2\u0134\u0135\7\66\2\2\u0135\u0137\5"+ - "*\26\2\u0136\u0134\3\2\2\2\u0137\u013a\3\2\2\2\u0138\u0136\3\2\2\2\u0138"+ - "\u0139\3\2\2\2\u0139\u013c\3\2\2\2\u013a\u0138\3\2\2\2\u013b\u013d\7\67"+ - "\2\2\u013c\u013b\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u013e\3\2\2\2\u013e"+ - "\u013f\7\7\2\2\u013f-\3\2\2\2\u0140\u0142\7\b\2\2\u0141\u0143\7\67\2\2"+ - "\u0142\u0141\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0147\3\2\2\2\u0144\u0146"+ - "\5\62\32\2\u0145\u0144\3\2\2\2\u0146\u0149\3\2\2\2\u0147\u0145\3\2\2\2"+ - "\u0147\u0148\3\2\2\2\u0148\u014e\3\2\2\2\u0149\u0147\3\2\2\2\u014a\u014b"+ - "\7\66\2\2\u014b\u014d\5\62\32\2\u014c\u014a\3\2\2\2\u014d\u0150\3\2\2"+ - "\2\u014e\u014c\3\2\2\2\u014e\u014f\3\2\2\2\u014f\u0152\3\2\2\2\u0150\u014e"+ - "\3\2\2\2\u0151\u0153\7\67\2\2\u0152\u0151\3\2\2\2\u0152\u0153\3\2\2\2"+ - "\u0153\u0154\3\2\2\2\u0154\u0155\7\t\2\2\u0155/\3\2\2\2\u0156\u0157\5"+ - "\20\t\2\u0157\u0159\5*\26\2\u0158\u015a\7\67\2\2\u0159\u0158\3\2\2\2\u0159"+ - "\u015a\3\2\2\2\u015a\u015b\3\2\2\2\u015b\u015c\7\13\2\2\u015c\61\3\2\2"+ - "\2\u015d\u015f\7\61\2\2\u015e\u0160\7\67\2\2\u015f\u015e\3\2\2\2\u015f"+ - "\u0160\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u0163\7\n\2\2\u0162\u0164\7\67"+ - "\2\2\u0163\u0162\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u0165\3\2\2\2\u0165"+ - "\u0166\5*\26\2\u0166\63\3\2\2\2\u0167\u0169\5\20\t\2\u0168\u0167\3\2\2"+ - "\2\u0168\u0169\3\2\2\2\u0169\u016a\3\2\2\2\u016a\u016b\7 \2\2\u016b\u016e"+ - "\7\67\2\2\u016c\u016f\7-\2\2\u016d\u016f\5\24\13\2\u016e\u016c\3\2\2\2"+ - "\u016e\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u0171\7\13\2\2\u0171\65"+ - "\3\2\2\2\u0172\u0173\7\37\2\2\u0173\u0176\7\67\2\2\u0174\u0177\7,\2\2"+ - "\u0175\u0177\5\24\13\2\u0176\u0174\3\2\2\2\u0176\u0175\3\2\2\2\u0177\u0179"+ - "\3\2\2\2\u0178\u017a\7\67\2\2\u0179\u0178\3\2\2\2\u0179\u017a\3\2\2\2"+ - "\u017a\u017b\3\2\2\2\u017b\u017c\7\13\2\2\u017c\67\3\2\2\2\u017d\u017e"+ - "\7\35\2\2\u017e\u017f\7\67\2\2\u017f\u0180\5&\24\2\u0180\u0181\7\67\2"+ - "\2\u0181\u0183\7&\2\2\u0182\u0184\7\67\2\2\u0183\u0182\3\2\2\2\u0183\u0184"+ - "\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0187\78\2\2\u0186\u0188\5:\36\2\u0187"+ - "\u0186\3\2\2\2\u0188\u0189\3\2\2\2\u0189\u0187\3\2\2\2\u0189\u018a\3\2"+ - "\2\2\u018a\u018b\3\2\2\2\u018b\u018d\79\2\2\u018c\u018e\5D#\2\u018d\u018c"+ - "\3\2\2\2\u018d\u018e\3\2\2\2\u018e9\3\2\2\2\u018f\u0191\5&\24\2\u0190"+ - "\u0192\7\67\2\2\u0191\u0190\3\2\2\2\u0191\u0192\3\2\2\2\u0192\u0193\3"+ - "\2\2\2\u0193\u0195\78\2\2\u0194\u0196\5\16\b\2\u0195\u0194\3\2\2\2\u0196"+ - "\u0197\3\2\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198\u0199\3\2"+ - "\2\2\u0199\u019a\79\2\2\u019a;\3\2\2\2\u019b\u019c\5> \2\u019c\u019e\7"+ - "8\2\2\u019d\u019f\5\16\b\2\u019e\u019d\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0"+ - "\u019e\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a4\79"+ - "\2\2\u01a3\u01a5\5D#\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5="+ - "\3\2\2\2\u01a6\u01a7\7\31\2\2\u01a7\u01a8\7\67\2\2\u01a8\u01ac\5B\"\2"+ - "\u01a9\u01ab\5@!\2\u01aa\u01a9\3\2\2\2\u01ab\u01ae\3\2\2\2\u01ac\u01aa"+ - "\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad?\3\2\2\2\u01ae\u01ac\3\2\2\2\u01af"+ - "\u01b1\7\13\2\2\u01b0\u01af\3\2\2\2\u01b1\u01b4\3\2\2\2\u01b2\u01b0\3"+ - "\2\2\2\u01b2\u01b3\3\2\2\2\u01b3\u01b5\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b5"+ - "\u01b7\t\4\2\2\u01b6\u01b8\7\67\2\2\u01b7\u01b6\3\2\2\2\u01b7\u01b8\3"+ - "\2\2\2\u01b8\u01bc\3\2\2\2\u01b9\u01bb\7\13\2\2\u01ba\u01b9\3\2\2\2\u01bb"+ - "\u01be\3\2\2\2\u01bc\u01ba\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01bf\3\2"+ - "\2\2\u01be\u01bc\3\2\2\2\u01bf\u01c0\5B\"\2\u01c0A\3\2\2\2\u01c1\u01c2"+ - "\5&\24\2\u01c2\u01c3\7\67\2\2\u01c3\u01c4\7!\2\2\u01c4\u01c7\7\67\2\2"+ - "\u01c5\u01c6\7\"\2\2\u01c6\u01c8\7\67\2\2\u01c7\u01c5\3\2\2\2\u01c7\u01c8"+ - "\3\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\u01cb\5&\24\2\u01ca\u01cc\7\67\2\2"+ - "\u01cb\u01ca\3\2\2\2\u01cb\u01cc\3\2\2\2\u01ccC\3\2\2\2\u01cd\u01cf\7"+ - "\32\2\2\u01ce\u01d0\7\67\2\2\u01cf\u01ce\3\2\2\2\u01cf\u01d0\3\2\2\2\u01d0"+ - "\u01d1\3\2\2\2\u01d1\u01d3\78\2\2\u01d2\u01d4\5\16\b\2\u01d3\u01d2\3\2"+ - "\2\2\u01d4\u01d5\3\2\2\2\u01d5\u01d3\3\2\2\2\u01d5\u01d6\3\2\2\2\u01d6"+ - "\u01d7\3\2\2\2\u01d7\u01d8\79\2\2\u01d8E\3\2\2\2\u01d9\u01db\5\20\t\2"+ - "\u01da\u01d9\3\2\2\2\u01da\u01db\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01dd"+ - "\7\34\2\2\u01dd\u01de\7\67\2\2\u01de\u01df\5\24\13\2\u01df\u01e0\7\67"+ - "\2\2\u01e0\u01e1\7(\2\2\u01e1\u01e2\7\67\2\2\u01e2\u01e3\5\f\7\2\u01e3"+ - "\u01e5\78\2\2\u01e4\u01e6\5\16\b\2\u01e5\u01e4\3\2\2\2\u01e6\u01e7\3\2"+ - "\2\2\u01e7\u01e5\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e8\u01ea\3\2\2\2\u01e9"+ - "\u01eb\5J&\2\u01ea\u01e9\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2"+ - "\2\u01ec\u01ed\79\2\2\u01edG\3\2\2\2\u01ee\u01f0\5\20\t\2\u01ef\u01ee"+ - "\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f2\7\33\2\2"+ - "\u01f2\u01f5\7\67\2\2\u01f3\u01f6\5\24\13\2\u01f4\u01f6\7.\2\2\u01f5\u01f3"+ - "\3\2\2\2\u01f5\u01f4\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7\u01f8\7\67\2\2"+ - "\u01f8\u01fa\7\'\2\2\u01f9\u01fb\7\67\2\2\u01fa\u01f9\3\2\2\2\u01fa\u01fb"+ - "\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fe\78\2\2\u01fd\u01ff\5\16\b\2\u01fe"+ - "\u01fd\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u01fe\3\2\2\2\u0200\u0201\3\2"+ - "\2\2\u0201\u0203\3\2\2\2\u0202\u0204\5J&\2\u0203\u0202\3\2\2\2\u0203\u0204"+ - "\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0206\79\2\2\u0206I\3\2\2\2\u0207\u0208"+ - "\7\36\2\2\u0208\u0209\7\67\2\2\u0209\u020a\5> \2\u020a\u020e\7\13\2\2"+ - "\u020b\u020d\5\16\b\2\u020c\u020b\3\2\2\2\u020d\u0210\3\2\2\2\u020e\u020c"+ - "\3\2\2\2\u020e\u020f\3\2\2\2\u020fK\3\2\2\2\u0210\u020e\3\2\2\2\u0211"+ - "\u0212\78\2\2\u0212\u0214\7\24\2\2\u0213\u0215\7\67\2\2\u0214\u0213\3"+ - "\2\2\2\u0214\u0215\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0217\78\2\2\u0217"+ - "\u0218\5N(\2\u0218\u0219\5P)\2\u0219\u021a\5R*\2\u021a\u021b\79\2\2\u021b"+ - "\u021c\79\2\2\u021cM\3\2\2\2\u021d\u021e\7\25\2\2\u021e\u0221\7\67\2\2"+ - "\u021f\u0222\5\24\13\2\u0220\u0222\7.\2\2\u0221\u021f\3\2\2\2\u0221\u0220"+ - "\3\2\2\2\u0222\u0223\3\2\2\2\u0223\u0224\7\67\2\2\u0224\u0226\7%\2\2\u0225"+ - "\u0227\7\67\2\2\u0226\u0225\3\2\2\2\u0226\u0227\3\2\2\2\u0227\u0228\3"+ - "\2\2\2\u0228\u0229\7\13\2\2\u0229O\3\2\2\2\u022a\u022b\7\26\2\2\u022b"+ - "\u022c\7\67\2\2\u022c\u022e\5 \21\2\u022d\u022f\7\67\2\2\u022e\u022d\3"+ - "\2\2\2\u022e\u022f\3\2\2\2\u022f\u0230\3\2\2\2\u0230\u0231\7\13\2\2\u0231"+ - "Q\3\2\2\2\u0232\u0233\7\27\2\2\u0233\u0234\7\67\2\2\u0234\u0236\5B\"\2"+ - "\u0235\u0237\7\67\2\2\u0236\u0235\3\2\2\2\u0236\u0237\3\2\2\2\u0237\u0238"+ - "\3\2\2\2\u0238\u0239\7\13\2\2\u0239S\3\2\2\2SX^cir{~\u008f\u0093\u0097"+ - "\u009a\u009d\u00a1\u00a5\u00a9\u00af\u00b2\u00b9\u00be\u00c2\u00c6\u00d0"+ - "\u00d4\u00db\u00e1\u00e4\u00e9\u00f0\u00f4\u00f7\u00fb\u0101\u0104\u010e"+ - "\u0117\u0121\u0128\u012c\u0131\u0138\u013c\u0142\u0147\u014e\u0152\u0159"+ - "\u015f\u0163\u0168\u016e\u0176\u0179\u0183\u0189\u018d\u0191\u0197\u01a0"+ - "\u01a4\u01ac\u01b2\u01b7\u01bc\u01c7\u01cb\u01cf\u01d5\u01da\u01e7\u01ea"+ - "\u01ef\u01f5\u01fa\u0200\u0203\u020e\u0214\u0221\u0226\u022e\u0236"; + "\5\3g\n\3\3\3\3\3\7\3k\n\3\f\3\16\3n\13\3\3\4\3\4\3\5\3\5\3\5\3\5\5\5"+ + "v\n\5\3\5\3\5\3\6\3\6\3\6\3\6\5\6~\n\6\3\6\3\6\3\7\3\7\3\7\6\7\u0085\n"+ + "\7\r\7\16\7\u0086\3\7\5\7\u008a\n\7\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\t\3"+ + "\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u009b\n\t\3\n\3\n\5\n\u009f\n\n\3\n\3\n"+ + "\5\n\u00a3\n\n\3\13\5\13\u00a6\n\13\3\13\5\13\u00a9\n\13\3\13\3\13\5\13"+ + "\u00ad\n\13\3\13\3\13\5\13\u00b1\n\13\3\13\3\13\5\13\u00b5\n\13\3\f\3"+ + "\f\3\f\3\f\5\f\u00bb\n\f\3\r\5\r\u00be\n\r\3\r\3\r\3\r\3\r\3\r\5\r\u00c5"+ + "\n\r\3\r\7\r\u00c8\n\r\f\r\16\r\u00cb\13\r\3\r\5\r\u00ce\n\r\3\r\3\r\5"+ + "\r\u00d2\n\r\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u00da\n\16\f\16\16\16"+ + "\u00dd\13\16\3\16\5\16\u00e0\n\16\3\16\3\16\3\16\3\17\3\17\5\17\u00e7"+ + "\n\17\3\17\3\17\3\17\3\17\5\17\u00ed\n\17\3\17\5\17\u00f0\n\17\3\17\3"+ + "\17\3\20\5\20\u00f5\n\20\3\20\3\20\3\20\3\20\3\20\5\20\u00fc\n\20\3\20"+ + "\3\20\5\20\u0100\n\20\3\20\5\20\u0103\n\20\3\20\3\20\5\20\u0107\n\20\3"+ + "\21\3\21\6\21\u010b\n\21\r\21\16\21\u010c\3\21\5\21\u0110\n\21\3\21\3"+ + "\21\3\22\3\22\3\22\3\22\7\22\u0118\n\22\f\22\16\22\u011b\13\22\3\23\3"+ + "\23\3\23\3\23\7\23\u0121\n\23\f\23\16\23\u0124\13\23\3\24\3\24\3\24\3"+ + "\25\3\25\3\25\3\25\5\25\u012d\n\25\3\26\3\26\3\27\3\27\3\27\5\27\u0134"+ + "\n\27\3\30\3\30\5\30\u0138\n\30\3\30\7\30\u013b\n\30\f\30\16\30\u013e"+ + "\13\30\3\30\3\30\7\30\u0142\n\30\f\30\16\30\u0145\13\30\3\30\5\30\u0148"+ + "\n\30\3\30\3\30\3\31\3\31\5\31\u014e\n\31\3\31\7\31\u0151\n\31\f\31\16"+ + "\31\u0154\13\31\3\31\3\31\7\31\u0158\n\31\f\31\16\31\u015b\13\31\3\31"+ + "\5\31\u015e\n\31\3\31\3\31\3\32\3\32\3\32\5\32\u0165\n\32\3\32\3\32\3"+ + "\33\3\33\5\33\u016b\n\33\3\33\3\33\5\33\u016f\n\33\3\33\3\33\3\34\5\34"+ + "\u0174\n\34\3\34\3\34\3\34\3\34\5\34\u017a\n\34\3\34\3\34\3\35\3\35\3"+ + "\35\3\35\5\35\u0182\n\35\3\35\5\35\u0185\n\35\3\35\3\35\3\36\3\36\3\36"+ + "\3\36\3\36\3\36\5\36\u018f\n\36\3\36\3\36\6\36\u0193\n\36\r\36\16\36\u0194"+ + "\3\36\3\36\5\36\u0199\n\36\3\37\3\37\5\37\u019d\n\37\3\37\3\37\6\37\u01a1"+ + "\n\37\r\37\16\37\u01a2\3\37\3\37\3 \3 \3 \6 \u01aa\n \r \16 \u01ab\3 "+ + "\3 \5 \u01b0\n \3!\3!\3!\3!\7!\u01b6\n!\f!\16!\u01b9\13!\3\"\7\"\u01bc"+ + "\n\"\f\"\16\"\u01bf\13\"\3\"\3\"\5\"\u01c3\n\"\3\"\7\"\u01c6\n\"\f\"\16"+ + "\"\u01c9\13\"\3\"\3\"\3#\3#\3#\3#\3#\3#\5#\u01d3\n#\3#\3#\5#\u01d7\n#"+ + "\3$\3$\5$\u01db\n$\3$\3$\6$\u01df\n$\r$\16$\u01e0\3$\3$\3%\5%\u01e6\n"+ + "%\3%\3%\3%\3%\3%\3%\3%\3%\3%\6%\u01f1\n%\r%\16%\u01f2\3%\5%\u01f6\n%\3"+ + "%\3%\3&\5&\u01fb\n&\3&\3&\3&\3&\5&\u0201\n&\3&\3&\3&\5&\u0206\n&\3&\3"+ + "&\6&\u020a\n&\r&\16&\u020b\3&\5&\u020f\n&\3&\3&\3\'\3\'\3\'\3\'\3\'\7"+ + "\'\u0218\n\'\f\'\16\'\u021b\13\'\3(\3(\3(\5(\u0220\n(\3(\3(\3(\5(\u0225"+ + "\n(\3(\3(\3(\3(\3)\3)\3)\3)\5)\u022f\n)\3)\3)\3)\5)\u0234\n)\3)\3)\3*"+ + "\3*\3*\3*\5*\u023c\n*\3*\3*\3*\2\2+\2\4\6\b\n\f\16\20\22\24\26\30\32\34"+ + "\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPR\2\5\3\2\61\62\3\2+\60\3\2#$\2\u0277"+ + "\2T\3\2\2\2\4Z\3\2\2\2\6o\3\2\2\2\bq\3\2\2\2\ny\3\2\2\2\f\u0081\3\2\2"+ + "\2\16\u008d\3\2\2\2\20\u009a\3\2\2\2\22\u009c\3\2\2\2\24\u00a5\3\2\2\2"+ + "\26\u00ba\3\2\2\2\30\u00bd\3\2\2\2\32\u00d3\3\2\2\2\34\u00e6\3\2\2\2\36"+ + "\u00f4\3\2\2\2 \u0108\3\2\2\2\"\u0113\3\2\2\2$\u011c\3\2\2\2&\u0125\3"+ + "\2\2\2(\u012c\3\2\2\2*\u012e\3\2\2\2,\u0133\3\2\2\2.\u0135\3\2\2\2\60"+ + "\u014b\3\2\2\2\62\u0161\3\2\2\2\64\u0168\3\2\2\2\66\u0173\3\2\2\28\u017d"+ + "\3\2\2\2:\u0188\3\2\2\2<\u019a\3\2\2\2>\u01a6\3\2\2\2@\u01b1\3\2\2\2B"+ + "\u01bd\3\2\2\2D\u01cc\3\2\2\2F\u01d8\3\2\2\2H\u01e5\3\2\2\2J\u01fa\3\2"+ + "\2\2L\u0212\3\2\2\2N\u021c\3\2\2\2P\u022a\3\2\2\2R\u0237\3\2\2\2TV\5\4"+ + "\3\2UW\5\20\t\2VU\3\2\2\2WX\3\2\2\2XV\3\2\2\2XY\3\2\2\2Y\3\3\2\2\2Z[\7"+ + "\r\2\2[\\\7\67\2\2\\^\5\6\4\2]_\7\67\2\2^]\3\2\2\2^_\3\2\2\2_`\3\2\2\2"+ + "`a\78\2\2ac\5\b\5\2bd\5\n\6\2cb\3\2\2\2cd\3\2\2\2df\3\2\2\2eg\5\f\7\2"+ + "fe\3\2\2\2fg\3\2\2\2gh\3\2\2\2hl\79\2\2ik\7\13\2\2ji\3\2\2\2kn\3\2\2\2"+ + "lj\3\2\2\2lm\3\2\2\2m\5\3\2\2\2nl\3\2\2\2op\t\2\2\2p\7\3\2\2\2qr\7\16"+ + "\2\2rs\7\67\2\2su\7-\2\2tv\7\67\2\2ut\3\2\2\2uv\3\2\2\2vw\3\2\2\2wx\7"+ + "\13\2\2x\t\3\2\2\2yz\7\17\2\2z{\7\67\2\2{}\5\16\b\2|~\7\67\2\2}|\3\2\2"+ + "\2}~\3\2\2\2~\177\3\2\2\2\177\u0080\7\13\2\2\u0080\13\3\2\2\2\u0081\u0084"+ + "\7\20\2\2\u0082\u0083\7\67\2\2\u0083\u0085\5\16\b\2\u0084\u0082\3\2\2"+ + "\2\u0085\u0086\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u0089"+ + "\3\2\2\2\u0088\u008a\7\67\2\2\u0089\u0088\3\2\2\2\u0089\u008a\3\2\2\2"+ + "\u008a\u008b\3\2\2\2\u008b\u008c\7\13\2\2\u008c\r\3\2\2\2\u008d\u008e"+ + "\7\61\2\2\u008e\17\3\2\2\2\u008f\u009b\5\30\r\2\u0090\u009b\5\34\17\2"+ + "\u0091\u009b\5\36\20\2\u0092\u009b\5\62\32\2\u0093\u009b\5 \21\2\u0094"+ + "\u009b\5\66\34\2\u0095\u009b\58\35\2\u0096\u009b\5> \2\u0097\u009b\5:"+ + "\36\2\u0098\u009b\5H%\2\u0099\u009b\5J&\2\u009a\u008f\3\2\2\2\u009a\u0090"+ + "\3\2\2\2\u009a\u0091\3\2\2\2\u009a\u0092\3\2\2\2\u009a\u0093\3\2\2\2\u009a"+ + "\u0094\3\2\2\2\u009a\u0095\3\2\2\2\u009a\u0096\3\2\2\2\u009a\u0097\3\2"+ + "\2\2\u009a\u0098\3\2\2\2\u009a\u0099\3\2\2\2\u009b\21\3\2\2\2\u009c\u009e"+ + "\5\26\f\2\u009d\u009f\7\67\2\2\u009e\u009d\3\2\2\2\u009e\u009f\3\2\2\2"+ + "\u009f\u00a0\3\2\2\2\u00a0\u00a2\7)\2\2\u00a1\u00a3\7\67\2\2\u00a2\u00a1"+ + "\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\23\3\2\2\2\u00a4\u00a6\5\26\f\2\u00a5"+ + "\u00a4\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6\u00a8\3\2\2\2\u00a7\u00a9\7\67"+ + "\2\2\u00a8\u00a7\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa"+ + "\u00ac\7\3\2\2\u00ab\u00ad\7\67\2\2\u00ac\u00ab\3\2\2\2\u00ac\u00ad\3"+ + "\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00b0\5\16\b\2\u00af\u00b1\7\67\2\2\u00b0"+ + "\u00af\3\2\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b2\3\2\2\2\u00b2\u00b4\7)"+ + "\2\2\u00b3\u00b5\7\67\2\2\u00b4\u00b3\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5"+ + "\25\3\2\2\2\u00b6\u00bb\5\16\b\2\u00b7\u00bb\7\62\2\2\u00b8\u00bb\7\64"+ + "\2\2\u00b9\u00bb\7\65\2\2\u00ba\u00b6\3\2\2\2\u00ba\u00b7\3\2\2\2\u00ba"+ + "\u00b8\3\2\2\2\u00ba\u00b9\3\2\2\2\u00bb\27\3\2\2\2\u00bc\u00be\5\22\n"+ + "\2\u00bd\u00bc\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0"+ + "\7\22\2\2\u00c0\u00c4\7\67\2\2\u00c1\u00c2\7\4\2\2\u00c2\u00c5\5\26\f"+ + "\2\u00c3\u00c5\5\6\4\2\u00c4\u00c1\3\2\2\2\u00c4\u00c3\3\2\2\2\u00c5\u00c9"+ + "\3\2\2\2\u00c6\u00c8\5&\24\2\u00c7\u00c6\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9"+ + "\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cd\3\2\2\2\u00cb\u00c9\3\2"+ + "\2\2\u00cc\u00ce\7\67\2\2\u00cd\u00cc\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce"+ + "\u00d1\3\2\2\2\u00cf\u00d2\5\32\16\2\u00d0\u00d2\7\13\2\2\u00d1\u00cf"+ + "\3\2\2\2\u00d1\u00d0\3\2\2\2\u00d2\31\3\2\2\2\u00d3\u00d4\78\2\2\u00d4"+ + "\u00d5\7\30\2\2\u00d5\u00d6\7\67\2\2\u00d6\u00db\7-\2\2\u00d7\u00d8\7"+ + "\67\2\2\u00d8\u00da\7-\2\2\u00d9\u00d7\3\2\2\2\u00da\u00dd\3\2\2\2\u00db"+ + "\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00df\3\2\2\2\u00dd\u00db\3\2"+ + "\2\2\u00de\u00e0\7\67\2\2\u00df\u00de\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0"+ + "\u00e1\3\2\2\2\u00e1\u00e2\7\13\2\2\u00e2\u00e3\79\2\2\u00e3\33\3\2\2"+ + "\2\u00e4\u00e7\5\22\n\2\u00e5\u00e7\5\24\13\2\u00e6\u00e4\3\2\2\2\u00e6"+ + "\u00e5\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00e8\3\2\2\2\u00e8\u00e9\7\23"+ + "\2\2\u00e9\u00ec\7\67\2\2\u00ea\u00ed\5\"\22\2\u00eb\u00ed\5$\23\2\u00ec"+ + "\u00ea\3\2\2\2\u00ec\u00eb\3\2\2\2\u00ed\u00ef\3\2\2\2\u00ee\u00f0\7\67"+ + "\2\2\u00ef\u00ee\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1"+ + "\u00f2\7\13\2\2\u00f2\35\3\2\2\2\u00f3\u00f5\5\22\n\2\u00f4\u00f3\3\2"+ + "\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f7\7\24\2\2\u00f7"+ + "\u00f8\7\67\2\2\u00f8\u00fb\7-\2\2\u00f9\u00fa\7\67\2\2\u00fa\u00fc\5"+ + "\26\f\2\u00fb\u00f9\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc\u00ff\3\2\2\2\u00fd"+ + "\u00fe\7\67\2\2\u00fe\u0100\7,\2\2\u00ff\u00fd\3\2\2\2\u00ff\u0100\3\2"+ + "\2\2\u0100\u0102\3\2\2\2\u0101\u0103\7\67\2\2\u0102\u0101\3\2\2\2\u0102"+ + "\u0103\3\2\2\2\u0103\u0106\3\2\2\2\u0104\u0107\5N(\2\u0105\u0107\7\13"+ + "\2\2\u0106\u0104\3\2\2\2\u0106\u0105\3\2\2\2\u0107\37\3\2\2\2\u0108\u010a"+ + "\7\21\2\2\u0109\u010b\5&\24\2\u010a\u0109\3\2\2\2\u010b\u010c\3\2\2\2"+ + "\u010c\u010a\3\2\2\2\u010c\u010d\3\2\2\2\u010d\u010f\3\2\2\2\u010e\u0110"+ + "\7\67\2\2\u010f\u010e\3\2\2\2\u010f\u0110\3\2\2\2\u0110\u0111\3\2\2\2"+ + "\u0111\u0112\7\13\2\2\u0112!\3\2\2\2\u0113\u0114\5\6\4\2\u0114\u0115\7"+ + "\5\2\2\u0115\u0119\7\61\2\2\u0116\u0118\5&\24\2\u0117\u0116\3\2\2\2\u0118"+ + "\u011b\3\2\2\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a#\3\2\2\2"+ + "\u011b\u0119\3\2\2\2\u011c\u011d\5\26\f\2\u011d\u011e\7\67\2\2\u011e\u0122"+ + "\7\61\2\2\u011f\u0121\5&\24\2\u0120\u011f\3\2\2\2\u0121\u0124\3\2\2\2"+ + "\u0122\u0120\3\2\2\2\u0122\u0123\3\2\2\2\u0123%\3\2\2\2\u0124\u0122\3"+ + "\2\2\2\u0125\u0126\7\67\2\2\u0126\u0127\5(\25\2\u0127\'\3\2\2\2\u0128"+ + "\u012d\5*\26\2\u0129\u012d\5\26\f\2\u012a\u012b\7*\2\2\u012b\u012d\5\26"+ + "\f\2\u012c\u0128\3\2\2\2\u012c\u0129\3\2\2\2\u012c\u012a\3\2\2\2\u012d"+ + ")\3\2\2\2\u012e\u012f\t\3\2\2\u012f+\3\2\2\2\u0130\u0134\5\60\31\2\u0131"+ + "\u0134\5.\30\2\u0132\u0134\5(\25\2\u0133\u0130\3\2\2\2\u0133\u0131\3\2"+ + "\2\2\u0133\u0132\3\2\2\2\u0134-\3\2\2\2\u0135\u0137\7\6\2\2\u0136\u0138"+ + "\7\67\2\2\u0137\u0136\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013c\3\2\2\2"+ + "\u0139\u013b\5,\27\2\u013a\u0139\3\2\2\2\u013b\u013e\3\2\2\2\u013c\u013a"+ + "\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u0143\3\2\2\2\u013e\u013c\3\2\2\2\u013f"+ + "\u0140\7\66\2\2\u0140\u0142\5,\27\2\u0141\u013f\3\2\2\2\u0142\u0145\3"+ + "\2\2\2\u0143\u0141\3\2\2\2\u0143\u0144\3\2\2\2\u0144\u0147\3\2\2\2\u0145"+ + "\u0143\3\2\2\2\u0146\u0148\7\67\2\2\u0147\u0146\3\2\2\2\u0147\u0148\3"+ + "\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\7\7\2\2\u014a/\3\2\2\2\u014b\u014d"+ + "\7\b\2\2\u014c\u014e\7\67\2\2\u014d\u014c\3\2\2\2\u014d\u014e\3\2\2\2"+ + "\u014e\u0152\3\2\2\2\u014f\u0151\5\64\33\2\u0150\u014f\3\2\2\2\u0151\u0154"+ + "\3\2\2\2\u0152\u0150\3\2\2\2\u0152\u0153\3\2\2\2\u0153\u0159\3\2\2\2\u0154"+ + "\u0152\3\2\2\2\u0155\u0156\7\66\2\2\u0156\u0158\5\64\33\2\u0157\u0155"+ + "\3\2\2\2\u0158\u015b\3\2\2\2\u0159\u0157\3\2\2\2\u0159\u015a\3\2\2\2\u015a"+ + "\u015d\3\2\2\2\u015b\u0159\3\2\2\2\u015c\u015e\7\67\2\2\u015d\u015c\3"+ + "\2\2\2\u015d\u015e\3\2\2\2\u015e\u015f\3\2\2\2\u015f\u0160\7\t\2\2\u0160"+ + "\61\3\2\2\2\u0161\u0162\5\22\n\2\u0162\u0164\5,\27\2\u0163\u0165\7\67"+ + "\2\2\u0164\u0163\3\2\2\2\u0164\u0165\3\2\2\2\u0165\u0166\3\2\2\2\u0166"+ + "\u0167\7\13\2\2\u0167\63\3\2\2\2\u0168\u016a\7\61\2\2\u0169\u016b\7\67"+ + "\2\2\u016a\u0169\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u016c\3\2\2\2\u016c"+ + "\u016e\7\n\2\2\u016d\u016f\7\67\2\2\u016e\u016d\3\2\2\2\u016e\u016f\3"+ + "\2\2\2\u016f\u0170\3\2\2\2\u0170\u0171\5,\27\2\u0171\65\3\2\2\2\u0172"+ + "\u0174\5\22\n\2\u0173\u0172\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0175\3"+ + "\2\2\2\u0175\u0176\7 \2\2\u0176\u0179\7\67\2\2\u0177\u017a\7-\2\2\u0178"+ + "\u017a\5\26\f\2\u0179\u0177\3\2\2\2\u0179\u0178\3\2\2\2\u017a\u017b\3"+ + "\2\2\2\u017b\u017c\7\13\2\2\u017c\67\3\2\2\2\u017d\u017e\7\37\2\2\u017e"+ + "\u0181\7\67\2\2\u017f\u0182\7,\2\2\u0180\u0182\5\26\f\2\u0181\u017f\3"+ + "\2\2\2\u0181\u0180\3\2\2\2\u0182\u0184\3\2\2\2\u0183\u0185\7\67\2\2\u0184"+ + "\u0183\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0186\3\2\2\2\u0186\u0187\7\13"+ + "\2\2\u01879\3\2\2\2\u0188\u0189\7\35\2\2\u0189\u018a\7\67\2\2\u018a\u018b"+ + "\5(\25\2\u018b\u018c\7\67\2\2\u018c\u018e\7&\2\2\u018d\u018f\7\67\2\2"+ + "\u018e\u018d\3\2\2\2\u018e\u018f\3\2\2\2\u018f\u0190\3\2\2\2\u0190\u0192"+ + "\78\2\2\u0191\u0193\5<\37\2\u0192\u0191\3\2\2\2\u0193\u0194\3\2\2\2\u0194"+ + "\u0192\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0198\79"+ + "\2\2\u0197\u0199\5F$\2\u0198\u0197\3\2\2\2\u0198\u0199\3\2\2\2\u0199;"+ + "\3\2\2\2\u019a\u019c\5(\25\2\u019b\u019d\7\67\2\2\u019c\u019b\3\2\2\2"+ + "\u019c\u019d\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u01a0\78\2\2\u019f\u01a1"+ + "\5\20\t\2\u01a0\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a0\3\2\2\2"+ + "\u01a2\u01a3\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01a5\79\2\2\u01a5=\3\2"+ + "\2\2\u01a6\u01a7\5@!\2\u01a7\u01a9\78\2\2\u01a8\u01aa\5\20\t\2\u01a9\u01a8"+ + "\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac"+ + "\u01ad\3\2\2\2\u01ad\u01af\79\2\2\u01ae\u01b0\5F$\2\u01af\u01ae\3\2\2"+ + "\2\u01af\u01b0\3\2\2\2\u01b0?\3\2\2\2\u01b1\u01b2\7\31\2\2\u01b2\u01b3"+ + "\7\67\2\2\u01b3\u01b7\5D#\2\u01b4\u01b6\5B\"\2\u01b5\u01b4\3\2\2\2\u01b6"+ + "\u01b9\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8A\3\2\2\2"+ + "\u01b9\u01b7\3\2\2\2\u01ba\u01bc\7\13\2\2\u01bb\u01ba\3\2\2\2\u01bc\u01bf"+ + "\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd\u01be\3\2\2\2\u01be\u01c0\3\2\2\2\u01bf"+ + "\u01bd\3\2\2\2\u01c0\u01c2\t\4\2\2\u01c1\u01c3\7\67\2\2\u01c2\u01c1\3"+ + "\2\2\2\u01c2\u01c3\3\2\2\2\u01c3\u01c7\3\2\2\2\u01c4\u01c6\7\13\2\2\u01c5"+ + "\u01c4\3\2\2\2\u01c6\u01c9\3\2\2\2\u01c7\u01c5\3\2\2\2\u01c7\u01c8\3\2"+ + "\2\2\u01c8\u01ca\3\2\2\2\u01c9\u01c7\3\2\2\2\u01ca\u01cb\5D#\2\u01cbC"+ + "\3\2\2\2\u01cc\u01cd\5(\25\2\u01cd\u01ce\7\67\2\2\u01ce\u01cf\7!\2\2\u01cf"+ + "\u01d2\7\67\2\2\u01d0\u01d1\7\"\2\2\u01d1\u01d3\7\67\2\2\u01d2\u01d0\3"+ + "\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d4\3\2\2\2\u01d4\u01d6\5(\25\2\u01d5"+ + "\u01d7\7\67\2\2\u01d6\u01d5\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7E\3\2\2\2"+ + "\u01d8\u01da\7\32\2\2\u01d9\u01db\7\67\2\2\u01da\u01d9\3\2\2\2\u01da\u01db"+ + "\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01de\78\2\2\u01dd\u01df\5\20\t\2\u01de"+ + "\u01dd\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u01de\3\2\2\2\u01e0\u01e1\3\2"+ + "\2\2\u01e1\u01e2\3\2\2\2\u01e2\u01e3\79\2\2\u01e3G\3\2\2\2\u01e4\u01e6"+ + "\5\22\n\2\u01e5\u01e4\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\u01e7\3\2\2\2"+ + "\u01e7\u01e8\7\34\2\2\u01e8\u01e9\7\67\2\2\u01e9\u01ea\5\26\f\2\u01ea"+ + "\u01eb\7\67\2\2\u01eb\u01ec\7(\2\2\u01ec\u01ed\7\67\2\2\u01ed\u01ee\5"+ + "\16\b\2\u01ee\u01f0\78\2\2\u01ef\u01f1\5\20\t\2\u01f0\u01ef\3\2\2\2\u01f1"+ + "\u01f2\3\2\2\2\u01f2\u01f0\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3\u01f5\3\2"+ + "\2\2\u01f4\u01f6\5L\'\2\u01f5\u01f4\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6"+ + "\u01f7\3\2\2\2\u01f7\u01f8\79\2\2\u01f8I\3\2\2\2\u01f9\u01fb\5\22\n\2"+ + "\u01fa\u01f9\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd"+ + "\7\33\2\2\u01fd\u0200\7\67\2\2\u01fe\u0201\5\26\f\2\u01ff\u0201\7.\2\2"+ + "\u0200\u01fe\3\2\2\2\u0200\u01ff\3\2\2\2\u0201\u0202\3\2\2\2\u0202\u0203"+ + "\7\67\2\2\u0203\u0205\7\'\2\2\u0204\u0206\7\67\2\2\u0205\u0204\3\2\2\2"+ + "\u0205\u0206\3\2\2\2\u0206\u0207\3\2\2\2\u0207\u0209\78\2\2\u0208\u020a"+ + "\5\20\t\2\u0209\u0208\3\2\2\2\u020a\u020b\3\2\2\2\u020b\u0209\3\2\2\2"+ + "\u020b\u020c\3\2\2\2\u020c\u020e\3\2\2\2\u020d\u020f\5L\'\2\u020e\u020d"+ + "\3\2\2\2\u020e\u020f\3\2\2\2\u020f\u0210\3\2\2\2\u0210\u0211\79\2\2\u0211"+ + "K\3\2\2\2\u0212\u0213\7\36\2\2\u0213\u0214\7\67\2\2\u0214\u0215\5@!\2"+ + "\u0215\u0219\7\13\2\2\u0216\u0218\5\20\t\2\u0217\u0216\3\2\2\2\u0218\u021b"+ + "\3\2\2\2\u0219\u0217\3\2\2\2\u0219\u021a\3\2\2\2\u021aM\3\2\2\2\u021b"+ + "\u0219\3\2\2\2\u021c\u021d\78\2\2\u021d\u021f\7\25\2\2\u021e\u0220\7\67"+ + "\2\2\u021f\u021e\3\2\2\2\u021f\u0220\3\2\2\2\u0220\u0221\3\2\2\2\u0221"+ + "\u0222\78\2\2\u0222\u0224\5P)\2\u0223\u0225\5\34\17\2\u0224\u0223\3\2"+ + "\2\2\u0224\u0225\3\2\2\2\u0225\u0226\3\2\2\2\u0226\u0227\5R*\2\u0227\u0228"+ + "\79\2\2\u0228\u0229\79\2\2\u0229O\3\2\2\2\u022a\u022b\7\26\2\2\u022b\u022e"+ + "\7\67\2\2\u022c\u022f\5\26\f\2\u022d\u022f\7.\2\2\u022e\u022c\3\2\2\2"+ + "\u022e\u022d\3\2\2\2\u022f\u0230\3\2\2\2\u0230\u0231\7\67\2\2\u0231\u0233"+ + "\7%\2\2\u0232\u0234\7\67\2\2\u0233\u0232\3\2\2\2\u0233\u0234\3\2\2\2\u0234"+ + "\u0235\3\2\2\2\u0235\u0236\7\13\2\2\u0236Q\3\2\2\2\u0237\u0238\7\27\2"+ + "\2\u0238\u0239\7\67\2\2\u0239\u023b\5@!\2\u023a\u023c\7\67\2\2\u023b\u023a"+ + "\3\2\2\2\u023b\u023c\3\2\2\2\u023c\u023d\3\2\2\2\u023d\u023e\7\13\2\2"+ + "\u023eS\3\2\2\2UX^cflu}\u0086\u0089\u009a\u009e\u00a2\u00a5\u00a8\u00ac"+ + "\u00b0\u00b4\u00ba\u00bd\u00c4\u00c9\u00cd\u00d1\u00db\u00df\u00e6\u00ec"+ + "\u00ef\u00f4\u00fb\u00ff\u0102\u0106\u010c\u010f\u0119\u0122\u012c\u0133"+ + "\u0137\u013c\u0143\u0147\u014d\u0152\u0159\u015d\u0164\u016a\u016e\u0173"+ + "\u0179\u0181\u0184\u018e\u0194\u0198\u019c\u01a2\u01ab\u01af\u01b7\u01bd"+ + "\u01c2\u01c7\u01d2\u01d6\u01da\u01e0\u01e5\u01f2\u01f5\u01fa\u0200\u0205"+ + "\u020b\u020e\u0219\u021f\u0224\u022e\u0233\u023b"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowVisitor.java b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowVisitor.java index 38b9c5c7424..82b7fe2324f 100644 --- a/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowVisitor.java +++ b/agama/transpiler/src/main/java/io/jans/agama/antlr/AuthnFlowVisitor.java @@ -34,6 +34,12 @@ public interface AuthnFlowVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitBase(AuthnFlowParser.BaseContext ctx); + /** + * Visit a parse tree produced by {@link AuthnFlowParser#configs}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitConfigs(AuthnFlowParser.ConfigsContext ctx); /** * Visit a parse tree produced by {@link AuthnFlowParser#inputs}. * @param ctx the parse tree @@ -233,27 +239,21 @@ public interface AuthnFlowVisitor extends ParseTreeVisitor { */ T visitQuit_stmt(AuthnFlowParser.Quit_stmtContext ctx); /** - * Visit a parse tree produced by {@link AuthnFlowParser#statusr_block}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitStatusr_block(AuthnFlowParser.Statusr_blockContext ctx); - /** - * Visit a parse tree produced by {@link AuthnFlowParser#statusr_allow}. + * Visit a parse tree produced by {@link AuthnFlowParser#stchk_block}. * @param ctx the parse tree * @return the visitor result */ - T visitStatusr_allow(AuthnFlowParser.Statusr_allowContext ctx); + T visitStchk_block(AuthnFlowParser.Stchk_blockContext ctx); /** - * Visit a parse tree produced by {@link AuthnFlowParser#statusr_reply}. + * Visit a parse tree produced by {@link AuthnFlowParser#stchk_open}. * @param ctx the parse tree * @return the visitor result */ - T visitStatusr_reply(AuthnFlowParser.Statusr_replyContext ctx); + T visitStchk_open(AuthnFlowParser.Stchk_openContext ctx); /** - * Visit a parse tree produced by {@link AuthnFlowParser#statusr_until}. + * Visit a parse tree produced by {@link AuthnFlowParser#stchk_close}. * @param ctx the parse tree * @return the visitor result */ - T visitStatusr_until(AuthnFlowParser.Statusr_untilContext ctx); + T visitStchk_close(AuthnFlowParser.Stchk_closeContext ctx); } \ No newline at end of file diff --git a/agama/transpiler/src/main/resources/JSGenerator.ftl b/agama/transpiler/src/main/resources/JSGenerator.ftl index 99b965e354f..622bb27e69c 100644 --- a/agama/transpiler/src/main/resources/JSGenerator.ftl +++ b/agama/transpiler/src/main/resources/JSGenerator.ftl @@ -11,8 +11,9 @@ function ${flow.@id}<#recurse flow> <#macro header> ( +<#if .node.configs?size = 0>_p<#else>${.node.configs.short_var} <#if .node.inputs?size gt 0> - ${.node.inputs.short_var?join(", ")} + , ${.node.inputs.short_var?join(", ")} ) { const _basePath = ${.node.base.STRING}