diff --git a/org.eclipse.osbp.xtext.datamartdsl.tests/org.eclipse.osbp.xtext.datamartdsl.tests.launch b/org.eclipse.osbp.xtext.datamartdsl.tests/org.eclipse.osbp.xtext.datamartdsl.tests.launch
deleted file mode 100644
index 3fe401b..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl.tests/org.eclipse.osbp.xtext.datamartdsl.tests.launch
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.eclipse.osbp.xtext.datamartdsl.tests"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="4"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=org.eclipse.osbp.xtext.datamartdsl.tests"/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.xtext.datamartdsl.tests"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
-</launchConfiguration>
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/DatamartDSLParser.java b/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/DatamartDSLParser.java
deleted file mode 100644
index 98c66f1..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/DatamartDSLParser.java
+++ /dev/null
@@ -1,759 +0,0 @@
-/**
- *                                                                            
- *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-package org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.HashMap;
-
-import org.antlr.runtime.RecognitionException;
-import org.eclipse.xtext.AbstractElement;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.AbstractContentAssistParser;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
-
-import com.google.inject.Inject;
-
-import org.eclipse.osbp.xtext.datamartdsl.services.DatamartDSLGrammarAccess;
-
-public class DatamartDSLParser extends AbstractContentAssistParser {
-	
-	@Inject
-	private DatamartDSLGrammarAccess grammarAccess;
-	
-	private Map<AbstractElement, String> nameMappings;
-	
-	@Override
-	protected org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal.InternalDatamartDSLParser createParser() {
-		org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal.InternalDatamartDSLParser result = new org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal.InternalDatamartDSLParser(null);
-		result.setGrammarAccess(grammarAccess);
-		return result;
-	}
-	
-	@Override
-	protected String getRuleName(AbstractElement element) {
-		if (nameMappings == null) {
-			nameMappings = new HashMap<AbstractElement, String>() {
-				private static final long serialVersionUID = 1L;
-				{
-					put(grammarAccess.getDatamartSourceAccess().getAlternatives(), "rule__DatamartSource__Alternatives");
-					put(grammarAccess.getDatamartNavigationAccess().getAlternatives(), "rule__DatamartNavigation__Alternatives");
-					put(grammarAccess.getDatamartOperandAccess().getAlternatives(), "rule__DatamartOperand__Alternatives");
-					put(grammarAccess.getDatamartValueAccess().getAlternatives(), "rule__DatamartValue__Alternatives");
-					put(grammarAccess.getDatamartValueAccess().getAlternatives_2(), "rule__DatamartValue__Alternatives_2");
-					put(grammarAccess.getDatamartCubeElementAccess().getAlternatives(), "rule__DatamartCubeElement__Alternatives");
-					put(grammarAccess.getDatamartAdditionAccess().getAlternatives_1_0(), "rule__DatamartAddition__Alternatives_1_0");
-					put(grammarAccess.getDatamartMultiplicationAccess().getAlternatives_1_0(), "rule__DatamartMultiplication__Alternatives_1_0");
-					put(grammarAccess.getDatamartPrimaryAccess().getAlternatives(), "rule__DatamartPrimary__Alternatives");
-					put(grammarAccess.getDatamartNumberOrElementAccess().getAlternatives(), "rule__DatamartNumberOrElement__Alternatives");
-					put(grammarAccess.getDatamartMemberTupleAccess().getAlternatives_0_0(), "rule__DatamartMemberTuple__Alternatives_0_0");
-					put(grammarAccess.getDatamartSetTupleAccess().getAlternatives_0(), "rule__DatamartSetTuple__Alternatives_0");
-					put(grammarAccess.getDatamartAggregationAccess().getAlternatives_2(), "rule__DatamartAggregation__Alternatives_2");
-					put(grammarAccess.getDatamartSetAggregationAccess().getAlternatives_2(), "rule__DatamartSetAggregation__Alternatives_2");
-					put(grammarAccess.getDatamartElementAccess().getAlternatives(), "rule__DatamartElement__Alternatives");
-					put(grammarAccess.getDatamartHierarchyAccess().getAlternatives_5_2(), "rule__DatamartHierarchy__Alternatives_5_2");
-					put(grammarAccess.getDatamartHierarchyAccess().getOrderRefAlternatives_6_2_1_0(), "rule__DatamartHierarchy__OrderRefAlternatives_6_2_1_0");
-					put(grammarAccess.getPropertyFillerTypeAccess().getAlternatives(), "rule__PropertyFillerType__Alternatives");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getAlternatives_1_0(), "rule__PropertyFillerSignedDoubleRange__Alternatives_1_0");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getAlternatives_1_2(), "rule__PropertyFillerSignedDoubleRange__Alternatives_1_2");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getAlternatives_2_0(), "rule__PropertyFillerSignedIntegerRange__Alternatives_2_0");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getAlternatives_2_2(), "rule__PropertyFillerSignedIntegerRange__Alternatives_2_2");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getAlternatives_1_0(), "rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_0");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getAlternatives_1_2(), "rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_2");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getAlternatives_2_0(), "rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_0");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getAlternatives_2_2(), "rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_2");
-					put(grammarAccess.getXAnnotationAccess().getAlternatives_3_1(), "rule__XAnnotation__Alternatives_3_1");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getAlternatives(), "rule__XAnnotationElementValueOrCommaList__Alternatives");
-					put(grammarAccess.getXAnnotationElementValueAccess().getAlternatives(), "rule__XAnnotationElementValue__Alternatives");
-					put(grammarAccess.getXAnnotationOrExpressionAccess().getAlternatives(), "rule__XAnnotationOrExpression__Alternatives");
-					put(grammarAccess.getXAssignmentAccess().getAlternatives(), "rule__XAssignment__Alternatives");
-					put(grammarAccess.getOpMultiAssignAccess().getAlternatives(), "rule__OpMultiAssign__Alternatives");
-					put(grammarAccess.getOpEqualityAccess().getAlternatives(), "rule__OpEquality__Alternatives");
-					put(grammarAccess.getXRelationalExpressionAccess().getAlternatives_1(), "rule__XRelationalExpression__Alternatives_1");
-					put(grammarAccess.getOpCompareAccess().getAlternatives(), "rule__OpCompare__Alternatives");
-					put(grammarAccess.getOpOtherAccess().getAlternatives(), "rule__OpOther__Alternatives");
-					put(grammarAccess.getOpOtherAccess().getAlternatives_5_1(), "rule__OpOther__Alternatives_5_1");
-					put(grammarAccess.getOpOtherAccess().getAlternatives_6_1(), "rule__OpOther__Alternatives_6_1");
-					put(grammarAccess.getOpAddAccess().getAlternatives(), "rule__OpAdd__Alternatives");
-					put(grammarAccess.getOpMultiAccess().getAlternatives(), "rule__OpMulti__Alternatives");
-					put(grammarAccess.getXUnaryOperationAccess().getAlternatives(), "rule__XUnaryOperation__Alternatives");
-					put(grammarAccess.getOpUnaryAccess().getAlternatives(), "rule__OpUnary__Alternatives");
-					put(grammarAccess.getOpPostfixAccess().getAlternatives(), "rule__OpPostfix__Alternatives");
-					put(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1(), "rule__XMemberFeatureCall__Alternatives_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_0_0_0_1(), "rule__XMemberFeatureCall__Alternatives_1_0_0_0_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_0_0_1(), "rule__XMemberFeatureCall__Alternatives_1_1_0_0_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_3_1(), "rule__XMemberFeatureCall__Alternatives_1_1_3_1");
-					put(grammarAccess.getXPrimaryExpressionAccess().getAlternatives(), "rule__XPrimaryExpression__Alternatives");
-					put(grammarAccess.getXLiteralAccess().getAlternatives(), "rule__XLiteral__Alternatives");
-					put(grammarAccess.getXCollectionLiteralAccess().getAlternatives(), "rule__XCollectionLiteral__Alternatives");
-					put(grammarAccess.getXSwitchExpressionAccess().getAlternatives_2(), "rule__XSwitchExpression__Alternatives_2");
-					put(grammarAccess.getXCasePartAccess().getAlternatives_3(), "rule__XCasePart__Alternatives_3");
-					put(grammarAccess.getXExpressionOrVarDeclarationAccess().getAlternatives(), "rule__XExpressionOrVarDeclaration__Alternatives");
-					put(grammarAccess.getXVariableDeclarationAccess().getAlternatives_1(), "rule__XVariableDeclaration__Alternatives_1");
-					put(grammarAccess.getXVariableDeclarationAccess().getAlternatives_2(), "rule__XVariableDeclaration__Alternatives_2");
-					put(grammarAccess.getXFeatureCallAccess().getAlternatives_3_1(), "rule__XFeatureCall__Alternatives_3_1");
-					put(grammarAccess.getFeatureCallIDAccess().getAlternatives(), "rule__FeatureCallID__Alternatives");
-					put(grammarAccess.getIdOrSuperAccess().getAlternatives(), "rule__IdOrSuper__Alternatives");
-					put(grammarAccess.getXConstructorCallAccess().getAlternatives_4_1(), "rule__XConstructorCall__Alternatives_4_1");
-					put(grammarAccess.getXBooleanLiteralAccess().getAlternatives_1(), "rule__XBooleanLiteral__Alternatives_1");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getAlternatives_3(), "rule__XTryCatchFinallyExpression__Alternatives_3");
-					put(grammarAccess.getNumberAccess().getAlternatives(), "rule__Number__Alternatives");
-					put(grammarAccess.getNumberAccess().getAlternatives_1_0(), "rule__Number__Alternatives_1_0");
-					put(grammarAccess.getNumberAccess().getAlternatives_1_1_1(), "rule__Number__Alternatives_1_1_1");
-					put(grammarAccess.getJvmTypeReferenceAccess().getAlternatives(), "rule__JvmTypeReference__Alternatives");
-					put(grammarAccess.getJvmArgumentTypeReferenceAccess().getAlternatives(), "rule__JvmArgumentTypeReference__Alternatives");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getAlternatives_2(), "rule__JvmWildcardTypeReference__Alternatives_2");
-					put(grammarAccess.getXImportDeclarationAccess().getAlternatives_1(), "rule__XImportDeclaration__Alternatives_1");
-					put(grammarAccess.getXImportDeclarationAccess().getAlternatives_1_0_3(), "rule__XImportDeclaration__Alternatives_1_0_3");
-					put(grammarAccess.getAxisEnumAccess().getAlternatives(), "rule__AxisEnum__Alternatives");
-					put(grammarAccess.getFunctionEnumAccess().getAlternatives(), "rule__FunctionEnum__Alternatives");
-					put(grammarAccess.getParameterFunctionEnumAccess().getAlternatives(), "rule__ParameterFunctionEnum__Alternatives");
-					put(grammarAccess.getSetFunctionEnumAccess().getAlternatives(), "rule__SetFunctionEnum__Alternatives");
-					put(grammarAccess.getSetParameterFunctionEnumAccess().getAlternatives(), "rule__SetParameterFunctionEnum__Alternatives");
-					put(grammarAccess.getSetAggregationEnumAccess().getAlternatives(), "rule__SetAggregationEnum__Alternatives");
-					put(grammarAccess.getAggregationEnumAccess().getAlternatives(), "rule__AggregationEnum__Alternatives");
-					put(grammarAccess.getOperatorEnumAccess().getAlternatives(), "rule__OperatorEnum__Alternatives");
-					put(grammarAccess.getSqlAggregationEnumAccess().getAlternatives(), "rule__SqlAggregationEnum__Alternatives");
-					put(grammarAccess.getValueScaleEnumAccess().getAlternatives(), "rule__ValueScaleEnum__Alternatives");
-					put(grammarAccess.getTaskQueryTopicEnumAccess().getAlternatives(), "rule__TaskQueryTopicEnum__Alternatives");
-					put(grammarAccess.getTaskQueryColumnEnumAccess().getAlternatives(), "rule__TaskQueryColumnEnum__Alternatives");
-					put(grammarAccess.getTaskFilterEnumAccess().getAlternatives(), "rule__TaskFilterEnum__Alternatives");
-					put(grammarAccess.getOrderEnumAccess().getAlternatives(), "rule__OrderEnum__Alternatives");
-					put(grammarAccess.getDatamartPackageAccess().getGroup(), "rule__DatamartPackage__Group__0");
-					put(grammarAccess.getDatamartPackageAccess().getGroup_3(), "rule__DatamartPackage__Group_3__0");
-					put(grammarAccess.getDatamartDefinitionAccess().getGroup(), "rule__DatamartDefinition__Group__0");
-					put(grammarAccess.getDatamartDefinitionAccess().getGroup_2(), "rule__DatamartDefinition__Group_2__0");
-					put(grammarAccess.getDatamartDefinitionAccess().getGroup_3(), "rule__DatamartDefinition__Group_3__0");
-					put(grammarAccess.getDatamartRoleAccess().getGroup(), "rule__DatamartRole__Group__0");
-					put(grammarAccess.getDatamartTaskAccess().getGroup(), "rule__DatamartTask__Group__0");
-					put(grammarAccess.getDatamartTaskAccess().getGroup_2(), "rule__DatamartTask__Group_2__0");
-					put(grammarAccess.getDatamartTaskAccess().getGroup_3(), "rule__DatamartTask__Group_3__0");
-					put(grammarAccess.getDatamartColumnAccess().getGroup(), "rule__DatamartColumn__Group__0");
-					put(grammarAccess.getDatamartTaskFilterAccess().getGroup(), "rule__DatamartTaskFilter__Group__0");
-					put(grammarAccess.getDatamartCubeAccess().getGroup(), "rule__DatamartCube__Group__0");
-					put(grammarAccess.getDatamartReferenceAccess().getGroup(), "rule__DatamartReference__Group__0");
-					put(grammarAccess.getDatamartEntityAccess().getGroup(), "rule__DatamartEntity__Group__0");
-					put(grammarAccess.getDatamartEntityAccess().getGroup_4(), "rule__DatamartEntity__Group_4__0");
-					put(grammarAccess.getDatamartEntityAccess().getGroup_5(), "rule__DatamartEntity__Group_5__0");
-					put(grammarAccess.getDatamartEntityAccess().getGroup_6(), "rule__DatamartEntity__Group_6__0");
-					put(grammarAccess.getDatamartEntityAccess().getGroup_7(), "rule__DatamartEntity__Group_7__0");
-					put(grammarAccess.getDatamartEntityAccess().getGroup_8(), "rule__DatamartEntity__Group_8__0");
-					put(grammarAccess.getDatamartOwnerAccess().getGroup(), "rule__DatamartOwner__Group__0");
-					put(grammarAccess.getDatamartMemberAccess().getGroup(), "rule__DatamartMember__Group__0");
-					put(grammarAccess.getDatamartPropertyAccess().getGroup(), "rule__DatamartProperty__Group__0");
-					put(grammarAccess.getDatamartPropertyAccess().getGroup_2_0(), "rule__DatamartProperty__Group_2_0__0");
-					put(grammarAccess.getDatamartPropertyAccess().getGroup_2_1(), "rule__DatamartProperty__Group_2_1__0");
-					put(grammarAccess.getDatamartPropertyAccess().getGroup_2_2(), "rule__DatamartProperty__Group_2_2__0");
-					put(grammarAccess.getDatamartConditionAccess().getGroup(), "rule__DatamartCondition__Group__0");
-					put(grammarAccess.getDatamartOrderAccess().getGroup(), "rule__DatamartOrder__Group__0");
-					put(grammarAccess.getDatamartDisjunctionAccess().getGroup(), "rule__DatamartDisjunction__Group__0");
-					put(grammarAccess.getDatamartDisjunctionAccess().getGroup_1(), "rule__DatamartDisjunction__Group_1__0");
-					put(grammarAccess.getDatamartDisjunctionAccess().getGroup_1_0(), "rule__DatamartDisjunction__Group_1_0__0");
-					put(grammarAccess.getDatamartConjunctionAccess().getGroup(), "rule__DatamartConjunction__Group__0");
-					put(grammarAccess.getDatamartConjunctionAccess().getGroup_1(), "rule__DatamartConjunction__Group_1__0");
-					put(grammarAccess.getDatamartConjunctionAccess().getGroup_1_0(), "rule__DatamartConjunction__Group_1_0__0");
-					put(grammarAccess.getDatamartConditionalExpressionAccess().getGroup(), "rule__DatamartConditionalExpression__Group__0");
-					put(grammarAccess.getDatamartConditionalExpressionAccess().getGroup_1(), "rule__DatamartConditionalExpression__Group_1__0");
-					put(grammarAccess.getDatamartConditionalExpressionAccess().getGroup_1_0(), "rule__DatamartConditionalExpression__Group_1_0__0");
-					put(grammarAccess.getDatamartOperandAccess().getGroup_1(), "rule__DatamartOperand__Group_1__0");
-					put(grammarAccess.getDatamartValueAccess().getGroup_2_0(), "rule__DatamartValue__Group_2_0__0");
-					put(grammarAccess.getDatamartDefineDerivedMeasureAccess().getGroup(), "rule__DatamartDefineDerivedMeasure__Group__0");
-					put(grammarAccess.getDatamartAdditionAccess().getGroup(), "rule__DatamartAddition__Group__0");
-					put(grammarAccess.getDatamartAdditionAccess().getGroup_1(), "rule__DatamartAddition__Group_1__0");
-					put(grammarAccess.getDatamartAdditionAccess().getGroup_1_0_0(), "rule__DatamartAddition__Group_1_0_0__0");
-					put(grammarAccess.getDatamartAdditionAccess().getGroup_1_0_1(), "rule__DatamartAddition__Group_1_0_1__0");
-					put(grammarAccess.getDatamartMultiplicationAccess().getGroup(), "rule__DatamartMultiplication__Group__0");
-					put(grammarAccess.getDatamartMultiplicationAccess().getGroup_1(), "rule__DatamartMultiplication__Group_1__0");
-					put(grammarAccess.getDatamartMultiplicationAccess().getGroup_1_0_0(), "rule__DatamartMultiplication__Group_1_0_0__0");
-					put(grammarAccess.getDatamartMultiplicationAccess().getGroup_1_0_1(), "rule__DatamartMultiplication__Group_1_0_1__0");
-					put(grammarAccess.getDatamartPrimaryAccess().getGroup_1(), "rule__DatamartPrimary__Group_1__0");
-					put(grammarAccess.getDatamartMemberTupleAccess().getGroup(), "rule__DatamartMemberTuple__Group__0");
-					put(grammarAccess.getDatamartMemberTupleAccess().getGroup_0(), "rule__DatamartMemberTuple__Group_0__0");
-					put(grammarAccess.getDatamartMemberTupleAccess().getGroup_2(), "rule__DatamartMemberTuple__Group_2__0");
-					put(grammarAccess.getDatamartParameterFunctionAccess().getGroup(), "rule__DatamartParameterFunction__Group__0");
-					put(grammarAccess.getDatamartSetParameterFunctionAccess().getGroup(), "rule__DatamartSetParameterFunction__Group__0");
-					put(grammarAccess.getDatamartSetAggregationFunctionAccess().getGroup(), "rule__DatamartSetAggregationFunction__Group__0");
-					put(grammarAccess.getDatamartSetTupleAccess().getGroup(), "rule__DatamartSetTuple__Group__0");
-					put(grammarAccess.getDatamartSetTupleAccess().getGroup_1(), "rule__DatamartSetTuple__Group_1__0");
-					put(grammarAccess.getDatamartAggregationAccess().getGroup(), "rule__DatamartAggregation__Group__0");
-					put(grammarAccess.getDatamartAggregationAccess().getGroup_3(), "rule__DatamartAggregation__Group_3__0");
-					put(grammarAccess.getDatamartSetAggregationAccess().getGroup(), "rule__DatamartSetAggregation__Group__0");
-					put(grammarAccess.getDatamartSetAggregationAccess().getGroup_3(), "rule__DatamartSetAggregation__Group_3__0");
-					put(grammarAccess.getDatamartSlicerAccess().getGroup(), "rule__DatamartSlicer__Group__0");
-					put(grammarAccess.getDatamartAxisAccess().getGroup(), "rule__DatamartAxis__Group__0");
-					put(grammarAccess.getDatamartDerivedMeasureAccess().getGroup(), "rule__DatamartDerivedMeasure__Group__0");
-					put(grammarAccess.getDatamartDerivedMeasureAccess().getGroup_2(), "rule__DatamartDerivedMeasure__Group_2__0");
-					put(grammarAccess.getDatamartMeasureAccess().getGroup(), "rule__DatamartMeasure__Group__0");
-					put(grammarAccess.getDatamartMeasureAccess().getGroup_2(), "rule__DatamartMeasure__Group_2__0");
-					put(grammarAccess.getDatamartHierarchyAccess().getGroup(), "rule__DatamartHierarchy__Group__0");
-					put(grammarAccess.getDatamartHierarchyAccess().getGroup_5(), "rule__DatamartHierarchy__Group_5__0");
-					put(grammarAccess.getDatamartHierarchyAccess().getGroup_6(), "rule__DatamartHierarchy__Group_6__0");
-					put(grammarAccess.getDatamartHierarchyAccess().getGroup_6_1(), "rule__DatamartHierarchy__Group_6_1__0");
-					put(grammarAccess.getDatamartHierarchyAccess().getGroup_6_2(), "rule__DatamartHierarchy__Group_6_2__0");
-					put(grammarAccess.getDatamartImportAccess().getGroup(), "rule__DatamartImport__Group__0");
-					put(grammarAccess.getDatamartQualifiedNameWithWildCardAccess().getGroup(), "rule__DatamartQualifiedNameWithWildCard__Group__0");
-					put(grammarAccess.getDatamartQualifiedNameWithWildCardAccess().getGroup_1(), "rule__DatamartQualifiedNameWithWildCard__Group_1__0");
-					put(grammarAccess.getQualifiedNameAccess().getGroup(), "rule__QualifiedName__Group__0");
-					put(grammarAccess.getQualifiedNameAccess().getGroup_1(), "rule__QualifiedName__Group_1__0");
-					put(grammarAccess.getPropertyFillerDataAccess().getGroup(), "rule__PropertyFillerData__Group__0");
-					put(grammarAccess.getPropertyFillerDateFutureAccess().getGroup(), "rule__PropertyFillerDateFuture__Group__0");
-					put(grammarAccess.getPropertyFillerDatePastAccess().getGroup(), "rule__PropertyFillerDatePast__Group__0");
-					put(grammarAccess.getPropertyFillerDateRangeAccess().getGroup(), "rule__PropertyFillerDateRange__Group__0");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getGroup(), "rule__PropertyFillerSignedDoubleRange__Group__0");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getGroup_1(), "rule__PropertyFillerSignedDoubleRange__Group_1__0");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getGroup_5(), "rule__PropertyFillerSignedDoubleRange__Group_5__0");
-					put(grammarAccess.getPropertyFillerSignedDoubleRandomAccess().getGroup(), "rule__PropertyFillerSignedDoubleRandom__Group__0");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getGroup(), "rule__PropertyFillerSignedIntegerRange__Group__0");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getGroup_2(), "rule__PropertyFillerSignedIntegerRange__Group_2__0");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getGroup_3(), "rule__PropertyFillerSignedIntegerRange__Group_3__0");
-					put(grammarAccess.getPropertyFillerSignedIntegerRandomAccess().getGroup(), "rule__PropertyFillerSignedIntegerRandom__Group__0");
-					put(grammarAccess.getPropertyFillerTextRandomAccess().getGroup(), "rule__PropertyFillerTextRandom__Group__0");
-					put(grammarAccess.getPropertyFillerTextParagraphsAccess().getGroup(), "rule__PropertyFillerTextParagraphs__Group__0");
-					put(grammarAccess.getPropertyFillerTextSentencesAccess().getGroup(), "rule__PropertyFillerTextSentences__Group__0");
-					put(grammarAccess.getPropertyFillerTextWordsAccess().getGroup(), "rule__PropertyFillerTextWords__Group__0");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getGroup(), "rule__PropertyFillerUnsignedDoubleRange__Group__0");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getGroup_1(), "rule__PropertyFillerUnsignedDoubleRange__Group_1__0");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getGroup_5(), "rule__PropertyFillerUnsignedDoubleRange__Group_5__0");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRandomAccess().getGroup(), "rule__PropertyFillerUnsignedDoubleRandom__Group__0");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getGroup(), "rule__PropertyFillerUnsignedIntegerRange__Group__0");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getGroup_2(), "rule__PropertyFillerUnsignedIntegerRange__Group_2__0");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getGroup_3(), "rule__PropertyFillerUnsignedIntegerRange__Group_3__0");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRandomAccess().getGroup(), "rule__PropertyFillerUnsignedIntegerRandom__Group__0");
-					put(grammarAccess.getSignedNumberAccess().getGroup(), "rule__SignedNumber__Group__0");
-					put(grammarAccess.getUnsignedNumberAccess().getGroup(), "rule__UnsignedNumber__Group__0");
-					put(grammarAccess.getUnsignedNumberAccess().getGroup_1(), "rule__UnsignedNumber__Group_1__0");
-					put(grammarAccess.getSINTAccess().getGroup(), "rule__SINT__Group__0");
-					put(grammarAccess.getXAnnotationAccess().getGroup(), "rule__XAnnotation__Group__0");
-					put(grammarAccess.getXAnnotationAccess().getGroup_3(), "rule__XAnnotation__Group_3__0");
-					put(grammarAccess.getXAnnotationAccess().getGroup_3_1_0(), "rule__XAnnotation__Group_3_1_0__0");
-					put(grammarAccess.getXAnnotationAccess().getGroup_3_1_0_1(), "rule__XAnnotation__Group_3_1_0_1__0");
-					put(grammarAccess.getXAnnotationElementValuePairAccess().getGroup(), "rule__XAnnotationElementValuePair__Group__0");
-					put(grammarAccess.getXAnnotationElementValuePairAccess().getGroup_0(), "rule__XAnnotationElementValuePair__Group_0__0");
-					put(grammarAccess.getXAnnotationElementValuePairAccess().getGroup_0_0(), "rule__XAnnotationElementValuePair__Group_0_0__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0(), "rule__XAnnotationElementValueOrCommaList__Group_0__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_0(), "rule__XAnnotationElementValueOrCommaList__Group_0_0__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_0_0(), "rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_1(), "rule__XAnnotationElementValueOrCommaList__Group_0_1__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0_1_1(), "rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1(), "rule__XAnnotationElementValueOrCommaList__Group_1__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1(), "rule__XAnnotationElementValueOrCommaList__Group_1_1__0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1_1_1(), "rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0");
-					put(grammarAccess.getXAnnotationElementValueAccess().getGroup_0(), "rule__XAnnotationElementValue__Group_0__0");
-					put(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_0(), "rule__XAnnotationElementValue__Group_0_0__0");
-					put(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_0_0(), "rule__XAnnotationElementValue__Group_0_0_0__0");
-					put(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_1(), "rule__XAnnotationElementValue__Group_0_1__0");
-					put(grammarAccess.getXAnnotationElementValueAccess().getGroup_0_1_1(), "rule__XAnnotationElementValue__Group_0_1_1__0");
-					put(grammarAccess.getXAssignmentAccess().getGroup_0(), "rule__XAssignment__Group_0__0");
-					put(grammarAccess.getXAssignmentAccess().getGroup_1(), "rule__XAssignment__Group_1__0");
-					put(grammarAccess.getXAssignmentAccess().getGroup_1_1(), "rule__XAssignment__Group_1_1__0");
-					put(grammarAccess.getXAssignmentAccess().getGroup_1_1_0(), "rule__XAssignment__Group_1_1_0__0");
-					put(grammarAccess.getXAssignmentAccess().getGroup_1_1_0_0(), "rule__XAssignment__Group_1_1_0_0__0");
-					put(grammarAccess.getOpMultiAssignAccess().getGroup_5(), "rule__OpMultiAssign__Group_5__0");
-					put(grammarAccess.getOpMultiAssignAccess().getGroup_6(), "rule__OpMultiAssign__Group_6__0");
-					put(grammarAccess.getXOrExpressionAccess().getGroup(), "rule__XOrExpression__Group__0");
-					put(grammarAccess.getXOrExpressionAccess().getGroup_1(), "rule__XOrExpression__Group_1__0");
-					put(grammarAccess.getXOrExpressionAccess().getGroup_1_0(), "rule__XOrExpression__Group_1_0__0");
-					put(grammarAccess.getXOrExpressionAccess().getGroup_1_0_0(), "rule__XOrExpression__Group_1_0_0__0");
-					put(grammarAccess.getXAndExpressionAccess().getGroup(), "rule__XAndExpression__Group__0");
-					put(grammarAccess.getXAndExpressionAccess().getGroup_1(), "rule__XAndExpression__Group_1__0");
-					put(grammarAccess.getXAndExpressionAccess().getGroup_1_0(), "rule__XAndExpression__Group_1_0__0");
-					put(grammarAccess.getXAndExpressionAccess().getGroup_1_0_0(), "rule__XAndExpression__Group_1_0_0__0");
-					put(grammarAccess.getXEqualityExpressionAccess().getGroup(), "rule__XEqualityExpression__Group__0");
-					put(grammarAccess.getXEqualityExpressionAccess().getGroup_1(), "rule__XEqualityExpression__Group_1__0");
-					put(grammarAccess.getXEqualityExpressionAccess().getGroup_1_0(), "rule__XEqualityExpression__Group_1_0__0");
-					put(grammarAccess.getXEqualityExpressionAccess().getGroup_1_0_0(), "rule__XEqualityExpression__Group_1_0_0__0");
-					put(grammarAccess.getXRelationalExpressionAccess().getGroup(), "rule__XRelationalExpression__Group__0");
-					put(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0(), "rule__XRelationalExpression__Group_1_0__0");
-					put(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0_0(), "rule__XRelationalExpression__Group_1_0_0__0");
-					put(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0_0_0(), "rule__XRelationalExpression__Group_1_0_0_0__0");
-					put(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1(), "rule__XRelationalExpression__Group_1_1__0");
-					put(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1_0(), "rule__XRelationalExpression__Group_1_1_0__0");
-					put(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1_0_0(), "rule__XRelationalExpression__Group_1_1_0_0__0");
-					put(grammarAccess.getOpCompareAccess().getGroup_1(), "rule__OpCompare__Group_1__0");
-					put(grammarAccess.getXOtherOperatorExpressionAccess().getGroup(), "rule__XOtherOperatorExpression__Group__0");
-					put(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1(), "rule__XOtherOperatorExpression__Group_1__0");
-					put(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1_0(), "rule__XOtherOperatorExpression__Group_1_0__0");
-					put(grammarAccess.getXOtherOperatorExpressionAccess().getGroup_1_0_0(), "rule__XOtherOperatorExpression__Group_1_0_0__0");
-					put(grammarAccess.getOpOtherAccess().getGroup_2(), "rule__OpOther__Group_2__0");
-					put(grammarAccess.getOpOtherAccess().getGroup_5(), "rule__OpOther__Group_5__0");
-					put(grammarAccess.getOpOtherAccess().getGroup_5_1_0(), "rule__OpOther__Group_5_1_0__0");
-					put(grammarAccess.getOpOtherAccess().getGroup_5_1_0_0(), "rule__OpOther__Group_5_1_0_0__0");
-					put(grammarAccess.getOpOtherAccess().getGroup_6(), "rule__OpOther__Group_6__0");
-					put(grammarAccess.getOpOtherAccess().getGroup_6_1_0(), "rule__OpOther__Group_6_1_0__0");
-					put(grammarAccess.getOpOtherAccess().getGroup_6_1_0_0(), "rule__OpOther__Group_6_1_0_0__0");
-					put(grammarAccess.getXAdditiveExpressionAccess().getGroup(), "rule__XAdditiveExpression__Group__0");
-					put(grammarAccess.getXAdditiveExpressionAccess().getGroup_1(), "rule__XAdditiveExpression__Group_1__0");
-					put(grammarAccess.getXAdditiveExpressionAccess().getGroup_1_0(), "rule__XAdditiveExpression__Group_1_0__0");
-					put(grammarAccess.getXAdditiveExpressionAccess().getGroup_1_0_0(), "rule__XAdditiveExpression__Group_1_0_0__0");
-					put(grammarAccess.getXMultiplicativeExpressionAccess().getGroup(), "rule__XMultiplicativeExpression__Group__0");
-					put(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1(), "rule__XMultiplicativeExpression__Group_1__0");
-					put(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1_0(), "rule__XMultiplicativeExpression__Group_1_0__0");
-					put(grammarAccess.getXMultiplicativeExpressionAccess().getGroup_1_0_0(), "rule__XMultiplicativeExpression__Group_1_0_0__0");
-					put(grammarAccess.getXUnaryOperationAccess().getGroup_0(), "rule__XUnaryOperation__Group_0__0");
-					put(grammarAccess.getXCastedExpressionAccess().getGroup(), "rule__XCastedExpression__Group__0");
-					put(grammarAccess.getXCastedExpressionAccess().getGroup_1(), "rule__XCastedExpression__Group_1__0");
-					put(grammarAccess.getXCastedExpressionAccess().getGroup_1_0(), "rule__XCastedExpression__Group_1_0__0");
-					put(grammarAccess.getXCastedExpressionAccess().getGroup_1_0_0(), "rule__XCastedExpression__Group_1_0_0__0");
-					put(grammarAccess.getXPostfixOperationAccess().getGroup(), "rule__XPostfixOperation__Group__0");
-					put(grammarAccess.getXPostfixOperationAccess().getGroup_1(), "rule__XPostfixOperation__Group_1__0");
-					put(grammarAccess.getXPostfixOperationAccess().getGroup_1_0(), "rule__XPostfixOperation__Group_1_0__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup(), "rule__XMemberFeatureCall__Group__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0(), "rule__XMemberFeatureCall__Group_1_0__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0_0(), "rule__XMemberFeatureCall__Group_1_0_0__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0_0_0(), "rule__XMemberFeatureCall__Group_1_0_0_0__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1(), "rule__XMemberFeatureCall__Group_1_1__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_0(), "rule__XMemberFeatureCall__Group_1_1_0__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_0_0(), "rule__XMemberFeatureCall__Group_1_1_0_0__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_1(), "rule__XMemberFeatureCall__Group_1_1_1__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_1_2(), "rule__XMemberFeatureCall__Group_1_1_1_2__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3(), "rule__XMemberFeatureCall__Group_1_1_3__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1(), "rule__XMemberFeatureCall__Group_1_1_3_1_1__0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1_1(), "rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0");
-					put(grammarAccess.getXSetLiteralAccess().getGroup(), "rule__XSetLiteral__Group__0");
-					put(grammarAccess.getXSetLiteralAccess().getGroup_3(), "rule__XSetLiteral__Group_3__0");
-					put(grammarAccess.getXSetLiteralAccess().getGroup_3_1(), "rule__XSetLiteral__Group_3_1__0");
-					put(grammarAccess.getXListLiteralAccess().getGroup(), "rule__XListLiteral__Group__0");
-					put(grammarAccess.getXListLiteralAccess().getGroup_3(), "rule__XListLiteral__Group_3__0");
-					put(grammarAccess.getXListLiteralAccess().getGroup_3_1(), "rule__XListLiteral__Group_3_1__0");
-					put(grammarAccess.getXClosureAccess().getGroup(), "rule__XClosure__Group__0");
-					put(grammarAccess.getXClosureAccess().getGroup_0(), "rule__XClosure__Group_0__0");
-					put(grammarAccess.getXClosureAccess().getGroup_0_0(), "rule__XClosure__Group_0_0__0");
-					put(grammarAccess.getXClosureAccess().getGroup_1(), "rule__XClosure__Group_1__0");
-					put(grammarAccess.getXClosureAccess().getGroup_1_0(), "rule__XClosure__Group_1_0__0");
-					put(grammarAccess.getXClosureAccess().getGroup_1_0_0(), "rule__XClosure__Group_1_0_0__0");
-					put(grammarAccess.getXClosureAccess().getGroup_1_0_0_1(), "rule__XClosure__Group_1_0_0_1__0");
-					put(grammarAccess.getXExpressionInClosureAccess().getGroup(), "rule__XExpressionInClosure__Group__0");
-					put(grammarAccess.getXExpressionInClosureAccess().getGroup_1(), "rule__XExpressionInClosure__Group_1__0");
-					put(grammarAccess.getXShortClosureAccess().getGroup(), "rule__XShortClosure__Group__0");
-					put(grammarAccess.getXShortClosureAccess().getGroup_0(), "rule__XShortClosure__Group_0__0");
-					put(grammarAccess.getXShortClosureAccess().getGroup_0_0(), "rule__XShortClosure__Group_0_0__0");
-					put(grammarAccess.getXShortClosureAccess().getGroup_0_0_1(), "rule__XShortClosure__Group_0_0_1__0");
-					put(grammarAccess.getXShortClosureAccess().getGroup_0_0_1_1(), "rule__XShortClosure__Group_0_0_1_1__0");
-					put(grammarAccess.getXParenthesizedExpressionAccess().getGroup(), "rule__XParenthesizedExpression__Group__0");
-					put(grammarAccess.getXIfExpressionAccess().getGroup(), "rule__XIfExpression__Group__0");
-					put(grammarAccess.getXIfExpressionAccess().getGroup_6(), "rule__XIfExpression__Group_6__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup(), "rule__XSwitchExpression__Group__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0(), "rule__XSwitchExpression__Group_2_0__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0_0(), "rule__XSwitchExpression__Group_2_0_0__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0_0_0(), "rule__XSwitchExpression__Group_2_0_0_0__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1(), "rule__XSwitchExpression__Group_2_1__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1_0(), "rule__XSwitchExpression__Group_2_1_0__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1_0_0(), "rule__XSwitchExpression__Group_2_1_0_0__0");
-					put(grammarAccess.getXSwitchExpressionAccess().getGroup_5(), "rule__XSwitchExpression__Group_5__0");
-					put(grammarAccess.getXCasePartAccess().getGroup(), "rule__XCasePart__Group__0");
-					put(grammarAccess.getXCasePartAccess().getGroup_2(), "rule__XCasePart__Group_2__0");
-					put(grammarAccess.getXCasePartAccess().getGroup_3_0(), "rule__XCasePart__Group_3_0__0");
-					put(grammarAccess.getXForLoopExpressionAccess().getGroup(), "rule__XForLoopExpression__Group__0");
-					put(grammarAccess.getXForLoopExpressionAccess().getGroup_0(), "rule__XForLoopExpression__Group_0__0");
-					put(grammarAccess.getXForLoopExpressionAccess().getGroup_0_0(), "rule__XForLoopExpression__Group_0_0__0");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getGroup(), "rule__XBasicForLoopExpression__Group__0");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_3(), "rule__XBasicForLoopExpression__Group_3__0");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_3_1(), "rule__XBasicForLoopExpression__Group_3_1__0");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_7(), "rule__XBasicForLoopExpression__Group_7__0");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getGroup_7_1(), "rule__XBasicForLoopExpression__Group_7_1__0");
-					put(grammarAccess.getXWhileExpressionAccess().getGroup(), "rule__XWhileExpression__Group__0");
-					put(grammarAccess.getXDoWhileExpressionAccess().getGroup(), "rule__XDoWhileExpression__Group__0");
-					put(grammarAccess.getXBlockExpressionAccess().getGroup(), "rule__XBlockExpression__Group__0");
-					put(grammarAccess.getXBlockExpressionAccess().getGroup_2(), "rule__XBlockExpression__Group_2__0");
-					put(grammarAccess.getXVariableDeclarationAccess().getGroup(), "rule__XVariableDeclaration__Group__0");
-					put(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0(), "rule__XVariableDeclaration__Group_2_0__0");
-					put(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0_0(), "rule__XVariableDeclaration__Group_2_0_0__0");
-					put(grammarAccess.getXVariableDeclarationAccess().getGroup_3(), "rule__XVariableDeclaration__Group_3__0");
-					put(grammarAccess.getJvmFormalParameterAccess().getGroup(), "rule__JvmFormalParameter__Group__0");
-					put(grammarAccess.getFullJvmFormalParameterAccess().getGroup(), "rule__FullJvmFormalParameter__Group__0");
-					put(grammarAccess.getXFeatureCallAccess().getGroup(), "rule__XFeatureCall__Group__0");
-					put(grammarAccess.getXFeatureCallAccess().getGroup_1(), "rule__XFeatureCall__Group_1__0");
-					put(grammarAccess.getXFeatureCallAccess().getGroup_1_2(), "rule__XFeatureCall__Group_1_2__0");
-					put(grammarAccess.getXFeatureCallAccess().getGroup_3(), "rule__XFeatureCall__Group_3__0");
-					put(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1(), "rule__XFeatureCall__Group_3_1_1__0");
-					put(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1_1(), "rule__XFeatureCall__Group_3_1_1_1__0");
-					put(grammarAccess.getXConstructorCallAccess().getGroup(), "rule__XConstructorCall__Group__0");
-					put(grammarAccess.getXConstructorCallAccess().getGroup_3(), "rule__XConstructorCall__Group_3__0");
-					put(grammarAccess.getXConstructorCallAccess().getGroup_3_2(), "rule__XConstructorCall__Group_3_2__0");
-					put(grammarAccess.getXConstructorCallAccess().getGroup_4(), "rule__XConstructorCall__Group_4__0");
-					put(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1(), "rule__XConstructorCall__Group_4_1_1__0");
-					put(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1_1(), "rule__XConstructorCall__Group_4_1_1_1__0");
-					put(grammarAccess.getXBooleanLiteralAccess().getGroup(), "rule__XBooleanLiteral__Group__0");
-					put(grammarAccess.getXNullLiteralAccess().getGroup(), "rule__XNullLiteral__Group__0");
-					put(grammarAccess.getXNumberLiteralAccess().getGroup(), "rule__XNumberLiteral__Group__0");
-					put(grammarAccess.getXStringLiteralAccess().getGroup(), "rule__XStringLiteral__Group__0");
-					put(grammarAccess.getXTypeLiteralAccess().getGroup(), "rule__XTypeLiteral__Group__0");
-					put(grammarAccess.getXThrowExpressionAccess().getGroup(), "rule__XThrowExpression__Group__0");
-					put(grammarAccess.getXReturnExpressionAccess().getGroup(), "rule__XReturnExpression__Group__0");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup(), "rule__XTryCatchFinallyExpression__Group__0");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0(), "rule__XTryCatchFinallyExpression__Group_3_0__0");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0_1(), "rule__XTryCatchFinallyExpression__Group_3_0_1__0");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_1(), "rule__XTryCatchFinallyExpression__Group_3_1__0");
-					put(grammarAccess.getXSynchronizedExpressionAccess().getGroup(), "rule__XSynchronizedExpression__Group__0");
-					put(grammarAccess.getXSynchronizedExpressionAccess().getGroup_0(), "rule__XSynchronizedExpression__Group_0__0");
-					put(grammarAccess.getXSynchronizedExpressionAccess().getGroup_0_0(), "rule__XSynchronizedExpression__Group_0_0__0");
-					put(grammarAccess.getXCatchClauseAccess().getGroup(), "rule__XCatchClause__Group__0");
-					put(grammarAccess.getNumberAccess().getGroup_1(), "rule__Number__Group_1__0");
-					put(grammarAccess.getNumberAccess().getGroup_1_1(), "rule__Number__Group_1_1__0");
-					put(grammarAccess.getStaticQualifierAccess().getGroup(), "rule__StaticQualifier__Group__0");
-					put(grammarAccess.getJvmTypeReferenceAccess().getGroup_0(), "rule__JvmTypeReference__Group_0__0");
-					put(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1(), "rule__JvmTypeReference__Group_0_1__0");
-					put(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1_0(), "rule__JvmTypeReference__Group_0_1_0__0");
-					put(grammarAccess.getArrayBracketsAccess().getGroup(), "rule__ArrayBrackets__Group__0");
-					put(grammarAccess.getXFunctionTypeRefAccess().getGroup(), "rule__XFunctionTypeRef__Group__0");
-					put(grammarAccess.getXFunctionTypeRefAccess().getGroup_0(), "rule__XFunctionTypeRef__Group_0__0");
-					put(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1(), "rule__XFunctionTypeRef__Group_0_1__0");
-					put(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1_1(), "rule__XFunctionTypeRef__Group_0_1_1__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup(), "rule__JvmParameterizedTypeReference__Group__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1(), "rule__JvmParameterizedTypeReference__Group_1__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_2(), "rule__JvmParameterizedTypeReference__Group_1_2__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4(), "rule__JvmParameterizedTypeReference__Group_1_4__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0(), "rule__JvmParameterizedTypeReference__Group_1_4_0__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0_0(), "rule__JvmParameterizedTypeReference__Group_1_4_0_0__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2(), "rule__JvmParameterizedTypeReference__Group_1_4_2__0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2_2(), "rule__JvmParameterizedTypeReference__Group_1_4_2_2__0");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup(), "rule__JvmWildcardTypeReference__Group__0");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_0(), "rule__JvmWildcardTypeReference__Group_2_0__0");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_1(), "rule__JvmWildcardTypeReference__Group_2_1__0");
-					put(grammarAccess.getJvmUpperBoundAccess().getGroup(), "rule__JvmUpperBound__Group__0");
-					put(grammarAccess.getJvmUpperBoundAndedAccess().getGroup(), "rule__JvmUpperBoundAnded__Group__0");
-					put(grammarAccess.getJvmLowerBoundAccess().getGroup(), "rule__JvmLowerBound__Group__0");
-					put(grammarAccess.getJvmLowerBoundAndedAccess().getGroup(), "rule__JvmLowerBoundAnded__Group__0");
-					put(grammarAccess.getJvmTypeParameterAccess().getGroup(), "rule__JvmTypeParameter__Group__0");
-					put(grammarAccess.getJvmTypeParameterAccess().getGroup_1(), "rule__JvmTypeParameter__Group_1__0");
-					put(grammarAccess.getQualifiedNameWithWildcardAccess().getGroup(), "rule__QualifiedNameWithWildcard__Group__0");
-					put(grammarAccess.getXImportDeclarationAccess().getGroup(), "rule__XImportDeclaration__Group__0");
-					put(grammarAccess.getXImportDeclarationAccess().getGroup_1_0(), "rule__XImportDeclaration__Group_1_0__0");
-					put(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup(), "rule__QualifiedNameInStaticImport__Group__0");
-					put(grammarAccess.getDatamartModelAccess().getPackagesAssignment(), "rule__DatamartModel__PackagesAssignment");
-					put(grammarAccess.getDatamartPackageAccess().getNameAssignment_2(), "rule__DatamartPackage__NameAssignment_2");
-					put(grammarAccess.getDatamartPackageAccess().getImportsAssignment_3_1(), "rule__DatamartPackage__ImportsAssignment_3_1");
-					put(grammarAccess.getDatamartPackageAccess().getDefinitionsAssignment_3_2(), "rule__DatamartPackage__DefinitionsAssignment_3_2");
-					put(grammarAccess.getDatamartDefinitionAccess().getNameAssignment_1(), "rule__DatamartDefinition__NameAssignment_1");
-					put(grammarAccess.getDatamartDefinitionAccess().getDescriptionAssignment_2_0(), "rule__DatamartDefinition__DescriptionAssignment_2_0");
-					put(grammarAccess.getDatamartDefinitionAccess().getDescriptionValueAssignment_2_1(), "rule__DatamartDefinition__DescriptionValueAssignment_2_1");
-					put(grammarAccess.getDatamartDefinitionAccess().getRolesAssignment_3_2(), "rule__DatamartDefinition__RolesAssignment_3_2");
-					put(grammarAccess.getDatamartDefinitionAccess().getSourceAssignment_5(), "rule__DatamartDefinition__SourceAssignment_5");
-					put(grammarAccess.getDatamartRoleAccess().getAssignedRoleAssignment_1(), "rule__DatamartRole__AssignedRoleAssignment_1");
-					put(grammarAccess.getDatamartTaskAccess().getTaskQueryAssignment_1(), "rule__DatamartTask__TaskQueryAssignment_1");
-					put(grammarAccess.getDatamartTaskAccess().getColumnsAssignment_2_2(), "rule__DatamartTask__ColumnsAssignment_2_2");
-					put(grammarAccess.getDatamartTaskAccess().getConditionsAssignment_3_2(), "rule__DatamartTask__ConditionsAssignment_3_2");
-					put(grammarAccess.getDatamartColumnAccess().getColumnRefAssignment_1(), "rule__DatamartColumn__ColumnRefAssignment_1");
-					put(grammarAccess.getDatamartTaskFilterAccess().getFilterRefAssignment_1(), "rule__DatamartTaskFilter__FilterRefAssignment_1");
-					put(grammarAccess.getDatamartCubeAccess().getCubeRefAssignment_1(), "rule__DatamartCube__CubeRefAssignment_1");
-					put(grammarAccess.getDatamartCubeAccess().getNonEmptyAssignment_2(), "rule__DatamartCube__NonEmptyAssignment_2");
-					put(grammarAccess.getDatamartCubeAccess().getAxisslicerAssignment_4(), "rule__DatamartCube__AxisslicerAssignment_4");
-					put(grammarAccess.getDatamartReferenceAccess().getRefAssignment_1(), "rule__DatamartReference__RefAssignment_1");
-					put(grammarAccess.getDatamartEntityAccess().getEntityRefAssignment_1(), "rule__DatamartEntity__EntityRefAssignment_1");
-					put(grammarAccess.getDatamartEntityAccess().getTrackingAssignment_2(), "rule__DatamartEntity__TrackingAssignment_2");
-					put(grammarAccess.getDatamartEntityAccess().getNavigationsAssignment_4_2(), "rule__DatamartEntity__NavigationsAssignment_4_2");
-					put(grammarAccess.getDatamartEntityAccess().getPropertiesAssignment_5_2(), "rule__DatamartEntity__PropertiesAssignment_5_2");
-					put(grammarAccess.getDatamartEntityAccess().getConditionsAssignment_6_2(), "rule__DatamartEntity__ConditionsAssignment_6_2");
-					put(grammarAccess.getDatamartEntityAccess().getOrderingAssignment_7_2(), "rule__DatamartEntity__OrderingAssignment_7_2");
-					put(grammarAccess.getDatamartEntityAccess().getFillerMinCountRowsAssignment_8_1(), "rule__DatamartEntity__FillerMinCountRowsAssignment_8_1");
-					put(grammarAccess.getDatamartEntityAccess().getFillerMaxCountRowsAssignment_8_3(), "rule__DatamartEntity__FillerMaxCountRowsAssignment_8_3");
-					put(grammarAccess.getDatamartEntityAccess().getFillerDatasAssignment_8_5(), "rule__DatamartEntity__FillerDatasAssignment_8_5");
-					put(grammarAccess.getDatamartOwnerAccess().getJoinRefAssignment_1(), "rule__DatamartOwner__JoinRefAssignment_1");
-					put(grammarAccess.getDatamartOwnerAccess().getDatamartEntityAssignment_3(), "rule__DatamartOwner__DatamartEntityAssignment_3");
-					put(grammarAccess.getDatamartMemberAccess().getJoinRefAssignment_1(), "rule__DatamartMember__JoinRefAssignment_1");
-					put(grammarAccess.getDatamartMemberAccess().getDatamartEntityAssignment_3(), "rule__DatamartMember__DatamartEntityAssignment_3");
-					put(grammarAccess.getDatamartPropertyAccess().getPropertyRefAssignment_1(), "rule__DatamartProperty__PropertyRefAssignment_1");
-					put(grammarAccess.getDatamartPropertyAccess().getAggregatedAssignment_2_0_0(), "rule__DatamartProperty__AggregatedAssignment_2_0_0");
-					put(grammarAccess.getDatamartPropertyAccess().getAggregateAssignment_2_0_1(), "rule__DatamartProperty__AggregateAssignment_2_0_1");
-					put(grammarAccess.getDatamartPropertyAccess().getPlacedAssignment_2_1_0(), "rule__DatamartProperty__PlacedAssignment_2_1_0");
-					put(grammarAccess.getDatamartPropertyAccess().getAxisAssignment_2_1_1(), "rule__DatamartProperty__AxisAssignment_2_1_1");
-					put(grammarAccess.getDatamartPropertyAccess().getScaledAssignment_2_2_0(), "rule__DatamartProperty__ScaledAssignment_2_2_0");
-					put(grammarAccess.getDatamartPropertyAccess().getScaleAssignment_2_2_1(), "rule__DatamartProperty__ScaleAssignment_2_2_1");
-					put(grammarAccess.getDatamartConditionAccess().getConditionAssignment_1(), "rule__DatamartCondition__ConditionAssignment_1");
-					put(grammarAccess.getDatamartOrderAccess().getOrderByAssignment_1(), "rule__DatamartOrder__OrderByAssignment_1");
-					put(grammarAccess.getDatamartOrderAccess().getOrderHowAssignment_2(), "rule__DatamartOrder__OrderHowAssignment_2");
-					put(grammarAccess.getDatamartDisjunctionAccess().getRightAssignment_1_1(), "rule__DatamartDisjunction__RightAssignment_1_1");
-					put(grammarAccess.getDatamartConjunctionAccess().getRightAssignment_1_1(), "rule__DatamartConjunction__RightAssignment_1_1");
-					put(grammarAccess.getDatamartConditionalExpressionAccess().getOperatorAssignment_1_0_1(), "rule__DatamartConditionalExpression__OperatorAssignment_1_0_1");
-					put(grammarAccess.getDatamartConditionalExpressionAccess().getRightAssignment_1_1(), "rule__DatamartConditionalExpression__RightAssignment_1_1");
-					put(grammarAccess.getDatamartValueAccess().getNumberValueAssignment_0(), "rule__DatamartValue__NumberValueAssignment_0");
-					put(grammarAccess.getDatamartValueAccess().getStringValueAssignment_1(), "rule__DatamartValue__StringValueAssignment_1");
-					put(grammarAccess.getDatamartValueAccess().getFilteredAssignment_2_0_0(), "rule__DatamartValue__FilteredAssignment_2_0_0");
-					put(grammarAccess.getDatamartValueAccess().getOptionalAssignment_2_0_1(), "rule__DatamartValue__OptionalAssignment_2_0_1");
-					put(grammarAccess.getDatamartValueAccess().getSelectedAssignment_2_1(), "rule__DatamartValue__SelectedAssignment_2_1");
-					put(grammarAccess.getDatamartDefineDerivedMeasureAccess().getNameAssignment_1(), "rule__DatamartDefineDerivedMeasure__NameAssignment_1");
-					put(grammarAccess.getDatamartDefineDerivedMeasureAccess().getDerivedElementAssignment_3(), "rule__DatamartDefineDerivedMeasure__DerivedElementAssignment_3");
-					put(grammarAccess.getDatamartAdditionAccess().getRightAssignment_1_1(), "rule__DatamartAddition__RightAssignment_1_1");
-					put(grammarAccess.getDatamartMultiplicationAccess().getRightAssignment_1_1(), "rule__DatamartMultiplication__RightAssignment_1_1");
-					put(grammarAccess.getDatamartNumberOrElementAccess().getValueAssignment_0(), "rule__DatamartNumberOrElement__ValueAssignment_0");
-					put(grammarAccess.getDatamartMemberTupleAccess().getFunctionAssignment_0_0_0(), "rule__DatamartMemberTuple__FunctionAssignment_0_0_0");
-					put(grammarAccess.getDatamartMemberTupleAccess().getFunctionAssignment_0_0_1(), "rule__DatamartMemberTuple__FunctionAssignment_0_0_1");
-					put(grammarAccess.getDatamartMemberTupleAccess().getHierarchyAssignment_1(), "rule__DatamartMemberTuple__HierarchyAssignment_1");
-					put(grammarAccess.getDatamartMemberTupleAccess().getRightAssignment_2_2(), "rule__DatamartMemberTuple__RightAssignment_2_2");
-					put(grammarAccess.getDatamartFunctionAccess().getFunctionAssignment(), "rule__DatamartFunction__FunctionAssignment");
-					put(grammarAccess.getDatamartParameterFunctionAccess().getFunctionAssignment_0(), "rule__DatamartParameterFunction__FunctionAssignment_0");
-					put(grammarAccess.getDatamartParameterFunctionAccess().getParameterAssignment_2(), "rule__DatamartParameterFunction__ParameterAssignment_2");
-					put(grammarAccess.getDatamartFunctionIntParameterAccess().getValueAssignment(), "rule__DatamartFunctionIntParameter__ValueAssignment");
-					put(grammarAccess.getDatamartSetFunctionAccess().getSetFunctionAssignment(), "rule__DatamartSetFunction__SetFunctionAssignment");
-					put(grammarAccess.getDatamartSetParameterFunctionAccess().getSetFunctionAssignment_0(), "rule__DatamartSetParameterFunction__SetFunctionAssignment_0");
-					put(grammarAccess.getDatamartSetParameterFunctionAccess().getParameterAssignment_2(), "rule__DatamartSetParameterFunction__ParameterAssignment_2");
-					put(grammarAccess.getDatamartSetAggregationFunctionAccess().getAggregationAssignment_0(), "rule__DatamartSetAggregationFunction__AggregationAssignment_0");
-					put(grammarAccess.getDatamartSetAggregationFunctionAccess().getParameterAssignment_2(), "rule__DatamartSetAggregationFunction__ParameterAssignment_2");
-					put(grammarAccess.getDatamartSetTupleAccess().getSetFunctionAssignment_0_0(), "rule__DatamartSetTuple__SetFunctionAssignment_0_0");
-					put(grammarAccess.getDatamartSetTupleAccess().getSetFunctionAssignment_0_1(), "rule__DatamartSetTuple__SetFunctionAssignment_0_1");
-					put(grammarAccess.getDatamartSetTupleAccess().getRightAssignment_1_2(), "rule__DatamartSetTuple__RightAssignment_1_2");
-					put(grammarAccess.getDatamartAggregationFunctionAccess().getAggregationAssignment(), "rule__DatamartAggregationFunction__AggregationAssignment");
-					put(grammarAccess.getDatamartAggregationAccess().getAggregationAssignment_0(), "rule__DatamartAggregation__AggregationAssignment_0");
-					put(grammarAccess.getDatamartAggregationAccess().getSetAssignment_2_0(), "rule__DatamartAggregation__SetAssignment_2_0");
-					put(grammarAccess.getDatamartAggregationAccess().getSetAssignment_2_1(), "rule__DatamartAggregation__SetAssignment_2_1");
-					put(grammarAccess.getDatamartAggregationAccess().getRightAssignment_3_2(), "rule__DatamartAggregation__RightAssignment_3_2");
-					put(grammarAccess.getDatamartSetAggregationAccess().getAggregationAssignment_0(), "rule__DatamartSetAggregation__AggregationAssignment_0");
-					put(grammarAccess.getDatamartSetAggregationAccess().getSetAssignment_2_0(), "rule__DatamartSetAggregation__SetAssignment_2_0");
-					put(grammarAccess.getDatamartSetAggregationAccess().getSetAssignment_2_1(), "rule__DatamartSetAggregation__SetAssignment_2_1");
-					put(grammarAccess.getDatamartSetAggregationAccess().getRightAssignment_3_2(), "rule__DatamartSetAggregation__RightAssignment_3_2");
-					put(grammarAccess.getDatamartSlicerAccess().getElementAssignment_1(), "rule__DatamartSlicer__ElementAssignment_1");
-					put(grammarAccess.getDatamartAxisAccess().getNameAssignment_1(), "rule__DatamartAxis__NameAssignment_1");
-					put(grammarAccess.getDatamartAxisAccess().getElementsAssignment_3(), "rule__DatamartAxis__ElementsAssignment_3");
-					put(grammarAccess.getDatamartDerivedMeasureAccess().getDerivedRefAssignment_1(), "rule__DatamartDerivedMeasure__DerivedRefAssignment_1");
-					put(grammarAccess.getDatamartDerivedMeasureAccess().getScaledAssignment_2_0(), "rule__DatamartDerivedMeasure__ScaledAssignment_2_0");
-					put(grammarAccess.getDatamartDerivedMeasureAccess().getScaleAssignment_2_1(), "rule__DatamartDerivedMeasure__ScaleAssignment_2_1");
-					put(grammarAccess.getDatamartMeasureAccess().getMeasureRefAssignment_1(), "rule__DatamartMeasure__MeasureRefAssignment_1");
-					put(grammarAccess.getDatamartMeasureAccess().getScaledAssignment_2_0(), "rule__DatamartMeasure__ScaledAssignment_2_0");
-					put(grammarAccess.getDatamartMeasureAccess().getScaleAssignment_2_1(), "rule__DatamartMeasure__ScaleAssignment_2_1");
-					put(grammarAccess.getDatamartHierarchyAccess().getHierarchyRefAssignment_1(), "rule__DatamartHierarchy__HierarchyRefAssignment_1");
-					put(grammarAccess.getDatamartHierarchyAccess().getDefaultMemberAssignment_2(), "rule__DatamartHierarchy__DefaultMemberAssignment_2");
-					put(grammarAccess.getDatamartHierarchyAccess().getAllMemberAssignment_3(), "rule__DatamartHierarchy__AllMemberAssignment_3");
-					put(grammarAccess.getDatamartHierarchyAccess().getAllLevelsAssignment_4(), "rule__DatamartHierarchy__AllLevelsAssignment_4");
-					put(grammarAccess.getDatamartHierarchyAccess().getLevelRefAssignment_5_1(), "rule__DatamartHierarchy__LevelRefAssignment_5_1");
-					put(grammarAccess.getDatamartHierarchyAccess().getFilteredAssignment_5_2_0(), "rule__DatamartHierarchy__FilteredAssignment_5_2_0");
-					put(grammarAccess.getDatamartHierarchyAccess().getSelectedAssignment_5_2_1(), "rule__DatamartHierarchy__SelectedAssignment_5_2_1");
-					put(grammarAccess.getDatamartHierarchyAccess().getAllAssignment_6_0(), "rule__DatamartHierarchy__AllAssignment_6_0");
-					put(grammarAccess.getDatamartHierarchyAccess().getExceptAssignment_6_1_0(), "rule__DatamartHierarchy__ExceptAssignment_6_1_0");
-					put(grammarAccess.getDatamartHierarchyAccess().getExceptRefAssignment_6_1_1(), "rule__DatamartHierarchy__ExceptRefAssignment_6_1_1");
-					put(grammarAccess.getDatamartHierarchyAccess().getOrderedAssignment_6_2_0(), "rule__DatamartHierarchy__OrderedAssignment_6_2_0");
-					put(grammarAccess.getDatamartHierarchyAccess().getOrderRefAssignment_6_2_1(), "rule__DatamartHierarchy__OrderRefAssignment_6_2_1");
-					put(grammarAccess.getDatamartHierarchyAccess().getDescendingAssignment_6_2_2(), "rule__DatamartHierarchy__DescendingAssignment_6_2_2");
-					put(grammarAccess.getDatamartImportAccess().getImportedNamespaceAssignment_1(), "rule__DatamartImport__ImportedNamespaceAssignment_1");
-					put(grammarAccess.getPropertyFillerDataAccess().getPropertyRefAssignment_1(), "rule__PropertyFillerData__PropertyRefAssignment_1");
-					put(grammarAccess.getPropertyFillerDataAccess().getFillerTypeAssignment_3(), "rule__PropertyFillerData__FillerTypeAssignment_3");
-					put(grammarAccess.getPropertyFillerDateFutureAccess().getDateFutureYearsAssignment_1(), "rule__PropertyFillerDateFuture__DateFutureYearsAssignment_1");
-					put(grammarAccess.getPropertyFillerDatePastAccess().getDatePastYearsAssignment_1(), "rule__PropertyFillerDatePast__DatePastYearsAssignment_1");
-					put(grammarAccess.getPropertyFillerDateRangeAccess().getDateBeginYearsAssignment_1(), "rule__PropertyFillerDateRange__DateBeginYearsAssignment_1");
-					put(grammarAccess.getPropertyFillerDateRangeAccess().getDateEndYearsAssignment_3(), "rule__PropertyFillerDateRange__DateEndYearsAssignment_3");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getBeginRangeAssignment_1_0_0(), "rule__PropertyFillerSignedDoubleRange__BeginRangeAssignment_1_0_0");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getBeginRangeRefAssignment_1_0_1(), "rule__PropertyFillerSignedDoubleRange__BeginRangeRefAssignment_1_0_1");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getEndRangeAssignment_1_2_0(), "rule__PropertyFillerSignedDoubleRange__EndRangeAssignment_1_2_0");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getEndRangeRefAssignment_1_2_1(), "rule__PropertyFillerSignedDoubleRange__EndRangeRefAssignment_1_2_1");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getDecimalsAssignment_3(), "rule__PropertyFillerSignedDoubleRange__DecimalsAssignment_3");
-					put(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getRoundedAssignment_5_1(), "rule__PropertyFillerSignedDoubleRange__RoundedAssignment_5_1");
-					put(grammarAccess.getPropertyFillerSignedDoubleRandomAccess().getItemsAssignment_2(), "rule__PropertyFillerSignedDoubleRandom__ItemsAssignment_2");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getBeginRangeAssignment_2_0_0(), "rule__PropertyFillerSignedIntegerRange__BeginRangeAssignment_2_0_0");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getBeginRangeRefAssignment_2_0_1(), "rule__PropertyFillerSignedIntegerRange__BeginRangeRefAssignment_2_0_1");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getEndRangeAssignment_2_2_0(), "rule__PropertyFillerSignedIntegerRange__EndRangeAssignment_2_2_0");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getEndRangeRefAssignment_2_2_1(), "rule__PropertyFillerSignedIntegerRange__EndRangeRefAssignment_2_2_1");
-					put(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getRoundedAssignment_3_1(), "rule__PropertyFillerSignedIntegerRange__RoundedAssignment_3_1");
-					put(grammarAccess.getPropertyFillerSignedIntegerRandomAccess().getItemsAssignment_2(), "rule__PropertyFillerSignedIntegerRandom__ItemsAssignment_2");
-					put(grammarAccess.getPropertyFillerTextRandomAccess().getItemsAssignment_2(), "rule__PropertyFillerTextRandom__ItemsAssignment_2");
-					put(grammarAccess.getPropertyFillerTextParagraphsAccess().getCountAssignment_2(), "rule__PropertyFillerTextParagraphs__CountAssignment_2");
-					put(grammarAccess.getPropertyFillerTextSentencesAccess().getCountAssignment_2(), "rule__PropertyFillerTextSentences__CountAssignment_2");
-					put(grammarAccess.getPropertyFillerTextWordsAccess().getCountAssignment_2(), "rule__PropertyFillerTextWords__CountAssignment_2");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getBeginRangeAssignment_1_0_0(), "rule__PropertyFillerUnsignedDoubleRange__BeginRangeAssignment_1_0_0");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getBeginRangeRefAssignment_1_0_1(), "rule__PropertyFillerUnsignedDoubleRange__BeginRangeRefAssignment_1_0_1");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getEndRangeAssignment_1_2_0(), "rule__PropertyFillerUnsignedDoubleRange__EndRangeAssignment_1_2_0");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getEndRangeRefAssignment_1_2_1(), "rule__PropertyFillerUnsignedDoubleRange__EndRangeRefAssignment_1_2_1");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getDecimalsAssignment_3(), "rule__PropertyFillerUnsignedDoubleRange__DecimalsAssignment_3");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getRoundedAssignment_5_1(), "rule__PropertyFillerUnsignedDoubleRange__RoundedAssignment_5_1");
-					put(grammarAccess.getPropertyFillerUnsignedDoubleRandomAccess().getItemsAssignment_2(), "rule__PropertyFillerUnsignedDoubleRandom__ItemsAssignment_2");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getBeginRangeAssignment_2_0_0(), "rule__PropertyFillerUnsignedIntegerRange__BeginRangeAssignment_2_0_0");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getBeginRangeRefAssignment_2_0_1(), "rule__PropertyFillerUnsignedIntegerRange__BeginRangeRefAssignment_2_0_1");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getEndRangeAssignment_2_2_0(), "rule__PropertyFillerUnsignedIntegerRange__EndRangeAssignment_2_2_0");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getEndRangeRefAssignment_2_2_1(), "rule__PropertyFillerUnsignedIntegerRange__EndRangeRefAssignment_2_2_1");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getRoundedAssignment_3_1(), "rule__PropertyFillerUnsignedIntegerRange__RoundedAssignment_3_1");
-					put(grammarAccess.getPropertyFillerUnsignedIntegerRandomAccess().getItemsAssignment_2(), "rule__PropertyFillerUnsignedIntegerRandom__ItemsAssignment_2");
-					put(grammarAccess.getXAnnotationAccess().getAnnotationTypeAssignment_2(), "rule__XAnnotation__AnnotationTypeAssignment_2");
-					put(grammarAccess.getXAnnotationAccess().getElementValuePairsAssignment_3_1_0_0(), "rule__XAnnotation__ElementValuePairsAssignment_3_1_0_0");
-					put(grammarAccess.getXAnnotationAccess().getElementValuePairsAssignment_3_1_0_1_1(), "rule__XAnnotation__ElementValuePairsAssignment_3_1_0_1_1");
-					put(grammarAccess.getXAnnotationAccess().getValueAssignment_3_1_1(), "rule__XAnnotation__ValueAssignment_3_1_1");
-					put(grammarAccess.getXAnnotationElementValuePairAccess().getElementAssignment_0_0_0(), "rule__XAnnotationElementValuePair__ElementAssignment_0_0_0");
-					put(grammarAccess.getXAnnotationElementValuePairAccess().getValueAssignment_1(), "rule__XAnnotationElementValuePair__ValueAssignment_1");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_0_1_0(), "rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_0");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_0_1_1_1(), "rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_1_1");
-					put(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getElementsAssignment_1_1_1_1(), "rule__XAnnotationElementValueOrCommaList__ElementsAssignment_1_1_1_1");
-					put(grammarAccess.getXAnnotationElementValueAccess().getElementsAssignment_0_1_0(), "rule__XAnnotationElementValue__ElementsAssignment_0_1_0");
-					put(grammarAccess.getXAnnotationElementValueAccess().getElementsAssignment_0_1_1_1(), "rule__XAnnotationElementValue__ElementsAssignment_0_1_1_1");
-					put(grammarAccess.getXAssignmentAccess().getFeatureAssignment_0_1(), "rule__XAssignment__FeatureAssignment_0_1");
-					put(grammarAccess.getXAssignmentAccess().getValueAssignment_0_3(), "rule__XAssignment__ValueAssignment_0_3");
-					put(grammarAccess.getXAssignmentAccess().getFeatureAssignment_1_1_0_0_1(), "rule__XAssignment__FeatureAssignment_1_1_0_0_1");
-					put(grammarAccess.getXAssignmentAccess().getRightOperandAssignment_1_1_1(), "rule__XAssignment__RightOperandAssignment_1_1_1");
-					put(grammarAccess.getXOrExpressionAccess().getFeatureAssignment_1_0_0_1(), "rule__XOrExpression__FeatureAssignment_1_0_0_1");
-					put(grammarAccess.getXOrExpressionAccess().getRightOperandAssignment_1_1(), "rule__XOrExpression__RightOperandAssignment_1_1");
-					put(grammarAccess.getXAndExpressionAccess().getFeatureAssignment_1_0_0_1(), "rule__XAndExpression__FeatureAssignment_1_0_0_1");
-					put(grammarAccess.getXAndExpressionAccess().getRightOperandAssignment_1_1(), "rule__XAndExpression__RightOperandAssignment_1_1");
-					put(grammarAccess.getXEqualityExpressionAccess().getFeatureAssignment_1_0_0_1(), "rule__XEqualityExpression__FeatureAssignment_1_0_0_1");
-					put(grammarAccess.getXEqualityExpressionAccess().getRightOperandAssignment_1_1(), "rule__XEqualityExpression__RightOperandAssignment_1_1");
-					put(grammarAccess.getXRelationalExpressionAccess().getTypeAssignment_1_0_1(), "rule__XRelationalExpression__TypeAssignment_1_0_1");
-					put(grammarAccess.getXRelationalExpressionAccess().getFeatureAssignment_1_1_0_0_1(), "rule__XRelationalExpression__FeatureAssignment_1_1_0_0_1");
-					put(grammarAccess.getXRelationalExpressionAccess().getRightOperandAssignment_1_1_1(), "rule__XRelationalExpression__RightOperandAssignment_1_1_1");
-					put(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureAssignment_1_0_0_1(), "rule__XOtherOperatorExpression__FeatureAssignment_1_0_0_1");
-					put(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandAssignment_1_1(), "rule__XOtherOperatorExpression__RightOperandAssignment_1_1");
-					put(grammarAccess.getXAdditiveExpressionAccess().getFeatureAssignment_1_0_0_1(), "rule__XAdditiveExpression__FeatureAssignment_1_0_0_1");
-					put(grammarAccess.getXAdditiveExpressionAccess().getRightOperandAssignment_1_1(), "rule__XAdditiveExpression__RightOperandAssignment_1_1");
-					put(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureAssignment_1_0_0_1(), "rule__XMultiplicativeExpression__FeatureAssignment_1_0_0_1");
-					put(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandAssignment_1_1(), "rule__XMultiplicativeExpression__RightOperandAssignment_1_1");
-					put(grammarAccess.getXUnaryOperationAccess().getFeatureAssignment_0_1(), "rule__XUnaryOperation__FeatureAssignment_0_1");
-					put(grammarAccess.getXUnaryOperationAccess().getOperandAssignment_0_2(), "rule__XUnaryOperation__OperandAssignment_0_2");
-					put(grammarAccess.getXCastedExpressionAccess().getTypeAssignment_1_1(), "rule__XCastedExpression__TypeAssignment_1_1");
-					put(grammarAccess.getXPostfixOperationAccess().getFeatureAssignment_1_0_1(), "rule__XPostfixOperation__FeatureAssignment_1_0_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_0_0_0_1_1(), "rule__XMemberFeatureCall__ExplicitStaticAssignment_1_0_0_0_1_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getFeatureAssignment_1_0_0_0_2(), "rule__XMemberFeatureCall__FeatureAssignment_1_0_0_0_2");
-					put(grammarAccess.getXMemberFeatureCallAccess().getValueAssignment_1_0_1(), "rule__XMemberFeatureCall__ValueAssignment_1_0_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getNullSafeAssignment_1_1_0_0_1_1(), "rule__XMemberFeatureCall__NullSafeAssignment_1_1_0_0_1_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_1_0_0_1_2(), "rule__XMemberFeatureCall__ExplicitStaticAssignment_1_1_0_0_1_2");
-					put(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsAssignment_1_1_1_1(), "rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsAssignment_1_1_1_2_1(), "rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_2_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getFeatureAssignment_1_1_2(), "rule__XMemberFeatureCall__FeatureAssignment_1_1_2");
-					put(grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallAssignment_1_1_3_0(), "rule__XMemberFeatureCall__ExplicitOperationCallAssignment_1_1_3_0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_0(), "rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_1_0(), "rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_0");
-					put(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_1_1_1(), "rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_1_1");
-					put(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_4(), "rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_4");
-					put(grammarAccess.getXSetLiteralAccess().getElementsAssignment_3_0(), "rule__XSetLiteral__ElementsAssignment_3_0");
-					put(grammarAccess.getXSetLiteralAccess().getElementsAssignment_3_1_1(), "rule__XSetLiteral__ElementsAssignment_3_1_1");
-					put(grammarAccess.getXListLiteralAccess().getElementsAssignment_3_0(), "rule__XListLiteral__ElementsAssignment_3_0");
-					put(grammarAccess.getXListLiteralAccess().getElementsAssignment_3_1_1(), "rule__XListLiteral__ElementsAssignment_3_1_1");
-					put(grammarAccess.getXClosureAccess().getDeclaredFormalParametersAssignment_1_0_0_0(), "rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_0");
-					put(grammarAccess.getXClosureAccess().getDeclaredFormalParametersAssignment_1_0_0_1_1(), "rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_1_1");
-					put(grammarAccess.getXClosureAccess().getExplicitSyntaxAssignment_1_0_1(), "rule__XClosure__ExplicitSyntaxAssignment_1_0_1");
-					put(grammarAccess.getXClosureAccess().getExpressionAssignment_2(), "rule__XClosure__ExpressionAssignment_2");
-					put(grammarAccess.getXExpressionInClosureAccess().getExpressionsAssignment_1_0(), "rule__XExpressionInClosure__ExpressionsAssignment_1_0");
-					put(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersAssignment_0_0_1_0(), "rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_0");
-					put(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersAssignment_0_0_1_1_1(), "rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_1_1");
-					put(grammarAccess.getXShortClosureAccess().getExplicitSyntaxAssignment_0_0_2(), "rule__XShortClosure__ExplicitSyntaxAssignment_0_0_2");
-					put(grammarAccess.getXShortClosureAccess().getExpressionAssignment_1(), "rule__XShortClosure__ExpressionAssignment_1");
-					put(grammarAccess.getXIfExpressionAccess().getIfAssignment_3(), "rule__XIfExpression__IfAssignment_3");
-					put(grammarAccess.getXIfExpressionAccess().getThenAssignment_5(), "rule__XIfExpression__ThenAssignment_5");
-					put(grammarAccess.getXIfExpressionAccess().getElseAssignment_6_1(), "rule__XIfExpression__ElseAssignment_6_1");
-					put(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamAssignment_2_0_0_0_1(), "rule__XSwitchExpression__DeclaredParamAssignment_2_0_0_0_1");
-					put(grammarAccess.getXSwitchExpressionAccess().getSwitchAssignment_2_0_1(), "rule__XSwitchExpression__SwitchAssignment_2_0_1");
-					put(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamAssignment_2_1_0_0_0(), "rule__XSwitchExpression__DeclaredParamAssignment_2_1_0_0_0");
-					put(grammarAccess.getXSwitchExpressionAccess().getSwitchAssignment_2_1_1(), "rule__XSwitchExpression__SwitchAssignment_2_1_1");
-					put(grammarAccess.getXSwitchExpressionAccess().getCasesAssignment_4(), "rule__XSwitchExpression__CasesAssignment_4");
-					put(grammarAccess.getXSwitchExpressionAccess().getDefaultAssignment_5_2(), "rule__XSwitchExpression__DefaultAssignment_5_2");
-					put(grammarAccess.getXCasePartAccess().getTypeGuardAssignment_1(), "rule__XCasePart__TypeGuardAssignment_1");
-					put(grammarAccess.getXCasePartAccess().getCaseAssignment_2_1(), "rule__XCasePart__CaseAssignment_2_1");
-					put(grammarAccess.getXCasePartAccess().getThenAssignment_3_0_1(), "rule__XCasePart__ThenAssignment_3_0_1");
-					put(grammarAccess.getXCasePartAccess().getFallThroughAssignment_3_1(), "rule__XCasePart__FallThroughAssignment_3_1");
-					put(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamAssignment_0_0_3(), "rule__XForLoopExpression__DeclaredParamAssignment_0_0_3");
-					put(grammarAccess.getXForLoopExpressionAccess().getForExpressionAssignment_1(), "rule__XForLoopExpression__ForExpressionAssignment_1");
-					put(grammarAccess.getXForLoopExpressionAccess().getEachExpressionAssignment_3(), "rule__XForLoopExpression__EachExpressionAssignment_3");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsAssignment_3_0(), "rule__XBasicForLoopExpression__InitExpressionsAssignment_3_0");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsAssignment_3_1_1(), "rule__XBasicForLoopExpression__InitExpressionsAssignment_3_1_1");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionAssignment_5(), "rule__XBasicForLoopExpression__ExpressionAssignment_5");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsAssignment_7_0(), "rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_0");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsAssignment_7_1_1(), "rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_1_1");
-					put(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionAssignment_9(), "rule__XBasicForLoopExpression__EachExpressionAssignment_9");
-					put(grammarAccess.getXWhileExpressionAccess().getPredicateAssignment_3(), "rule__XWhileExpression__PredicateAssignment_3");
-					put(grammarAccess.getXWhileExpressionAccess().getBodyAssignment_5(), "rule__XWhileExpression__BodyAssignment_5");
-					put(grammarAccess.getXDoWhileExpressionAccess().getBodyAssignment_2(), "rule__XDoWhileExpression__BodyAssignment_2");
-					put(grammarAccess.getXDoWhileExpressionAccess().getPredicateAssignment_5(), "rule__XDoWhileExpression__PredicateAssignment_5");
-					put(grammarAccess.getXBlockExpressionAccess().getExpressionsAssignment_2_0(), "rule__XBlockExpression__ExpressionsAssignment_2_0");
-					put(grammarAccess.getXVariableDeclarationAccess().getWriteableAssignment_1_0(), "rule__XVariableDeclaration__WriteableAssignment_1_0");
-					put(grammarAccess.getXVariableDeclarationAccess().getTypeAssignment_2_0_0_0(), "rule__XVariableDeclaration__TypeAssignment_2_0_0_0");
-					put(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_0_0_1(), "rule__XVariableDeclaration__NameAssignment_2_0_0_1");
-					put(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_1(), "rule__XVariableDeclaration__NameAssignment_2_1");
-					put(grammarAccess.getXVariableDeclarationAccess().getRightAssignment_3_1(), "rule__XVariableDeclaration__RightAssignment_3_1");
-					put(grammarAccess.getJvmFormalParameterAccess().getParameterTypeAssignment_0(), "rule__JvmFormalParameter__ParameterTypeAssignment_0");
-					put(grammarAccess.getJvmFormalParameterAccess().getNameAssignment_1(), "rule__JvmFormalParameter__NameAssignment_1");
-					put(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeAssignment_0(), "rule__FullJvmFormalParameter__ParameterTypeAssignment_0");
-					put(grammarAccess.getFullJvmFormalParameterAccess().getNameAssignment_1(), "rule__FullJvmFormalParameter__NameAssignment_1");
-					put(grammarAccess.getXFeatureCallAccess().getTypeArgumentsAssignment_1_1(), "rule__XFeatureCall__TypeArgumentsAssignment_1_1");
-					put(grammarAccess.getXFeatureCallAccess().getTypeArgumentsAssignment_1_2_1(), "rule__XFeatureCall__TypeArgumentsAssignment_1_2_1");
-					put(grammarAccess.getXFeatureCallAccess().getFeatureAssignment_2(), "rule__XFeatureCall__FeatureAssignment_2");
-					put(grammarAccess.getXFeatureCallAccess().getExplicitOperationCallAssignment_3_0(), "rule__XFeatureCall__ExplicitOperationCallAssignment_3_0");
-					put(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_0(), "rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_0");
-					put(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_1_0(), "rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_0");
-					put(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_1_1_1(), "rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_1_1");
-					put(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_4(), "rule__XFeatureCall__FeatureCallArgumentsAssignment_4");
-					put(grammarAccess.getXConstructorCallAccess().getConstructorAssignment_2(), "rule__XConstructorCall__ConstructorAssignment_2");
-					put(grammarAccess.getXConstructorCallAccess().getTypeArgumentsAssignment_3_1(), "rule__XConstructorCall__TypeArgumentsAssignment_3_1");
-					put(grammarAccess.getXConstructorCallAccess().getTypeArgumentsAssignment_3_2_1(), "rule__XConstructorCall__TypeArgumentsAssignment_3_2_1");
-					put(grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallAssignment_4_0(), "rule__XConstructorCall__ExplicitConstructorCallAssignment_4_0");
-					put(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_0(), "rule__XConstructorCall__ArgumentsAssignment_4_1_0");
-					put(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_1_0(), "rule__XConstructorCall__ArgumentsAssignment_4_1_1_0");
-					put(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_1_1_1(), "rule__XConstructorCall__ArgumentsAssignment_4_1_1_1_1");
-					put(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_5(), "rule__XConstructorCall__ArgumentsAssignment_5");
-					put(grammarAccess.getXBooleanLiteralAccess().getIsTrueAssignment_1_1(), "rule__XBooleanLiteral__IsTrueAssignment_1_1");
-					put(grammarAccess.getXNumberLiteralAccess().getValueAssignment_1(), "rule__XNumberLiteral__ValueAssignment_1");
-					put(grammarAccess.getXStringLiteralAccess().getValueAssignment_1(), "rule__XStringLiteral__ValueAssignment_1");
-					put(grammarAccess.getXTypeLiteralAccess().getTypeAssignment_3(), "rule__XTypeLiteral__TypeAssignment_3");
-					put(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsAssignment_4(), "rule__XTypeLiteral__ArrayDimensionsAssignment_4");
-					put(grammarAccess.getXThrowExpressionAccess().getExpressionAssignment_2(), "rule__XThrowExpression__ExpressionAssignment_2");
-					put(grammarAccess.getXReturnExpressionAccess().getExpressionAssignment_2(), "rule__XReturnExpression__ExpressionAssignment_2");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionAssignment_2(), "rule__XTryCatchFinallyExpression__ExpressionAssignment_2");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesAssignment_3_0_0(), "rule__XTryCatchFinallyExpression__CatchClausesAssignment_3_0_0");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionAssignment_3_0_1_1(), "rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_0_1_1");
-					put(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionAssignment_3_1_1(), "rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_1_1");
-					put(grammarAccess.getXSynchronizedExpressionAccess().getParamAssignment_1(), "rule__XSynchronizedExpression__ParamAssignment_1");
-					put(grammarAccess.getXSynchronizedExpressionAccess().getExpressionAssignment_3(), "rule__XSynchronizedExpression__ExpressionAssignment_3");
-					put(grammarAccess.getXCatchClauseAccess().getDeclaredParamAssignment_2(), "rule__XCatchClause__DeclaredParamAssignment_2");
-					put(grammarAccess.getXCatchClauseAccess().getExpressionAssignment_4(), "rule__XCatchClause__ExpressionAssignment_4");
-					put(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_0(), "rule__XFunctionTypeRef__ParamTypesAssignment_0_1_0");
-					put(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_1_1(), "rule__XFunctionTypeRef__ParamTypesAssignment_0_1_1_1");
-					put(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeAssignment_2(), "rule__XFunctionTypeRef__ReturnTypeAssignment_2");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_0(), "rule__JvmParameterizedTypeReference__TypeAssignment_0");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_1");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_2_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_2_1");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_1_4_1(), "rule__JvmParameterizedTypeReference__TypeAssignment_1_4_1");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_1");
-					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_2_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_2_1");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_0(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_0");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_1(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_1");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_0(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_0");
-					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_1(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_1");
-					put(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceAssignment_1(), "rule__JvmUpperBound__TypeReferenceAssignment_1");
-					put(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceAssignment_1(), "rule__JvmUpperBoundAnded__TypeReferenceAssignment_1");
-					put(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceAssignment_1(), "rule__JvmLowerBound__TypeReferenceAssignment_1");
-					put(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceAssignment_1(), "rule__JvmLowerBoundAnded__TypeReferenceAssignment_1");
-					put(grammarAccess.getJvmTypeParameterAccess().getNameAssignment_0(), "rule__JvmTypeParameter__NameAssignment_0");
-					put(grammarAccess.getJvmTypeParameterAccess().getConstraintsAssignment_1_0(), "rule__JvmTypeParameter__ConstraintsAssignment_1_0");
-					put(grammarAccess.getJvmTypeParameterAccess().getConstraintsAssignment_1_1(), "rule__JvmTypeParameter__ConstraintsAssignment_1_1");
-					put(grammarAccess.getXImportSectionAccess().getImportDeclarationsAssignment(), "rule__XImportSection__ImportDeclarationsAssignment");
-					put(grammarAccess.getXImportDeclarationAccess().getStaticAssignment_1_0_0(), "rule__XImportDeclaration__StaticAssignment_1_0_0");
-					put(grammarAccess.getXImportDeclarationAccess().getExtensionAssignment_1_0_1(), "rule__XImportDeclaration__ExtensionAssignment_1_0_1");
-					put(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_1_0_2(), "rule__XImportDeclaration__ImportedTypeAssignment_1_0_2");
-					put(grammarAccess.getXImportDeclarationAccess().getWildcardAssignment_1_0_3_0(), "rule__XImportDeclaration__WildcardAssignment_1_0_3_0");
-					put(grammarAccess.getXImportDeclarationAccess().getMemberNameAssignment_1_0_3_1(), "rule__XImportDeclaration__MemberNameAssignment_1_0_3_1");
-					put(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_1_1(), "rule__XImportDeclaration__ImportedTypeAssignment_1_1");
-					put(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceAssignment_1_2(), "rule__XImportDeclaration__ImportedNamespaceAssignment_1_2");
-					put(grammarAccess.getDatamartPropertyAccess().getUnorderedGroup_2(), "rule__DatamartProperty__UnorderedGroup_2");
-				}
-			};
-		}
-		return nameMappings.get(element);
-	}
-	
-	@Override
-	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
-		try {
-			org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal.InternalDatamartDSLParser typedParser = (org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal.InternalDatamartDSLParser) parser;
-			typedParser.entryRuleDatamartModel();
-			return typedParser.getFollowElements();
-		} catch(RecognitionException ex) {
-			throw new RuntimeException(ex);
-		}		
-	}
-	
-	@Override
-	protected String[] getInitialHiddenTokens() {
-		return new String[] { "RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT" };
-	}
-	
-	public DatamartDSLGrammarAccess getGrammarAccess() {
-		return this.grammarAccess;
-	}
-	
-	public void setGrammarAccess(DatamartDSLGrammarAccess grammarAccess) {
-		this.grammarAccess = grammarAccess;
-	}
-}
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/PartialDatamartDSLContentAssistParser.java b/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/PartialDatamartDSLContentAssistParser.java
deleted file mode 100644
index 91bd431..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/PartialDatamartDSLContentAssistParser.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- *                                                                            
- *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-package org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import org.eclipse.xtext.AbstractRule;
-import org.eclipse.xtext.ui.codetemplates.ui.partialEditing.IPartialContentAssistParser;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
-import org.eclipse.xtext.util.PolymorphicDispatcher;
-
-/**
- * @author Sebastian Zarnekow - Initial contribution and API
- */
-@SuppressWarnings("restriction")
-public class PartialDatamartDSLContentAssistParser extends DatamartDSLParser implements IPartialContentAssistParser {
-
-	private AbstractRule rule;
-
-	public void initializeFor(AbstractRule rule) {
-		this.rule = rule;
-	}
-	
-	@Override
-	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
-		if (rule == null || rule.eIsProxy())
-			return Collections.emptyList();
-		String methodName = "entryRule" + rule.getName();
-		PolymorphicDispatcher<Collection<FollowElement>> dispatcher = 
-			new PolymorphicDispatcher<Collection<FollowElement>>(methodName, 0, 0, Collections.singletonList(parser));
-		dispatcher.invoke();
-		return parser.getFollowElements();
-	}
-
-}
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g b/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g
deleted file mode 100644
index 0fa3867..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g
+++ /dev/null
@@ -1,10014 +0,0 @@
-/**
- *                                                                            
- *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-grammar InternalDatamartDSL;
-
-options {
-	superClass=AbstractInternalContentAssistParser;
-	backtrack=true;
-	
-}
-
-@lexer::header {
-package org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal;
-
-// Hack: Use our own Lexer superclass by means of import. 
-// Currently there is no other way to specify the superclass for the lexer.
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;
-}
-
-@parser::header {
-package org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal; 
-
-import java.io.InputStream;
-import org.eclipse.xtext.*;
-import org.eclipse.xtext.parser.*;
-import org.eclipse.xtext.parser.impl.*;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.parser.antlr.XtextTokenStream;
-import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
-import org.eclipse.osbp.xtext.datamartdsl.services.DatamartDSLGrammarAccess;
-
-}
-
-@parser::members {
- 
- 	private DatamartDSLGrammarAccess grammarAccess;
- 	
-    public void setGrammarAccess(DatamartDSLGrammarAccess grammarAccess) {
-    	this.grammarAccess = grammarAccess;
-    }
-    
-    @Override
-    protected Grammar getGrammar() {
-    	return grammarAccess.getGrammar();
-    }
-    
-    @Override
-    protected String getValueForTokenName(String tokenName) {
-    	return tokenName;
-    }
-
-}
-
-
-
-
-// Entry rule entryRuleDatamartModel
-entryRuleDatamartModel 
-:
-{ before(grammarAccess.getDatamartModelRule()); }
-	 ruleDatamartModel
-{ after(grammarAccess.getDatamartModelRule()); } 
-	 EOF 
-;
-
-// Rule DatamartModel
-ruleDatamartModel
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartModelAccess().getPackagesAssignment()); }
-(rule__DatamartModel__PackagesAssignment)*
-{ after(grammarAccess.getDatamartModelAccess().getPackagesAssignment()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartPackage
-entryRuleDatamartPackage 
-:
-{ before(grammarAccess.getDatamartPackageRule()); }
-	 ruleDatamartPackage
-{ after(grammarAccess.getDatamartPackageRule()); } 
-	 EOF 
-;
-
-// Rule DatamartPackage
-ruleDatamartPackage
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getGroup()); }
-(rule__DatamartPackage__Group__0)
-{ after(grammarAccess.getDatamartPackageAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartDefinition
-entryRuleDatamartDefinition 
-:
-{ before(grammarAccess.getDatamartDefinitionRule()); }
-	 ruleDatamartDefinition
-{ after(grammarAccess.getDatamartDefinitionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartDefinition
-ruleDatamartDefinition
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getGroup()); }
-(rule__DatamartDefinition__Group__0)
-{ after(grammarAccess.getDatamartDefinitionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartRole
-entryRuleDatamartRole 
-:
-{ before(grammarAccess.getDatamartRoleRule()); }
-	 ruleDatamartRole
-{ after(grammarAccess.getDatamartRoleRule()); } 
-	 EOF 
-;
-
-// Rule DatamartRole
-ruleDatamartRole
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartRoleAccess().getGroup()); }
-(rule__DatamartRole__Group__0)
-{ after(grammarAccess.getDatamartRoleAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartSource
-entryRuleDatamartSource 
-:
-{ before(grammarAccess.getDatamartSourceRule()); }
-	 ruleDatamartSource
-{ after(grammarAccess.getDatamartSourceRule()); } 
-	 EOF 
-;
-
-// Rule DatamartSource
-ruleDatamartSource
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartSourceAccess().getAlternatives()); }
-(rule__DatamartSource__Alternatives)
-{ after(grammarAccess.getDatamartSourceAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartTask
-entryRuleDatamartTask 
-:
-{ before(grammarAccess.getDatamartTaskRule()); }
-	 ruleDatamartTask
-{ after(grammarAccess.getDatamartTaskRule()); } 
-	 EOF 
-;
-
-// Rule DatamartTask
-ruleDatamartTask
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getGroup()); }
-(rule__DatamartTask__Group__0)
-{ after(grammarAccess.getDatamartTaskAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartColumn
-entryRuleDatamartColumn 
-:
-{ before(grammarAccess.getDatamartColumnRule()); }
-	 ruleDatamartColumn
-{ after(grammarAccess.getDatamartColumnRule()); } 
-	 EOF 
-;
-
-// Rule DatamartColumn
-ruleDatamartColumn
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartColumnAccess().getGroup()); }
-(rule__DatamartColumn__Group__0)
-{ after(grammarAccess.getDatamartColumnAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartTaskFilter
-entryRuleDatamartTaskFilter 
-:
-{ before(grammarAccess.getDatamartTaskFilterRule()); }
-	 ruleDatamartTaskFilter
-{ after(grammarAccess.getDatamartTaskFilterRule()); } 
-	 EOF 
-;
-
-// Rule DatamartTaskFilter
-ruleDatamartTaskFilter
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartTaskFilterAccess().getGroup()); }
-(rule__DatamartTaskFilter__Group__0)
-{ after(grammarAccess.getDatamartTaskFilterAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartCube
-entryRuleDatamartCube 
-:
-{ before(grammarAccess.getDatamartCubeRule()); }
-	 ruleDatamartCube
-{ after(grammarAccess.getDatamartCubeRule()); } 
-	 EOF 
-;
-
-// Rule DatamartCube
-ruleDatamartCube
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartCubeAccess().getGroup()); }
-(rule__DatamartCube__Group__0)
-{ after(grammarAccess.getDatamartCubeAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartReference
-entryRuleDatamartReference 
-:
-{ before(grammarAccess.getDatamartReferenceRule()); }
-	 ruleDatamartReference
-{ after(grammarAccess.getDatamartReferenceRule()); } 
-	 EOF 
-;
-
-// Rule DatamartReference
-ruleDatamartReference
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartReferenceAccess().getGroup()); }
-(rule__DatamartReference__Group__0)
-{ after(grammarAccess.getDatamartReferenceAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartEntity
-entryRuleDatamartEntity 
-:
-{ before(grammarAccess.getDatamartEntityRule()); }
-	 ruleDatamartEntity
-{ after(grammarAccess.getDatamartEntityRule()); } 
-	 EOF 
-;
-
-// Rule DatamartEntity
-ruleDatamartEntity
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getGroup()); }
-(rule__DatamartEntity__Group__0)
-{ after(grammarAccess.getDatamartEntityAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartNavigation
-entryRuleDatamartNavigation 
-:
-{ before(grammarAccess.getDatamartNavigationRule()); }
-	 ruleDatamartNavigation
-{ after(grammarAccess.getDatamartNavigationRule()); } 
-	 EOF 
-;
-
-// Rule DatamartNavigation
-ruleDatamartNavigation
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartNavigationAccess().getAlternatives()); }
-(rule__DatamartNavigation__Alternatives)
-{ after(grammarAccess.getDatamartNavigationAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartOwner
-entryRuleDatamartOwner 
-:
-{ before(grammarAccess.getDatamartOwnerRule()); }
-	 ruleDatamartOwner
-{ after(grammarAccess.getDatamartOwnerRule()); } 
-	 EOF 
-;
-
-// Rule DatamartOwner
-ruleDatamartOwner
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartOwnerAccess().getGroup()); }
-(rule__DatamartOwner__Group__0)
-{ after(grammarAccess.getDatamartOwnerAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartMember
-entryRuleDatamartMember 
-:
-{ before(grammarAccess.getDatamartMemberRule()); }
-	 ruleDatamartMember
-{ after(grammarAccess.getDatamartMemberRule()); } 
-	 EOF 
-;
-
-// Rule DatamartMember
-ruleDatamartMember
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartMemberAccess().getGroup()); }
-(rule__DatamartMember__Group__0)
-{ after(grammarAccess.getDatamartMemberAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartProperty
-entryRuleDatamartProperty 
-:
-{ before(grammarAccess.getDatamartPropertyRule()); }
-	 ruleDatamartProperty
-{ after(grammarAccess.getDatamartPropertyRule()); } 
-	 EOF 
-;
-
-// Rule DatamartProperty
-ruleDatamartProperty
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartPropertyAccess().getGroup()); }
-(rule__DatamartProperty__Group__0)
-{ after(grammarAccess.getDatamartPropertyAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartCondition
-entryRuleDatamartCondition 
-:
-{ before(grammarAccess.getDatamartConditionRule()); }
-	 ruleDatamartCondition
-{ after(grammarAccess.getDatamartConditionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartCondition
-ruleDatamartCondition
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartConditionAccess().getGroup()); }
-(rule__DatamartCondition__Group__0)
-{ after(grammarAccess.getDatamartConditionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartOrder
-entryRuleDatamartOrder 
-:
-{ before(grammarAccess.getDatamartOrderRule()); }
-	 ruleDatamartOrder
-{ after(grammarAccess.getDatamartOrderRule()); } 
-	 EOF 
-;
-
-// Rule DatamartOrder
-ruleDatamartOrder
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartOrderAccess().getGroup()); }
-(rule__DatamartOrder__Group__0)
-{ after(grammarAccess.getDatamartOrderAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartDisjunction
-entryRuleDatamartDisjunction 
-:
-{ before(grammarAccess.getDatamartDisjunctionRule()); }
-	 ruleDatamartDisjunction
-{ after(grammarAccess.getDatamartDisjunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartDisjunction
-ruleDatamartDisjunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartDisjunctionAccess().getGroup()); }
-(rule__DatamartDisjunction__Group__0)
-{ after(grammarAccess.getDatamartDisjunctionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartConjunction
-entryRuleDatamartConjunction 
-:
-{ before(grammarAccess.getDatamartConjunctionRule()); }
-	 ruleDatamartConjunction
-{ after(grammarAccess.getDatamartConjunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartConjunction
-ruleDatamartConjunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartConjunctionAccess().getGroup()); }
-(rule__DatamartConjunction__Group__0)
-{ after(grammarAccess.getDatamartConjunctionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartConditionalExpression
-entryRuleDatamartConditionalExpression 
-:
-{ before(grammarAccess.getDatamartConditionalExpressionRule()); }
-	 ruleDatamartConditionalExpression
-{ after(grammarAccess.getDatamartConditionalExpressionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartConditionalExpression
-ruleDatamartConditionalExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartConditionalExpressionAccess().getGroup()); }
-(rule__DatamartConditionalExpression__Group__0)
-{ after(grammarAccess.getDatamartConditionalExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartOperand
-entryRuleDatamartOperand 
-:
-{ before(grammarAccess.getDatamartOperandRule()); }
-	 ruleDatamartOperand
-{ after(grammarAccess.getDatamartOperandRule()); } 
-	 EOF 
-;
-
-// Rule DatamartOperand
-ruleDatamartOperand
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartOperandAccess().getAlternatives()); }
-(rule__DatamartOperand__Alternatives)
-{ after(grammarAccess.getDatamartOperandAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartValue
-entryRuleDatamartValue 
-:
-{ before(grammarAccess.getDatamartValueRule()); }
-	 ruleDatamartValue
-{ after(grammarAccess.getDatamartValueRule()); } 
-	 EOF 
-;
-
-// Rule DatamartValue
-ruleDatamartValue
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartValueAccess().getAlternatives()); }
-(rule__DatamartValue__Alternatives)
-{ after(grammarAccess.getDatamartValueAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartCubeElement
-entryRuleDatamartCubeElement 
-:
-{ before(grammarAccess.getDatamartCubeElementRule()); }
-	 ruleDatamartCubeElement
-{ after(grammarAccess.getDatamartCubeElementRule()); } 
-	 EOF 
-;
-
-// Rule DatamartCubeElement
-ruleDatamartCubeElement
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartCubeElementAccess().getAlternatives()); }
-(rule__DatamartCubeElement__Alternatives)
-{ after(grammarAccess.getDatamartCubeElementAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartDefineDerivedMeasure
-entryRuleDatamartDefineDerivedMeasure 
-:
-{ before(grammarAccess.getDatamartDefineDerivedMeasureRule()); }
-	 ruleDatamartDefineDerivedMeasure
-{ after(grammarAccess.getDatamartDefineDerivedMeasureRule()); } 
-	 EOF 
-;
-
-// Rule DatamartDefineDerivedMeasure
-ruleDatamartDefineDerivedMeasure
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartDefineDerivedMeasureAccess().getGroup()); }
-(rule__DatamartDefineDerivedMeasure__Group__0)
-{ after(grammarAccess.getDatamartDefineDerivedMeasureAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartAddition
-entryRuleDatamartAddition 
-:
-{ before(grammarAccess.getDatamartAdditionRule()); }
-	 ruleDatamartAddition
-{ after(grammarAccess.getDatamartAdditionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartAddition
-ruleDatamartAddition
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartAdditionAccess().getGroup()); }
-(rule__DatamartAddition__Group__0)
-{ after(grammarAccess.getDatamartAdditionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartMultiplication
-entryRuleDatamartMultiplication 
-:
-{ before(grammarAccess.getDatamartMultiplicationRule()); }
-	 ruleDatamartMultiplication
-{ after(grammarAccess.getDatamartMultiplicationRule()); } 
-	 EOF 
-;
-
-// Rule DatamartMultiplication
-ruleDatamartMultiplication
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartMultiplicationAccess().getGroup()); }
-(rule__DatamartMultiplication__Group__0)
-{ after(grammarAccess.getDatamartMultiplicationAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartPrimary
-entryRuleDatamartPrimary 
-:
-{ before(grammarAccess.getDatamartPrimaryRule()); }
-	 ruleDatamartPrimary
-{ after(grammarAccess.getDatamartPrimaryRule()); } 
-	 EOF 
-;
-
-// Rule DatamartPrimary
-ruleDatamartPrimary
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartPrimaryAccess().getAlternatives()); }
-(rule__DatamartPrimary__Alternatives)
-{ after(grammarAccess.getDatamartPrimaryAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartNumberOrElement
-entryRuleDatamartNumberOrElement 
-:
-{ before(grammarAccess.getDatamartNumberOrElementRule()); }
-	 ruleDatamartNumberOrElement
-{ after(grammarAccess.getDatamartNumberOrElementRule()); } 
-	 EOF 
-;
-
-// Rule DatamartNumberOrElement
-ruleDatamartNumberOrElement
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartNumberOrElementAccess().getAlternatives()); }
-(rule__DatamartNumberOrElement__Alternatives)
-{ after(grammarAccess.getDatamartNumberOrElementAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartMemberTuple
-entryRuleDatamartMemberTuple 
-:
-{ before(grammarAccess.getDatamartMemberTupleRule()); }
-	 ruleDatamartMemberTuple
-{ after(grammarAccess.getDatamartMemberTupleRule()); } 
-	 EOF 
-;
-
-// Rule DatamartMemberTuple
-ruleDatamartMemberTuple
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartMemberTupleAccess().getGroup()); }
-(rule__DatamartMemberTuple__Group__0)
-{ after(grammarAccess.getDatamartMemberTupleAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartFunction
-entryRuleDatamartFunction 
-:
-{ before(grammarAccess.getDatamartFunctionRule()); }
-	 ruleDatamartFunction
-{ after(grammarAccess.getDatamartFunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartFunction
-ruleDatamartFunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartFunctionAccess().getFunctionAssignment()); }
-(rule__DatamartFunction__FunctionAssignment)
-{ after(grammarAccess.getDatamartFunctionAccess().getFunctionAssignment()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartParameterFunction
-entryRuleDatamartParameterFunction 
-:
-{ before(grammarAccess.getDatamartParameterFunctionRule()); }
-	 ruleDatamartParameterFunction
-{ after(grammarAccess.getDatamartParameterFunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartParameterFunction
-ruleDatamartParameterFunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartParameterFunctionAccess().getGroup()); }
-(rule__DatamartParameterFunction__Group__0)
-{ after(grammarAccess.getDatamartParameterFunctionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartFunctionIntParameter
-entryRuleDatamartFunctionIntParameter 
-:
-{ before(grammarAccess.getDatamartFunctionIntParameterRule()); }
-	 ruleDatamartFunctionIntParameter
-{ after(grammarAccess.getDatamartFunctionIntParameterRule()); } 
-	 EOF 
-;
-
-// Rule DatamartFunctionIntParameter
-ruleDatamartFunctionIntParameter
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartFunctionIntParameterAccess().getValueAssignment()); }
-(rule__DatamartFunctionIntParameter__ValueAssignment)
-{ after(grammarAccess.getDatamartFunctionIntParameterAccess().getValueAssignment()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartSetFunction
-entryRuleDatamartSetFunction 
-:
-{ before(grammarAccess.getDatamartSetFunctionRule()); }
-	 ruleDatamartSetFunction
-{ after(grammarAccess.getDatamartSetFunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartSetFunction
-ruleDatamartSetFunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartSetFunctionAccess().getSetFunctionAssignment()); }
-(rule__DatamartSetFunction__SetFunctionAssignment)
-{ after(grammarAccess.getDatamartSetFunctionAccess().getSetFunctionAssignment()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartSetParameterFunction
-entryRuleDatamartSetParameterFunction 
-:
-{ before(grammarAccess.getDatamartSetParameterFunctionRule()); }
-	 ruleDatamartSetParameterFunction
-{ after(grammarAccess.getDatamartSetParameterFunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartSetParameterFunction
-ruleDatamartSetParameterFunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartSetParameterFunctionAccess().getGroup()); }
-(rule__DatamartSetParameterFunction__Group__0)
-{ after(grammarAccess.getDatamartSetParameterFunctionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartSetAggregationFunction
-entryRuleDatamartSetAggregationFunction 
-:
-{ before(grammarAccess.getDatamartSetAggregationFunctionRule()); }
-	 ruleDatamartSetAggregationFunction
-{ after(grammarAccess.getDatamartSetAggregationFunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartSetAggregationFunction
-ruleDatamartSetAggregationFunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartSetAggregationFunctionAccess().getGroup()); }
-(rule__DatamartSetAggregationFunction__Group__0)
-{ after(grammarAccess.getDatamartSetAggregationFunctionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartSetTuple
-entryRuleDatamartSetTuple 
-:
-{ before(grammarAccess.getDatamartSetTupleRule()); }
-	 ruleDatamartSetTuple
-{ after(grammarAccess.getDatamartSetTupleRule()); } 
-	 EOF 
-;
-
-// Rule DatamartSetTuple
-ruleDatamartSetTuple
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartSetTupleAccess().getGroup()); }
-(rule__DatamartSetTuple__Group__0)
-{ after(grammarAccess.getDatamartSetTupleAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartAggregationFunction
-entryRuleDatamartAggregationFunction 
-:
-{ before(grammarAccess.getDatamartAggregationFunctionRule()); }
-	 ruleDatamartAggregationFunction
-{ after(grammarAccess.getDatamartAggregationFunctionRule()); } 
-	 EOF 
-;
-
-// Rule DatamartAggregationFunction
-ruleDatamartAggregationFunction
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartAggregationFunctionAccess().getAggregationAssignment()); }
-(rule__DatamartAggregationFunction__AggregationAssignment)
-{ after(grammarAccess.getDatamartAggregationFunctionAccess().getAggregationAssignment()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartAggregation
-entryRuleDatamartAggregation 
-:
-{ before(grammarAccess.getDatamartAggregationRule()); }
-	 ruleDatamartAggregation
-{ after(grammarAccess.getDatamartAggregationRule()); } 
-	 EOF 
-;
-
-// Rule DatamartAggregation
-ruleDatamartAggregation
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartAggregationAccess().getGroup()); }
-(rule__DatamartAggregation__Group__0)
-{ after(grammarAccess.getDatamartAggregationAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartSetAggregation
-entryRuleDatamartSetAggregation 
-:
-{ before(grammarAccess.getDatamartSetAggregationRule()); }
-	 ruleDatamartSetAggregation
-{ after(grammarAccess.getDatamartSetAggregationRule()); } 
-	 EOF 
-;
-
-// Rule DatamartSetAggregation
-ruleDatamartSetAggregation
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartSetAggregationAccess().getGroup()); }
-(rule__DatamartSetAggregation__Group__0)
-{ after(grammarAccess.getDatamartSetAggregationAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartSlicer
-entryRuleDatamartSlicer 
-:
-{ before(grammarAccess.getDatamartSlicerRule()); }
-	 ruleDatamartSlicer
-{ after(grammarAccess.getDatamartSlicerRule()); } 
-	 EOF 
-;
-
-// Rule DatamartSlicer
-ruleDatamartSlicer
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartSlicerAccess().getGroup()); }
-(rule__DatamartSlicer__Group__0)
-{ after(grammarAccess.getDatamartSlicerAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartAxis
-entryRuleDatamartAxis 
-:
-{ before(grammarAccess.getDatamartAxisRule()); }
-	 ruleDatamartAxis
-{ after(grammarAccess.getDatamartAxisRule()); } 
-	 EOF 
-;
-
-// Rule DatamartAxis
-ruleDatamartAxis
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartAxisAccess().getGroup()); }
-(rule__DatamartAxis__Group__0)
-{ after(grammarAccess.getDatamartAxisAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartElement
-entryRuleDatamartElement 
-:
-{ before(grammarAccess.getDatamartElementRule()); }
-	 ruleDatamartElement
-{ after(grammarAccess.getDatamartElementRule()); } 
-	 EOF 
-;
-
-// Rule DatamartElement
-ruleDatamartElement
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartElementAccess().getAlternatives()); }
-(rule__DatamartElement__Alternatives)
-{ after(grammarAccess.getDatamartElementAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartDerivedMeasure
-entryRuleDatamartDerivedMeasure 
-:
-{ before(grammarAccess.getDatamartDerivedMeasureRule()); }
-	 ruleDatamartDerivedMeasure
-{ after(grammarAccess.getDatamartDerivedMeasureRule()); } 
-	 EOF 
-;
-
-// Rule DatamartDerivedMeasure
-ruleDatamartDerivedMeasure
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartDerivedMeasureAccess().getGroup()); }
-(rule__DatamartDerivedMeasure__Group__0)
-{ after(grammarAccess.getDatamartDerivedMeasureAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartMeasure
-entryRuleDatamartMeasure 
-:
-{ before(grammarAccess.getDatamartMeasureRule()); }
-	 ruleDatamartMeasure
-{ after(grammarAccess.getDatamartMeasureRule()); } 
-	 EOF 
-;
-
-// Rule DatamartMeasure
-ruleDatamartMeasure
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartMeasureAccess().getGroup()); }
-(rule__DatamartMeasure__Group__0)
-{ after(grammarAccess.getDatamartMeasureAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartHierarchy
-entryRuleDatamartHierarchy 
-:
-{ before(grammarAccess.getDatamartHierarchyRule()); }
-	 ruleDatamartHierarchy
-{ after(grammarAccess.getDatamartHierarchyRule()); } 
-	 EOF 
-;
-
-// Rule DatamartHierarchy
-ruleDatamartHierarchy
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartHierarchyAccess().getGroup()); }
-(rule__DatamartHierarchy__Group__0)
-{ after(grammarAccess.getDatamartHierarchyAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartImport
-entryRuleDatamartImport 
-:
-{ before(grammarAccess.getDatamartImportRule()); }
-	 ruleDatamartImport
-{ after(grammarAccess.getDatamartImportRule()); } 
-	 EOF 
-;
-
-// Rule DatamartImport
-ruleDatamartImport
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartImportAccess().getGroup()); }
-(rule__DatamartImport__Group__0)
-{ after(grammarAccess.getDatamartImportAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleDatamartQualifiedNameWithWildCard
-entryRuleDatamartQualifiedNameWithWildCard 
-:
-{ before(grammarAccess.getDatamartQualifiedNameWithWildCardRule()); }
-	 ruleDatamartQualifiedNameWithWildCard
-{ after(grammarAccess.getDatamartQualifiedNameWithWildCardRule()); } 
-	 EOF 
-;
-
-// Rule DatamartQualifiedNameWithWildCard
-ruleDatamartQualifiedNameWithWildCard
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getDatamartQualifiedNameWithWildCardAccess().getGroup()); }
-(rule__DatamartQualifiedNameWithWildCard__Group__0)
-{ after(grammarAccess.getDatamartQualifiedNameWithWildCardAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleQualifiedName
-entryRuleQualifiedName 
-:
-{ before(grammarAccess.getQualifiedNameRule()); }
-	 ruleQualifiedName
-{ after(grammarAccess.getQualifiedNameRule()); } 
-	 EOF 
-;
-
-// Rule QualifiedName
-ruleQualifiedName
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getQualifiedNameAccess().getGroup()); }
-(rule__QualifiedName__Group__0)
-{ after(grammarAccess.getQualifiedNameAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleValidID
-entryRuleValidID 
-:
-{ before(grammarAccess.getValidIDRule()); }
-	 ruleValidID
-{ after(grammarAccess.getValidIDRule()); } 
-	 EOF 
-;
-
-// Rule ValidID
-ruleValidID
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getValidIDAccess().getIDTerminalRuleCall()); }
-	RULE_ID
-{ after(grammarAccess.getValidIDAccess().getIDTerminalRuleCall()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleTRANSLATABLESTRING
-entryRuleTRANSLATABLESTRING 
-:
-{ before(grammarAccess.getTRANSLATABLESTRINGRule()); }
-	 ruleTRANSLATABLESTRING
-{ after(grammarAccess.getTRANSLATABLESTRINGRule()); } 
-	 EOF 
-;
-
-// Rule TRANSLATABLESTRING
-ruleTRANSLATABLESTRING
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getTRANSLATABLESTRINGAccess().getSTRINGTerminalRuleCall()); }
-	RULE_STRING
-{ after(grammarAccess.getTRANSLATABLESTRINGAccess().getSTRINGTerminalRuleCall()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleTRANSLATABLEID
-entryRuleTRANSLATABLEID 
-:
-{ before(grammarAccess.getTRANSLATABLEIDRule()); }
-	 ruleTRANSLATABLEID
-{ after(grammarAccess.getTRANSLATABLEIDRule()); } 
-	 EOF 
-;
-
-// Rule TRANSLATABLEID
-ruleTRANSLATABLEID
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getTRANSLATABLEIDAccess().getIDTerminalRuleCall()); }
-	RULE_ID
-{ after(grammarAccess.getTRANSLATABLEIDAccess().getIDTerminalRuleCall()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerData
-entryRulePropertyFillerData 
-:
-{ before(grammarAccess.getPropertyFillerDataRule()); }
-	 rulePropertyFillerData
-{ after(grammarAccess.getPropertyFillerDataRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerData
-rulePropertyFillerData
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerDataAccess().getGroup()); }
-(rule__PropertyFillerData__Group__0)
-{ after(grammarAccess.getPropertyFillerDataAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerType
-entryRulePropertyFillerType 
-:
-{ before(grammarAccess.getPropertyFillerTypeRule()); }
-	 rulePropertyFillerType
-{ after(grammarAccess.getPropertyFillerTypeRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerType
-rulePropertyFillerType
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getAlternatives()); }
-(rule__PropertyFillerType__Alternatives)
-{ after(grammarAccess.getPropertyFillerTypeAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerDateFuture
-entryRulePropertyFillerDateFuture 
-:
-{ before(grammarAccess.getPropertyFillerDateFutureRule()); }
-	 rulePropertyFillerDateFuture
-{ after(grammarAccess.getPropertyFillerDateFutureRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerDateFuture
-rulePropertyFillerDateFuture
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerDateFutureAccess().getGroup()); }
-(rule__PropertyFillerDateFuture__Group__0)
-{ after(grammarAccess.getPropertyFillerDateFutureAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerDatePast
-entryRulePropertyFillerDatePast 
-:
-{ before(grammarAccess.getPropertyFillerDatePastRule()); }
-	 rulePropertyFillerDatePast
-{ after(grammarAccess.getPropertyFillerDatePastRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerDatePast
-rulePropertyFillerDatePast
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerDatePastAccess().getGroup()); }
-(rule__PropertyFillerDatePast__Group__0)
-{ after(grammarAccess.getPropertyFillerDatePastAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerDateRange
-entryRulePropertyFillerDateRange 
-:
-{ before(grammarAccess.getPropertyFillerDateRangeRule()); }
-	 rulePropertyFillerDateRange
-{ after(grammarAccess.getPropertyFillerDateRangeRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerDateRange
-rulePropertyFillerDateRange
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerDateRangeAccess().getGroup()); }
-(rule__PropertyFillerDateRange__Group__0)
-{ after(grammarAccess.getPropertyFillerDateRangeAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerSignedDoubleRange
-entryRulePropertyFillerSignedDoubleRange 
-:
-{ before(grammarAccess.getPropertyFillerSignedDoubleRangeRule()); }
-	 rulePropertyFillerSignedDoubleRange
-{ after(grammarAccess.getPropertyFillerSignedDoubleRangeRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerSignedDoubleRange
-rulePropertyFillerSignedDoubleRange
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getGroup()); }
-(rule__PropertyFillerSignedDoubleRange__Group__0)
-{ after(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerSignedDoubleRandom
-entryRulePropertyFillerSignedDoubleRandom 
-:
-{ before(grammarAccess.getPropertyFillerSignedDoubleRandomRule()); }
-	 rulePropertyFillerSignedDoubleRandom
-{ after(grammarAccess.getPropertyFillerSignedDoubleRandomRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerSignedDoubleRandom
-rulePropertyFillerSignedDoubleRandom
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerSignedDoubleRandomAccess().getGroup()); }
-(rule__PropertyFillerSignedDoubleRandom__Group__0)
-{ after(grammarAccess.getPropertyFillerSignedDoubleRandomAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerSignedIntegerRange
-entryRulePropertyFillerSignedIntegerRange 
-:
-{ before(grammarAccess.getPropertyFillerSignedIntegerRangeRule()); }
-	 rulePropertyFillerSignedIntegerRange
-{ after(grammarAccess.getPropertyFillerSignedIntegerRangeRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerSignedIntegerRange
-rulePropertyFillerSignedIntegerRange
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getGroup()); }
-(rule__PropertyFillerSignedIntegerRange__Group__0)
-{ after(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerSignedIntegerRandom
-entryRulePropertyFillerSignedIntegerRandom 
-:
-{ before(grammarAccess.getPropertyFillerSignedIntegerRandomRule()); }
-	 rulePropertyFillerSignedIntegerRandom
-{ after(grammarAccess.getPropertyFillerSignedIntegerRandomRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerSignedIntegerRandom
-rulePropertyFillerSignedIntegerRandom
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerSignedIntegerRandomAccess().getGroup()); }
-(rule__PropertyFillerSignedIntegerRandom__Group__0)
-{ after(grammarAccess.getPropertyFillerSignedIntegerRandomAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerTextRandom
-entryRulePropertyFillerTextRandom 
-:
-{ before(grammarAccess.getPropertyFillerTextRandomRule()); }
-	 rulePropertyFillerTextRandom
-{ after(grammarAccess.getPropertyFillerTextRandomRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerTextRandom
-rulePropertyFillerTextRandom
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerTextRandomAccess().getGroup()); }
-(rule__PropertyFillerTextRandom__Group__0)
-{ after(grammarAccess.getPropertyFillerTextRandomAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerTextParagraphs
-entryRulePropertyFillerTextParagraphs 
-:
-{ before(grammarAccess.getPropertyFillerTextParagraphsRule()); }
-	 rulePropertyFillerTextParagraphs
-{ after(grammarAccess.getPropertyFillerTextParagraphsRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerTextParagraphs
-rulePropertyFillerTextParagraphs
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerTextParagraphsAccess().getGroup()); }
-(rule__PropertyFillerTextParagraphs__Group__0)
-{ after(grammarAccess.getPropertyFillerTextParagraphsAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerTextSentences
-entryRulePropertyFillerTextSentences 
-:
-{ before(grammarAccess.getPropertyFillerTextSentencesRule()); }
-	 rulePropertyFillerTextSentences
-{ after(grammarAccess.getPropertyFillerTextSentencesRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerTextSentences
-rulePropertyFillerTextSentences
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerTextSentencesAccess().getGroup()); }
-(rule__PropertyFillerTextSentences__Group__0)
-{ after(grammarAccess.getPropertyFillerTextSentencesAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerTextWords
-entryRulePropertyFillerTextWords 
-:
-{ before(grammarAccess.getPropertyFillerTextWordsRule()); }
-	 rulePropertyFillerTextWords
-{ after(grammarAccess.getPropertyFillerTextWordsRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerTextWords
-rulePropertyFillerTextWords
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerTextWordsAccess().getGroup()); }
-(rule__PropertyFillerTextWords__Group__0)
-{ after(grammarAccess.getPropertyFillerTextWordsAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerUnsignedDoubleRange
-entryRulePropertyFillerUnsignedDoubleRange 
-:
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRangeRule()); }
-	 rulePropertyFillerUnsignedDoubleRange
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRangeRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerUnsignedDoubleRange
-rulePropertyFillerUnsignedDoubleRange
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getGroup()); }
-(rule__PropertyFillerUnsignedDoubleRange__Group__0)
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerUnsignedDoubleRandom
-entryRulePropertyFillerUnsignedDoubleRandom 
-:
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRandomRule()); }
-	 rulePropertyFillerUnsignedDoubleRandom
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRandomRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerUnsignedDoubleRandom
-rulePropertyFillerUnsignedDoubleRandom
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRandomAccess().getGroup()); }
-(rule__PropertyFillerUnsignedDoubleRandom__Group__0)
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRandomAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerUnsignedIntegerRange
-entryRulePropertyFillerUnsignedIntegerRange 
-:
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRangeRule()); }
-	 rulePropertyFillerUnsignedIntegerRange
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRangeRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerUnsignedIntegerRange
-rulePropertyFillerUnsignedIntegerRange
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getGroup()); }
-(rule__PropertyFillerUnsignedIntegerRange__Group__0)
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRulePropertyFillerUnsignedIntegerRandom
-entryRulePropertyFillerUnsignedIntegerRandom 
-:
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRandomRule()); }
-	 rulePropertyFillerUnsignedIntegerRandom
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRandomRule()); } 
-	 EOF 
-;
-
-// Rule PropertyFillerUnsignedIntegerRandom
-rulePropertyFillerUnsignedIntegerRandom
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRandomAccess().getGroup()); }
-(rule__PropertyFillerUnsignedIntegerRandom__Group__0)
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRandomAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleSignedNumber
-entryRuleSignedNumber 
-:
-{ before(grammarAccess.getSignedNumberRule()); }
-	 ruleSignedNumber
-{ after(grammarAccess.getSignedNumberRule()); } 
-	 EOF 
-;
-
-// Rule SignedNumber
-ruleSignedNumber
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getSignedNumberAccess().getGroup()); }
-(rule__SignedNumber__Group__0)
-{ after(grammarAccess.getSignedNumberAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleUnsignedNumber
-entryRuleUnsignedNumber 
-:
-{ before(grammarAccess.getUnsignedNumberRule()); }
-	 ruleUnsignedNumber
-{ after(grammarAccess.getUnsignedNumberRule()); } 
-	 EOF 
-;
-
-// Rule UnsignedNumber
-ruleUnsignedNumber
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getUnsignedNumberAccess().getGroup()); }
-(rule__UnsignedNumber__Group__0)
-{ after(grammarAccess.getUnsignedNumberAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleSINT
-entryRuleSINT 
-:
-{ before(grammarAccess.getSINTRule()); }
-	 ruleSINT
-{ after(grammarAccess.getSINTRule()); } 
-	 EOF 
-;
-
-// Rule SINT
-ruleSINT
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getSINTAccess().getGroup()); }
-(rule__SINT__Group__0)
-{ after(grammarAccess.getSINTAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAnnotation
-entryRuleXAnnotation 
-:
-{ before(grammarAccess.getXAnnotationRule()); }
-	 ruleXAnnotation
-{ after(grammarAccess.getXAnnotationRule()); } 
-	 EOF 
-;
-
-// Rule XAnnotation
-ruleXAnnotation
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAnnotationAccess().getGroup()); }
-(rule__XAnnotation__Group__0)
-{ after(grammarAccess.getXAnnotationAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAnnotationElementValuePair
-entryRuleXAnnotationElementValuePair 
-:
-{ before(grammarAccess.getXAnnotationElementValuePairRule()); }
-	 ruleXAnnotationElementValuePair
-{ after(grammarAccess.getXAnnotationElementValuePairRule()); } 
-	 EOF 
-;
-
-// Rule XAnnotationElementValuePair
-ruleXAnnotationElementValuePair
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAnnotationElementValuePairAccess().getGroup()); }
-(rule__XAnnotationElementValuePair__Group__0)
-{ after(grammarAccess.getXAnnotationElementValuePairAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAnnotationElementValueOrCommaList
-entryRuleXAnnotationElementValueOrCommaList 
-:
-{ before(grammarAccess.getXAnnotationElementValueOrCommaListRule()); }
-	 ruleXAnnotationElementValueOrCommaList
-{ after(grammarAccess.getXAnnotationElementValueOrCommaListRule()); } 
-	 EOF 
-;
-
-// Rule XAnnotationElementValueOrCommaList
-ruleXAnnotationElementValueOrCommaList
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getAlternatives()); }
-(rule__XAnnotationElementValueOrCommaList__Alternatives)
-{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAnnotationElementValue
-entryRuleXAnnotationElementValue 
-:
-{ before(grammarAccess.getXAnnotationElementValueRule()); }
-	 ruleXAnnotationElementValue
-{ after(grammarAccess.getXAnnotationElementValueRule()); } 
-	 EOF 
-;
-
-// Rule XAnnotationElementValue
-ruleXAnnotationElementValue
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAnnotationElementValueAccess().getAlternatives()); }
-(rule__XAnnotationElementValue__Alternatives)
-{ after(grammarAccess.getXAnnotationElementValueAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAnnotationOrExpression
-entryRuleXAnnotationOrExpression 
-:
-{ before(grammarAccess.getXAnnotationOrExpressionRule()); }
-	 ruleXAnnotationOrExpression
-{ after(grammarAccess.getXAnnotationOrExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XAnnotationOrExpression
-ruleXAnnotationOrExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAnnotationOrExpressionAccess().getAlternatives()); }
-(rule__XAnnotationOrExpression__Alternatives)
-{ after(grammarAccess.getXAnnotationOrExpressionAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXExpression
-entryRuleXExpression 
-:
-{ before(grammarAccess.getXExpressionRule()); }
-	 ruleXExpression
-{ after(grammarAccess.getXExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XExpression
-ruleXExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall()); }
-	ruleXAssignment
-{ after(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAssignment
-entryRuleXAssignment 
-:
-{ before(grammarAccess.getXAssignmentRule()); }
-	 ruleXAssignment
-{ after(grammarAccess.getXAssignmentRule()); } 
-	 EOF 
-;
-
-// Rule XAssignment
-ruleXAssignment
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAssignmentAccess().getAlternatives()); }
-(rule__XAssignment__Alternatives)
-{ after(grammarAccess.getXAssignmentAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpSingleAssign
-entryRuleOpSingleAssign 
-:
-{ before(grammarAccess.getOpSingleAssignRule()); }
-	 ruleOpSingleAssign
-{ after(grammarAccess.getOpSingleAssignRule()); } 
-	 EOF 
-;
-
-// Rule OpSingleAssign
-ruleOpSingleAssign
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpSingleAssignAccess().getEqualsSignKeyword()); }
-
-	'=' 
-
-{ after(grammarAccess.getOpSingleAssignAccess().getEqualsSignKeyword()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpMultiAssign
-entryRuleOpMultiAssign 
-:
-{ before(grammarAccess.getOpMultiAssignRule()); }
-	 ruleOpMultiAssign
-{ after(grammarAccess.getOpMultiAssignRule()); } 
-	 EOF 
-;
-
-// Rule OpMultiAssign
-ruleOpMultiAssign
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpMultiAssignAccess().getAlternatives()); }
-(rule__OpMultiAssign__Alternatives)
-{ after(grammarAccess.getOpMultiAssignAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXOrExpression
-entryRuleXOrExpression 
-:
-{ before(grammarAccess.getXOrExpressionRule()); }
-	 ruleXOrExpression
-{ after(grammarAccess.getXOrExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XOrExpression
-ruleXOrExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXOrExpressionAccess().getGroup()); }
-(rule__XOrExpression__Group__0)
-{ after(grammarAccess.getXOrExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpOr
-entryRuleOpOr 
-:
-{ before(grammarAccess.getOpOrRule()); }
-	 ruleOpOr
-{ after(grammarAccess.getOpOrRule()); } 
-	 EOF 
-;
-
-// Rule OpOr
-ruleOpOr
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword()); }
-
-	'||' 
-
-{ after(grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAndExpression
-entryRuleXAndExpression 
-:
-{ before(grammarAccess.getXAndExpressionRule()); }
-	 ruleXAndExpression
-{ after(grammarAccess.getXAndExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XAndExpression
-ruleXAndExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAndExpressionAccess().getGroup()); }
-(rule__XAndExpression__Group__0)
-{ after(grammarAccess.getXAndExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpAnd
-entryRuleOpAnd 
-:
-{ before(grammarAccess.getOpAndRule()); }
-	 ruleOpAnd
-{ after(grammarAccess.getOpAndRule()); } 
-	 EOF 
-;
-
-// Rule OpAnd
-ruleOpAnd
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword()); }
-
-	'&&' 
-
-{ after(grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXEqualityExpression
-entryRuleXEqualityExpression 
-:
-{ before(grammarAccess.getXEqualityExpressionRule()); }
-	 ruleXEqualityExpression
-{ after(grammarAccess.getXEqualityExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XEqualityExpression
-ruleXEqualityExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXEqualityExpressionAccess().getGroup()); }
-(rule__XEqualityExpression__Group__0)
-{ after(grammarAccess.getXEqualityExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpEquality
-entryRuleOpEquality 
-:
-{ before(grammarAccess.getOpEqualityRule()); }
-	 ruleOpEquality
-{ after(grammarAccess.getOpEqualityRule()); } 
-	 EOF 
-;
-
-// Rule OpEquality
-ruleOpEquality
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpEqualityAccess().getAlternatives()); }
-(rule__OpEquality__Alternatives)
-{ after(grammarAccess.getOpEqualityAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXRelationalExpression
-entryRuleXRelationalExpression 
-:
-{ before(grammarAccess.getXRelationalExpressionRule()); }
-	 ruleXRelationalExpression
-{ after(grammarAccess.getXRelationalExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XRelationalExpression
-ruleXRelationalExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXRelationalExpressionAccess().getGroup()); }
-(rule__XRelationalExpression__Group__0)
-{ after(grammarAccess.getXRelationalExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpCompare
-entryRuleOpCompare 
-:
-{ before(grammarAccess.getOpCompareRule()); }
-	 ruleOpCompare
-{ after(grammarAccess.getOpCompareRule()); } 
-	 EOF 
-;
-
-// Rule OpCompare
-ruleOpCompare
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpCompareAccess().getAlternatives()); }
-(rule__OpCompare__Alternatives)
-{ after(grammarAccess.getOpCompareAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXOtherOperatorExpression
-entryRuleXOtherOperatorExpression 
-:
-{ before(grammarAccess.getXOtherOperatorExpressionRule()); }
-	 ruleXOtherOperatorExpression
-{ after(grammarAccess.getXOtherOperatorExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XOtherOperatorExpression
-ruleXOtherOperatorExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXOtherOperatorExpressionAccess().getGroup()); }
-(rule__XOtherOperatorExpression__Group__0)
-{ after(grammarAccess.getXOtherOperatorExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpOther
-entryRuleOpOther 
-:
-{ before(grammarAccess.getOpOtherRule()); }
-	 ruleOpOther
-{ after(grammarAccess.getOpOtherRule()); } 
-	 EOF 
-;
-
-// Rule OpOther
-ruleOpOther
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpOtherAccess().getAlternatives()); }
-(rule__OpOther__Alternatives)
-{ after(grammarAccess.getOpOtherAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXAdditiveExpression
-entryRuleXAdditiveExpression 
-:
-{ before(grammarAccess.getXAdditiveExpressionRule()); }
-	 ruleXAdditiveExpression
-{ after(grammarAccess.getXAdditiveExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XAdditiveExpression
-ruleXAdditiveExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXAdditiveExpressionAccess().getGroup()); }
-(rule__XAdditiveExpression__Group__0)
-{ after(grammarAccess.getXAdditiveExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpAdd
-entryRuleOpAdd 
-:
-{ before(grammarAccess.getOpAddRule()); }
-	 ruleOpAdd
-{ after(grammarAccess.getOpAddRule()); } 
-	 EOF 
-;
-
-// Rule OpAdd
-ruleOpAdd
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpAddAccess().getAlternatives()); }
-(rule__OpAdd__Alternatives)
-{ after(grammarAccess.getOpAddAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXMultiplicativeExpression
-entryRuleXMultiplicativeExpression 
-:
-{ before(grammarAccess.getXMultiplicativeExpressionRule()); }
-	 ruleXMultiplicativeExpression
-{ after(grammarAccess.getXMultiplicativeExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XMultiplicativeExpression
-ruleXMultiplicativeExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXMultiplicativeExpressionAccess().getGroup()); }
-(rule__XMultiplicativeExpression__Group__0)
-{ after(grammarAccess.getXMultiplicativeExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpMulti
-entryRuleOpMulti 
-:
-{ before(grammarAccess.getOpMultiRule()); }
-	 ruleOpMulti
-{ after(grammarAccess.getOpMultiRule()); } 
-	 EOF 
-;
-
-// Rule OpMulti
-ruleOpMulti
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpMultiAccess().getAlternatives()); }
-(rule__OpMulti__Alternatives)
-{ after(grammarAccess.getOpMultiAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXUnaryOperation
-entryRuleXUnaryOperation 
-:
-{ before(grammarAccess.getXUnaryOperationRule()); }
-	 ruleXUnaryOperation
-{ after(grammarAccess.getXUnaryOperationRule()); } 
-	 EOF 
-;
-
-// Rule XUnaryOperation
-ruleXUnaryOperation
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXUnaryOperationAccess().getAlternatives()); }
-(rule__XUnaryOperation__Alternatives)
-{ after(grammarAccess.getXUnaryOperationAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpUnary
-entryRuleOpUnary 
-:
-{ before(grammarAccess.getOpUnaryRule()); }
-	 ruleOpUnary
-{ after(grammarAccess.getOpUnaryRule()); } 
-	 EOF 
-;
-
-// Rule OpUnary
-ruleOpUnary
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpUnaryAccess().getAlternatives()); }
-(rule__OpUnary__Alternatives)
-{ after(grammarAccess.getOpUnaryAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXCastedExpression
-entryRuleXCastedExpression 
-:
-{ before(grammarAccess.getXCastedExpressionRule()); }
-	 ruleXCastedExpression
-{ after(grammarAccess.getXCastedExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XCastedExpression
-ruleXCastedExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXCastedExpressionAccess().getGroup()); }
-(rule__XCastedExpression__Group__0)
-{ after(grammarAccess.getXCastedExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXPostfixOperation
-entryRuleXPostfixOperation 
-:
-{ before(grammarAccess.getXPostfixOperationRule()); }
-	 ruleXPostfixOperation
-{ after(grammarAccess.getXPostfixOperationRule()); } 
-	 EOF 
-;
-
-// Rule XPostfixOperation
-ruleXPostfixOperation
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXPostfixOperationAccess().getGroup()); }
-(rule__XPostfixOperation__Group__0)
-{ after(grammarAccess.getXPostfixOperationAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleOpPostfix
-entryRuleOpPostfix 
-:
-{ before(grammarAccess.getOpPostfixRule()); }
-	 ruleOpPostfix
-{ after(grammarAccess.getOpPostfixRule()); } 
-	 EOF 
-;
-
-// Rule OpPostfix
-ruleOpPostfix
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getOpPostfixAccess().getAlternatives()); }
-(rule__OpPostfix__Alternatives)
-{ after(grammarAccess.getOpPostfixAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXMemberFeatureCall
-entryRuleXMemberFeatureCall 
-:
-{ before(grammarAccess.getXMemberFeatureCallRule()); }
-	 ruleXMemberFeatureCall
-{ after(grammarAccess.getXMemberFeatureCallRule()); } 
-	 EOF 
-;
-
-// Rule XMemberFeatureCall
-ruleXMemberFeatureCall
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup()); }
-(rule__XMemberFeatureCall__Group__0)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXPrimaryExpression
-entryRuleXPrimaryExpression 
-:
-{ before(grammarAccess.getXPrimaryExpressionRule()); }
-	 ruleXPrimaryExpression
-{ after(grammarAccess.getXPrimaryExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XPrimaryExpression
-ruleXPrimaryExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getAlternatives()); }
-(rule__XPrimaryExpression__Alternatives)
-{ after(grammarAccess.getXPrimaryExpressionAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXLiteral
-entryRuleXLiteral 
-:
-{ before(grammarAccess.getXLiteralRule()); }
-	 ruleXLiteral
-{ after(grammarAccess.getXLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XLiteral
-ruleXLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXLiteralAccess().getAlternatives()); }
-(rule__XLiteral__Alternatives)
-{ after(grammarAccess.getXLiteralAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXCollectionLiteral
-entryRuleXCollectionLiteral 
-:
-{ before(grammarAccess.getXCollectionLiteralRule()); }
-	 ruleXCollectionLiteral
-{ after(grammarAccess.getXCollectionLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XCollectionLiteral
-ruleXCollectionLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXCollectionLiteralAccess().getAlternatives()); }
-(rule__XCollectionLiteral__Alternatives)
-{ after(grammarAccess.getXCollectionLiteralAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXSetLiteral
-entryRuleXSetLiteral 
-:
-{ before(grammarAccess.getXSetLiteralRule()); }
-	 ruleXSetLiteral
-{ after(grammarAccess.getXSetLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XSetLiteral
-ruleXSetLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXSetLiteralAccess().getGroup()); }
-(rule__XSetLiteral__Group__0)
-{ after(grammarAccess.getXSetLiteralAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXListLiteral
-entryRuleXListLiteral 
-:
-{ before(grammarAccess.getXListLiteralRule()); }
-	 ruleXListLiteral
-{ after(grammarAccess.getXListLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XListLiteral
-ruleXListLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXListLiteralAccess().getGroup()); }
-(rule__XListLiteral__Group__0)
-{ after(grammarAccess.getXListLiteralAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXClosure
-entryRuleXClosure 
-:
-{ before(grammarAccess.getXClosureRule()); }
-	 ruleXClosure
-{ after(grammarAccess.getXClosureRule()); } 
-	 EOF 
-;
-
-// Rule XClosure
-ruleXClosure
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXClosureAccess().getGroup()); }
-(rule__XClosure__Group__0)
-{ after(grammarAccess.getXClosureAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXExpressionInClosure
-entryRuleXExpressionInClosure 
-:
-{ before(grammarAccess.getXExpressionInClosureRule()); }
-	 ruleXExpressionInClosure
-{ after(grammarAccess.getXExpressionInClosureRule()); } 
-	 EOF 
-;
-
-// Rule XExpressionInClosure
-ruleXExpressionInClosure
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXExpressionInClosureAccess().getGroup()); }
-(rule__XExpressionInClosure__Group__0)
-{ after(grammarAccess.getXExpressionInClosureAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXShortClosure
-entryRuleXShortClosure 
-:
-{ before(grammarAccess.getXShortClosureRule()); }
-	 ruleXShortClosure
-{ after(grammarAccess.getXShortClosureRule()); } 
-	 EOF 
-;
-
-// Rule XShortClosure
-ruleXShortClosure
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXShortClosureAccess().getGroup()); }
-(rule__XShortClosure__Group__0)
-{ after(grammarAccess.getXShortClosureAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXParenthesizedExpression
-entryRuleXParenthesizedExpression 
-:
-{ before(grammarAccess.getXParenthesizedExpressionRule()); }
-	 ruleXParenthesizedExpression
-{ after(grammarAccess.getXParenthesizedExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XParenthesizedExpression
-ruleXParenthesizedExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXParenthesizedExpressionAccess().getGroup()); }
-(rule__XParenthesizedExpression__Group__0)
-{ after(grammarAccess.getXParenthesizedExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXIfExpression
-entryRuleXIfExpression 
-:
-{ before(grammarAccess.getXIfExpressionRule()); }
-	 ruleXIfExpression
-{ after(grammarAccess.getXIfExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XIfExpression
-ruleXIfExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXIfExpressionAccess().getGroup()); }
-(rule__XIfExpression__Group__0)
-{ after(grammarAccess.getXIfExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXSwitchExpression
-entryRuleXSwitchExpression 
-:
-{ before(grammarAccess.getXSwitchExpressionRule()); }
-	 ruleXSwitchExpression
-{ after(grammarAccess.getXSwitchExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XSwitchExpression
-ruleXSwitchExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXSwitchExpressionAccess().getGroup()); }
-(rule__XSwitchExpression__Group__0)
-{ after(grammarAccess.getXSwitchExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXCasePart
-entryRuleXCasePart 
-:
-{ before(grammarAccess.getXCasePartRule()); }
-	 ruleXCasePart
-{ after(grammarAccess.getXCasePartRule()); } 
-	 EOF 
-;
-
-// Rule XCasePart
-ruleXCasePart
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXCasePartAccess().getGroup()); }
-(rule__XCasePart__Group__0)
-{ after(grammarAccess.getXCasePartAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXForLoopExpression
-entryRuleXForLoopExpression 
-:
-{ before(grammarAccess.getXForLoopExpressionRule()); }
-	 ruleXForLoopExpression
-{ after(grammarAccess.getXForLoopExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XForLoopExpression
-ruleXForLoopExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXForLoopExpressionAccess().getGroup()); }
-(rule__XForLoopExpression__Group__0)
-{ after(grammarAccess.getXForLoopExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXBasicForLoopExpression
-entryRuleXBasicForLoopExpression 
-:
-{ before(grammarAccess.getXBasicForLoopExpressionRule()); }
-	 ruleXBasicForLoopExpression
-{ after(grammarAccess.getXBasicForLoopExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XBasicForLoopExpression
-ruleXBasicForLoopExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXBasicForLoopExpressionAccess().getGroup()); }
-(rule__XBasicForLoopExpression__Group__0)
-{ after(grammarAccess.getXBasicForLoopExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXWhileExpression
-entryRuleXWhileExpression 
-:
-{ before(grammarAccess.getXWhileExpressionRule()); }
-	 ruleXWhileExpression
-{ after(grammarAccess.getXWhileExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XWhileExpression
-ruleXWhileExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXWhileExpressionAccess().getGroup()); }
-(rule__XWhileExpression__Group__0)
-{ after(grammarAccess.getXWhileExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXDoWhileExpression
-entryRuleXDoWhileExpression 
-:
-{ before(grammarAccess.getXDoWhileExpressionRule()); }
-	 ruleXDoWhileExpression
-{ after(grammarAccess.getXDoWhileExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XDoWhileExpression
-ruleXDoWhileExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXDoWhileExpressionAccess().getGroup()); }
-(rule__XDoWhileExpression__Group__0)
-{ after(grammarAccess.getXDoWhileExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXBlockExpression
-entryRuleXBlockExpression 
-:
-{ before(grammarAccess.getXBlockExpressionRule()); }
-	 ruleXBlockExpression
-{ after(grammarAccess.getXBlockExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XBlockExpression
-ruleXBlockExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXBlockExpressionAccess().getGroup()); }
-(rule__XBlockExpression__Group__0)
-{ after(grammarAccess.getXBlockExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXExpressionOrVarDeclaration
-entryRuleXExpressionOrVarDeclaration 
-:
-{ before(grammarAccess.getXExpressionOrVarDeclarationRule()); }
-	 ruleXExpressionOrVarDeclaration
-{ after(grammarAccess.getXExpressionOrVarDeclarationRule()); } 
-	 EOF 
-;
-
-// Rule XExpressionOrVarDeclaration
-ruleXExpressionOrVarDeclaration
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXExpressionOrVarDeclarationAccess().getAlternatives()); }
-(rule__XExpressionOrVarDeclaration__Alternatives)
-{ after(grammarAccess.getXExpressionOrVarDeclarationAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXVariableDeclaration
-entryRuleXVariableDeclaration 
-:
-{ before(grammarAccess.getXVariableDeclarationRule()); }
-	 ruleXVariableDeclaration
-{ after(grammarAccess.getXVariableDeclarationRule()); } 
-	 EOF 
-;
-
-// Rule XVariableDeclaration
-ruleXVariableDeclaration
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXVariableDeclarationAccess().getGroup()); }
-(rule__XVariableDeclaration__Group__0)
-{ after(grammarAccess.getXVariableDeclarationAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmFormalParameter
-entryRuleJvmFormalParameter 
-:
-{ before(grammarAccess.getJvmFormalParameterRule()); }
-	 ruleJvmFormalParameter
-{ after(grammarAccess.getJvmFormalParameterRule()); } 
-	 EOF 
-;
-
-// Rule JvmFormalParameter
-ruleJvmFormalParameter
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmFormalParameterAccess().getGroup()); }
-(rule__JvmFormalParameter__Group__0)
-{ after(grammarAccess.getJvmFormalParameterAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleFullJvmFormalParameter
-entryRuleFullJvmFormalParameter 
-:
-{ before(grammarAccess.getFullJvmFormalParameterRule()); }
-	 ruleFullJvmFormalParameter
-{ after(grammarAccess.getFullJvmFormalParameterRule()); } 
-	 EOF 
-;
-
-// Rule FullJvmFormalParameter
-ruleFullJvmFormalParameter
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getFullJvmFormalParameterAccess().getGroup()); }
-(rule__FullJvmFormalParameter__Group__0)
-{ after(grammarAccess.getFullJvmFormalParameterAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXFeatureCall
-entryRuleXFeatureCall 
-:
-{ before(grammarAccess.getXFeatureCallRule()); }
-	 ruleXFeatureCall
-{ after(grammarAccess.getXFeatureCallRule()); } 
-	 EOF 
-;
-
-// Rule XFeatureCall
-ruleXFeatureCall
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXFeatureCallAccess().getGroup()); }
-(rule__XFeatureCall__Group__0)
-{ after(grammarAccess.getXFeatureCallAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleFeatureCallID
-entryRuleFeatureCallID 
-:
-{ before(grammarAccess.getFeatureCallIDRule()); }
-	 ruleFeatureCallID
-{ after(grammarAccess.getFeatureCallIDRule()); } 
-	 EOF 
-;
-
-// Rule FeatureCallID
-ruleFeatureCallID
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getFeatureCallIDAccess().getAlternatives()); }
-(rule__FeatureCallID__Alternatives)
-{ after(grammarAccess.getFeatureCallIDAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleIdOrSuper
-entryRuleIdOrSuper 
-:
-{ before(grammarAccess.getIdOrSuperRule()); }
-	 ruleIdOrSuper
-{ after(grammarAccess.getIdOrSuperRule()); } 
-	 EOF 
-;
-
-// Rule IdOrSuper
-ruleIdOrSuper
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getIdOrSuperAccess().getAlternatives()); }
-(rule__IdOrSuper__Alternatives)
-{ after(grammarAccess.getIdOrSuperAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXConstructorCall
-entryRuleXConstructorCall 
-:
-{ before(grammarAccess.getXConstructorCallRule()); }
-	 ruleXConstructorCall
-{ after(grammarAccess.getXConstructorCallRule()); } 
-	 EOF 
-;
-
-// Rule XConstructorCall
-ruleXConstructorCall
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXConstructorCallAccess().getGroup()); }
-(rule__XConstructorCall__Group__0)
-{ after(grammarAccess.getXConstructorCallAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXBooleanLiteral
-entryRuleXBooleanLiteral 
-:
-{ before(grammarAccess.getXBooleanLiteralRule()); }
-	 ruleXBooleanLiteral
-{ after(grammarAccess.getXBooleanLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XBooleanLiteral
-ruleXBooleanLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXBooleanLiteralAccess().getGroup()); }
-(rule__XBooleanLiteral__Group__0)
-{ after(grammarAccess.getXBooleanLiteralAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXNullLiteral
-entryRuleXNullLiteral 
-:
-{ before(grammarAccess.getXNullLiteralRule()); }
-	 ruleXNullLiteral
-{ after(grammarAccess.getXNullLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XNullLiteral
-ruleXNullLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXNullLiteralAccess().getGroup()); }
-(rule__XNullLiteral__Group__0)
-{ after(grammarAccess.getXNullLiteralAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXNumberLiteral
-entryRuleXNumberLiteral 
-:
-{ before(grammarAccess.getXNumberLiteralRule()); }
-	 ruleXNumberLiteral
-{ after(grammarAccess.getXNumberLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XNumberLiteral
-ruleXNumberLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXNumberLiteralAccess().getGroup()); }
-(rule__XNumberLiteral__Group__0)
-{ after(grammarAccess.getXNumberLiteralAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXStringLiteral
-entryRuleXStringLiteral 
-:
-{ before(grammarAccess.getXStringLiteralRule()); }
-	 ruleXStringLiteral
-{ after(grammarAccess.getXStringLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XStringLiteral
-ruleXStringLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXStringLiteralAccess().getGroup()); }
-(rule__XStringLiteral__Group__0)
-{ after(grammarAccess.getXStringLiteralAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXTypeLiteral
-entryRuleXTypeLiteral 
-:
-{ before(grammarAccess.getXTypeLiteralRule()); }
-	 ruleXTypeLiteral
-{ after(grammarAccess.getXTypeLiteralRule()); } 
-	 EOF 
-;
-
-// Rule XTypeLiteral
-ruleXTypeLiteral
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXTypeLiteralAccess().getGroup()); }
-(rule__XTypeLiteral__Group__0)
-{ after(grammarAccess.getXTypeLiteralAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXThrowExpression
-entryRuleXThrowExpression 
-:
-{ before(grammarAccess.getXThrowExpressionRule()); }
-	 ruleXThrowExpression
-{ after(grammarAccess.getXThrowExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XThrowExpression
-ruleXThrowExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXThrowExpressionAccess().getGroup()); }
-(rule__XThrowExpression__Group__0)
-{ after(grammarAccess.getXThrowExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXReturnExpression
-entryRuleXReturnExpression 
-:
-{ before(grammarAccess.getXReturnExpressionRule()); }
-	 ruleXReturnExpression
-{ after(grammarAccess.getXReturnExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XReturnExpression
-ruleXReturnExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXReturnExpressionAccess().getGroup()); }
-(rule__XReturnExpression__Group__0)
-{ after(grammarAccess.getXReturnExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXTryCatchFinallyExpression
-entryRuleXTryCatchFinallyExpression 
-:
-{ before(grammarAccess.getXTryCatchFinallyExpressionRule()); }
-	 ruleXTryCatchFinallyExpression
-{ after(grammarAccess.getXTryCatchFinallyExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XTryCatchFinallyExpression
-ruleXTryCatchFinallyExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup()); }
-(rule__XTryCatchFinallyExpression__Group__0)
-{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXSynchronizedExpression
-entryRuleXSynchronizedExpression 
-:
-{ before(grammarAccess.getXSynchronizedExpressionRule()); }
-	 ruleXSynchronizedExpression
-{ after(grammarAccess.getXSynchronizedExpressionRule()); } 
-	 EOF 
-;
-
-// Rule XSynchronizedExpression
-ruleXSynchronizedExpression
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXSynchronizedExpressionAccess().getGroup()); }
-(rule__XSynchronizedExpression__Group__0)
-{ after(grammarAccess.getXSynchronizedExpressionAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXCatchClause
-entryRuleXCatchClause 
-:
-{ before(grammarAccess.getXCatchClauseRule()); }
-	 ruleXCatchClause
-{ after(grammarAccess.getXCatchClauseRule()); } 
-	 EOF 
-;
-
-// Rule XCatchClause
-ruleXCatchClause
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXCatchClauseAccess().getGroup()); }
-(rule__XCatchClause__Group__0)
-{ after(grammarAccess.getXCatchClauseAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleNumber
-entryRuleNumber 
-@init {
-	HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();
-}
-:
-{ before(grammarAccess.getNumberRule()); }
-	 ruleNumber
-{ after(grammarAccess.getNumberRule()); } 
-	 EOF 
-;
-finally {
-	myHiddenTokenState.restore();
-}
-
-// Rule Number
-ruleNumber
-    @init {
-		HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getNumberAccess().getAlternatives()); }
-(rule__Number__Alternatives)
-{ after(grammarAccess.getNumberAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-	myHiddenTokenState.restore();
-}
-
-
-
-
-
-// Entry rule entryRuleJvmTypeReference
-entryRuleJvmTypeReference 
-:
-{ before(grammarAccess.getJvmTypeReferenceRule()); }
-	 ruleJvmTypeReference
-{ after(grammarAccess.getJvmTypeReferenceRule()); } 
-	 EOF 
-;
-
-// Rule JvmTypeReference
-ruleJvmTypeReference
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmTypeReferenceAccess().getAlternatives()); }
-(rule__JvmTypeReference__Alternatives)
-{ after(grammarAccess.getJvmTypeReferenceAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleArrayBrackets
-entryRuleArrayBrackets 
-:
-{ before(grammarAccess.getArrayBracketsRule()); }
-	 ruleArrayBrackets
-{ after(grammarAccess.getArrayBracketsRule()); } 
-	 EOF 
-;
-
-// Rule ArrayBrackets
-ruleArrayBrackets
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getArrayBracketsAccess().getGroup()); }
-(rule__ArrayBrackets__Group__0)
-{ after(grammarAccess.getArrayBracketsAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleXFunctionTypeRef
-entryRuleXFunctionTypeRef 
-:
-{ before(grammarAccess.getXFunctionTypeRefRule()); }
-	 ruleXFunctionTypeRef
-{ after(grammarAccess.getXFunctionTypeRefRule()); } 
-	 EOF 
-;
-
-// Rule XFunctionTypeRef
-ruleXFunctionTypeRef
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXFunctionTypeRefAccess().getGroup()); }
-(rule__XFunctionTypeRef__Group__0)
-{ after(grammarAccess.getXFunctionTypeRefAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmParameterizedTypeReference
-entryRuleJvmParameterizedTypeReference 
-:
-{ before(grammarAccess.getJvmParameterizedTypeReferenceRule()); }
-	 ruleJvmParameterizedTypeReference
-{ after(grammarAccess.getJvmParameterizedTypeReferenceRule()); } 
-	 EOF 
-;
-
-// Rule JvmParameterizedTypeReference
-ruleJvmParameterizedTypeReference
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup()); }
-(rule__JvmParameterizedTypeReference__Group__0)
-{ after(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmArgumentTypeReference
-entryRuleJvmArgumentTypeReference 
-:
-{ before(grammarAccess.getJvmArgumentTypeReferenceRule()); }
-	 ruleJvmArgumentTypeReference
-{ after(grammarAccess.getJvmArgumentTypeReferenceRule()); } 
-	 EOF 
-;
-
-// Rule JvmArgumentTypeReference
-ruleJvmArgumentTypeReference
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmArgumentTypeReferenceAccess().getAlternatives()); }
-(rule__JvmArgumentTypeReference__Alternatives)
-{ after(grammarAccess.getJvmArgumentTypeReferenceAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmWildcardTypeReference
-entryRuleJvmWildcardTypeReference 
-:
-{ before(grammarAccess.getJvmWildcardTypeReferenceRule()); }
-	 ruleJvmWildcardTypeReference
-{ after(grammarAccess.getJvmWildcardTypeReferenceRule()); } 
-	 EOF 
-;
-
-// Rule JvmWildcardTypeReference
-ruleJvmWildcardTypeReference
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup()); }
-(rule__JvmWildcardTypeReference__Group__0)
-{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmUpperBound
-entryRuleJvmUpperBound 
-:
-{ before(grammarAccess.getJvmUpperBoundRule()); }
-	 ruleJvmUpperBound
-{ after(grammarAccess.getJvmUpperBoundRule()); } 
-	 EOF 
-;
-
-// Rule JvmUpperBound
-ruleJvmUpperBound
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmUpperBoundAccess().getGroup()); }
-(rule__JvmUpperBound__Group__0)
-{ after(grammarAccess.getJvmUpperBoundAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmUpperBoundAnded
-entryRuleJvmUpperBoundAnded 
-:
-{ before(grammarAccess.getJvmUpperBoundAndedRule()); }
-	 ruleJvmUpperBoundAnded
-{ after(grammarAccess.getJvmUpperBoundAndedRule()); } 
-	 EOF 
-;
-
-// Rule JvmUpperBoundAnded
-ruleJvmUpperBoundAnded
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmUpperBoundAndedAccess().getGroup()); }
-(rule__JvmUpperBoundAnded__Group__0)
-{ after(grammarAccess.getJvmUpperBoundAndedAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmLowerBound
-entryRuleJvmLowerBound 
-:
-{ before(grammarAccess.getJvmLowerBoundRule()); }
-	 ruleJvmLowerBound
-{ after(grammarAccess.getJvmLowerBoundRule()); } 
-	 EOF 
-;
-
-// Rule JvmLowerBound
-ruleJvmLowerBound
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmLowerBoundAccess().getGroup()); }
-(rule__JvmLowerBound__Group__0)
-{ after(grammarAccess.getJvmLowerBoundAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleJvmLowerBoundAnded
-entryRuleJvmLowerBoundAnded 
-:
-{ before(grammarAccess.getJvmLowerBoundAndedRule()); }
-	 ruleJvmLowerBoundAnded
-{ after(grammarAccess.getJvmLowerBoundAndedRule()); } 
-	 EOF 
-;
-
-// Rule JvmLowerBoundAnded
-ruleJvmLowerBoundAnded
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getJvmLowerBoundAndedAccess().getGroup()); }
-(rule__JvmLowerBoundAnded__Group__0)
-{ after(grammarAccess.getJvmLowerBoundAndedAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-// Entry rule entryRuleQualifiedNameWithWildcard
-entryRuleQualifiedNameWithWildcard 
-:
-{ before(grammarAccess.getQualifiedNameWithWildcardRule()); }
-	 ruleQualifiedNameWithWildcard
-{ after(grammarAccess.getQualifiedNameWithWildcardRule()); } 
-	 EOF 
-;
-
-// Rule QualifiedNameWithWildcard
-ruleQualifiedNameWithWildcard
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getQualifiedNameWithWildcardAccess().getGroup()); }
-(rule__QualifiedNameWithWildcard__Group__0)
-{ after(grammarAccess.getQualifiedNameWithWildcardAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-// Entry rule entryRuleXImportDeclaration
-entryRuleXImportDeclaration 
-:
-{ before(grammarAccess.getXImportDeclarationRule()); }
-	 ruleXImportDeclaration
-{ after(grammarAccess.getXImportDeclarationRule()); } 
-	 EOF 
-;
-
-// Rule XImportDeclaration
-ruleXImportDeclaration
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-{ before(grammarAccess.getXImportDeclarationAccess().getGroup()); }
-(rule__XImportDeclaration__Group__0)
-{ after(grammarAccess.getXImportDeclarationAccess().getGroup()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Entry rule entryRuleQualifiedNameInStaticImport
-entryRuleQualifiedNameInStaticImport 
-:
-{ before(grammarAccess.getQualifiedNameInStaticImportRule()); }
-	 ruleQualifiedNameInStaticImport
-{ after(grammarAccess.getQualifiedNameInStaticImportRule()); } 
-	 EOF 
-;
-
-// Rule QualifiedNameInStaticImport
-ruleQualifiedNameInStaticImport
-    @init {
-		int stackSize = keepStackSize();
-    }
-	:
-(
-(
-{ before(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
-(rule__QualifiedNameInStaticImport__Group__0)
-{ after(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
-)
-(
-{ before(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
-(rule__QualifiedNameInStaticImport__Group__0)*
-{ after(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup()); }
-)
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-// Rule AxisEnum
-ruleAxisEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAxisEnumAccess().getAlternatives()); }
-(rule__AxisEnum__Alternatives)
-{ after(grammarAccess.getAxisEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule FunctionEnum
-ruleFunctionEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getFunctionEnumAccess().getAlternatives()); }
-(rule__FunctionEnum__Alternatives)
-{ after(grammarAccess.getFunctionEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule ParameterFunctionEnum
-ruleParameterFunctionEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getParameterFunctionEnumAccess().getAlternatives()); }
-(rule__ParameterFunctionEnum__Alternatives)
-{ after(grammarAccess.getParameterFunctionEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule SetFunctionEnum
-ruleSetFunctionEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSetFunctionEnumAccess().getAlternatives()); }
-(rule__SetFunctionEnum__Alternatives)
-{ after(grammarAccess.getSetFunctionEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule SetParameterFunctionEnum
-ruleSetParameterFunctionEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSetParameterFunctionEnumAccess().getAlternatives()); }
-(rule__SetParameterFunctionEnum__Alternatives)
-{ after(grammarAccess.getSetParameterFunctionEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule SetAggregationEnum
-ruleSetAggregationEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSetAggregationEnumAccess().getAlternatives()); }
-(rule__SetAggregationEnum__Alternatives)
-{ after(grammarAccess.getSetAggregationEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule AggregationEnum
-ruleAggregationEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAggregationEnumAccess().getAlternatives()); }
-(rule__AggregationEnum__Alternatives)
-{ after(grammarAccess.getAggregationEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule OperatorEnum
-ruleOperatorEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperatorEnumAccess().getAlternatives()); }
-(rule__OperatorEnum__Alternatives)
-{ after(grammarAccess.getOperatorEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule SqlAggregationEnum
-ruleSqlAggregationEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSqlAggregationEnumAccess().getAlternatives()); }
-(rule__SqlAggregationEnum__Alternatives)
-{ after(grammarAccess.getSqlAggregationEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule ValueScaleEnum
-ruleValueScaleEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getValueScaleEnumAccess().getAlternatives()); }
-(rule__ValueScaleEnum__Alternatives)
-{ after(grammarAccess.getValueScaleEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule TaskQueryTopicEnum
-ruleTaskQueryTopicEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getTaskQueryTopicEnumAccess().getAlternatives()); }
-(rule__TaskQueryTopicEnum__Alternatives)
-{ after(grammarAccess.getTaskQueryTopicEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule TaskQueryColumnEnum
-ruleTaskQueryColumnEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getAlternatives()); }
-(rule__TaskQueryColumnEnum__Alternatives)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule TaskFilterEnum
-ruleTaskFilterEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getTaskFilterEnumAccess().getAlternatives()); }
-(rule__TaskFilterEnum__Alternatives)
-{ after(grammarAccess.getTaskFilterEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-// Rule OrderEnum
-ruleOrderEnum
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOrderEnumAccess().getAlternatives()); }
-(rule__OrderEnum__Alternatives)
-{ after(grammarAccess.getOrderEnumAccess().getAlternatives()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-rule__DatamartSource__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartSourceAccess().getDatamartCubeParserRuleCall_0()); }
-	ruleDatamartCube
-{ after(grammarAccess.getDatamartSourceAccess().getDatamartCubeParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartSourceAccess().getDatamartEntityParserRuleCall_1()); }
-	ruleDatamartEntity
-{ after(grammarAccess.getDatamartSourceAccess().getDatamartEntityParserRuleCall_1()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartSourceAccess().getDatamartTaskParserRuleCall_2()); }
-	ruleDatamartTask
-{ after(grammarAccess.getDatamartSourceAccess().getDatamartTaskParserRuleCall_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartNavigation__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartNavigationAccess().getDatamartOwnerParserRuleCall_0()); }
-	ruleDatamartOwner
-{ after(grammarAccess.getDatamartNavigationAccess().getDatamartOwnerParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartNavigationAccess().getDatamartMemberParserRuleCall_1()); }
-	ruleDatamartMember
-{ after(grammarAccess.getDatamartNavigationAccess().getDatamartMemberParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartOperand__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartOperandAccess().getDatamartValueParserRuleCall_0()); }
-	ruleDatamartValue
-{ after(grammarAccess.getDatamartOperandAccess().getDatamartValueParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartOperandAccess().getGroup_1()); }
-(rule__DatamartOperand__Group_1__0)
-{ after(grammarAccess.getDatamartOperandAccess().getGroup_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartValue__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartValueAccess().getNumberValueAssignment_0()); }
-(rule__DatamartValue__NumberValueAssignment_0)
-{ after(grammarAccess.getDatamartValueAccess().getNumberValueAssignment_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartValueAccess().getStringValueAssignment_1()); }
-(rule__DatamartValue__StringValueAssignment_1)
-{ after(grammarAccess.getDatamartValueAccess().getStringValueAssignment_1()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartValueAccess().getAlternatives_2()); }
-(rule__DatamartValue__Alternatives_2)
-{ after(grammarAccess.getDatamartValueAccess().getAlternatives_2()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartValueAccess().getDatamartPropertyParserRuleCall_3()); }
-	ruleDatamartProperty
-{ after(grammarAccess.getDatamartValueAccess().getDatamartPropertyParserRuleCall_3()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartValueAccess().getDatamartTaskFilterParserRuleCall_4()); }
-	ruleDatamartTaskFilter
-{ after(grammarAccess.getDatamartValueAccess().getDatamartTaskFilterParserRuleCall_4()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartValueAccess().getDatamartColumnParserRuleCall_5()); }
-	ruleDatamartColumn
-{ after(grammarAccess.getDatamartValueAccess().getDatamartColumnParserRuleCall_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartValue__Alternatives_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartValueAccess().getGroup_2_0()); }
-(rule__DatamartValue__Group_2_0__0)
-{ after(grammarAccess.getDatamartValueAccess().getGroup_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartValueAccess().getSelectedAssignment_2_1()); }
-(rule__DatamartValue__SelectedAssignment_2_1)
-{ after(grammarAccess.getDatamartValueAccess().getSelectedAssignment_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartCubeElement__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartCubeElementAccess().getDatamartAxisParserRuleCall_0()); }
-	ruleDatamartAxis
-{ after(grammarAccess.getDatamartCubeElementAccess().getDatamartAxisParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartCubeElementAccess().getDatamartSlicerParserRuleCall_1()); }
-	ruleDatamartSlicer
-{ after(grammarAccess.getDatamartCubeElementAccess().getDatamartSlicerParserRuleCall_1()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartCubeElementAccess().getDatamartDefineDerivedMeasureParserRuleCall_2()); }
-	ruleDatamartDefineDerivedMeasure
-{ after(grammarAccess.getDatamartCubeElementAccess().getDatamartDefineDerivedMeasureParserRuleCall_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartAddition__Alternatives_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartAdditionAccess().getGroup_1_0_0()); }
-(rule__DatamartAddition__Group_1_0_0__0)
-{ after(grammarAccess.getDatamartAdditionAccess().getGroup_1_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartAdditionAccess().getGroup_1_0_1()); }
-(rule__DatamartAddition__Group_1_0_1__0)
-{ after(grammarAccess.getDatamartAdditionAccess().getGroup_1_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartMultiplication__Alternatives_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartMultiplicationAccess().getGroup_1_0_0()); }
-(rule__DatamartMultiplication__Group_1_0_0__0)
-{ after(grammarAccess.getDatamartMultiplicationAccess().getGroup_1_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartMultiplicationAccess().getGroup_1_0_1()); }
-(rule__DatamartMultiplication__Group_1_0_1__0)
-{ after(grammarAccess.getDatamartMultiplicationAccess().getGroup_1_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPrimary__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPrimaryAccess().getDatamartNumberOrElementParserRuleCall_0()); }
-	ruleDatamartNumberOrElement
-{ after(grammarAccess.getDatamartPrimaryAccess().getDatamartNumberOrElementParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartPrimaryAccess().getGroup_1()); }
-(rule__DatamartPrimary__Group_1__0)
-{ after(grammarAccess.getDatamartPrimaryAccess().getGroup_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartNumberOrElement__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartNumberOrElementAccess().getValueAssignment_0()); }
-(rule__DatamartNumberOrElement__ValueAssignment_0)
-{ after(grammarAccess.getDatamartNumberOrElementAccess().getValueAssignment_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartNumberOrElementAccess().getDatamartMeasureParserRuleCall_1()); }
-	ruleDatamartMeasure
-{ after(grammarAccess.getDatamartNumberOrElementAccess().getDatamartMeasureParserRuleCall_1()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartNumberOrElementAccess().getDatamartDerivedMeasureParserRuleCall_2()); }
-	ruleDatamartDerivedMeasure
-{ after(grammarAccess.getDatamartNumberOrElementAccess().getDatamartDerivedMeasureParserRuleCall_2()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartNumberOrElementAccess().getDatamartMemberTupleParserRuleCall_3()); }
-	ruleDatamartMemberTuple
-{ after(grammarAccess.getDatamartNumberOrElementAccess().getDatamartMemberTupleParserRuleCall_3()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartNumberOrElementAccess().getDatamartAggregationParserRuleCall_4()); }
-	ruleDatamartAggregation
-{ after(grammarAccess.getDatamartNumberOrElementAccess().getDatamartAggregationParserRuleCall_4()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartMemberTuple__Alternatives_0_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartMemberTupleAccess().getFunctionAssignment_0_0_0()); }
-(rule__DatamartMemberTuple__FunctionAssignment_0_0_0)
-{ after(grammarAccess.getDatamartMemberTupleAccess().getFunctionAssignment_0_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartMemberTupleAccess().getFunctionAssignment_0_0_1()); }
-(rule__DatamartMemberTuple__FunctionAssignment_0_0_1)
-{ after(grammarAccess.getDatamartMemberTupleAccess().getFunctionAssignment_0_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartSetTuple__Alternatives_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartSetTupleAccess().getSetFunctionAssignment_0_0()); }
-(rule__DatamartSetTuple__SetFunctionAssignment_0_0)
-{ after(grammarAccess.getDatamartSetTupleAccess().getSetFunctionAssignment_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartSetTupleAccess().getSetFunctionAssignment_0_1()); }
-(rule__DatamartSetTuple__SetFunctionAssignment_0_1)
-{ after(grammarAccess.getDatamartSetTupleAccess().getSetFunctionAssignment_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartAggregation__Alternatives_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartAggregationAccess().getSetAssignment_2_0()); }
-(rule__DatamartAggregation__SetAssignment_2_0)
-{ after(grammarAccess.getDatamartAggregationAccess().getSetAssignment_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartAggregationAccess().getSetAssignment_2_1()); }
-(rule__DatamartAggregation__SetAssignment_2_1)
-{ after(grammarAccess.getDatamartAggregationAccess().getSetAssignment_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartSetAggregation__Alternatives_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartSetAggregationAccess().getSetAssignment_2_0()); }
-(rule__DatamartSetAggregation__SetAssignment_2_0)
-{ after(grammarAccess.getDatamartSetAggregationAccess().getSetAssignment_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartSetAggregationAccess().getSetAssignment_2_1()); }
-(rule__DatamartSetAggregation__SetAssignment_2_1)
-{ after(grammarAccess.getDatamartSetAggregationAccess().getSetAssignment_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartElement__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartElementAccess().getDatamartHierarchyParserRuleCall_0()); }
-	ruleDatamartHierarchy
-{ after(grammarAccess.getDatamartElementAccess().getDatamartHierarchyParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartElementAccess().getDatamartMeasureParserRuleCall_1()); }
-	ruleDatamartMeasure
-{ after(grammarAccess.getDatamartElementAccess().getDatamartMeasureParserRuleCall_1()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartElementAccess().getDatamartDerivedMeasureParserRuleCall_2()); }
-	ruleDatamartDerivedMeasure
-{ after(grammarAccess.getDatamartElementAccess().getDatamartDerivedMeasureParserRuleCall_2()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartElementAccess().getDatamartSetAggregationParserRuleCall_3()); }
-	ruleDatamartSetAggregation
-{ after(grammarAccess.getDatamartElementAccess().getDatamartSetAggregationParserRuleCall_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartHierarchy__Alternatives_5_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartHierarchyAccess().getFilteredAssignment_5_2_0()); }
-(rule__DatamartHierarchy__FilteredAssignment_5_2_0)
-{ after(grammarAccess.getDatamartHierarchyAccess().getFilteredAssignment_5_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartHierarchyAccess().getSelectedAssignment_5_2_1()); }
-(rule__DatamartHierarchy__SelectedAssignment_5_2_1)
-{ after(grammarAccess.getDatamartHierarchyAccess().getSelectedAssignment_5_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartHierarchy__OrderRefAlternatives_6_2_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartHierarchyAccess().getOrderRefDatamartMeasureParserRuleCall_6_2_1_0_0()); }
-	ruleDatamartMeasure
-{ after(grammarAccess.getDatamartHierarchyAccess().getOrderRefDatamartMeasureParserRuleCall_6_2_1_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getDatamartHierarchyAccess().getOrderRefDatamartDerivedMeasureParserRuleCall_6_2_1_0_1()); }
-	ruleDatamartDerivedMeasure
-{ after(grammarAccess.getDatamartHierarchyAccess().getOrderRefDatamartDerivedMeasureParserRuleCall_6_2_1_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerType__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerDateFutureParserRuleCall_0()); }
-	rulePropertyFillerDateFuture
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerDateFutureParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerDatePastParserRuleCall_1()); }
-	rulePropertyFillerDatePast
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerDatePastParserRuleCall_1()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerDateRangeParserRuleCall_2()); }
-	rulePropertyFillerDateRange
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerDateRangeParserRuleCall_2()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedDoubleRangeParserRuleCall_3()); }
-	rulePropertyFillerSignedDoubleRange
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedDoubleRangeParserRuleCall_3()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedDoubleRandomParserRuleCall_4()); }
-	rulePropertyFillerSignedDoubleRandom
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedDoubleRandomParserRuleCall_4()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedIntegerRangeParserRuleCall_5()); }
-	rulePropertyFillerSignedIntegerRange
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedIntegerRangeParserRuleCall_5()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedIntegerRandomParserRuleCall_6()); }
-	rulePropertyFillerSignedIntegerRandom
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerSignedIntegerRandomParserRuleCall_6()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextRandomParserRuleCall_7()); }
-	rulePropertyFillerTextRandom
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextRandomParserRuleCall_7()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextParagraphsParserRuleCall_8()); }
-	rulePropertyFillerTextParagraphs
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextParagraphsParserRuleCall_8()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextSentencesParserRuleCall_9()); }
-	rulePropertyFillerTextSentences
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextSentencesParserRuleCall_9()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextWordsParserRuleCall_10()); }
-	rulePropertyFillerTextWords
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerTextWordsParserRuleCall_10()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedDoubleRangeParserRuleCall_11()); }
-	rulePropertyFillerUnsignedDoubleRange
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedDoubleRangeParserRuleCall_11()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedDoubleRandomParserRuleCall_12()); }
-	rulePropertyFillerUnsignedDoubleRandom
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedDoubleRandomParserRuleCall_12()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedIntegerRangeParserRuleCall_13()); }
-	rulePropertyFillerUnsignedIntegerRange
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedIntegerRangeParserRuleCall_13()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedIntegerRandomParserRuleCall_14()); }
-	rulePropertyFillerUnsignedIntegerRandom
-{ after(grammarAccess.getPropertyFillerTypeAccess().getPropertyFillerUnsignedIntegerRandomParserRuleCall_14()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerSignedDoubleRange__Alternatives_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getBeginRangeAssignment_1_0_0()); }
-(rule__PropertyFillerSignedDoubleRange__BeginRangeAssignment_1_0_0)
-{ after(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getBeginRangeAssignment_1_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getBeginRangeRefAssignment_1_0_1()); }
-(rule__PropertyFillerSignedDoubleRange__BeginRangeRefAssignment_1_0_1)
-{ after(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getBeginRangeRefAssignment_1_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerSignedDoubleRange__Alternatives_1_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getEndRangeAssignment_1_2_0()); }
-(rule__PropertyFillerSignedDoubleRange__EndRangeAssignment_1_2_0)
-{ after(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getEndRangeAssignment_1_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getEndRangeRefAssignment_1_2_1()); }
-(rule__PropertyFillerSignedDoubleRange__EndRangeRefAssignment_1_2_1)
-{ after(grammarAccess.getPropertyFillerSignedDoubleRangeAccess().getEndRangeRefAssignment_1_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerSignedIntegerRange__Alternatives_2_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getBeginRangeAssignment_2_0_0()); }
-(rule__PropertyFillerSignedIntegerRange__BeginRangeAssignment_2_0_0)
-{ after(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getBeginRangeAssignment_2_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getBeginRangeRefAssignment_2_0_1()); }
-(rule__PropertyFillerSignedIntegerRange__BeginRangeRefAssignment_2_0_1)
-{ after(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getBeginRangeRefAssignment_2_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerSignedIntegerRange__Alternatives_2_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getEndRangeAssignment_2_2_0()); }
-(rule__PropertyFillerSignedIntegerRange__EndRangeAssignment_2_2_0)
-{ after(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getEndRangeAssignment_2_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getEndRangeRefAssignment_2_2_1()); }
-(rule__PropertyFillerSignedIntegerRange__EndRangeRefAssignment_2_2_1)
-{ after(grammarAccess.getPropertyFillerSignedIntegerRangeAccess().getEndRangeRefAssignment_2_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getBeginRangeAssignment_1_0_0()); }
-(rule__PropertyFillerUnsignedDoubleRange__BeginRangeAssignment_1_0_0)
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getBeginRangeAssignment_1_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getBeginRangeRefAssignment_1_0_1()); }
-(rule__PropertyFillerUnsignedDoubleRange__BeginRangeRefAssignment_1_0_1)
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getBeginRangeRefAssignment_1_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getEndRangeAssignment_1_2_0()); }
-(rule__PropertyFillerUnsignedDoubleRange__EndRangeAssignment_1_2_0)
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getEndRangeAssignment_1_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getEndRangeRefAssignment_1_2_1()); }
-(rule__PropertyFillerUnsignedDoubleRange__EndRangeRefAssignment_1_2_1)
-{ after(grammarAccess.getPropertyFillerUnsignedDoubleRangeAccess().getEndRangeRefAssignment_1_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getBeginRangeAssignment_2_0_0()); }
-(rule__PropertyFillerUnsignedIntegerRange__BeginRangeAssignment_2_0_0)
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getBeginRangeAssignment_2_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getBeginRangeRefAssignment_2_0_1()); }
-(rule__PropertyFillerUnsignedIntegerRange__BeginRangeRefAssignment_2_0_1)
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getBeginRangeRefAssignment_2_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getEndRangeAssignment_2_2_0()); }
-(rule__PropertyFillerUnsignedIntegerRange__EndRangeAssignment_2_2_0)
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getEndRangeAssignment_2_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getEndRangeRefAssignment_2_2_1()); }
-(rule__PropertyFillerUnsignedIntegerRange__EndRangeRefAssignment_2_2_1)
-{ after(grammarAccess.getPropertyFillerUnsignedIntegerRangeAccess().getEndRangeRefAssignment_2_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XAnnotation__Alternatives_3_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXAnnotationAccess().getGroup_3_1_0()); }
-(rule__XAnnotation__Group_3_1_0__0)
-{ after(grammarAccess.getXAnnotationAccess().getGroup_3_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXAnnotationAccess().getValueAssignment_3_1_1()); }
-(rule__XAnnotation__ValueAssignment_3_1_1)
-{ after(grammarAccess.getXAnnotationAccess().getValueAssignment_3_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XAnnotationElementValueOrCommaList__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0()); }
-(rule__XAnnotationElementValueOrCommaList__Group_0__0)
-{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1()); }
-(rule__XAnnotationElementValueOrCommaList__Group_1__0)
-{ after(grammarAccess.getXAnnotationElementValueOrCommaListAccess().getGroup_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XAnnotationElementValue__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXAnnotationElementValueAccess().getGroup_0()); }
-(rule__XAnnotationElementValue__Group_0__0)
-{ after(grammarAccess.getXAnnotationElementValueAccess().getGroup_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXAnnotationElementValueAccess().getXAnnotationOrExpressionParserRuleCall_1()); }
-	ruleXAnnotationOrExpression
-{ after(grammarAccess.getXAnnotationElementValueAccess().getXAnnotationOrExpressionParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XAnnotationOrExpression__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXAnnotationOrExpressionAccess().getXAnnotationParserRuleCall_0()); }
-	ruleXAnnotation
-{ after(grammarAccess.getXAnnotationOrExpressionAccess().getXAnnotationParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXAnnotationOrExpressionAccess().getXExpressionParserRuleCall_1()); }
-	ruleXExpression
-{ after(grammarAccess.getXAnnotationOrExpressionAccess().getXExpressionParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XAssignment__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXAssignmentAccess().getGroup_0()); }
-(rule__XAssignment__Group_0__0)
-{ after(grammarAccess.getXAssignmentAccess().getGroup_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXAssignmentAccess().getGroup_1()); }
-(rule__XAssignment__Group_1__0)
-{ after(grammarAccess.getXAssignmentAccess().getGroup_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpMultiAssign__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword_0()); }
-
-	'+=' 
-
-{ after(grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAssignAccess().getHyphenMinusEqualsSignKeyword_1()); }
-
-	'-=' 
-
-{ after(grammarAccess.getOpMultiAssignAccess().getHyphenMinusEqualsSignKeyword_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAssignAccess().getAsteriskEqualsSignKeyword_2()); }
-
-	'*=' 
-
-{ after(grammarAccess.getOpMultiAssignAccess().getAsteriskEqualsSignKeyword_2()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAssignAccess().getSolidusEqualsSignKeyword_3()); }
-
-	'/=' 
-
-{ after(grammarAccess.getOpMultiAssignAccess().getSolidusEqualsSignKeyword_3()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAssignAccess().getPercentSignEqualsSignKeyword_4()); }
-
-	'%=' 
-
-{ after(grammarAccess.getOpMultiAssignAccess().getPercentSignEqualsSignKeyword_4()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAssignAccess().getGroup_5()); }
-(rule__OpMultiAssign__Group_5__0)
-{ after(grammarAccess.getOpMultiAssignAccess().getGroup_5()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAssignAccess().getGroup_6()); }
-(rule__OpMultiAssign__Group_6__0)
-{ after(grammarAccess.getOpMultiAssignAccess().getGroup_6()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpEquality__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0()); }
-
-	'==' 
-
-{ after(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1()); }
-
-	'!=' 
-
-{ after(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignEqualsSignKeyword_2()); }
-
-	'===' 
-
-{ after(grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignEqualsSignKeyword_2()); }
-)
-
-    |(
-{ before(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignEqualsSignKeyword_3()); }
-
-	'!==' 
-
-{ after(grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignEqualsSignKeyword_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XRelationalExpression__Alternatives_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0()); }
-(rule__XRelationalExpression__Group_1_0__0)
-{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1()); }
-(rule__XRelationalExpression__Group_1_1__0)
-{ after(grammarAccess.getXRelationalExpressionAccess().getGroup_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpCompare__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0()); }
-
-	'>=' 
-
-{ after(grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpCompareAccess().getGroup_1()); }
-(rule__OpCompare__Group_1__0)
-{ after(grammarAccess.getOpCompareAccess().getGroup_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2()); }
-
-	'>' 
-
-{ after(grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2()); }
-)
-
-    |(
-{ before(grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3()); }
-
-	'<' 
-
-{ after(grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpOther__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpOtherAccess().getHyphenMinusGreaterThanSignKeyword_0()); }
-
-	'->' 
-
-{ after(grammarAccess.getOpOtherAccess().getHyphenMinusGreaterThanSignKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getFullStopFullStopLessThanSignKeyword_1()); }
-
-	'..<' 
-
-{ after(grammarAccess.getOpOtherAccess().getFullStopFullStopLessThanSignKeyword_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getGroup_2()); }
-(rule__OpOther__Group_2__0)
-{ after(grammarAccess.getOpOtherAccess().getGroup_2()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_3()); }
-
-	'..' 
-
-{ after(grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_3()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_4()); }
-
-	'=>' 
-
-{ after(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_4()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getGroup_5()); }
-(rule__OpOther__Group_5__0)
-{ after(grammarAccess.getOpOtherAccess().getGroup_5()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getGroup_6()); }
-(rule__OpOther__Group_6__0)
-{ after(grammarAccess.getOpOtherAccess().getGroup_6()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getLessThanSignGreaterThanSignKeyword_7()); }
-
-	'<>' 
-
-{ after(grammarAccess.getOpOtherAccess().getLessThanSignGreaterThanSignKeyword_7()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getQuestionMarkColonKeyword_8()); }
-
-	'?:' 
-
-{ after(grammarAccess.getOpOtherAccess().getQuestionMarkColonKeyword_8()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpOther__Alternatives_5_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpOtherAccess().getGroup_5_1_0()); }
-(rule__OpOther__Group_5_1_0__0)
-{ after(grammarAccess.getOpOtherAccess().getGroup_5_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_1()); }
-
-	'>' 
-
-{ after(grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpOther__Alternatives_6_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpOtherAccess().getGroup_6_1_0()); }
-(rule__OpOther__Group_6_1_0__0)
-{ after(grammarAccess.getOpOtherAccess().getGroup_6_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_1()); }
-
-	'<' 
-
-{ after(grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_6_1_2()); }
-
-	'=>' 
-
-{ after(grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_6_1_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpAdd__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpAddAccess().getPlusSignKeyword_0()); }
-
-	'+' 
-
-{ after(grammarAccess.getOpAddAccess().getPlusSignKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1()); }
-
-	'-' 
-
-{ after(grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpMulti__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpMultiAccess().getAsteriskKeyword_0()); }
-
-	'*' 
-
-{ after(grammarAccess.getOpMultiAccess().getAsteriskKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAccess().getAsteriskAsteriskKeyword_1()); }
-
-	'**' 
-
-{ after(grammarAccess.getOpMultiAccess().getAsteriskAsteriskKeyword_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAccess().getSolidusKeyword_2()); }
-
-	'/' 
-
-{ after(grammarAccess.getOpMultiAccess().getSolidusKeyword_2()); }
-)
-
-    |(
-{ before(grammarAccess.getOpMultiAccess().getPercentSignKeyword_3()); }
-
-	'%' 
-
-{ after(grammarAccess.getOpMultiAccess().getPercentSignKeyword_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XUnaryOperation__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXUnaryOperationAccess().getGroup_0()); }
-(rule__XUnaryOperation__Group_0__0)
-{ after(grammarAccess.getXUnaryOperationAccess().getGroup_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1()); }
-	ruleXCastedExpression
-{ after(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpUnary__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpUnaryAccess().getExclamationMarkKeyword_0()); }
-
-	'!' 
-
-{ after(grammarAccess.getOpUnaryAccess().getExclamationMarkKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1()); }
-
-	'-' 
-
-{ after(grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2()); }
-
-	'+' 
-
-{ after(grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OpPostfix__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOpPostfixAccess().getPlusSignPlusSignKeyword_0()); }
-
-	'++' 
-
-{ after(grammarAccess.getOpPostfixAccess().getPlusSignPlusSignKeyword_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOpPostfixAccess().getHyphenMinusHyphenMinusKeyword_1()); }
-
-	'--' 
-
-{ after(grammarAccess.getOpPostfixAccess().getHyphenMinusHyphenMinusKeyword_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XMemberFeatureCall__Alternatives_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0()); }
-(rule__XMemberFeatureCall__Group_1_0__0)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1()); }
-(rule__XMemberFeatureCall__Group_1_1__0)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XMemberFeatureCall__Alternatives_1_0_0_0_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_0_0_0_1_0()); }
-
-	'.' 
-
-{ after(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_0_0_0_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_0_0_0_1_1()); }
-(rule__XMemberFeatureCall__ExplicitStaticAssignment_1_0_0_0_1_1)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_0_0_0_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XMemberFeatureCall__Alternatives_1_1_0_0_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_1_0_0_1_0()); }
-
-	'.' 
-
-{ after(grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_1_0_0_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getNullSafeAssignment_1_1_0_0_1_1()); }
-(rule__XMemberFeatureCall__NullSafeAssignment_1_1_0_0_1_1)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getNullSafeAssignment_1_1_0_0_1_1()); }
-)
-
-    |(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_1_0_0_1_2()); }
-(rule__XMemberFeatureCall__ExplicitStaticAssignment_1_1_0_0_1_2)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticAssignment_1_1_0_0_1_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XMemberFeatureCall__Alternatives_1_1_3_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_0()); }
-(rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_0)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsAssignment_1_1_3_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1()); }
-(rule__XMemberFeatureCall__Group_1_1_3_1_1__0)
-{ after(grammarAccess.getXMemberFeatureCallAccess().getGroup_1_1_3_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XPrimaryExpression__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0()); }
-	ruleXConstructorCall
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1()); }
-	ruleXBlockExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2()); }
-	ruleXSwitchExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_3()); }
-(	ruleXSynchronizedExpression)
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_3()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_4()); }
-	ruleXFeatureCall
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_4()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_5()); }
-	ruleXLiteral
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_5()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_6()); }
-	ruleXIfExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_6()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_7()); }
-(	ruleXForLoopExpression)
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_7()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_8()); }
-	ruleXBasicForLoopExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_8()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_9()); }
-	ruleXWhileExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_9()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_10()); }
-	ruleXDoWhileExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_10()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_11()); }
-	ruleXThrowExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_11()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_12()); }
-	ruleXReturnExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_12()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_13()); }
-	ruleXTryCatchFinallyExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_13()); }
-)
-
-    |(
-{ before(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_14()); }
-	ruleXParenthesizedExpression
-{ after(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_14()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XLiteral__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXLiteralAccess().getXCollectionLiteralParserRuleCall_0()); }
-	ruleXCollectionLiteral
-{ after(grammarAccess.getXLiteralAccess().getXCollectionLiteralParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_1()); }
-(	ruleXClosure)
-{ after(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_1()); }
-)
-
-    |(
-{ before(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_2()); }
-	ruleXBooleanLiteral
-{ after(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_2()); }
-)
-
-    |(
-{ before(grammarAccess.getXLiteralAccess().getXNumberLiteralParserRuleCall_3()); }
-	ruleXNumberLiteral
-{ after(grammarAccess.getXLiteralAccess().getXNumberLiteralParserRuleCall_3()); }
-)
-
-    |(
-{ before(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_4()); }
-	ruleXNullLiteral
-{ after(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_4()); }
-)
-
-    |(
-{ before(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_5()); }
-	ruleXStringLiteral
-{ after(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_5()); }
-)
-
-    |(
-{ before(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_6()); }
-	ruleXTypeLiteral
-{ after(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_6()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XCollectionLiteral__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXCollectionLiteralAccess().getXSetLiteralParserRuleCall_0()); }
-	ruleXSetLiteral
-{ after(grammarAccess.getXCollectionLiteralAccess().getXSetLiteralParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXCollectionLiteralAccess().getXListLiteralParserRuleCall_1()); }
-	ruleXListLiteral
-{ after(grammarAccess.getXCollectionLiteralAccess().getXListLiteralParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XSwitchExpression__Alternatives_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0()); }
-(rule__XSwitchExpression__Group_2_0__0)
-{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1()); }
-(rule__XSwitchExpression__Group_2_1__0)
-{ after(grammarAccess.getXSwitchExpressionAccess().getGroup_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XCasePart__Alternatives_3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXCasePartAccess().getGroup_3_0()); }
-(rule__XCasePart__Group_3_0__0)
-{ after(grammarAccess.getXCasePartAccess().getGroup_3_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXCasePartAccess().getFallThroughAssignment_3_1()); }
-(rule__XCasePart__FallThroughAssignment_3_1)
-{ after(grammarAccess.getXCasePartAccess().getFallThroughAssignment_3_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XExpressionOrVarDeclaration__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0()); }
-	ruleXVariableDeclaration
-{ after(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1()); }
-	ruleXExpression
-{ after(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XVariableDeclaration__Alternatives_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXVariableDeclarationAccess().getWriteableAssignment_1_0()); }
-(rule__XVariableDeclaration__WriteableAssignment_1_0)
-{ after(grammarAccess.getXVariableDeclarationAccess().getWriteableAssignment_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1()); }
-
-	'val' 
-
-{ after(grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XVariableDeclaration__Alternatives_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0()); }
-(rule__XVariableDeclaration__Group_2_0__0)
-{ after(grammarAccess.getXVariableDeclarationAccess().getGroup_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_1()); }
-(rule__XVariableDeclaration__NameAssignment_2_1)
-{ after(grammarAccess.getXVariableDeclarationAccess().getNameAssignment_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XFeatureCall__Alternatives_3_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_0()); }
-(rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_0)
-{ after(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsAssignment_3_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1()); }
-(rule__XFeatureCall__Group_3_1_1__0)
-{ after(grammarAccess.getXFeatureCallAccess().getGroup_3_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__FeatureCallID__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getFeatureCallIDAccess().getValidIDParserRuleCall_0()); }
-	ruleValidID
-{ after(grammarAccess.getFeatureCallIDAccess().getValidIDParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getFeatureCallIDAccess().getExtendsKeyword_1()); }
-
-	'extends' 
-
-{ after(grammarAccess.getFeatureCallIDAccess().getExtendsKeyword_1()); }
-)
-
-    |(
-{ before(grammarAccess.getFeatureCallIDAccess().getStaticKeyword_2()); }
-
-	'static' 
-
-{ after(grammarAccess.getFeatureCallIDAccess().getStaticKeyword_2()); }
-)
-
-    |(
-{ before(grammarAccess.getFeatureCallIDAccess().getImportKeyword_3()); }
-
-	'import' 
-
-{ after(grammarAccess.getFeatureCallIDAccess().getImportKeyword_3()); }
-)
-
-    |(
-{ before(grammarAccess.getFeatureCallIDAccess().getExtensionKeyword_4()); }
-
-	'extension' 
-
-{ after(grammarAccess.getFeatureCallIDAccess().getExtensionKeyword_4()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__IdOrSuper__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getIdOrSuperAccess().getFeatureCallIDParserRuleCall_0()); }
-	ruleFeatureCallID
-{ after(grammarAccess.getIdOrSuperAccess().getFeatureCallIDParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getIdOrSuperAccess().getSuperKeyword_1()); }
-
-	'super' 
-
-{ after(grammarAccess.getIdOrSuperAccess().getSuperKeyword_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XConstructorCall__Alternatives_4_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_0()); }
-(rule__XConstructorCall__ArgumentsAssignment_4_1_0)
-{ after(grammarAccess.getXConstructorCallAccess().getArgumentsAssignment_4_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1()); }
-(rule__XConstructorCall__Group_4_1_1__0)
-{ after(grammarAccess.getXConstructorCallAccess().getGroup_4_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XBooleanLiteral__Alternatives_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0()); }
-
-	'false' 
-
-{ after(grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXBooleanLiteralAccess().getIsTrueAssignment_1_1()); }
-(rule__XBooleanLiteral__IsTrueAssignment_1_1)
-{ after(grammarAccess.getXBooleanLiteralAccess().getIsTrueAssignment_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XTryCatchFinallyExpression__Alternatives_3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0()); }
-(rule__XTryCatchFinallyExpression__Group_3_0__0)
-{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_1()); }
-(rule__XTryCatchFinallyExpression__Group_3_1__0)
-{ after(grammarAccess.getXTryCatchFinallyExpressionAccess().getGroup_3_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__Number__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getNumberAccess().getHEXTerminalRuleCall_0()); }
-	RULE_HEX
-{ after(grammarAccess.getNumberAccess().getHEXTerminalRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getNumberAccess().getGroup_1()); }
-(rule__Number__Group_1__0)
-{ after(grammarAccess.getNumberAccess().getGroup_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__Number__Alternatives_1_0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_0_0()); }
-	RULE_INT
-{ after(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_0_0()); }
-)
-
-    |(
-{ before(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_0_1()); }
-	RULE_DECIMAL
-{ after(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_0_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__Number__Alternatives_1_1_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_1_1_0()); }
-	RULE_INT
-{ after(grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_1_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_1_1_1()); }
-	RULE_DECIMAL
-{ after(grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_1_1_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__JvmTypeReference__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getJvmTypeReferenceAccess().getGroup_0()); }
-(rule__JvmTypeReference__Group_0__0)
-{ after(grammarAccess.getJvmTypeReferenceAccess().getGroup_0()); }
-)
-
-    |(
-{ before(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1()); }
-	ruleXFunctionTypeRef
-{ after(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__JvmArgumentTypeReference__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0()); }
-	ruleJvmTypeReference
-{ after(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0()); }
-)
-
-    |(
-{ before(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1()); }
-	ruleJvmWildcardTypeReference
-{ after(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__JvmWildcardTypeReference__Alternatives_2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_0()); }
-(rule__JvmWildcardTypeReference__Group_2_0__0)
-{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_0()); }
-)
-
-    |(
-{ before(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_1()); }
-(rule__JvmWildcardTypeReference__Group_2_1__0)
-{ after(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XImportDeclaration__Alternatives_1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXImportDeclarationAccess().getGroup_1_0()); }
-(rule__XImportDeclaration__Group_1_0__0)
-{ after(grammarAccess.getXImportDeclarationAccess().getGroup_1_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_1_1()); }
-(rule__XImportDeclaration__ImportedTypeAssignment_1_1)
-{ after(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_1_1()); }
-)
-
-    |(
-{ before(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceAssignment_1_2()); }
-(rule__XImportDeclaration__ImportedNamespaceAssignment_1_2)
-{ after(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceAssignment_1_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__XImportDeclaration__Alternatives_1_0_3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getXImportDeclarationAccess().getWildcardAssignment_1_0_3_0()); }
-(rule__XImportDeclaration__WildcardAssignment_1_0_3_0)
-{ after(grammarAccess.getXImportDeclarationAccess().getWildcardAssignment_1_0_3_0()); }
-)
-
-    |(
-{ before(grammarAccess.getXImportDeclarationAccess().getMemberNameAssignment_1_0_3_1()); }
-(rule__XImportDeclaration__MemberNameAssignment_1_0_3_1)
-{ after(grammarAccess.getXImportDeclarationAccess().getMemberNameAssignment_1_0_3_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AxisEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAxisEnumAccess().getDEFAULTEnumLiteralDeclaration_0()); }
-(	'default' 
-)
-{ after(grammarAccess.getAxisEnumAccess().getDEFAULTEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getAxisEnumAccess().getCOLUMNSEnumLiteralDeclaration_1()); }
-(	'columns' 
-)
-{ after(grammarAccess.getAxisEnumAccess().getCOLUMNSEnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getAxisEnumAccess().getROWSEnumLiteralDeclaration_2()); }
-(	'rows' 
-)
-{ after(grammarAccess.getAxisEnumAccess().getROWSEnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getAxisEnumAccess().getPAGESEnumLiteralDeclaration_3()); }
-(	'pages' 
-)
-{ after(grammarAccess.getAxisEnumAccess().getPAGESEnumLiteralDeclaration_3()); }
-)
-
-    |(
-{ before(grammarAccess.getAxisEnumAccess().getSECTIONSEnumLiteralDeclaration_4()); }
-(	'sections' 
-)
-{ after(grammarAccess.getAxisEnumAccess().getSECTIONSEnumLiteralDeclaration_4()); }
-)
-
-    |(
-{ before(grammarAccess.getAxisEnumAccess().getCHAPTERSEnumLiteralDeclaration_5()); }
-(	'chapters' 
-)
-{ after(grammarAccess.getAxisEnumAccess().getCHAPTERSEnumLiteralDeclaration_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__FunctionEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getFunctionEnumAccess().getPREVMEMBEREnumLiteralDeclaration_0()); }
-(	'previous' 
-)
-{ after(grammarAccess.getFunctionEnumAccess().getPREVMEMBEREnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getFunctionEnumAccess().getNEXTMEMBEREnumLiteralDeclaration_1()); }
-(	'next' 
-)
-{ after(grammarAccess.getFunctionEnumAccess().getNEXTMEMBEREnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getFunctionEnumAccess().getFIRSTCHILDEnumLiteralDeclaration_2()); }
-(	'first' 
-)
-{ after(grammarAccess.getFunctionEnumAccess().getFIRSTCHILDEnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getFunctionEnumAccess().getLASTCHILDEnumLiteralDeclaration_3()); }
-(	'last' 
-)
-{ after(grammarAccess.getFunctionEnumAccess().getLASTCHILDEnumLiteralDeclaration_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ParameterFunctionEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getParameterFunctionEnumAccess().getLAGEnumLiteralDeclaration_0()); }
-(	'lag' 
-)
-{ after(grammarAccess.getParameterFunctionEnumAccess().getLAGEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getParameterFunctionEnumAccess().getLEADEnumLiteralDeclaration_1()); }
-(	'lead' 
-)
-{ after(grammarAccess.getParameterFunctionEnumAccess().getLEADEnumLiteralDeclaration_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__SetFunctionEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSetFunctionEnumAccess().getYTDEnumLiteralDeclaration_0()); }
-(	'year-to-date' 
-)
-{ after(grammarAccess.getSetFunctionEnumAccess().getYTDEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getSetFunctionEnumAccess().getPERIODSTODATEEnumLiteralDeclaration_1()); }
-(	'periods' 
-)
-{ after(grammarAccess.getSetFunctionEnumAccess().getPERIODSTODATEEnumLiteralDeclaration_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__SetParameterFunctionEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSetParameterFunctionEnumAccess().getTAILEnumLiteralDeclaration_0()); }
-(	'tail' 
-)
-{ after(grammarAccess.getSetParameterFunctionEnumAccess().getTAILEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getSetParameterFunctionEnumAccess().getHEADEnumLiteralDeclaration_1()); }
-(	'head' 
-)
-{ after(grammarAccess.getSetParameterFunctionEnumAccess().getHEADEnumLiteralDeclaration_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__SetAggregationEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSetAggregationEnumAccess().getTOPCOUNTEnumLiteralDeclaration_0()); }
-(	'topcount' 
-)
-{ after(grammarAccess.getSetAggregationEnumAccess().getTOPCOUNTEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getSetAggregationEnumAccess().getTOPSUMEnumLiteralDeclaration_1()); }
-(	'topsummation' 
-)
-{ after(grammarAccess.getSetAggregationEnumAccess().getTOPSUMEnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getSetAggregationEnumAccess().getTOPPERCENTEnumLiteralDeclaration_2()); }
-(	'toppercentage' 
-)
-{ after(grammarAccess.getSetAggregationEnumAccess().getTOPPERCENTEnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getSetAggregationEnumAccess().getBOTTOMCOUNTEnumLiteralDeclaration_3()); }
-(	'bottomcount' 
-)
-{ after(grammarAccess.getSetAggregationEnumAccess().getBOTTOMCOUNTEnumLiteralDeclaration_3()); }
-)
-
-    |(
-{ before(grammarAccess.getSetAggregationEnumAccess().getBOTTOMSUMEnumLiteralDeclaration_4()); }
-(	'bottomsummation' 
-)
-{ after(grammarAccess.getSetAggregationEnumAccess().getBOTTOMSUMEnumLiteralDeclaration_4()); }
-)
-
-    |(
-{ before(grammarAccess.getSetAggregationEnumAccess().getBOTTOMPERCENTEnumLiteralDeclaration_5()); }
-(	'bottompercentage' 
-)
-{ after(grammarAccess.getSetAggregationEnumAccess().getBOTTOMPERCENTEnumLiteralDeclaration_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__AggregationEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getAggregationEnumAccess().getAVGEnumLiteralDeclaration_0()); }
-(	'average' 
-)
-{ after(grammarAccess.getAggregationEnumAccess().getAVGEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getAggregationEnumAccess().getSUMEnumLiteralDeclaration_1()); }
-(	'summation' 
-)
-{ after(grammarAccess.getAggregationEnumAccess().getSUMEnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getAggregationEnumAccess().getAGGREGATEEnumLiteralDeclaration_2()); }
-(	'aggregate' 
-)
-{ after(grammarAccess.getAggregationEnumAccess().getAGGREGATEEnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getAggregationEnumAccess().getSTDDEVEnumLiteralDeclaration_3()); }
-(	'deviation' 
-)
-{ after(grammarAccess.getAggregationEnumAccess().getSTDDEVEnumLiteralDeclaration_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OperatorEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOperatorEnumAccess().getEQUALSEnumLiteralDeclaration_0()); }
-(	'=' 
-)
-{ after(grammarAccess.getOperatorEnumAccess().getEQUALSEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOperatorEnumAccess().getLESSEnumLiteralDeclaration_1()); }
-(	'<' 
-)
-{ after(grammarAccess.getOperatorEnumAccess().getLESSEnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getOperatorEnumAccess().getGREATEREnumLiteralDeclaration_2()); }
-(	'>' 
-)
-{ after(grammarAccess.getOperatorEnumAccess().getGREATEREnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getOperatorEnumAccess().getLESSEQUALEnumLiteralDeclaration_3()); }
-(	'<=' 
-)
-{ after(grammarAccess.getOperatorEnumAccess().getLESSEQUALEnumLiteralDeclaration_3()); }
-)
-
-    |(
-{ before(grammarAccess.getOperatorEnumAccess().getGREATEREQUALEnumLiteralDeclaration_4()); }
-(	'>=' 
-)
-{ after(grammarAccess.getOperatorEnumAccess().getGREATEREQUALEnumLiteralDeclaration_4()); }
-)
-
-    |(
-{ before(grammarAccess.getOperatorEnumAccess().getLIKEEnumLiteralDeclaration_5()); }
-(	'like' 
-)
-{ after(grammarAccess.getOperatorEnumAccess().getLIKEEnumLiteralDeclaration_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__SqlAggregationEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getSqlAggregationEnumAccess().getAVGEnumLiteralDeclaration_0()); }
-(	'average' 
-)
-{ after(grammarAccess.getSqlAggregationEnumAccess().getAVGEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getSqlAggregationEnumAccess().getSUMEnumLiteralDeclaration_1()); }
-(	'summation' 
-)
-{ after(grammarAccess.getSqlAggregationEnumAccess().getSUMEnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getSqlAggregationEnumAccess().getCOUNTEnumLiteralDeclaration_2()); }
-(	'count' 
-)
-{ after(grammarAccess.getSqlAggregationEnumAccess().getCOUNTEnumLiteralDeclaration_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__ValueScaleEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXISEnumLiteralDeclaration_0()); }
-(	'group1' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXISEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS2EnumLiteralDeclaration_1()); }
-(	'group2' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS2EnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS3EnumLiteralDeclaration_2()); }
-(	'group3' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS3EnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS4EnumLiteralDeclaration_3()); }
-(	'group4' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS4EnumLiteralDeclaration_3()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS5EnumLiteralDeclaration_4()); }
-(	'group5' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS5EnumLiteralDeclaration_4()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS6EnumLiteralDeclaration_5()); }
-(	'group6' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS6EnumLiteralDeclaration_5()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS7EnumLiteralDeclaration_6()); }
-(	'group7' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS7EnumLiteralDeclaration_6()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS8EnumLiteralDeclaration_7()); }
-(	'group8' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS8EnumLiteralDeclaration_7()); }
-)
-
-    |(
-{ before(grammarAccess.getValueScaleEnumAccess().getAXIS9EnumLiteralDeclaration_8()); }
-(	'group9' 
-)
-{ after(grammarAccess.getValueScaleEnumAccess().getAXIS9EnumLiteralDeclaration_8()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__TaskQueryTopicEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getTaskQueryTopicEnumAccess().getQ1EnumLiteralDeclaration_0()); }
-(	'BusinessAdministrator' 
-)
-{ after(grammarAccess.getTaskQueryTopicEnumAccess().getQ1EnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryTopicEnumAccess().getQ2EnumLiteralDeclaration_1()); }
-(	'PotentialOwner' 
-)
-{ after(grammarAccess.getTaskQueryTopicEnumAccess().getQ2EnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryTopicEnumAccess().getQ3EnumLiteralDeclaration_2()); }
-(	'Recipient' 
-)
-{ after(grammarAccess.getTaskQueryTopicEnumAccess().getQ3EnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryTopicEnumAccess().getQ4EnumLiteralDeclaration_3()); }
-(	'TaskInitiator' 
-)
-{ after(grammarAccess.getTaskQueryTopicEnumAccess().getQ4EnumLiteralDeclaration_3()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryTopicEnumAccess().getQ5EnumLiteralDeclaration_4()); }
-(	'TaskStakeholder' 
-)
-{ after(grammarAccess.getTaskQueryTopicEnumAccess().getQ5EnumLiteralDeclaration_4()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryTopicEnumAccess().getQ6EnumLiteralDeclaration_5()); }
-(	'ExcludedOwner' 
-)
-{ after(grammarAccess.getTaskQueryTopicEnumAccess().getQ6EnumLiteralDeclaration_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__TaskQueryColumnEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP1EnumLiteralDeclaration_0()); }
-(	'Name' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP1EnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP2EnumLiteralDeclaration_1()); }
-(	'Priority' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP2EnumLiteralDeclaration_1()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP3EnumLiteralDeclaration_2()); }
-(	'Status' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP3EnumLiteralDeclaration_2()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP4EnumLiteralDeclaration_3()); }
-(	'Subject' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP4EnumLiteralDeclaration_3()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP5EnumLiteralDeclaration_4()); }
-(	'Description' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP5EnumLiteralDeclaration_4()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP6EnumLiteralDeclaration_5()); }
-(	'ExpirationTime' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP6EnumLiteralDeclaration_5()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP7EnumLiteralDeclaration_6()); }
-(	'CreatedOn' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP7EnumLiteralDeclaration_6()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP8EnumLiteralDeclaration_7()); }
-(	'CreatedBy' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP8EnumLiteralDeclaration_7()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP9EnumLiteralDeclaration_8()); }
-(	'ActivationTime' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP9EnumLiteralDeclaration_8()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP10EnumLiteralDeclaration_9()); }
-(	'ActualOwner' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP10EnumLiteralDeclaration_9()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP11EnumLiteralDeclaration_10()); }
-(	'TaskId' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP11EnumLiteralDeclaration_10()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP12EnumLiteralDeclaration_11()); }
-(	'ProcessId' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP12EnumLiteralDeclaration_11()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP13EnumLiteralDeclaration_12()); }
-(	'ProcessInstanceId' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP13EnumLiteralDeclaration_12()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskQueryColumnEnumAccess().getP14EnumLiteralDeclaration_13()); }
-(	'ProcessSessionId' 
-)
-{ after(grammarAccess.getTaskQueryColumnEnumAccess().getP14EnumLiteralDeclaration_13()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__TaskFilterEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getTaskFilterEnumAccess().getF1EnumLiteralDeclaration_0()); }
-(	'Groups' 
-)
-{ after(grammarAccess.getTaskFilterEnumAccess().getF1EnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getTaskFilterEnumAccess().getF2EnumLiteralDeclaration_1()); }
-(	'Users' 
-)
-{ after(grammarAccess.getTaskFilterEnumAccess().getF2EnumLiteralDeclaration_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__OrderEnum__Alternatives
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getOrderEnumAccess().getASCEnumLiteralDeclaration_0()); }
-(	'ascending' 
-)
-{ after(grammarAccess.getOrderEnumAccess().getASCEnumLiteralDeclaration_0()); }
-)
-
-    |(
-{ before(grammarAccess.getOrderEnumAccess().getDESCEnumLiteralDeclaration_1()); }
-(	'descending' 
-)
-{ after(grammarAccess.getOrderEnumAccess().getDESCEnumLiteralDeclaration_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-rule__DatamartPackage__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group__0__Impl
-	rule__DatamartPackage__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getDatamartPackageAction_0()); }
-(
-
-)
-{ after(grammarAccess.getDatamartPackageAccess().getDatamartPackageAction_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartPackage__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group__1__Impl
-	rule__DatamartPackage__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getPackageKeyword_1()); }
-
-	'package' 
-
-{ after(grammarAccess.getDatamartPackageAccess().getPackageKeyword_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartPackage__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group__2__Impl
-	rule__DatamartPackage__Group__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getNameAssignment_2()); }
-(rule__DatamartPackage__NameAssignment_2)
-{ after(grammarAccess.getDatamartPackageAccess().getNameAssignment_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartPackage__Group__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getGroup_3()); }
-(rule__DatamartPackage__Group_3__0)?
-{ after(grammarAccess.getDatamartPackageAccess().getGroup_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartPackage__Group_3__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group_3__0__Impl
-	rule__DatamartPackage__Group_3__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group_3__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getLeftCurlyBracketKeyword_3_0()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartPackageAccess().getLeftCurlyBracketKeyword_3_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartPackage__Group_3__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group_3__1__Impl
-	rule__DatamartPackage__Group_3__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group_3__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getImportsAssignment_3_1()); }
-(rule__DatamartPackage__ImportsAssignment_3_1)*
-{ after(grammarAccess.getDatamartPackageAccess().getImportsAssignment_3_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartPackage__Group_3__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group_3__2__Impl
-	rule__DatamartPackage__Group_3__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group_3__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getDefinitionsAssignment_3_2()); }
-(rule__DatamartPackage__DefinitionsAssignment_3_2)*
-{ after(grammarAccess.getDatamartPackageAccess().getDefinitionsAssignment_3_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartPackage__Group_3__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartPackage__Group_3__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartPackage__Group_3__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPackageAccess().getRightCurlyBracketKeyword_3_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartPackageAccess().getRightCurlyBracketKeyword_3_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartDefinition__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group__0__Impl
-	rule__DatamartDefinition__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getDatamartKeyword_0()); }
-
-	'datamart' 
-
-{ after(grammarAccess.getDatamartDefinitionAccess().getDatamartKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group__1__Impl
-	rule__DatamartDefinition__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getNameAssignment_1()); }
-(rule__DatamartDefinition__NameAssignment_1)
-{ after(grammarAccess.getDatamartDefinitionAccess().getNameAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group__2__Impl
-	rule__DatamartDefinition__Group__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getGroup_2()); }
-(rule__DatamartDefinition__Group_2__0)?
-{ after(grammarAccess.getDatamartDefinitionAccess().getGroup_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group__3__Impl
-	rule__DatamartDefinition__Group__4
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getGroup_3()); }
-(rule__DatamartDefinition__Group_3__0)?
-{ after(grammarAccess.getDatamartDefinitionAccess().getGroup_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group__4
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group__4__Impl
-	rule__DatamartDefinition__Group__5
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group__4__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getUsingKeyword_4()); }
-
-	'using' 
-
-{ after(grammarAccess.getDatamartDefinitionAccess().getUsingKeyword_4()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group__5
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group__5__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group__5__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getSourceAssignment_5()); }
-(rule__DatamartDefinition__SourceAssignment_5)
-{ after(grammarAccess.getDatamartDefinitionAccess().getSourceAssignment_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-rule__DatamartDefinition__Group_2__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group_2__0__Impl
-	rule__DatamartDefinition__Group_2__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group_2__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getDescriptionAssignment_2_0()); }
-(rule__DatamartDefinition__DescriptionAssignment_2_0)
-{ after(grammarAccess.getDatamartDefinitionAccess().getDescriptionAssignment_2_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group_2__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group_2__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group_2__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getDescriptionValueAssignment_2_1()); }
-(rule__DatamartDefinition__DescriptionValueAssignment_2_1)
-{ after(grammarAccess.getDatamartDefinitionAccess().getDescriptionValueAssignment_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__DatamartDefinition__Group_3__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group_3__0__Impl
-	rule__DatamartDefinition__Group_3__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group_3__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getForKeyword_3_0()); }
-
-	'for' 
-
-{ after(grammarAccess.getDatamartDefinitionAccess().getForKeyword_3_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group_3__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group_3__1__Impl
-	rule__DatamartDefinition__Group_3__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group_3__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getLeftCurlyBracketKeyword_3_1()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartDefinitionAccess().getLeftCurlyBracketKeyword_3_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group_3__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group_3__2__Impl
-	rule__DatamartDefinition__Group_3__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group_3__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getRolesAssignment_3_2()); }
-(rule__DatamartDefinition__RolesAssignment_3_2)*
-{ after(grammarAccess.getDatamartDefinitionAccess().getRolesAssignment_3_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartDefinition__Group_3__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartDefinition__Group_3__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartDefinition__Group_3__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartDefinitionAccess().getRightCurlyBracketKeyword_3_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartDefinitionAccess().getRightCurlyBracketKeyword_3_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartRole__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartRole__Group__0__Impl
-	rule__DatamartRole__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartRole__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartRoleAccess().getRoleKeyword_0()); }
-
-	'role' 
-
-{ after(grammarAccess.getDatamartRoleAccess().getRoleKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartRole__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartRole__Group__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartRole__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartRoleAccess().getAssignedRoleAssignment_1()); }
-(rule__DatamartRole__AssignedRoleAssignment_1)
-{ after(grammarAccess.getDatamartRoleAccess().getAssignedRoleAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__DatamartTask__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group__0__Impl
-	rule__DatamartTask__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getTaskKeyword_0()); }
-
-	'task' 
-
-{ after(grammarAccess.getDatamartTaskAccess().getTaskKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group__1__Impl
-	rule__DatamartTask__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getTaskQueryAssignment_1()); }
-(rule__DatamartTask__TaskQueryAssignment_1)
-{ after(grammarAccess.getDatamartTaskAccess().getTaskQueryAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group__2__Impl
-	rule__DatamartTask__Group__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getGroup_2()); }
-(rule__DatamartTask__Group_2__0)?
-{ after(grammarAccess.getDatamartTaskAccess().getGroup_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getGroup_3()); }
-(rule__DatamartTask__Group_3__0)?
-{ after(grammarAccess.getDatamartTaskAccess().getGroup_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartTask__Group_2__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_2__0__Impl
-	rule__DatamartTask__Group_2__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_2__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getColumnsKeyword_2_0()); }
-
-	'columns' 
-
-{ after(grammarAccess.getDatamartTaskAccess().getColumnsKeyword_2_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group_2__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_2__1__Impl
-	rule__DatamartTask__Group_2__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_2__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getLeftCurlyBracketKeyword_2_1()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartTaskAccess().getLeftCurlyBracketKeyword_2_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group_2__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_2__2__Impl
-	rule__DatamartTask__Group_2__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_2__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getColumnsAssignment_2_2()); }
-(rule__DatamartTask__ColumnsAssignment_2_2)*
-{ after(grammarAccess.getDatamartTaskAccess().getColumnsAssignment_2_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group_2__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_2__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_2__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getRightCurlyBracketKeyword_2_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartTaskAccess().getRightCurlyBracketKeyword_2_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartTask__Group_3__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_3__0__Impl
-	rule__DatamartTask__Group_3__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_3__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getConditionsKeyword_3_0()); }
-
-	'conditions' 
-
-{ after(grammarAccess.getDatamartTaskAccess().getConditionsKeyword_3_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group_3__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_3__1__Impl
-	rule__DatamartTask__Group_3__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_3__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getLeftCurlyBracketKeyword_3_1()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartTaskAccess().getLeftCurlyBracketKeyword_3_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group_3__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_3__2__Impl
-	rule__DatamartTask__Group_3__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_3__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getConditionsAssignment_3_2()); }
-(rule__DatamartTask__ConditionsAssignment_3_2)*
-{ after(grammarAccess.getDatamartTaskAccess().getConditionsAssignment_3_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTask__Group_3__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTask__Group_3__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTask__Group_3__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskAccess().getRightCurlyBracketKeyword_3_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartTaskAccess().getRightCurlyBracketKeyword_3_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartColumn__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartColumn__Group__0__Impl
-	rule__DatamartColumn__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartColumn__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartColumnAccess().getColumnKeyword_0()); }
-
-	'column' 
-
-{ after(grammarAccess.getDatamartColumnAccess().getColumnKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartColumn__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartColumn__Group__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartColumn__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartColumnAccess().getColumnRefAssignment_1()); }
-(rule__DatamartColumn__ColumnRefAssignment_1)
-{ after(grammarAccess.getDatamartColumnAccess().getColumnRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__DatamartTaskFilter__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTaskFilter__Group__0__Impl
-	rule__DatamartTaskFilter__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTaskFilter__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskFilterAccess().getFilterKeyword_0()); }
-
-	'filter' 
-
-{ after(grammarAccess.getDatamartTaskFilterAccess().getFilterKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartTaskFilter__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartTaskFilter__Group__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartTaskFilter__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartTaskFilterAccess().getFilterRefAssignment_1()); }
-(rule__DatamartTaskFilter__FilterRefAssignment_1)
-{ after(grammarAccess.getDatamartTaskFilterAccess().getFilterRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__DatamartCube__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartCube__Group__0__Impl
-	rule__DatamartCube__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartCube__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartCubeAccess().getCubeKeyword_0()); }
-
-	'cube' 
-
-{ after(grammarAccess.getDatamartCubeAccess().getCubeKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartCube__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartCube__Group__1__Impl
-	rule__DatamartCube__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartCube__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartCubeAccess().getCubeRefAssignment_1()); }
-(rule__DatamartCube__CubeRefAssignment_1)
-{ after(grammarAccess.getDatamartCubeAccess().getCubeRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartCube__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartCube__Group__2__Impl
-	rule__DatamartCube__Group__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartCube__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartCubeAccess().getNonEmptyAssignment_2()); }
-(rule__DatamartCube__NonEmptyAssignment_2)?
-{ after(grammarAccess.getDatamartCubeAccess().getNonEmptyAssignment_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartCube__Group__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartCube__Group__3__Impl
-	rule__DatamartCube__Group__4
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartCube__Group__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartCubeAccess().getLeftCurlyBracketKeyword_3()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartCubeAccess().getLeftCurlyBracketKeyword_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartCube__Group__4
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartCube__Group__4__Impl
-	rule__DatamartCube__Group__5
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartCube__Group__4__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartCubeAccess().getAxisslicerAssignment_4()); }
-(rule__DatamartCube__AxisslicerAssignment_4)*
-{ after(grammarAccess.getDatamartCubeAccess().getAxisslicerAssignment_4()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartCube__Group__5
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartCube__Group__5__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartCube__Group__5__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartCubeAccess().getRightCurlyBracketKeyword_5()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartCubeAccess().getRightCurlyBracketKeyword_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-rule__DatamartReference__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartReference__Group__0__Impl
-	rule__DatamartReference__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartReference__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartReferenceAccess().getJoinKeyword_0()); }
-
-	'join' 
-
-{ after(grammarAccess.getDatamartReferenceAccess().getJoinKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartReference__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartReference__Group__1__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartReference__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartReferenceAccess().getRefAssignment_1()); }
-(rule__DatamartReference__RefAssignment_1)
-{ after(grammarAccess.getDatamartReferenceAccess().getRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-rule__DatamartEntity__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__0__Impl
-	rule__DatamartEntity__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getEntityKeyword_0()); }
-
-	'entity' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getEntityKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__1__Impl
-	rule__DatamartEntity__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getEntityRefAssignment_1()); }
-(rule__DatamartEntity__EntityRefAssignment_1)
-{ after(grammarAccess.getDatamartEntityAccess().getEntityRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__2__Impl
-	rule__DatamartEntity__Group__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getTrackingAssignment_2()); }
-(rule__DatamartEntity__TrackingAssignment_2)?
-{ after(grammarAccess.getDatamartEntityAccess().getTrackingAssignment_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__3__Impl
-	rule__DatamartEntity__Group__4
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_3()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__4
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__4__Impl
-	rule__DatamartEntity__Group__5
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__4__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getGroup_4()); }
-(rule__DatamartEntity__Group_4__0)?
-{ after(grammarAccess.getDatamartEntityAccess().getGroup_4()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__5
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__5__Impl
-	rule__DatamartEntity__Group__6
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__5__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getGroup_5()); }
-(rule__DatamartEntity__Group_5__0)?
-{ after(grammarAccess.getDatamartEntityAccess().getGroup_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__6
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__6__Impl
-	rule__DatamartEntity__Group__7
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__6__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getGroup_6()); }
-(rule__DatamartEntity__Group_6__0)?
-{ after(grammarAccess.getDatamartEntityAccess().getGroup_6()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__7
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__7__Impl
-	rule__DatamartEntity__Group__8
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__7__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getGroup_7()); }
-(rule__DatamartEntity__Group_7__0)?
-{ after(grammarAccess.getDatamartEntityAccess().getGroup_7()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__8
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__8__Impl
-	rule__DatamartEntity__Group__9
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__8__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getGroup_8()); }
-(rule__DatamartEntity__Group_8__0)?
-{ after(grammarAccess.getDatamartEntityAccess().getGroup_8()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group__9
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group__9__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group__9__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_9()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_9()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-rule__DatamartEntity__Group_4__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_4__0__Impl
-	rule__DatamartEntity__Group_4__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_4__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getNavigationKeyword_4_0()); }
-
-	'navigation' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getNavigationKeyword_4_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_4__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_4__1__Impl
-	rule__DatamartEntity__Group_4__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_4__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_4_1()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_4_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_4__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_4__2__Impl
-	rule__DatamartEntity__Group_4__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_4__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getNavigationsAssignment_4_2()); }
-(rule__DatamartEntity__NavigationsAssignment_4_2)*
-{ after(grammarAccess.getDatamartEntityAccess().getNavigationsAssignment_4_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_4__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_4__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_4__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_4_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_4_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartEntity__Group_5__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_5__0__Impl
-	rule__DatamartEntity__Group_5__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_5__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getPropertiesKeyword_5_0()); }
-
-	'properties' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getPropertiesKeyword_5_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_5__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_5__1__Impl
-	rule__DatamartEntity__Group_5__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_5__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_5_1()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_5_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_5__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_5__2__Impl
-	rule__DatamartEntity__Group_5__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_5__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getPropertiesAssignment_5_2()); }
-(rule__DatamartEntity__PropertiesAssignment_5_2)*
-{ after(grammarAccess.getDatamartEntityAccess().getPropertiesAssignment_5_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_5__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_5__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_5__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_5_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_5_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartEntity__Group_6__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_6__0__Impl
-	rule__DatamartEntity__Group_6__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_6__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getConditionsKeyword_6_0()); }
-
-	'conditions' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getConditionsKeyword_6_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_6__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_6__1__Impl
-	rule__DatamartEntity__Group_6__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_6__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_6_1()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_6_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_6__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_6__2__Impl
-	rule__DatamartEntity__Group_6__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_6__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getConditionsAssignment_6_2()); }
-(rule__DatamartEntity__ConditionsAssignment_6_2)*
-{ after(grammarAccess.getDatamartEntityAccess().getConditionsAssignment_6_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_6__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_6__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_6__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_6_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_6_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartEntity__Group_7__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_7__0__Impl
-	rule__DatamartEntity__Group_7__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_7__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getOrderingKeyword_7_0()); }
-
-	'ordering' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getOrderingKeyword_7_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_7__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_7__1__Impl
-	rule__DatamartEntity__Group_7__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_7__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_7_1()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_7_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_7__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_7__2__Impl
-	rule__DatamartEntity__Group_7__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_7__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getOrderingAssignment_7_2()); }
-(rule__DatamartEntity__OrderingAssignment_7_2)*
-{ after(grammarAccess.getDatamartEntityAccess().getOrderingAssignment_7_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_7__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_7__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_7__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_7_3()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_7_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartEntity__Group_8__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_8__0__Impl
-	rule__DatamartEntity__Group_8__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_8__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getFillerRowsKeyword_8_0()); }
-
-	'filler rows' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getFillerRowsKeyword_8_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_8__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_8__1__Impl
-	rule__DatamartEntity__Group_8__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_8__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getFillerMinCountRowsAssignment_8_1()); }
-(rule__DatamartEntity__FillerMinCountRowsAssignment_8_1)
-{ after(grammarAccess.getDatamartEntityAccess().getFillerMinCountRowsAssignment_8_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_8__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_8__2__Impl
-	rule__DatamartEntity__Group_8__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_8__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getToKeyword_8_2()); }
-
-	'to' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getToKeyword_8_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_8__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_8__3__Impl
-	rule__DatamartEntity__Group_8__4
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_8__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getFillerMaxCountRowsAssignment_8_3()); }
-(rule__DatamartEntity__FillerMaxCountRowsAssignment_8_3)
-{ after(grammarAccess.getDatamartEntityAccess().getFillerMaxCountRowsAssignment_8_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_8__4
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_8__4__Impl
-	rule__DatamartEntity__Group_8__5
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_8__4__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_8_4()); }
-
-	'{' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getLeftCurlyBracketKeyword_8_4()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_8__5
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_8__5__Impl
-	rule__DatamartEntity__Group_8__6
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_8__5__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getFillerDatasAssignment_8_5()); }
-(rule__DatamartEntity__FillerDatasAssignment_8_5)*
-{ after(grammarAccess.getDatamartEntityAccess().getFillerDatasAssignment_8_5()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartEntity__Group_8__6
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartEntity__Group_8__6__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartEntity__Group_8__6__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_8_6()); }
-
-	'}' 
-
-{ after(grammarAccess.getDatamartEntityAccess().getRightCurlyBracketKeyword_8_6()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-rule__DatamartOwner__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartOwner__Group__0__Impl
-	rule__DatamartOwner__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartOwner__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartOwnerAccess().getManyToOneKeyword_0()); }
-
-	'many to one' 
-
-{ after(grammarAccess.getDatamartOwnerAccess().getManyToOneKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartOwner__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartOwner__Group__1__Impl
-	rule__DatamartOwner__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartOwner__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartOwnerAccess().getJoinRefAssignment_1()); }
-(rule__DatamartOwner__JoinRefAssignment_1)
-{ after(grammarAccess.getDatamartOwnerAccess().getJoinRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartOwner__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartOwner__Group__2__Impl
-	rule__DatamartOwner__Group__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartOwner__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartOwnerAccess().getToKeyword_2()); }
-
-	'to' 
-
-{ after(grammarAccess.getDatamartOwnerAccess().getToKeyword_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartOwner__Group__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartOwner__Group__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartOwner__Group__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartOwnerAccess().getDatamartEntityAssignment_3()); }
-(rule__DatamartOwner__DatamartEntityAssignment_3)
-{ after(grammarAccess.getDatamartOwnerAccess().getDatamartEntityAssignment_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartMember__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartMember__Group__0__Impl
-	rule__DatamartMember__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartMember__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartMemberAccess().getOneToManyKeyword_0()); }
-
-	'one to many' 
-
-{ after(grammarAccess.getDatamartMemberAccess().getOneToManyKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartMember__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartMember__Group__1__Impl
-	rule__DatamartMember__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartMember__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartMemberAccess().getJoinRefAssignment_1()); }
-(rule__DatamartMember__JoinRefAssignment_1)
-{ after(grammarAccess.getDatamartMemberAccess().getJoinRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartMember__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartMember__Group__2__Impl
-	rule__DatamartMember__Group__3
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartMember__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartMemberAccess().getToKeyword_2()); }
-
-	'to' 
-
-{ after(grammarAccess.getDatamartMemberAccess().getToKeyword_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartMember__Group__3
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartMember__Group__3__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartMember__Group__3__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartMemberAccess().getDatamartEntityAssignment_3()); }
-(rule__DatamartMember__DatamartEntityAssignment_3)
-{ after(grammarAccess.getDatamartMemberAccess().getDatamartEntityAssignment_3()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
-
-
-
-
-
-rule__DatamartProperty__Group__0
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartProperty__Group__0__Impl
-	rule__DatamartProperty__Group__1
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartProperty__Group__0__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPropertyAccess().getPropertyKeyword_0()); }
-
-	'property' 
-
-{ after(grammarAccess.getDatamartPropertyAccess().getPropertyKeyword_0()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartProperty__Group__1
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartProperty__Group__1__Impl
-	rule__DatamartProperty__Group__2
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartProperty__Group__1__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPropertyAccess().getPropertyRefAssignment_1()); }
-(rule__DatamartProperty__PropertyRefAssignment_1)
-{ after(grammarAccess.getDatamartPropertyAccess().getPropertyRefAssignment_1()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-rule__DatamartProperty__Group__2
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-	rule__DatamartProperty__Group__2__Impl
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-rule__DatamartProperty__Group__2__Impl
-    @init {
-		int stackSize = keepStackSize();
-    }
-:
-(
-{ before(grammarAccess.getDatamartPropertyAccess().getUnorderedGroup_2()); }
-(rule__DatamartProperty__UnorderedGroup_2)
-{ after(grammarAccess.getDatamartPropertyAccess().getUnorderedGroup_2()); }
-)
-
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
-
-
-
-
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.tokens b/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.tokens
deleted file mode 100644
index f17f041..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.tokens
+++ /dev/null
@@ -1,415 +0,0 @@
-'!'=40
-'!='=22
-'!=='=24
-'#'=175
-'%'=39
-'%='=20
-'&&'=15
-'&'=197
-'('=139
-')'=140
-'*'=36
-'**'=37
-'*='=18
-'+'=34
-'++'=41
-'+='=16
-','=173
-'-'=35
-'--'=42
-'-='=17
-'->'=28
-'.'=43
-'..'=30
-'..<'=29
-'/'=38
-'/='=19
-':'=183
-'::'=211
-';'=179
-'<'=27
-'<='=77
-'<>'=32
-'='=13
-'=='=21
-'==='=23
-'=>'=31
-'>'=26
-'>='=25
-'?'=196
-'?.'=212
-'?:'=33
-'@'=172
-'ActivationTime'=103
-'ActualOwner'=104
-'BusinessAdministrator'=89
-'CreatedBy'=102
-'CreatedOn'=101
-'Description'=99
-'ExcludedOwner'=94
-'ExpirationTime'=100
-'Groups'=109
-'Name'=95
-'PotentialOwner'=90
-'Priority'=96
-'ProcessId'=106
-'ProcessInstanceId'=107
-'ProcessSessionId'=108
-'Recipient'=91
-'Status'=97
-'Subject'=98
-'TaskId'=105
-'TaskInitiator'=92
-'TaskStakeholder'=93
-'Users'=110
-'['=176
-']'=174
-'aggregate'=75
-'and'=138
-'as'=178
-'ascending'=111
-'average'=73
-'axis'=146
-'bottomcount'=70
-'bottompercentage'=72
-'bottomsummation'=71
-'case'=184
-'catch'=195
-'chapters'=56
-'column'=122
-'columns'=52
-'condensed'=206
-'condition'=135
-'conditions'=121
-'count'=79
-'cube'=124
-'datamart'=116
-'decimals'=159
-'default'=51
-'derive'=141
-'derived'=147
-'descending'=112
-'described by'=198
-'detailed'=208
-'deviation'=76
-'do'=186
-'else'=181
-'entity'=126
-'except'=209
-'exploded'=207
-'extends'=45
-'extension'=48
-'false'=50
-'fill'=151
-'filler rows'=130
-'filler-date future'=153
-'filler-date past'=155
-'filler-date range'=156
-'filler-signed-double random'=161
-'filler-signed-double range'=158
-'filler-signed-integer random'=163
-'filler-signed-integer range'=162
-'filler-text paragraps'=165
-'filler-text random'=164
-'filler-text sentences'=166
-'filler-text words'=167
-'filler-unsigned-double random'=169
-'filler-unsigned-double range'=168
-'filler-unsigned-integer random'=171
-'filler-unsigned-integer range'=170
-'filter'=123
-'filtered'=203
-'finally'=193
-'first'=59
-'for'=118
-'from'=142
-'group1'=80
-'group2'=81
-'group3'=82
-'group4'=83
-'group5'=84
-'group6'=85
-'group7'=86
-'group8'=87
-'group9'=88
-'head'=66
-'hierarchy'=149
-'if'=180
-'import'=47
-'instanceof'=177
-'join'=125
-'lag'=61
-'last'=60
-'lead'=62
-'level'=150
-'like'=78
-'many to one'=132
-'measure'=148
-'navigation'=127
-'new'=187
-'next'=58
-'nonempty values'=199
-'null'=188
-'of'=143
-'on axis'=201
-'one to many'=133
-'optional'=204
-'or'=137
-'order'=136
-'ordered by'=210
-'ordering'=129
-'over'=144
-'package'=113
-'pages'=54
-'periods'=64
-'previous'=57
-'properties'=128
-'property'=134
-'return'=191
-'role'=119
-'round to'=160
-'rows'=53
-'scale'=202
-'sections'=55
-'selected'=205
-'slicer'=145
-'static'=46
-'summation'=74
-'super'=49
-'switch'=182
-'synchronized'=194
-'tail'=65
-'task'=120
-'throw'=190
-'to'=131
-'topcount'=67
-'toppercentage'=69
-'topsummation'=68
-'tracking'=200
-'true'=215
-'try'=192
-'typeof'=189
-'up to and including'=157
-'using'=117
-'val'=44
-'var'=214
-'while'=185
-'with'=152
-'year-to-date'=63
-'years'=154
-'{'=114
-'|'=213
-'||'=14
-'}'=115
-RULE_ANY_OTHER=12
-RULE_DECIMAL=8
-RULE_HEX=6
-RULE_ID=4
-RULE_INT=7
-RULE_ML_COMMENT=9
-RULE_SL_COMMENT=10
-RULE_STRING=5
-RULE_WS=11
-T__100=100
-T__101=101
-T__102=102
-T__103=103
-T__104=104
-T__105=105
-T__106=106
-T__107=107
-T__108=108
-T__109=109
-T__110=110
-T__111=111
-T__112=112
-T__113=113
-T__114=114
-T__115=115
-T__116=116
-T__117=117
-T__118=118
-T__119=119
-T__120=120
-T__121=121
-T__122=122
-T__123=123
-T__124=124
-T__125=125
-T__126=126
-T__127=127
-T__128=128
-T__129=129
-T__130=130
-T__131=131
-T__132=132
-T__133=133
-T__134=134
-T__135=135
-T__136=136
-T__137=137
-T__138=138
-T__139=139
-T__13=13
-T__140=140
-T__141=141
-T__142=142
-T__143=143
-T__144=144
-T__145=145
-T__146=146
-T__147=147
-T__148=148
-T__149=149
-T__14=14
-T__150=150
-T__151=151
-T__152=152
-T__153=153
-T__154=154
-T__155=155
-T__156=156
-T__157=157
-T__158=158
-T__159=159
-T__15=15
-T__160=160
-T__161=161
-T__162=162
-T__163=163
-T__164=164
-T__165=165
-T__166=166
-T__167=167
-T__168=168
-T__169=169
-T__16=16
-T__170=170
-T__171=171
-T__172=172
-T__173=173
-T__174=174
-T__175=175
-T__176=176
-T__177=177
-T__178=178
-T__179=179
-T__17=17
-T__180=180
-T__181=181
-T__182=182
-T__183=183
-T__184=184
-T__185=185
-T__186=186
-T__187=187
-T__188=188
-T__189=189
-T__18=18
-T__190=190
-T__191=191
-T__192=192
-T__193=193
-T__194=194
-T__195=195
-T__196=196
-T__197=197
-T__198=198
-T__199=199
-T__19=19
-T__200=200
-T__201=201
-T__202=202
-T__203=203
-T__204=204
-T__205=205
-T__206=206
-T__207=207
-T__208=208
-T__209=209
-T__20=20
-T__210=210
-T__211=211
-T__212=212
-T__213=213
-T__214=214
-T__215=215
-T__21=21
-T__22=22
-T__23=23
-T__24=24
-T__25=25
-T__26=26
-T__27=27
-T__28=28
-T__29=29
-T__30=30
-T__31=31
-T__32=32
-T__33=33
-T__34=34
-T__35=35
-T__36=36
-T__37=37
-T__38=38
-T__39=39
-T__40=40
-T__41=41
-T__42=42
-T__43=43
-T__44=44
-T__45=45
-T__46=46
-T__47=47
-T__48=48
-T__49=49
-T__50=50
-T__51=51
-T__52=52
-T__53=53
-T__54=54
-T__55=55
-T__56=56
-T__57=57
-T__58=58
-T__59=59
-T__60=60
-T__61=61
-T__62=62
-T__63=63
-T__64=64
-T__65=65
-T__66=66
-T__67=67
-T__68=68
-T__69=69
-T__70=70
-T__71=71
-T__72=72
-T__73=73
-T__74=74
-T__75=75
-T__76=76
-T__77=77
-T__78=78
-T__79=79
-T__80=80
-T__81=81
-T__82=82
-T__83=83
-T__84=84
-T__85=85
-T__86=86
-T__87=87
-T__88=88
-T__89=89
-T__90=90
-T__91=91
-T__92=92
-T__93=93
-T__94=94
-T__95=95
-T__96=96
-T__97=97
-T__98=98
-T__99=99
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSLLexer.java b/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSLLexer.java
deleted file mode 100644
index 9a0a3fc..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSLLexer.java
+++ /dev/null
@@ -1,8432 +0,0 @@
-/**
- *                                                                            
- *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-package org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal;
-
-// Hack: Use our own Lexer superclass by means of import. 
-// Currently there is no other way to specify the superclass for the lexer.
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer;
-
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
-@SuppressWarnings("all")
-public class InternalDatamartDSLLexer extends Lexer {
-    public static final int T__144=144;
-    public static final int T__143=143;
-    public static final int T__146=146;
-    public static final int T__50=50;
-    public static final int T__145=145;
-    public static final int T__140=140;
-    public static final int T__142=142;
-    public static final int T__141=141;
-    public static final int T__59=59;
-    public static final int T__55=55;
-    public static final int T__56=56;
-    public static final int T__57=57;
-    public static final int T__58=58;
-    public static final int T__51=51;
-    public static final int T__137=137;
-    public static final int T__52=52;
-    public static final int T__136=136;
-    public static final int T__53=53;
-    public static final int T__139=139;
-    public static final int T__54=54;
-    public static final int T__138=138;
-    public static final int T__133=133;
-    public static final int T__132=132;
-    public static final int T__60=60;
-    public static final int T__135=135;
-    public static final int T__61=61;
-    public static final int T__134=134;
-    public static final int RULE_ID=4;
-    public static final int T__131=131;
-    public static final int T__130=130;
-    public static final int RULE_INT=7;
-    public static final int T__66=66;
-    public static final int T__67=67;
-    public static final int T__129=129;
-    public static final int T__68=68;
-    public static final int T__69=69;
-    public static final int T__62=62;
-    public static final int T__126=126;
-    public static final int T__63=63;
-    public static final int T__125=125;
-    public static final int T__64=64;
-    public static final int T__128=128;
-    public static final int T__65=65;
-    public static final int T__127=127;
-    public static final int T__166=166;
-    public static final int T__165=165;
-    public static final int T__168=168;
-    public static final int T__167=167;
-    public static final int T__162=162;
-    public static final int T__161=161;
-    public static final int T__164=164;
-    public static final int T__163=163;
-    public static final int T__160=160;
-    public static final int T__37=37;
-    public static final int T__38=38;
-    public static final int T__39=39;
-    public static final int T__33=33;
-    public static final int T__34=34;
-    public static final int T__35=35;
-    public static final int T__36=36;
-    public static final int T__159=159;
-    public static final int T__30=30;
-    public static final int T__158=158;
-    public static final int T__31=31;
-    public static final int T__32=32;
-    public static final int T__155=155;
-    public static final int T__154=154;
-    public static final int T__157=157;
-    public static final int T__156=156;
-    public static final int T__151=151;
-    public static final int T__150=150;
-    public static final int T__153=153;
-    public static final int T__152=152;
-    public static final int T__48=48;
-    public static final int T__49=49;
-    public static final int T__44=44;
-    public static final int T__45=45;
-    public static final int T__46=46;
-    public static final int T__47=47;
-    public static final int T__40=40;
-    public static final int T__148=148;
-    public static final int T__41=41;
-    public static final int T__147=147;
-    public static final int T__42=42;
-    public static final int T__43=43;
-    public static final int T__149=149;
-    public static final int T__100=100;
-    public static final int T__102=102;
-    public static final int T__101=101;
-    public static final int T__19=19;
-    public static final int T__15=15;
-    public static final int T__16=16;
-    public static final int T__17=17;
-    public static final int T__18=18;
-    public static final int T__13=13;
-    public static final int T__14=14;
-    public static final int T__214=214;
-    public static final int T__213=213;
-    public static final int T__215=215;
-    public static final int T__210=210;
-    public static final int T__212=212;
-    public static final int T__211=211;
-    public static final int RULE_DECIMAL=8;
-    public static final int T__26=26;
-    public static final int T__27=27;
-    public static final int T__28=28;
-    public static final int T__29=29;
-    public static final int T__22=22;
-    public static final int T__207=207;
-    public static final int T__23=23;
-    public static final int T__206=206;
-    public static final int T__24=24;
-    public static final int T__209=209;
-    public static final int T__25=25;
-    public static final int T__208=208;
-    public static final int T__203=203;
-    public static final int T__202=202;
-    public static final int T__20=20;
-    public static final int T__205=205;
-    public static final int T__21=21;
-    public static final int T__204=204;
-    public static final int T__122=122;
-    public static final int T__121=121;
-    public static final int T__124=124;
-    public static final int T__123=123;
-    public static final int T__120=120;
-    public static final int RULE_SL_COMMENT=10;
-    public static final int T__119=119;
-    public static final int T__118=118;
-    public static final int T__115=115;
-    public static final int EOF=-1;
-    public static final int T__114=114;
-    public static final int T__117=117;
-    public static final int T__116=116;
-    public static final int T__111=111;
-    public static final int T__110=110;
-    public static final int T__113=113;
-    public static final int T__112=112;
-    public static final int T__108=108;
-    public static final int T__107=107;
-    public static final int T__109=109;
-    public static final int T__104=104;
-    public static final int T__103=103;
-    public static final int T__106=106;
-    public static final int T__105=105;
-    public static final int RULE_HEX=6;
-    public static final int RULE_ML_COMMENT=9;
-    public static final int T__201=201;
-    public static final int T__200=200;
-    public static final int T__91=91;
-    public static final int T__188=188;
-    public static final int T__92=92;
-    public static final int T__187=187;
-    public static final int T__93=93;
-    public static final int T__94=94;
-    public static final int T__189=189;
-    public static final int T__184=184;
-    public static final int T__183=183;
-    public static final int T__186=186;
-    public static final int T__90=90;
-    public static final int T__185=185;
-    public static final int T__180=180;
-    public static final int T__182=182;
-    public static final int T__181=181;
-    public static final int T__99=99;
-    public static final int T__95=95;
-    public static final int T__96=96;
-    public static final int T__97=97;
-    public static final int T__98=98;
-    public static final int T__177=177;
-    public static final int T__176=176;
-    public static final int T__179=179;
-    public static final int T__178=178;
-    public static final int T__173=173;
-    public static final int T__172=172;
-    public static final int T__175=175;
-    public static final int T__174=174;
-    public static final int T__171=171;
-    public static final int T__170=170;
-    public static final int T__169=169;
-    public static final int T__70=70;
-    public static final int T__71=71;
-    public static final int T__72=72;
-    public static final int RULE_STRING=5;
-    public static final int T__77=77;
-    public static final int T__78=78;
-    public static final int T__79=79;
-    public static final int T__73=73;
-    public static final int T__74=74;
-    public static final int T__75=75;
-    public static final int T__76=76;
-    public static final int T__80=80;
-    public static final int T__199=199;
-    public static final int T__81=81;
-    public static final int T__198=198;
-    public static final int T__82=82;
-    public static final int T__83=83;
-    public static final int T__195=195;
-    public static final int T__194=194;
-    public static final int RULE_WS=11;
-    public static final int T__197=197;
-    public static final int T__196=196;
-    public static final int T__191=191;
-    public static final int T__190=190;
-    public static final int T__193=193;
-    public static final int T__192=192;
-    public static final int RULE_ANY_OTHER=12;
-    public static final int T__88=88;
-    public static final int T__89=89;
-    public static final int T__84=84;
-    public static final int T__85=85;
-    public static final int T__86=86;
-    public static final int T__87=87;
-
-    // delegates
-    // delegators
-
-    public InternalDatamartDSLLexer() {;} 
-    public InternalDatamartDSLLexer(CharStream input) {
-        this(input, new RecognizerSharedState());
-    }
-    public InternalDatamartDSLLexer(CharStream input, RecognizerSharedState state) {
-        super(input,state);
-
-    }
-    public String getGrammarFileName() { return "../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g"; }
-
-    // $ANTLR start "T__13"
-    public final void mT__13() throws RecognitionException {
-        try {
-            int _type = T__13;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:11:7: ( '=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:11:9: '='
-            {
-            match('='); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__13"
-
-    // $ANTLR start "T__14"
-    public final void mT__14() throws RecognitionException {
-        try {
-            int _type = T__14;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:12:7: ( '||' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:12:9: '||'
-            {
-            match("||"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__14"
-
-    // $ANTLR start "T__15"
-    public final void mT__15() throws RecognitionException {
-        try {
-            int _type = T__15;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:13:7: ( '&&' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:13:9: '&&'
-            {
-            match("&&"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__15"
-
-    // $ANTLR start "T__16"
-    public final void mT__16() throws RecognitionException {
-        try {
-            int _type = T__16;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:14:7: ( '+=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:14:9: '+='
-            {
-            match("+="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__16"
-
-    // $ANTLR start "T__17"
-    public final void mT__17() throws RecognitionException {
-        try {
-            int _type = T__17;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:15:7: ( '-=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:15:9: '-='
-            {
-            match("-="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__17"
-
-    // $ANTLR start "T__18"
-    public final void mT__18() throws RecognitionException {
-        try {
-            int _type = T__18;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:16:7: ( '*=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:16:9: '*='
-            {
-            match("*="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__18"
-
-    // $ANTLR start "T__19"
-    public final void mT__19() throws RecognitionException {
-        try {
-            int _type = T__19;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:17:7: ( '/=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:17:9: '/='
-            {
-            match("/="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__19"
-
-    // $ANTLR start "T__20"
-    public final void mT__20() throws RecognitionException {
-        try {
-            int _type = T__20;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:18:7: ( '%=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:18:9: '%='
-            {
-            match("%="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__20"
-
-    // $ANTLR start "T__21"
-    public final void mT__21() throws RecognitionException {
-        try {
-            int _type = T__21;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:19:7: ( '==' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:19:9: '=='
-            {
-            match("=="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__21"
-
-    // $ANTLR start "T__22"
-    public final void mT__22() throws RecognitionException {
-        try {
-            int _type = T__22;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:20:7: ( '!=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:20:9: '!='
-            {
-            match("!="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__22"
-
-    // $ANTLR start "T__23"
-    public final void mT__23() throws RecognitionException {
-        try {
-            int _type = T__23;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:21:7: ( '===' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:21:9: '==='
-            {
-            match("==="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__23"
-
-    // $ANTLR start "T__24"
-    public final void mT__24() throws RecognitionException {
-        try {
-            int _type = T__24;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:22:7: ( '!==' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:22:9: '!=='
-            {
-            match("!=="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__24"
-
-    // $ANTLR start "T__25"
-    public final void mT__25() throws RecognitionException {
-        try {
-            int _type = T__25;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:23:7: ( '>=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:23:9: '>='
-            {
-            match(">="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__25"
-
-    // $ANTLR start "T__26"
-    public final void mT__26() throws RecognitionException {
-        try {
-            int _type = T__26;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:24:7: ( '>' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:24:9: '>'
-            {
-            match('>'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__26"
-
-    // $ANTLR start "T__27"
-    public final void mT__27() throws RecognitionException {
-        try {
-            int _type = T__27;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:25:7: ( '<' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:25:9: '<'
-            {
-            match('<'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__27"
-
-    // $ANTLR start "T__28"
-    public final void mT__28() throws RecognitionException {
-        try {
-            int _type = T__28;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:26:7: ( '->' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:26:9: '->'
-            {
-            match("->"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__28"
-
-    // $ANTLR start "T__29"
-    public final void mT__29() throws RecognitionException {
-        try {
-            int _type = T__29;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:27:7: ( '..<' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:27:9: '..<'
-            {
-            match("..<"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__29"
-
-    // $ANTLR start "T__30"
-    public final void mT__30() throws RecognitionException {
-        try {
-            int _type = T__30;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:28:7: ( '..' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:28:9: '..'
-            {
-            match(".."); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__30"
-
-    // $ANTLR start "T__31"
-    public final void mT__31() throws RecognitionException {
-        try {
-            int _type = T__31;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:29:7: ( '=>' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:29:9: '=>'
-            {
-            match("=>"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__31"
-
-    // $ANTLR start "T__32"
-    public final void mT__32() throws RecognitionException {
-        try {
-            int _type = T__32;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:30:7: ( '<>' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:30:9: '<>'
-            {
-            match("<>"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__32"
-
-    // $ANTLR start "T__33"
-    public final void mT__33() throws RecognitionException {
-        try {
-            int _type = T__33;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:31:7: ( '?:' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:31:9: '?:'
-            {
-            match("?:"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__33"
-
-    // $ANTLR start "T__34"
-    public final void mT__34() throws RecognitionException {
-        try {
-            int _type = T__34;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:32:7: ( '+' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:32:9: '+'
-            {
-            match('+'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__34"
-
-    // $ANTLR start "T__35"
-    public final void mT__35() throws RecognitionException {
-        try {
-            int _type = T__35;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:33:7: ( '-' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:33:9: '-'
-            {
-            match('-'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__35"
-
-    // $ANTLR start "T__36"
-    public final void mT__36() throws RecognitionException {
-        try {
-            int _type = T__36;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:34:7: ( '*' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:34:9: '*'
-            {
-            match('*'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__36"
-
-    // $ANTLR start "T__37"
-    public final void mT__37() throws RecognitionException {
-        try {
-            int _type = T__37;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:35:7: ( '**' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:35:9: '**'
-            {
-            match("**"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__37"
-
-    // $ANTLR start "T__38"
-    public final void mT__38() throws RecognitionException {
-        try {
-            int _type = T__38;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:36:7: ( '/' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:36:9: '/'
-            {
-            match('/'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__38"
-
-    // $ANTLR start "T__39"
-    public final void mT__39() throws RecognitionException {
-        try {
-            int _type = T__39;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37:7: ( '%' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37:9: '%'
-            {
-            match('%'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__39"
-
-    // $ANTLR start "T__40"
-    public final void mT__40() throws RecognitionException {
-        try {
-            int _type = T__40;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:38:7: ( '!' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:38:9: '!'
-            {
-            match('!'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__40"
-
-    // $ANTLR start "T__41"
-    public final void mT__41() throws RecognitionException {
-        try {
-            int _type = T__41;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:39:7: ( '++' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:39:9: '++'
-            {
-            match("++"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__41"
-
-    // $ANTLR start "T__42"
-    public final void mT__42() throws RecognitionException {
-        try {
-            int _type = T__42;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:40:7: ( '--' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:40:9: '--'
-            {
-            match("--"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__42"
-
-    // $ANTLR start "T__43"
-    public final void mT__43() throws RecognitionException {
-        try {
-            int _type = T__43;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:41:7: ( '.' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:41:9: '.'
-            {
-            match('.'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__43"
-
-    // $ANTLR start "T__44"
-    public final void mT__44() throws RecognitionException {
-        try {
-            int _type = T__44;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:42:7: ( 'val' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:42:9: 'val'
-            {
-            match("val"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__44"
-
-    // $ANTLR start "T__45"
-    public final void mT__45() throws RecognitionException {
-        try {
-            int _type = T__45;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:43:7: ( 'extends' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:43:9: 'extends'
-            {
-            match("extends"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__45"
-
-    // $ANTLR start "T__46"
-    public final void mT__46() throws RecognitionException {
-        try {
-            int _type = T__46;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:44:7: ( 'static' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:44:9: 'static'
-            {
-            match("static"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__46"
-
-    // $ANTLR start "T__47"
-    public final void mT__47() throws RecognitionException {
-        try {
-            int _type = T__47;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:45:7: ( 'import' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:45:9: 'import'
-            {
-            match("import"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__47"
-
-    // $ANTLR start "T__48"
-    public final void mT__48() throws RecognitionException {
-        try {
-            int _type = T__48;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:46:7: ( 'extension' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:46:9: 'extension'
-            {
-            match("extension"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__48"
-
-    // $ANTLR start "T__49"
-    public final void mT__49() throws RecognitionException {
-        try {
-            int _type = T__49;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:47:7: ( 'super' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:47:9: 'super'
-            {
-            match("super"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__49"
-
-    // $ANTLR start "T__50"
-    public final void mT__50() throws RecognitionException {
-        try {
-            int _type = T__50;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:48:7: ( 'false' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:48:9: 'false'
-            {
-            match("false"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__50"
-
-    // $ANTLR start "T__51"
-    public final void mT__51() throws RecognitionException {
-        try {
-            int _type = T__51;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:49:7: ( 'default' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:49:9: 'default'
-            {
-            match("default"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__51"
-
-    // $ANTLR start "T__52"
-    public final void mT__52() throws RecognitionException {
-        try {
-            int _type = T__52;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:50:7: ( 'columns' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:50:9: 'columns'
-            {
-            match("columns"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__52"
-
-    // $ANTLR start "T__53"
-    public final void mT__53() throws RecognitionException {
-        try {
-            int _type = T__53;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:51:7: ( 'rows' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:51:9: 'rows'
-            {
-            match("rows"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__53"
-
-    // $ANTLR start "T__54"
-    public final void mT__54() throws RecognitionException {
-        try {
-            int _type = T__54;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:52:7: ( 'pages' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:52:9: 'pages'
-            {
-            match("pages"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__54"
-
-    // $ANTLR start "T__55"
-    public final void mT__55() throws RecognitionException {
-        try {
-            int _type = T__55;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:53:7: ( 'sections' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:53:9: 'sections'
-            {
-            match("sections"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__55"
-
-    // $ANTLR start "T__56"
-    public final void mT__56() throws RecognitionException {
-        try {
-            int _type = T__56;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:54:7: ( 'chapters' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:54:9: 'chapters'
-            {
-            match("chapters"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__56"
-
-    // $ANTLR start "T__57"
-    public final void mT__57() throws RecognitionException {
-        try {
-            int _type = T__57;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:55:7: ( 'previous' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:55:9: 'previous'
-            {
-            match("previous"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__57"
-
-    // $ANTLR start "T__58"
-    public final void mT__58() throws RecognitionException {
-        try {
-            int _type = T__58;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:56:7: ( 'next' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:56:9: 'next'
-            {
-            match("next"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__58"
-
-    // $ANTLR start "T__59"
-    public final void mT__59() throws RecognitionException {
-        try {
-            int _type = T__59;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:57:7: ( 'first' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:57:9: 'first'
-            {
-            match("first"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__59"
-
-    // $ANTLR start "T__60"
-    public final void mT__60() throws RecognitionException {
-        try {
-            int _type = T__60;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:58:7: ( 'last' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:58:9: 'last'
-            {
-            match("last"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__60"
-
-    // $ANTLR start "T__61"
-    public final void mT__61() throws RecognitionException {
-        try {
-            int _type = T__61;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:59:7: ( 'lag' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:59:9: 'lag'
-            {
-            match("lag"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__61"
-
-    // $ANTLR start "T__62"
-    public final void mT__62() throws RecognitionException {
-        try {
-            int _type = T__62;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:60:7: ( 'lead' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:60:9: 'lead'
-            {
-            match("lead"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__62"
-
-    // $ANTLR start "T__63"
-    public final void mT__63() throws RecognitionException {
-        try {
-            int _type = T__63;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:61:7: ( 'year-to-date' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:61:9: 'year-to-date'
-            {
-            match("year-to-date"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__63"
-
-    // $ANTLR start "T__64"
-    public final void mT__64() throws RecognitionException {
-        try {
-            int _type = T__64;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:62:7: ( 'periods' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:62:9: 'periods'
-            {
-            match("periods"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__64"
-
-    // $ANTLR start "T__65"
-    public final void mT__65() throws RecognitionException {
-        try {
-            int _type = T__65;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:63:7: ( 'tail' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:63:9: 'tail'
-            {
-            match("tail"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__65"
-
-    // $ANTLR start "T__66"
-    public final void mT__66() throws RecognitionException {
-        try {
-            int _type = T__66;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:64:7: ( 'head' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:64:9: 'head'
-            {
-            match("head"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__66"
-
-    // $ANTLR start "T__67"
-    public final void mT__67() throws RecognitionException {
-        try {
-            int _type = T__67;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:65:7: ( 'topcount' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:65:9: 'topcount'
-            {
-            match("topcount"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__67"
-
-    // $ANTLR start "T__68"
-    public final void mT__68() throws RecognitionException {
-        try {
-            int _type = T__68;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:66:7: ( 'topsummation' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:66:9: 'topsummation'
-            {
-            match("topsummation"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__68"
-
-    // $ANTLR start "T__69"
-    public final void mT__69() throws RecognitionException {
-        try {
-            int _type = T__69;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:67:7: ( 'toppercentage' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:67:9: 'toppercentage'
-            {
-            match("toppercentage"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__69"
-
-    // $ANTLR start "T__70"
-    public final void mT__70() throws RecognitionException {
-        try {
-            int _type = T__70;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:68:7: ( 'bottomcount' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:68:9: 'bottomcount'
-            {
-            match("bottomcount"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__70"
-
-    // $ANTLR start "T__71"
-    public final void mT__71() throws RecognitionException {
-        try {
-            int _type = T__71;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:69:7: ( 'bottomsummation' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:69:9: 'bottomsummation'
-            {
-            match("bottomsummation"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__71"
-
-    // $ANTLR start "T__72"
-    public final void mT__72() throws RecognitionException {
-        try {
-            int _type = T__72;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:70:7: ( 'bottompercentage' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:70:9: 'bottompercentage'
-            {
-            match("bottompercentage"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__72"
-
-    // $ANTLR start "T__73"
-    public final void mT__73() throws RecognitionException {
-        try {
-            int _type = T__73;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:71:7: ( 'average' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:71:9: 'average'
-            {
-            match("average"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__73"
-
-    // $ANTLR start "T__74"
-    public final void mT__74() throws RecognitionException {
-        try {
-            int _type = T__74;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:72:7: ( 'summation' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:72:9: 'summation'
-            {
-            match("summation"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__74"
-
-    // $ANTLR start "T__75"
-    public final void mT__75() throws RecognitionException {
-        try {
-            int _type = T__75;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:73:7: ( 'aggregate' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:73:9: 'aggregate'
-            {
-            match("aggregate"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__75"
-
-    // $ANTLR start "T__76"
-    public final void mT__76() throws RecognitionException {
-        try {
-            int _type = T__76;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:74:7: ( 'deviation' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:74:9: 'deviation'
-            {
-            match("deviation"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__76"
-
-    // $ANTLR start "T__77"
-    public final void mT__77() throws RecognitionException {
-        try {
-            int _type = T__77;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:75:7: ( '<=' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:75:9: '<='
-            {
-            match("<="); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__77"
-
-    // $ANTLR start "T__78"
-    public final void mT__78() throws RecognitionException {
-        try {
-            int _type = T__78;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:76:7: ( 'like' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:76:9: 'like'
-            {
-            match("like"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__78"
-
-    // $ANTLR start "T__79"
-    public final void mT__79() throws RecognitionException {
-        try {
-            int _type = T__79;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:77:7: ( 'count' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:77:9: 'count'
-            {
-            match("count"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__79"
-
-    // $ANTLR start "T__80"
-    public final void mT__80() throws RecognitionException {
-        try {
-            int _type = T__80;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:78:7: ( 'group1' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:78:9: 'group1'
-            {
-            match("group1"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__80"
-
-    // $ANTLR start "T__81"
-    public final void mT__81() throws RecognitionException {
-        try {
-            int _type = T__81;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:79:7: ( 'group2' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:79:9: 'group2'
-            {
-            match("group2"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__81"
-
-    // $ANTLR start "T__82"
-    public final void mT__82() throws RecognitionException {
-        try {
-            int _type = T__82;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:80:7: ( 'group3' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:80:9: 'group3'
-            {
-            match("group3"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__82"
-
-    // $ANTLR start "T__83"
-    public final void mT__83() throws RecognitionException {
-        try {
-            int _type = T__83;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:81:7: ( 'group4' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:81:9: 'group4'
-            {
-            match("group4"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__83"
-
-    // $ANTLR start "T__84"
-    public final void mT__84() throws RecognitionException {
-        try {
-            int _type = T__84;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:82:7: ( 'group5' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:82:9: 'group5'
-            {
-            match("group5"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__84"
-
-    // $ANTLR start "T__85"
-    public final void mT__85() throws RecognitionException {
-        try {
-            int _type = T__85;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:83:7: ( 'group6' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:83:9: 'group6'
-            {
-            match("group6"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__85"
-
-    // $ANTLR start "T__86"
-    public final void mT__86() throws RecognitionException {
-        try {
-            int _type = T__86;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:84:7: ( 'group7' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:84:9: 'group7'
-            {
-            match("group7"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__86"
-
-    // $ANTLR start "T__87"
-    public final void mT__87() throws RecognitionException {
-        try {
-            int _type = T__87;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:85:7: ( 'group8' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:85:9: 'group8'
-            {
-            match("group8"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__87"
-
-    // $ANTLR start "T__88"
-    public final void mT__88() throws RecognitionException {
-        try {
-            int _type = T__88;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:86:7: ( 'group9' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:86:9: 'group9'
-            {
-            match("group9"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__88"
-
-    // $ANTLR start "T__89"
-    public final void mT__89() throws RecognitionException {
-        try {
-            int _type = T__89;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:87:7: ( 'BusinessAdministrator' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:87:9: 'BusinessAdministrator'
-            {
-            match("BusinessAdministrator"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__89"
-
-    // $ANTLR start "T__90"
-    public final void mT__90() throws RecognitionException {
-        try {
-            int _type = T__90;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:88:7: ( 'PotentialOwner' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:88:9: 'PotentialOwner'
-            {
-            match("PotentialOwner"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__90"
-
-    // $ANTLR start "T__91"
-    public final void mT__91() throws RecognitionException {
-        try {
-            int _type = T__91;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:89:7: ( 'Recipient' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:89:9: 'Recipient'
-            {
-            match("Recipient"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__91"
-
-    // $ANTLR start "T__92"
-    public final void mT__92() throws RecognitionException {
-        try {
-            int _type = T__92;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:90:7: ( 'TaskInitiator' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:90:9: 'TaskInitiator'
-            {
-            match("TaskInitiator"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__92"
-
-    // $ANTLR start "T__93"
-    public final void mT__93() throws RecognitionException {
-        try {
-            int _type = T__93;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:91:7: ( 'TaskStakeholder' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:91:9: 'TaskStakeholder'
-            {
-            match("TaskStakeholder"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__93"
-
-    // $ANTLR start "T__94"
-    public final void mT__94() throws RecognitionException {
-        try {
-            int _type = T__94;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:92:7: ( 'ExcludedOwner' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:92:9: 'ExcludedOwner'
-            {
-            match("ExcludedOwner"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__94"
-
-    // $ANTLR start "T__95"
-    public final void mT__95() throws RecognitionException {
-        try {
-            int _type = T__95;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:93:7: ( 'Name' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:93:9: 'Name'
-            {
-            match("Name"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__95"
-
-    // $ANTLR start "T__96"
-    public final void mT__96() throws RecognitionException {
-        try {
-            int _type = T__96;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:94:7: ( 'Priority' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:94:9: 'Priority'
-            {
-            match("Priority"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__96"
-
-    // $ANTLR start "T__97"
-    public final void mT__97() throws RecognitionException {
-        try {
-            int _type = T__97;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:95:7: ( 'Status' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:95:9: 'Status'
-            {
-            match("Status"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__97"
-
-    // $ANTLR start "T__98"
-    public final void mT__98() throws RecognitionException {
-        try {
-            int _type = T__98;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:96:7: ( 'Subject' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:96:9: 'Subject'
-            {
-            match("Subject"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__98"
-
-    // $ANTLR start "T__99"
-    public final void mT__99() throws RecognitionException {
-        try {
-            int _type = T__99;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:97:7: ( 'Description' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:97:9: 'Description'
-            {
-            match("Description"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__99"
-
-    // $ANTLR start "T__100"
-    public final void mT__100() throws RecognitionException {
-        try {
-            int _type = T__100;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:98:8: ( 'ExpirationTime' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:98:10: 'ExpirationTime'
-            {
-            match("ExpirationTime"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__100"
-
-    // $ANTLR start "T__101"
-    public final void mT__101() throws RecognitionException {
-        try {
-            int _type = T__101;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:99:8: ( 'CreatedOn' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:99:10: 'CreatedOn'
-            {
-            match("CreatedOn"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__101"
-
-    // $ANTLR start "T__102"
-    public final void mT__102() throws RecognitionException {
-        try {
-            int _type = T__102;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:100:8: ( 'CreatedBy' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:100:10: 'CreatedBy'
-            {
-            match("CreatedBy"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__102"
-
-    // $ANTLR start "T__103"
-    public final void mT__103() throws RecognitionException {
-        try {
-            int _type = T__103;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:101:8: ( 'ActivationTime' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:101:10: 'ActivationTime'
-            {
-            match("ActivationTime"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__103"
-
-    // $ANTLR start "T__104"
-    public final void mT__104() throws RecognitionException {
-        try {
-            int _type = T__104;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:102:8: ( 'ActualOwner' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:102:10: 'ActualOwner'
-            {
-            match("ActualOwner"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__104"
-
-    // $ANTLR start "T__105"
-    public final void mT__105() throws RecognitionException {
-        try {
-            int _type = T__105;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:103:8: ( 'TaskId' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:103:10: 'TaskId'
-            {
-            match("TaskId"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__105"
-
-    // $ANTLR start "T__106"
-    public final void mT__106() throws RecognitionException {
-        try {
-            int _type = T__106;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:104:8: ( 'ProcessId' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:104:10: 'ProcessId'
-            {
-            match("ProcessId"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__106"
-
-    // $ANTLR start "T__107"
-    public final void mT__107() throws RecognitionException {
-        try {
-            int _type = T__107;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:105:8: ( 'ProcessInstanceId' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:105:10: 'ProcessInstanceId'
-            {
-            match("ProcessInstanceId"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__107"
-
-    // $ANTLR start "T__108"
-    public final void mT__108() throws RecognitionException {
-        try {
-            int _type = T__108;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:106:8: ( 'ProcessSessionId' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:106:10: 'ProcessSessionId'
-            {
-            match("ProcessSessionId"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__108"
-
-    // $ANTLR start "T__109"
-    public final void mT__109() throws RecognitionException {
-        try {
-            int _type = T__109;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:107:8: ( 'Groups' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:107:10: 'Groups'
-            {
-            match("Groups"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__109"
-
-    // $ANTLR start "T__110"
-    public final void mT__110() throws RecognitionException {
-        try {
-            int _type = T__110;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:108:8: ( 'Users' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:108:10: 'Users'
-            {
-            match("Users"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__110"
-
-    // $ANTLR start "T__111"
-    public final void mT__111() throws RecognitionException {
-        try {
-            int _type = T__111;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:109:8: ( 'ascending' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:109:10: 'ascending'
-            {
-            match("ascending"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__111"
-
-    // $ANTLR start "T__112"
-    public final void mT__112() throws RecognitionException {
-        try {
-            int _type = T__112;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:110:8: ( 'descending' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:110:10: 'descending'
-            {
-            match("descending"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__112"
-
-    // $ANTLR start "T__113"
-    public final void mT__113() throws RecognitionException {
-        try {
-            int _type = T__113;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:111:8: ( 'package' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:111:10: 'package'
-            {
-            match("package"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__113"
-
-    // $ANTLR start "T__114"
-    public final void mT__114() throws RecognitionException {
-        try {
-            int _type = T__114;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:112:8: ( '{' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:112:10: '{'
-            {
-            match('{'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__114"
-
-    // $ANTLR start "T__115"
-    public final void mT__115() throws RecognitionException {
-        try {
-            int _type = T__115;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:113:8: ( '}' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:113:10: '}'
-            {
-            match('}'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__115"
-
-    // $ANTLR start "T__116"
-    public final void mT__116() throws RecognitionException {
-        try {
-            int _type = T__116;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:114:8: ( 'datamart' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:114:10: 'datamart'
-            {
-            match("datamart"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__116"
-
-    // $ANTLR start "T__117"
-    public final void mT__117() throws RecognitionException {
-        try {
-            int _type = T__117;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:115:8: ( 'using' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:115:10: 'using'
-            {
-            match("using"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__117"
-
-    // $ANTLR start "T__118"
-    public final void mT__118() throws RecognitionException {
-        try {
-            int _type = T__118;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:116:8: ( 'for' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:116:10: 'for'
-            {
-            match("for"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__118"
-
-    // $ANTLR start "T__119"
-    public final void mT__119() throws RecognitionException {
-        try {
-            int _type = T__119;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:117:8: ( 'role' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:117:10: 'role'
-            {
-            match("role"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__119"
-
-    // $ANTLR start "T__120"
-    public final void mT__120() throws RecognitionException {
-        try {
-            int _type = T__120;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:118:8: ( 'task' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:118:10: 'task'
-            {
-            match("task"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__120"
-
-    // $ANTLR start "T__121"
-    public final void mT__121() throws RecognitionException {
-        try {
-            int _type = T__121;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:119:8: ( 'conditions' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:119:10: 'conditions'
-            {
-            match("conditions"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__121"
-
-    // $ANTLR start "T__122"
-    public final void mT__122() throws RecognitionException {
-        try {
-            int _type = T__122;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:120:8: ( 'column' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:120:10: 'column'
-            {
-            match("column"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__122"
-
-    // $ANTLR start "T__123"
-    public final void mT__123() throws RecognitionException {
-        try {
-            int _type = T__123;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:121:8: ( 'filter' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:121:10: 'filter'
-            {
-            match("filter"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__123"
-
-    // $ANTLR start "T__124"
-    public final void mT__124() throws RecognitionException {
-        try {
-            int _type = T__124;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:122:8: ( 'cube' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:122:10: 'cube'
-            {
-            match("cube"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__124"
-
-    // $ANTLR start "T__125"
-    public final void mT__125() throws RecognitionException {
-        try {
-            int _type = T__125;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:123:8: ( 'join' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:123:10: 'join'
-            {
-            match("join"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__125"
-
-    // $ANTLR start "T__126"
-    public final void mT__126() throws RecognitionException {
-        try {
-            int _type = T__126;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:124:8: ( 'entity' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:124:10: 'entity'
-            {
-            match("entity"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__126"
-
-    // $ANTLR start "T__127"
-    public final void mT__127() throws RecognitionException {
-        try {
-            int _type = T__127;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:125:8: ( 'navigation' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:125:10: 'navigation'
-            {
-            match("navigation"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__127"
-
-    // $ANTLR start "T__128"
-    public final void mT__128() throws RecognitionException {
-        try {
-            int _type = T__128;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:126:8: ( 'properties' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:126:10: 'properties'
-            {
-            match("properties"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__128"
-
-    // $ANTLR start "T__129"
-    public final void mT__129() throws RecognitionException {
-        try {
-            int _type = T__129;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:127:8: ( 'ordering' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:127:10: 'ordering'
-            {
-            match("ordering"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__129"
-
-    // $ANTLR start "T__130"
-    public final void mT__130() throws RecognitionException {
-        try {
-            int _type = T__130;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:128:8: ( 'filler rows' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:128:10: 'filler rows'
-            {
-            match("filler rows"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__130"
-
-    // $ANTLR start "T__131"
-    public final void mT__131() throws RecognitionException {
-        try {
-            int _type = T__131;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:129:8: ( 'to' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:129:10: 'to'
-            {
-            match("to"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__131"
-
-    // $ANTLR start "T__132"
-    public final void mT__132() throws RecognitionException {
-        try {
-            int _type = T__132;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:130:8: ( 'many to one' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:130:10: 'many to one'
-            {
-            match("many to one"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__132"
-
-    // $ANTLR start "T__133"
-    public final void mT__133() throws RecognitionException {
-        try {
-            int _type = T__133;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:131:8: ( 'one to many' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:131:10: 'one to many'
-            {
-            match("one to many"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__133"
-
-    // $ANTLR start "T__134"
-    public final void mT__134() throws RecognitionException {
-        try {
-            int _type = T__134;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:132:8: ( 'property' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:132:10: 'property'
-            {
-            match("property"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__134"
-
-    // $ANTLR start "T__135"
-    public final void mT__135() throws RecognitionException {
-        try {
-            int _type = T__135;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:133:8: ( 'condition' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:133:10: 'condition'
-            {
-            match("condition"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__135"
-
-    // $ANTLR start "T__136"
-    public final void mT__136() throws RecognitionException {
-        try {
-            int _type = T__136;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:134:8: ( 'order' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:134:10: 'order'
-            {
-            match("order"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__136"
-
-    // $ANTLR start "T__137"
-    public final void mT__137() throws RecognitionException {
-        try {
-            int _type = T__137;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:135:8: ( 'or' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:135:10: 'or'
-            {
-            match("or"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__137"
-
-    // $ANTLR start "T__138"
-    public final void mT__138() throws RecognitionException {
-        try {
-            int _type = T__138;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:136:8: ( 'and' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:136:10: 'and'
-            {
-            match("and"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__138"
-
-    // $ANTLR start "T__139"
-    public final void mT__139() throws RecognitionException {
-        try {
-            int _type = T__139;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:137:8: ( '(' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:137:10: '('
-            {
-            match('('); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__139"
-
-    // $ANTLR start "T__140"
-    public final void mT__140() throws RecognitionException {
-        try {
-            int _type = T__140;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:138:8: ( ')' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:138:10: ')'
-            {
-            match(')'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__140"
-
-    // $ANTLR start "T__141"
-    public final void mT__141() throws RecognitionException {
-        try {
-            int _type = T__141;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:139:8: ( 'derive' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:139:10: 'derive'
-            {
-            match("derive"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__141"
-
-    // $ANTLR start "T__142"
-    public final void mT__142() throws RecognitionException {
-        try {
-            int _type = T__142;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:140:8: ( 'from' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:140:10: 'from'
-            {
-            match("from"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__142"
-
-    // $ANTLR start "T__143"
-    public final void mT__143() throws RecognitionException {
-        try {
-            int _type = T__143;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:141:8: ( 'of' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:141:10: 'of'
-            {
-            match("of"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__143"
-
-    // $ANTLR start "T__144"
-    public final void mT__144() throws RecognitionException {
-        try {
-            int _type = T__144;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:142:8: ( 'over' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:142:10: 'over'
-            {
-            match("over"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__144"
-
-    // $ANTLR start "T__145"
-    public final void mT__145() throws RecognitionException {
-        try {
-            int _type = T__145;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:143:8: ( 'slicer' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:143:10: 'slicer'
-            {
-            match("slicer"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__145"
-
-    // $ANTLR start "T__146"
-    public final void mT__146() throws RecognitionException {
-        try {
-            int _type = T__146;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:144:8: ( 'axis' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:144:10: 'axis'
-            {
-            match("axis"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__146"
-
-    // $ANTLR start "T__147"
-    public final void mT__147() throws RecognitionException {
-        try {
-            int _type = T__147;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:145:8: ( 'derived' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:145:10: 'derived'
-            {
-            match("derived"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__147"
-
-    // $ANTLR start "T__148"
-    public final void mT__148() throws RecognitionException {
-        try {
-            int _type = T__148;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:146:8: ( 'measure' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:146:10: 'measure'
-            {
-            match("measure"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__148"
-
-    // $ANTLR start "T__149"
-    public final void mT__149() throws RecognitionException {
-        try {
-            int _type = T__149;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:147:8: ( 'hierarchy' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:147:10: 'hierarchy'
-            {
-            match("hierarchy"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__149"
-
-    // $ANTLR start "T__150"
-    public final void mT__150() throws RecognitionException {
-        try {
-            int _type = T__150;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:148:8: ( 'level' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:148:10: 'level'
-            {
-            match("level"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__150"
-
-    // $ANTLR start "T__151"
-    public final void mT__151() throws RecognitionException {
-        try {
-            int _type = T__151;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:149:8: ( 'fill' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:149:10: 'fill'
-            {
-            match("fill"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__151"
-
-    // $ANTLR start "T__152"
-    public final void mT__152() throws RecognitionException {
-        try {
-            int _type = T__152;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:150:8: ( 'with' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:150:10: 'with'
-            {
-            match("with"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__152"
-
-    // $ANTLR start "T__153"
-    public final void mT__153() throws RecognitionException {
-        try {
-            int _type = T__153;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:151:8: ( 'filler-date future' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:151:10: 'filler-date future'
-            {
-            match("filler-date future"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__153"
-
-    // $ANTLR start "T__154"
-    public final void mT__154() throws RecognitionException {
-        try {
-            int _type = T__154;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:152:8: ( 'years' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:152:10: 'years'
-            {
-            match("years"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__154"
-
-    // $ANTLR start "T__155"
-    public final void mT__155() throws RecognitionException {
-        try {
-            int _type = T__155;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:153:8: ( 'filler-date past' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:153:10: 'filler-date past'
-            {
-            match("filler-date past"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__155"
-
-    // $ANTLR start "T__156"
-    public final void mT__156() throws RecognitionException {
-        try {
-            int _type = T__156;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:154:8: ( 'filler-date range' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:154:10: 'filler-date range'
-            {
-            match("filler-date range"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__156"
-
-    // $ANTLR start "T__157"
-    public final void mT__157() throws RecognitionException {
-        try {
-            int _type = T__157;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:155:8: ( 'up to and including' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:155:10: 'up to and including'
-            {
-            match("up to and including"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__157"
-
-    // $ANTLR start "T__158"
-    public final void mT__158() throws RecognitionException {
-        try {
-            int _type = T__158;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:156:8: ( 'filler-signed-double range' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:156:10: 'filler-signed-double range'
-            {
-            match("filler-signed-double range"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__158"
-
-    // $ANTLR start "T__159"
-    public final void mT__159() throws RecognitionException {
-        try {
-            int _type = T__159;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:157:8: ( 'decimals' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:157:10: 'decimals'
-            {
-            match("decimals"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__159"
-
-    // $ANTLR start "T__160"
-    public final void mT__160() throws RecognitionException {
-        try {
-            int _type = T__160;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:158:8: ( 'round to' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:158:10: 'round to'
-            {
-            match("round to"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__160"
-
-    // $ANTLR start "T__161"
-    public final void mT__161() throws RecognitionException {
-        try {
-            int _type = T__161;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:159:8: ( 'filler-signed-double random' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:159:10: 'filler-signed-double random'
-            {
-            match("filler-signed-double random"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__161"
-
-    // $ANTLR start "T__162"
-    public final void mT__162() throws RecognitionException {
-        try {
-            int _type = T__162;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:160:8: ( 'filler-signed-integer range' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:160:10: 'filler-signed-integer range'
-            {
-            match("filler-signed-integer range"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__162"
-
-    // $ANTLR start "T__163"
-    public final void mT__163() throws RecognitionException {
-        try {
-            int _type = T__163;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:161:8: ( 'filler-signed-integer random' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:161:10: 'filler-signed-integer random'
-            {
-            match("filler-signed-integer random"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__163"
-
-    // $ANTLR start "T__164"
-    public final void mT__164() throws RecognitionException {
-        try {
-            int _type = T__164;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:162:8: ( 'filler-text random' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:162:10: 'filler-text random'
-            {
-            match("filler-text random"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__164"
-
-    // $ANTLR start "T__165"
-    public final void mT__165() throws RecognitionException {
-        try {
-            int _type = T__165;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:163:8: ( 'filler-text paragraps' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:163:10: 'filler-text paragraps'
-            {
-            match("filler-text paragraps"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__165"
-
-    // $ANTLR start "T__166"
-    public final void mT__166() throws RecognitionException {
-        try {
-            int _type = T__166;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:164:8: ( 'filler-text sentences' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:164:10: 'filler-text sentences'
-            {
-            match("filler-text sentences"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__166"
-
-    // $ANTLR start "T__167"
-    public final void mT__167() throws RecognitionException {
-        try {
-            int _type = T__167;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:165:8: ( 'filler-text words' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:165:10: 'filler-text words'
-            {
-            match("filler-text words"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__167"
-
-    // $ANTLR start "T__168"
-    public final void mT__168() throws RecognitionException {
-        try {
-            int _type = T__168;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:166:8: ( 'filler-unsigned-double range' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:166:10: 'filler-unsigned-double range'
-            {
-            match("filler-unsigned-double range"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__168"
-
-    // $ANTLR start "T__169"
-    public final void mT__169() throws RecognitionException {
-        try {
-            int _type = T__169;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:167:8: ( 'filler-unsigned-double random' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:167:10: 'filler-unsigned-double random'
-            {
-            match("filler-unsigned-double random"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__169"
-
-    // $ANTLR start "T__170"
-    public final void mT__170() throws RecognitionException {
-        try {
-            int _type = T__170;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:168:8: ( 'filler-unsigned-integer range' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:168:10: 'filler-unsigned-integer range'
-            {
-            match("filler-unsigned-integer range"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__170"
-
-    // $ANTLR start "T__171"
-    public final void mT__171() throws RecognitionException {
-        try {
-            int _type = T__171;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:169:8: ( 'filler-unsigned-integer random' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:169:10: 'filler-unsigned-integer random'
-            {
-            match("filler-unsigned-integer random"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__171"
-
-    // $ANTLR start "T__172"
-    public final void mT__172() throws RecognitionException {
-        try {
-            int _type = T__172;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:170:8: ( '@' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:170:10: '@'
-            {
-            match('@'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__172"
-
-    // $ANTLR start "T__173"
-    public final void mT__173() throws RecognitionException {
-        try {
-            int _type = T__173;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:171:8: ( ',' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:171:10: ','
-            {
-            match(','); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__173"
-
-    // $ANTLR start "T__174"
-    public final void mT__174() throws RecognitionException {
-        try {
-            int _type = T__174;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:172:8: ( ']' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:172:10: ']'
-            {
-            match(']'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__174"
-
-    // $ANTLR start "T__175"
-    public final void mT__175() throws RecognitionException {
-        try {
-            int _type = T__175;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:173:8: ( '#' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:173:10: '#'
-            {
-            match('#'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__175"
-
-    // $ANTLR start "T__176"
-    public final void mT__176() throws RecognitionException {
-        try {
-            int _type = T__176;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:174:8: ( '[' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:174:10: '['
-            {
-            match('['); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__176"
-
-    // $ANTLR start "T__177"
-    public final void mT__177() throws RecognitionException {
-        try {
-            int _type = T__177;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:175:8: ( 'instanceof' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:175:10: 'instanceof'
-            {
-            match("instanceof"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__177"
-
-    // $ANTLR start "T__178"
-    public final void mT__178() throws RecognitionException {
-        try {
-            int _type = T__178;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:176:8: ( 'as' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:176:10: 'as'
-            {
-            match("as"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__178"
-
-    // $ANTLR start "T__179"
-    public final void mT__179() throws RecognitionException {
-        try {
-            int _type = T__179;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:177:8: ( ';' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:177:10: ';'
-            {
-            match(';'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__179"
-
-    // $ANTLR start "T__180"
-    public final void mT__180() throws RecognitionException {
-        try {
-            int _type = T__180;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:178:8: ( 'if' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:178:10: 'if'
-            {
-            match("if"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__180"
-
-    // $ANTLR start "T__181"
-    public final void mT__181() throws RecognitionException {
-        try {
-            int _type = T__181;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:179:8: ( 'else' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:179:10: 'else'
-            {
-            match("else"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__181"
-
-    // $ANTLR start "T__182"
-    public final void mT__182() throws RecognitionException {
-        try {
-            int _type = T__182;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:180:8: ( 'switch' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:180:10: 'switch'
-            {
-            match("switch"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__182"
-
-    // $ANTLR start "T__183"
-    public final void mT__183() throws RecognitionException {
-        try {
-            int _type = T__183;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:181:8: ( ':' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:181:10: ':'
-            {
-            match(':'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__183"
-
-    // $ANTLR start "T__184"
-    public final void mT__184() throws RecognitionException {
-        try {
-            int _type = T__184;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:182:8: ( 'case' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:182:10: 'case'
-            {
-            match("case"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__184"
-
-    // $ANTLR start "T__185"
-    public final void mT__185() throws RecognitionException {
-        try {
-            int _type = T__185;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:183:8: ( 'while' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:183:10: 'while'
-            {
-            match("while"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__185"
-
-    // $ANTLR start "T__186"
-    public final void mT__186() throws RecognitionException {
-        try {
-            int _type = T__186;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:184:8: ( 'do' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:184:10: 'do'
-            {
-            match("do"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__186"
-
-    // $ANTLR start "T__187"
-    public final void mT__187() throws RecognitionException {
-        try {
-            int _type = T__187;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:185:8: ( 'new' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:185:10: 'new'
-            {
-            match("new"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__187"
-
-    // $ANTLR start "T__188"
-    public final void mT__188() throws RecognitionException {
-        try {
-            int _type = T__188;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:186:8: ( 'null' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:186:10: 'null'
-            {
-            match("null"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__188"
-
-    // $ANTLR start "T__189"
-    public final void mT__189() throws RecognitionException {
-        try {
-            int _type = T__189;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:187:8: ( 'typeof' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:187:10: 'typeof'
-            {
-            match("typeof"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__189"
-
-    // $ANTLR start "T__190"
-    public final void mT__190() throws RecognitionException {
-        try {
-            int _type = T__190;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:188:8: ( 'throw' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:188:10: 'throw'
-            {
-            match("throw"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__190"
-
-    // $ANTLR start "T__191"
-    public final void mT__191() throws RecognitionException {
-        try {
-            int _type = T__191;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:189:8: ( 'return' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:189:10: 'return'
-            {
-            match("return"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__191"
-
-    // $ANTLR start "T__192"
-    public final void mT__192() throws RecognitionException {
-        try {
-            int _type = T__192;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:190:8: ( 'try' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:190:10: 'try'
-            {
-            match("try"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__192"
-
-    // $ANTLR start "T__193"
-    public final void mT__193() throws RecognitionException {
-        try {
-            int _type = T__193;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:191:8: ( 'finally' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:191:10: 'finally'
-            {
-            match("finally"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__193"
-
-    // $ANTLR start "T__194"
-    public final void mT__194() throws RecognitionException {
-        try {
-            int _type = T__194;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:192:8: ( 'synchronized' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:192:10: 'synchronized'
-            {
-            match("synchronized"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__194"
-
-    // $ANTLR start "T__195"
-    public final void mT__195() throws RecognitionException {
-        try {
-            int _type = T__195;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:193:8: ( 'catch' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:193:10: 'catch'
-            {
-            match("catch"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__195"
-
-    // $ANTLR start "T__196"
-    public final void mT__196() throws RecognitionException {
-        try {
-            int _type = T__196;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:194:8: ( '?' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:194:10: '?'
-            {
-            match('?'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__196"
-
-    // $ANTLR start "T__197"
-    public final void mT__197() throws RecognitionException {
-        try {
-            int _type = T__197;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:195:8: ( '&' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:195:10: '&'
-            {
-            match('&'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__197"
-
-    // $ANTLR start "T__198"
-    public final void mT__198() throws RecognitionException {
-        try {
-            int _type = T__198;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:196:8: ( 'described by' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:196:10: 'described by'
-            {
-            match("described by"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__198"
-
-    // $ANTLR start "T__199"
-    public final void mT__199() throws RecognitionException {
-        try {
-            int _type = T__199;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:197:8: ( 'nonempty values' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:197:10: 'nonempty values'
-            {
-            match("nonempty values"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__199"
-
-    // $ANTLR start "T__200"
-    public final void mT__200() throws RecognitionException {
-        try {
-            int _type = T__200;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:198:8: ( 'tracking' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:198:10: 'tracking'
-            {
-            match("tracking"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__200"
-
-    // $ANTLR start "T__201"
-    public final void mT__201() throws RecognitionException {
-        try {
-            int _type = T__201;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:199:8: ( 'on axis' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:199:10: 'on axis'
-            {
-            match("on axis"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__201"
-
-    // $ANTLR start "T__202"
-    public final void mT__202() throws RecognitionException {
-        try {
-            int _type = T__202;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:200:8: ( 'scale' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:200:10: 'scale'
-            {
-            match("scale"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__202"
-
-    // $ANTLR start "T__203"
-    public final void mT__203() throws RecognitionException {
-        try {
-            int _type = T__203;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:201:8: ( 'filtered' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:201:10: 'filtered'
-            {
-            match("filtered"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__203"
-
-    // $ANTLR start "T__204"
-    public final void mT__204() throws RecognitionException {
-        try {
-            int _type = T__204;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:202:8: ( 'optional' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:202:10: 'optional'
-            {
-            match("optional"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__204"
-
-    // $ANTLR start "T__205"
-    public final void mT__205() throws RecognitionException {
-        try {
-            int _type = T__205;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:203:8: ( 'selected' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:203:10: 'selected'
-            {
-            match("selected"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__205"
-
-    // $ANTLR start "T__206"
-    public final void mT__206() throws RecognitionException {
-        try {
-            int _type = T__206;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:204:8: ( 'condensed' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:204:10: 'condensed'
-            {
-            match("condensed"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__206"
-
-    // $ANTLR start "T__207"
-    public final void mT__207() throws RecognitionException {
-        try {
-            int _type = T__207;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:205:8: ( 'exploded' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:205:10: 'exploded'
-            {
-            match("exploded"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__207"
-
-    // $ANTLR start "T__208"
-    public final void mT__208() throws RecognitionException {
-        try {
-            int _type = T__208;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:206:8: ( 'detailed' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:206:10: 'detailed'
-            {
-            match("detailed"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__208"
-
-    // $ANTLR start "T__209"
-    public final void mT__209() throws RecognitionException {
-        try {
-            int _type = T__209;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:207:8: ( 'except' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:207:10: 'except'
-            {
-            match("except"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__209"
-
-    // $ANTLR start "T__210"
-    public final void mT__210() throws RecognitionException {
-        try {
-            int _type = T__210;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:208:8: ( 'ordered by' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:208:10: 'ordered by'
-            {
-            match("ordered by"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__210"
-
-    // $ANTLR start "T__211"
-    public final void mT__211() throws RecognitionException {
-        try {
-            int _type = T__211;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:209:8: ( '::' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:209:10: '::'
-            {
-            match("::"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__211"
-
-    // $ANTLR start "T__212"
-    public final void mT__212() throws RecognitionException {
-        try {
-            int _type = T__212;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:210:8: ( '?.' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:210:10: '?.'
-            {
-            match("?."); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__212"
-
-    // $ANTLR start "T__213"
-    public final void mT__213() throws RecognitionException {
-        try {
-            int _type = T__213;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:211:8: ( '|' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:211:10: '|'
-            {
-            match('|'); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__213"
-
-    // $ANTLR start "T__214"
-    public final void mT__214() throws RecognitionException {
-        try {
-            int _type = T__214;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:212:8: ( 'var' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:212:10: 'var'
-            {
-            match("var"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__214"
-
-    // $ANTLR start "T__215"
-    public final void mT__215() throws RecognitionException {
-        try {
-            int _type = T__215;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:213:8: ( 'true' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:213:10: 'true'
-            {
-            match("true"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__215"
-
-    // $ANTLR start "RULE_HEX"
-    public final void mRULE_HEX() throws RecognitionException {
-        try {
-            int _type = RULE_HEX;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:10: ( ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' | '_' )+ ( '#' ( ( 'b' | 'B' ) ( 'i' | 'I' ) | ( 'l' | 'L' ) ) )? )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:12: ( '0x' | '0X' ) ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' | '_' )+ ( '#' ( ( 'b' | 'B' ) ( 'i' | 'I' ) | ( 'l' | 'L' ) ) )?
-            {
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:12: ( '0x' | '0X' )
-            int alt1=2;
-            int LA1_0 = input.LA(1);
-
-            if ( (LA1_0=='0') ) {
-                int LA1_1 = input.LA(2);
-
-                if ( (LA1_1=='x') ) {
-                    alt1=1;
-                }
-                else if ( (LA1_1=='X') ) {
-                    alt1=2;
-                }
-                else {
-                    NoViableAltException nvae =
-                        new NoViableAltException("", 1, 1, input);
-
-                    throw nvae;
-                }
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 1, 0, input);
-
-                throw nvae;
-            }
-            switch (alt1) {
-                case 1 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:13: '0x'
-                    {
-                    match("0x"); 
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:18: '0X'
-                    {
-                    match("0X"); 
-
-
-                    }
-                    break;
-
-            }
-
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:24: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' | '_' )+
-            int cnt2=0;
-            loop2:
-            do {
-                int alt2=2;
-                int LA2_0 = input.LA(1);
-
-                if ( ((LA2_0>='0' && LA2_0<='9')||(LA2_0>='A' && LA2_0<='F')||LA2_0=='_'||(LA2_0>='a' && LA2_0<='f')) ) {
-                    alt2=1;
-                }
-
-
-                switch (alt2) {
-            	case 1 :
-            	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:
-            	    {
-            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='f') ) {
-            	        input.consume();
-
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;}
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt2 >= 1 ) break loop2;
-                        EarlyExitException eee =
-                            new EarlyExitException(2, input);
-                        throw eee;
-                }
-                cnt2++;
-            } while (true);
-
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:58: ( '#' ( ( 'b' | 'B' ) ( 'i' | 'I' ) | ( 'l' | 'L' ) ) )?
-            int alt4=2;
-            int LA4_0 = input.LA(1);
-
-            if ( (LA4_0=='#') ) {
-                alt4=1;
-            }
-            switch (alt4) {
-                case 1 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:59: '#' ( ( 'b' | 'B' ) ( 'i' | 'I' ) | ( 'l' | 'L' ) )
-                    {
-                    match('#'); 
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:63: ( ( 'b' | 'B' ) ( 'i' | 'I' ) | ( 'l' | 'L' ) )
-                    int alt3=2;
-                    int LA3_0 = input.LA(1);
-
-                    if ( (LA3_0=='B'||LA3_0=='b') ) {
-                        alt3=1;
-                    }
-                    else if ( (LA3_0=='L'||LA3_0=='l') ) {
-                        alt3=2;
-                    }
-                    else {
-                        NoViableAltException nvae =
-                            new NoViableAltException("", 3, 0, input);
-
-                        throw nvae;
-                    }
-                    switch (alt3) {
-                        case 1 :
-                            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:64: ( 'b' | 'B' ) ( 'i' | 'I' )
-                            {
-                            if ( input.LA(1)=='B'||input.LA(1)=='b' ) {
-                                input.consume();
-
-                            }
-                            else {
-                                MismatchedSetException mse = new MismatchedSetException(null,input);
-                                recover(mse);
-                                throw mse;}
-
-                            if ( input.LA(1)=='I'||input.LA(1)=='i' ) {
-                                input.consume();
-
-                            }
-                            else {
-                                MismatchedSetException mse = new MismatchedSetException(null,input);
-                                recover(mse);
-                                throw mse;}
-
-
-                            }
-                            break;
-                        case 2 :
-                            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37122:84: ( 'l' | 'L' )
-                            {
-                            if ( input.LA(1)=='L'||input.LA(1)=='l' ) {
-                                input.consume();
-
-                            }
-                            else {
-                                MismatchedSetException mse = new MismatchedSetException(null,input);
-                                recover(mse);
-                                throw mse;}
-
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_HEX"
-
-    // $ANTLR start "RULE_INT"
-    public final void mRULE_INT() throws RecognitionException {
-        try {
-            int _type = RULE_INT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37124:10: ( '0' .. '9' ( '0' .. '9' | '_' )* )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37124:12: '0' .. '9' ( '0' .. '9' | '_' )*
-            {
-            matchRange('0','9'); 
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37124:21: ( '0' .. '9' | '_' )*
-            loop5:
-            do {
-                int alt5=2;
-                int LA5_0 = input.LA(1);
-
-                if ( ((LA5_0>='0' && LA5_0<='9')||LA5_0=='_') ) {
-                    alt5=1;
-                }
-
-
-                switch (alt5) {
-            	case 1 :
-            	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:
-            	    {
-            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||input.LA(1)=='_' ) {
-            	        input.consume();
-
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;}
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop5;
-                }
-            } while (true);
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_INT"
-
-    // $ANTLR start "RULE_DECIMAL"
-    public final void mRULE_DECIMAL() throws RecognitionException {
-        try {
-            int _type = RULE_DECIMAL;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:14: ( RULE_INT ( ( 'e' | 'E' ) ( '+' | '-' )? RULE_INT )? ( ( 'b' | 'B' ) ( 'i' | 'I' | 'd' | 'D' ) | ( 'l' | 'L' | 'd' | 'D' | 'f' | 'F' ) )? )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:16: RULE_INT ( ( 'e' | 'E' ) ( '+' | '-' )? RULE_INT )? ( ( 'b' | 'B' ) ( 'i' | 'I' | 'd' | 'D' ) | ( 'l' | 'L' | 'd' | 'D' | 'f' | 'F' ) )?
-            {
-            mRULE_INT(); 
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:25: ( ( 'e' | 'E' ) ( '+' | '-' )? RULE_INT )?
-            int alt7=2;
-            int LA7_0 = input.LA(1);
-
-            if ( (LA7_0=='E'||LA7_0=='e') ) {
-                alt7=1;
-            }
-            switch (alt7) {
-                case 1 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:26: ( 'e' | 'E' ) ( '+' | '-' )? RULE_INT
-                    {
-                    if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
-                        input.consume();
-
-                    }
-                    else {
-                        MismatchedSetException mse = new MismatchedSetException(null,input);
-                        recover(mse);
-                        throw mse;}
-
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:36: ( '+' | '-' )?
-                    int alt6=2;
-                    int LA6_0 = input.LA(1);
-
-                    if ( (LA6_0=='+'||LA6_0=='-') ) {
-                        alt6=1;
-                    }
-                    switch (alt6) {
-                        case 1 :
-                            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:
-                            {
-                            if ( input.LA(1)=='+'||input.LA(1)=='-' ) {
-                                input.consume();
-
-                            }
-                            else {
-                                MismatchedSetException mse = new MismatchedSetException(null,input);
-                                recover(mse);
-                                throw mse;}
-
-
-                            }
-                            break;
-
-                    }
-
-                    mRULE_INT(); 
-
-                    }
-                    break;
-
-            }
-
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:58: ( ( 'b' | 'B' ) ( 'i' | 'I' | 'd' | 'D' ) | ( 'l' | 'L' | 'd' | 'D' | 'f' | 'F' ) )?
-            int alt8=3;
-            int LA8_0 = input.LA(1);
-
-            if ( (LA8_0=='B'||LA8_0=='b') ) {
-                alt8=1;
-            }
-            else if ( (LA8_0=='D'||LA8_0=='F'||LA8_0=='L'||LA8_0=='d'||LA8_0=='f'||LA8_0=='l') ) {
-                alt8=2;
-            }
-            switch (alt8) {
-                case 1 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:59: ( 'b' | 'B' ) ( 'i' | 'I' | 'd' | 'D' )
-                    {
-                    if ( input.LA(1)=='B'||input.LA(1)=='b' ) {
-                        input.consume();
-
-                    }
-                    else {
-                        MismatchedSetException mse = new MismatchedSetException(null,input);
-                        recover(mse);
-                        throw mse;}
-
-                    if ( input.LA(1)=='D'||input.LA(1)=='I'||input.LA(1)=='d'||input.LA(1)=='i' ) {
-                        input.consume();
-
-                    }
-                    else {
-                        MismatchedSetException mse = new MismatchedSetException(null,input);
-                        recover(mse);
-                        throw mse;}
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37126:87: ( 'l' | 'L' | 'd' | 'D' | 'f' | 'F' )
-                    {
-                    if ( input.LA(1)=='D'||input.LA(1)=='F'||input.LA(1)=='L'||input.LA(1)=='d'||input.LA(1)=='f'||input.LA(1)=='l' ) {
-                        input.consume();
-
-                    }
-                    else {
-                        MismatchedSetException mse = new MismatchedSetException(null,input);
-                        recover(mse);
-                        throw mse;}
-
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_DECIMAL"
-
-    // $ANTLR start "RULE_ID"
-    public final void mRULE_ID() throws RecognitionException {
-        try {
-            int _type = RULE_ID;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37128:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '$' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '$' | '_' | '0' .. '9' )* )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37128:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '$' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '$' | '_' | '0' .. '9' )*
-            {
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37128:11: ( '^' )?
-            int alt9=2;
-            int LA9_0 = input.LA(1);
-
-            if ( (LA9_0=='^') ) {
-                alt9=1;
-            }
-            switch (alt9) {
-                case 1 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37128:11: '^'
-                    {
-                    match('^'); 
-
-                    }
-                    break;
-
-            }
-
-            if ( input.LA(1)=='$'||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
-                input.consume();
-
-            }
-            else {
-                MismatchedSetException mse = new MismatchedSetException(null,input);
-                recover(mse);
-                throw mse;}
-
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37128:44: ( 'a' .. 'z' | 'A' .. 'Z' | '$' | '_' | '0' .. '9' )*
-            loop10:
-            do {
-                int alt10=2;
-                int LA10_0 = input.LA(1);
-
-                if ( (LA10_0=='$'||(LA10_0>='0' && LA10_0<='9')||(LA10_0>='A' && LA10_0<='Z')||LA10_0=='_'||(LA10_0>='a' && LA10_0<='z')) ) {
-                    alt10=1;
-                }
-
-
-                switch (alt10) {
-            	case 1 :
-            	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:
-            	    {
-            	    if ( input.LA(1)=='$'||(input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
-            	        input.consume();
-
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;}
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop10;
-                }
-            } while (true);
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_ID"
-
-    // $ANTLR start "RULE_STRING"
-    public final void mRULE_STRING() throws RecognitionException {
-        try {
-            int _type = RULE_STRING;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* ( '\"' )? | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* ( '\\'' )? ) )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* ( '\"' )? | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* ( '\\'' )? )
-            {
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* ( '\"' )? | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* ( '\\'' )? )
-            int alt15=2;
-            int LA15_0 = input.LA(1);
-
-            if ( (LA15_0=='\"') ) {
-                alt15=1;
-            }
-            else if ( (LA15_0=='\'') ) {
-                alt15=2;
-            }
-            else {
-                NoViableAltException nvae =
-                    new NoViableAltException("", 15, 0, input);
-
-                throw nvae;
-            }
-            switch (alt15) {
-                case 1 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* ( '\"' )?
-                    {
-                    match('\"'); 
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
-                    loop11:
-                    do {
-                        int alt11=3;
-                        int LA11_0 = input.LA(1);
-
-                        if ( (LA11_0=='\\') ) {
-                            alt11=1;
-                        }
-                        else if ( ((LA11_0>='\u0000' && LA11_0<='!')||(LA11_0>='#' && LA11_0<='[')||(LA11_0>=']' && LA11_0<='\uFFFF')) ) {
-                            alt11=2;
-                        }
-
-
-                        switch (alt11) {
-                    	case 1 :
-                    	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:21: '\\\\' .
-                    	    {
-                    	    match('\\'); 
-                    	    matchAny(); 
-
-                    	    }
-                    	    break;
-                    	case 2 :
-                    	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:28: ~ ( ( '\\\\' | '\"' ) )
-                    	    {
-                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
-                    	        input.consume();
-
-                    	    }
-                    	    else {
-                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
-                    	        recover(mse);
-                    	        throw mse;}
-
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop11;
-                        }
-                    } while (true);
-
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:44: ( '\"' )?
-                    int alt12=2;
-                    int LA12_0 = input.LA(1);
-
-                    if ( (LA12_0=='\"') ) {
-                        alt12=1;
-                    }
-                    switch (alt12) {
-                        case 1 :
-                            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:44: '\"'
-                            {
-                            match('\"'); 
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-                case 2 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:49: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* ( '\\'' )?
-                    {
-                    match('\''); 
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:54: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
-                    loop13:
-                    do {
-                        int alt13=3;
-                        int LA13_0 = input.LA(1);
-
-                        if ( (LA13_0=='\\') ) {
-                            alt13=1;
-                        }
-                        else if ( ((LA13_0>='\u0000' && LA13_0<='&')||(LA13_0>='(' && LA13_0<='[')||(LA13_0>=']' && LA13_0<='\uFFFF')) ) {
-                            alt13=2;
-                        }
-
-
-                        switch (alt13) {
-                    	case 1 :
-                    	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:55: '\\\\' .
-                    	    {
-                    	    match('\\'); 
-                    	    matchAny(); 
-
-                    	    }
-                    	    break;
-                    	case 2 :
-                    	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:62: ~ ( ( '\\\\' | '\\'' ) )
-                    	    {
-                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
-                    	        input.consume();
-
-                    	    }
-                    	    else {
-                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
-                    	        recover(mse);
-                    	        throw mse;}
-
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop13;
-                        }
-                    } while (true);
-
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:79: ( '\\'' )?
-                    int alt14=2;
-                    int LA14_0 = input.LA(1);
-
-                    if ( (LA14_0=='\'') ) {
-                        alt14=1;
-                    }
-                    switch (alt14) {
-                        case 1 :
-                            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37130:79: '\\''
-                            {
-                            match('\''); 
-
-                            }
-                            break;
-
-                    }
-
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_STRING"
-
-    // $ANTLR start "RULE_ML_COMMENT"
-    public final void mRULE_ML_COMMENT() throws RecognitionException {
-        try {
-            int _type = RULE_ML_COMMENT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37132:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37132:19: '/*' ( options {greedy=false; } : . )* '*/'
-            {
-            match("/*"); 
-
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37132:24: ( options {greedy=false; } : . )*
-            loop16:
-            do {
-                int alt16=2;
-                int LA16_0 = input.LA(1);
-
-                if ( (LA16_0=='*') ) {
-                    int LA16_1 = input.LA(2);
-
-                    if ( (LA16_1=='/') ) {
-                        alt16=2;
-                    }
-                    else if ( ((LA16_1>='\u0000' && LA16_1<='.')||(LA16_1>='0' && LA16_1<='\uFFFF')) ) {
-                        alt16=1;
-                    }
-
-
-                }
-                else if ( ((LA16_0>='\u0000' && LA16_0<=')')||(LA16_0>='+' && LA16_0<='\uFFFF')) ) {
-                    alt16=1;
-                }
-
-
-                switch (alt16) {
-            	case 1 :
-            	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37132:52: .
-            	    {
-            	    matchAny(); 
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop16;
-                }
-            } while (true);
-
-            match("*/"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_ML_COMMENT"
-
-    // $ANTLR start "RULE_SL_COMMENT"
-    public final void mRULE_SL_COMMENT() throws RecognitionException {
-        try {
-            int _type = RULE_SL_COMMENT;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
-            {
-            match("//"); 
-
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:24: (~ ( ( '\\n' | '\\r' ) ) )*
-            loop17:
-            do {
-                int alt17=2;
-                int LA17_0 = input.LA(1);
-
-                if ( ((LA17_0>='\u0000' && LA17_0<='\t')||(LA17_0>='\u000B' && LA17_0<='\f')||(LA17_0>='\u000E' && LA17_0<='\uFFFF')) ) {
-                    alt17=1;
-                }
-
-
-                switch (alt17) {
-            	case 1 :
-            	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:24: ~ ( ( '\\n' | '\\r' ) )
-            	    {
-            	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
-            	        input.consume();
-
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;}
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop17;
-                }
-            } while (true);
-
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:40: ( ( '\\r' )? '\\n' )?
-            int alt19=2;
-            int LA19_0 = input.LA(1);
-
-            if ( (LA19_0=='\n'||LA19_0=='\r') ) {
-                alt19=1;
-            }
-            switch (alt19) {
-                case 1 :
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:41: ( '\\r' )? '\\n'
-                    {
-                    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:41: ( '\\r' )?
-                    int alt18=2;
-                    int LA18_0 = input.LA(1);
-
-                    if ( (LA18_0=='\r') ) {
-                        alt18=1;
-                    }
-                    switch (alt18) {
-                        case 1 :
-                            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37134:41: '\\r'
-                            {
-                            match('\r'); 
-
-                            }
-                            break;
-
-                    }
-
-                    match('\n'); 
-
-                    }
-                    break;
-
-            }
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_SL_COMMENT"
-
-    // $ANTLR start "RULE_WS"
-    public final void mRULE_WS() throws RecognitionException {
-        try {
-            int _type = RULE_WS;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37136:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37136:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
-            {
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37136:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
-            int cnt20=0;
-            loop20:
-            do {
-                int alt20=2;
-                int LA20_0 = input.LA(1);
-
-                if ( ((LA20_0>='\t' && LA20_0<='\n')||LA20_0=='\r'||LA20_0==' ') ) {
-                    alt20=1;
-                }
-
-
-                switch (alt20) {
-            	case 1 :
-            	    // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:
-            	    {
-            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
-            	        input.consume();
-
-            	    }
-            	    else {
-            	        MismatchedSetException mse = new MismatchedSetException(null,input);
-            	        recover(mse);
-            	        throw mse;}
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    if ( cnt20 >= 1 ) break loop20;
-                        EarlyExitException eee =
-                            new EarlyExitException(20, input);
-                        throw eee;
-                }
-                cnt20++;
-            } while (true);
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_WS"
-
-    // $ANTLR start "RULE_ANY_OTHER"
-    public final void mRULE_ANY_OTHER() throws RecognitionException {
-        try {
-            int _type = RULE_ANY_OTHER;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37138:16: ( . )
-            // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:37138:18: .
-            {
-            matchAny(); 
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "RULE_ANY_OTHER"
-
-    public void mTokens() throws RecognitionException {
-        // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:8: ( T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | T__94 | T__95 | T__96 | T__97 | T__98 | T__99 | T__100 | T__101 | T__102 | T__103 | T__104 | T__105 | T__106 | T__107 | T__108 | T__109 | T__110 | T__111 | T__112 | T__113 | T__114 | T__115 | T__116 | T__117 | T__118 | T__119 | T__120 | T__121 | T__122 | T__123 | T__124 | T__125 | T__126 | T__127 | T__128 | T__129 | T__130 | T__131 | T__132 | T__133 | T__134 | T__135 | T__136 | T__137 | T__138 | T__139 | T__140 | T__141 | T__142 | T__143 | T__144 | T__145 | T__146 | T__147 | T__148 | T__149 | T__150 | T__151 | T__152 | T__153 | T__154 | T__155 | T__156 | T__157 | T__158 | T__159 | T__160 | T__161 | T__162 | T__163 | T__164 | T__165 | T__166 | T__167 | T__168 | T__169 | T__170 | T__171 | T__172 | T__173 | T__174 | T__175 | T__176 | T__177 | T__178 | T__179 | T__180 | T__181 | T__182 | T__183 | T__184 | T__185 | T__186 | T__187 | T__188 | T__189 | T__190 | T__191 | T__192 | T__193 | T__194 | T__195 | T__196 | T__197 | T__198 | T__199 | T__200 | T__201 | T__202 | T__203 | T__204 | T__205 | T__206 | T__207 | T__208 | T__209 | T__210 | T__211 | T__212 | T__213 | T__214 | T__215 | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt21=212;
-        alt21 = dfa21.predict(input);
-        switch (alt21) {
-            case 1 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:10: T__13
-                {
-                mT__13(); 
-
-                }
-                break;
-            case 2 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:16: T__14
-                {
-                mT__14(); 
-
-                }
-                break;
-            case 3 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:22: T__15
-                {
-                mT__15(); 
-
-                }
-                break;
-            case 4 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:28: T__16
-                {
-                mT__16(); 
-
-                }
-                break;
-            case 5 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:34: T__17
-                {
-                mT__17(); 
-
-                }
-                break;
-            case 6 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:40: T__18
-                {
-                mT__18(); 
-
-                }
-                break;
-            case 7 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:46: T__19
-                {
-                mT__19(); 
-
-                }
-                break;
-            case 8 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:52: T__20
-                {
-                mT__20(); 
-
-                }
-                break;
-            case 9 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:58: T__21
-                {
-                mT__21(); 
-
-                }
-                break;
-            case 10 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:64: T__22
-                {
-                mT__22(); 
-
-                }
-                break;
-            case 11 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:70: T__23
-                {
-                mT__23(); 
-
-                }
-                break;
-            case 12 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:76: T__24
-                {
-                mT__24(); 
-
-                }
-                break;
-            case 13 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:82: T__25
-                {
-                mT__25(); 
-
-                }
-                break;
-            case 14 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:88: T__26
-                {
-                mT__26(); 
-
-                }
-                break;
-            case 15 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:94: T__27
-                {
-                mT__27(); 
-
-                }
-                break;
-            case 16 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:100: T__28
-                {
-                mT__28(); 
-
-                }
-                break;
-            case 17 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:106: T__29
-                {
-                mT__29(); 
-
-                }
-                break;
-            case 18 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:112: T__30
-                {
-                mT__30(); 
-
-                }
-                break;
-            case 19 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:118: T__31
-                {
-                mT__31(); 
-
-                }
-                break;
-            case 20 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:124: T__32
-                {
-                mT__32(); 
-
-                }
-                break;
-            case 21 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:130: T__33
-                {
-                mT__33(); 
-
-                }
-                break;
-            case 22 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:136: T__34
-                {
-                mT__34(); 
-
-                }
-                break;
-            case 23 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:142: T__35
-                {
-                mT__35(); 
-
-                }
-                break;
-            case 24 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:148: T__36
-                {
-                mT__36(); 
-
-                }
-                break;
-            case 25 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:154: T__37
-                {
-                mT__37(); 
-
-                }
-                break;
-            case 26 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:160: T__38
-                {
-                mT__38(); 
-
-                }
-                break;
-            case 27 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:166: T__39
-                {
-                mT__39(); 
-
-                }
-                break;
-            case 28 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:172: T__40
-                {
-                mT__40(); 
-
-                }
-                break;
-            case 29 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:178: T__41
-                {
-                mT__41(); 
-
-                }
-                break;
-            case 30 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:184: T__42
-                {
-                mT__42(); 
-
-                }
-                break;
-            case 31 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:190: T__43
-                {
-                mT__43(); 
-
-                }
-                break;
-            case 32 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:196: T__44
-                {
-                mT__44(); 
-
-                }
-                break;
-            case 33 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:202: T__45
-                {
-                mT__45(); 
-
-                }
-                break;
-            case 34 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:208: T__46
-                {
-                mT__46(); 
-
-                }
-                break;
-            case 35 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:214: T__47
-                {
-                mT__47(); 
-
-                }
-                break;
-            case 36 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:220: T__48
-                {
-                mT__48(); 
-
-                }
-                break;
-            case 37 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:226: T__49
-                {
-                mT__49(); 
-
-                }
-                break;
-            case 38 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:232: T__50
-                {
-                mT__50(); 
-
-                }
-                break;
-            case 39 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:238: T__51
-                {
-                mT__51(); 
-
-                }
-                break;
-            case 40 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:244: T__52
-                {
-                mT__52(); 
-
-                }
-                break;
-            case 41 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:250: T__53
-                {
-                mT__53(); 
-
-                }
-                break;
-            case 42 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:256: T__54
-                {
-                mT__54(); 
-
-                }
-                break;
-            case 43 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:262: T__55
-                {
-                mT__55(); 
-
-                }
-                break;
-            case 44 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:268: T__56
-                {
-                mT__56(); 
-
-                }
-                break;
-            case 45 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:274: T__57
-                {
-                mT__57(); 
-
-                }
-                break;
-            case 46 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:280: T__58
-                {
-                mT__58(); 
-
-                }
-                break;
-            case 47 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:286: T__59
-                {
-                mT__59(); 
-
-                }
-                break;
-            case 48 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:292: T__60
-                {
-                mT__60(); 
-
-                }
-                break;
-            case 49 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:298: T__61
-                {
-                mT__61(); 
-
-                }
-                break;
-            case 50 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:304: T__62
-                {
-                mT__62(); 
-
-                }
-                break;
-            case 51 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:310: T__63
-                {
-                mT__63(); 
-
-                }
-                break;
-            case 52 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:316: T__64
-                {
-                mT__64(); 
-
-                }
-                break;
-            case 53 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:322: T__65
-                {
-                mT__65(); 
-
-                }
-                break;
-            case 54 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:328: T__66
-                {
-                mT__66(); 
-
-                }
-                break;
-            case 55 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:334: T__67
-                {
-                mT__67(); 
-
-                }
-                break;
-            case 56 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:340: T__68
-                {
-                mT__68(); 
-
-                }
-                break;
-            case 57 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:346: T__69
-                {
-                mT__69(); 
-
-                }
-                break;
-            case 58 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:352: T__70
-                {
-                mT__70(); 
-
-                }
-                break;
-            case 59 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:358: T__71
-                {
-                mT__71(); 
-
-                }
-                break;
-            case 60 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:364: T__72
-                {
-                mT__72(); 
-
-                }
-                break;
-            case 61 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:370: T__73
-                {
-                mT__73(); 
-
-                }
-                break;
-            case 62 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:376: T__74
-                {
-                mT__74(); 
-
-                }
-                break;
-            case 63 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:382: T__75
-                {
-                mT__75(); 
-
-                }
-                break;
-            case 64 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:388: T__76
-                {
-                mT__76(); 
-
-                }
-                break;
-            case 65 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:394: T__77
-                {
-                mT__77(); 
-
-                }
-                break;
-            case 66 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:400: T__78
-                {
-                mT__78(); 
-
-                }
-                break;
-            case 67 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:406: T__79
-                {
-                mT__79(); 
-
-                }
-                break;
-            case 68 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:412: T__80
-                {
-                mT__80(); 
-
-                }
-                break;
-            case 69 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:418: T__81
-                {
-                mT__81(); 
-
-                }
-                break;
-            case 70 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:424: T__82
-                {
-                mT__82(); 
-
-                }
-                break;
-            case 71 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:430: T__83
-                {
-                mT__83(); 
-
-                }
-                break;
-            case 72 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:436: T__84
-                {
-                mT__84(); 
-
-                }
-                break;
-            case 73 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:442: T__85
-                {
-                mT__85(); 
-
-                }
-                break;
-            case 74 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:448: T__86
-                {
-                mT__86(); 
-
-                }
-                break;
-            case 75 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:454: T__87
-                {
-                mT__87(); 
-
-                }
-                break;
-            case 76 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:460: T__88
-                {
-                mT__88(); 
-
-                }
-                break;
-            case 77 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:466: T__89
-                {
-                mT__89(); 
-
-                }
-                break;
-            case 78 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:472: T__90
-                {
-                mT__90(); 
-
-                }
-                break;
-            case 79 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:478: T__91
-                {
-                mT__91(); 
-
-                }
-                break;
-            case 80 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:484: T__92
-                {
-                mT__92(); 
-
-                }
-                break;
-            case 81 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:490: T__93
-                {
-                mT__93(); 
-
-                }
-                break;
-            case 82 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:496: T__94
-                {
-                mT__94(); 
-
-                }
-                break;
-            case 83 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:502: T__95
-                {
-                mT__95(); 
-
-                }
-                break;
-            case 84 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:508: T__96
-                {
-                mT__96(); 
-
-                }
-                break;
-            case 85 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:514: T__97
-                {
-                mT__97(); 
-
-                }
-                break;
-            case 86 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:520: T__98
-                {
-                mT__98(); 
-
-                }
-                break;
-            case 87 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:526: T__99
-                {
-                mT__99(); 
-
-                }
-                break;
-            case 88 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:532: T__100
-                {
-                mT__100(); 
-
-                }
-                break;
-            case 89 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:539: T__101
-                {
-                mT__101(); 
-
-                }
-                break;
-            case 90 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:546: T__102
-                {
-                mT__102(); 
-
-                }
-                break;
-            case 91 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:553: T__103
-                {
-                mT__103(); 
-
-                }
-                break;
-            case 92 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:560: T__104
-                {
-                mT__104(); 
-
-                }
-                break;
-            case 93 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:567: T__105
-                {
-                mT__105(); 
-
-                }
-                break;
-            case 94 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:574: T__106
-                {
-                mT__106(); 
-
-                }
-                break;
-            case 95 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:581: T__107
-                {
-                mT__107(); 
-
-                }
-                break;
-            case 96 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:588: T__108
-                {
-                mT__108(); 
-
-                }
-                break;
-            case 97 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:595: T__109
-                {
-                mT__109(); 
-
-                }
-                break;
-            case 98 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:602: T__110
-                {
-                mT__110(); 
-
-                }
-                break;
-            case 99 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:609: T__111
-                {
-                mT__111(); 
-
-                }
-                break;
-            case 100 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:616: T__112
-                {
-                mT__112(); 
-
-                }
-                break;
-            case 101 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:623: T__113
-                {
-                mT__113(); 
-
-                }
-                break;
-            case 102 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:630: T__114
-                {
-                mT__114(); 
-
-                }
-                break;
-            case 103 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:637: T__115
-                {
-                mT__115(); 
-
-                }
-                break;
-            case 104 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:644: T__116
-                {
-                mT__116(); 
-
-                }
-                break;
-            case 105 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:651: T__117
-                {
-                mT__117(); 
-
-                }
-                break;
-            case 106 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:658: T__118
-                {
-                mT__118(); 
-
-                }
-                break;
-            case 107 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:665: T__119
-                {
-                mT__119(); 
-
-                }
-                break;
-            case 108 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:672: T__120
-                {
-                mT__120(); 
-
-                }
-                break;
-            case 109 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:679: T__121
-                {
-                mT__121(); 
-
-                }
-                break;
-            case 110 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:686: T__122
-                {
-                mT__122(); 
-
-                }
-                break;
-            case 111 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:693: T__123
-                {
-                mT__123(); 
-
-                }
-                break;
-            case 112 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:700: T__124
-                {
-                mT__124(); 
-
-                }
-                break;
-            case 113 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:707: T__125
-                {
-                mT__125(); 
-
-                }
-                break;
-            case 114 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:714: T__126
-                {
-                mT__126(); 
-
-                }
-                break;
-            case 115 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:721: T__127
-                {
-                mT__127(); 
-
-                }
-                break;
-            case 116 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:728: T__128
-                {
-                mT__128(); 
-
-                }
-                break;
-            case 117 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:735: T__129
-                {
-                mT__129(); 
-
-                }
-                break;
-            case 118 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:742: T__130
-                {
-                mT__130(); 
-
-                }
-                break;
-            case 119 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:749: T__131
-                {
-                mT__131(); 
-
-                }
-                break;
-            case 120 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:756: T__132
-                {
-                mT__132(); 
-
-                }
-                break;
-            case 121 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:763: T__133
-                {
-                mT__133(); 
-
-                }
-                break;
-            case 122 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:770: T__134
-                {
-                mT__134(); 
-
-                }
-                break;
-            case 123 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:777: T__135
-                {
-                mT__135(); 
-
-                }
-                break;
-            case 124 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:784: T__136
-                {
-                mT__136(); 
-
-                }
-                break;
-            case 125 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:791: T__137
-                {
-                mT__137(); 
-
-                }
-                break;
-            case 126 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:798: T__138
-                {
-                mT__138(); 
-
-                }
-                break;
-            case 127 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:805: T__139
-                {
-                mT__139(); 
-
-                }
-                break;
-            case 128 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:812: T__140
-                {
-                mT__140(); 
-
-                }
-                break;
-            case 129 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:819: T__141
-                {
-                mT__141(); 
-
-                }
-                break;
-            case 130 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:826: T__142
-                {
-                mT__142(); 
-
-                }
-                break;
-            case 131 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:833: T__143
-                {
-                mT__143(); 
-
-                }
-                break;
-            case 132 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:840: T__144
-                {
-                mT__144(); 
-
-                }
-                break;
-            case 133 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:847: T__145
-                {
-                mT__145(); 
-
-                }
-                break;
-            case 134 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:854: T__146
-                {
-                mT__146(); 
-
-                }
-                break;
-            case 135 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:861: T__147
-                {
-                mT__147(); 
-
-                }
-                break;
-            case 136 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:868: T__148
-                {
-                mT__148(); 
-
-                }
-                break;
-            case 137 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:875: T__149
-                {
-                mT__149(); 
-
-                }
-                break;
-            case 138 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:882: T__150
-                {
-                mT__150(); 
-
-                }
-                break;
-            case 139 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:889: T__151
-                {
-                mT__151(); 
-
-                }
-                break;
-            case 140 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:896: T__152
-                {
-                mT__152(); 
-
-                }
-                break;
-            case 141 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:903: T__153
-                {
-                mT__153(); 
-
-                }
-                break;
-            case 142 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:910: T__154
-                {
-                mT__154(); 
-
-                }
-                break;
-            case 143 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:917: T__155
-                {
-                mT__155(); 
-
-                }
-                break;
-            case 144 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:924: T__156
-                {
-                mT__156(); 
-
-                }
-                break;
-            case 145 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:931: T__157
-                {
-                mT__157(); 
-
-                }
-                break;
-            case 146 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:938: T__158
-                {
-                mT__158(); 
-
-                }
-                break;
-            case 147 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:945: T__159
-                {
-                mT__159(); 
-
-                }
-                break;
-            case 148 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:952: T__160
-                {
-                mT__160(); 
-
-                }
-                break;
-            case 149 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:959: T__161
-                {
-                mT__161(); 
-
-                }
-                break;
-            case 150 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:966: T__162
-                {
-                mT__162(); 
-
-                }
-                break;
-            case 151 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:973: T__163
-                {
-                mT__163(); 
-
-                }
-                break;
-            case 152 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:980: T__164
-                {
-                mT__164(); 
-
-                }
-                break;
-            case 153 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:987: T__165
-                {
-                mT__165(); 
-
-                }
-                break;
-            case 154 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:994: T__166
-                {
-                mT__166(); 
-
-                }
-                break;
-            case 155 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1001: T__167
-                {
-                mT__167(); 
-
-                }
-                break;
-            case 156 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1008: T__168
-                {
-                mT__168(); 
-
-                }
-                break;
-            case 157 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1015: T__169
-                {
-                mT__169(); 
-
-                }
-                break;
-            case 158 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1022: T__170
-                {
-                mT__170(); 
-
-                }
-                break;
-            case 159 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1029: T__171
-                {
-                mT__171(); 
-
-                }
-                break;
-            case 160 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1036: T__172
-                {
-                mT__172(); 
-
-                }
-                break;
-            case 161 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1043: T__173
-                {
-                mT__173(); 
-
-                }
-                break;
-            case 162 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1050: T__174
-                {
-                mT__174(); 
-
-                }
-                break;
-            case 163 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1057: T__175
-                {
-                mT__175(); 
-
-                }
-                break;
-            case 164 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1064: T__176
-                {
-                mT__176(); 
-
-                }
-                break;
-            case 165 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1071: T__177
-                {
-                mT__177(); 
-
-                }
-                break;
-            case 166 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1078: T__178
-                {
-                mT__178(); 
-
-                }
-                break;
-            case 167 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1085: T__179
-                {
-                mT__179(); 
-
-                }
-                break;
-            case 168 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1092: T__180
-                {
-                mT__180(); 
-
-                }
-                break;
-            case 169 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1099: T__181
-                {
-                mT__181(); 
-
-                }
-                break;
-            case 170 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1106: T__182
-                {
-                mT__182(); 
-
-                }
-                break;
-            case 171 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1113: T__183
-                {
-                mT__183(); 
-
-                }
-                break;
-            case 172 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1120: T__184
-                {
-                mT__184(); 
-
-                }
-                break;
-            case 173 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1127: T__185
-                {
-                mT__185(); 
-
-                }
-                break;
-            case 174 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1134: T__186
-                {
-                mT__186(); 
-
-                }
-                break;
-            case 175 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1141: T__187
-                {
-                mT__187(); 
-
-                }
-                break;
-            case 176 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1148: T__188
-                {
-                mT__188(); 
-
-                }
-                break;
-            case 177 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1155: T__189
-                {
-                mT__189(); 
-
-                }
-                break;
-            case 178 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1162: T__190
-                {
-                mT__190(); 
-
-                }
-                break;
-            case 179 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1169: T__191
-                {
-                mT__191(); 
-
-                }
-                break;
-            case 180 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1176: T__192
-                {
-                mT__192(); 
-
-                }
-                break;
-            case 181 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1183: T__193
-                {
-                mT__193(); 
-
-                }
-                break;
-            case 182 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1190: T__194
-                {
-                mT__194(); 
-
-                }
-                break;
-            case 183 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1197: T__195
-                {
-                mT__195(); 
-
-                }
-                break;
-            case 184 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1204: T__196
-                {
-                mT__196(); 
-
-                }
-                break;
-            case 185 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1211: T__197
-                {
-                mT__197(); 
-
-                }
-                break;
-            case 186 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1218: T__198
-                {
-                mT__198(); 
-
-                }
-                break;
-            case 187 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1225: T__199
-                {
-                mT__199(); 
-
-                }
-                break;
-            case 188 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1232: T__200
-                {
-                mT__200(); 
-
-                }
-                break;
-            case 189 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1239: T__201
-                {
-                mT__201(); 
-
-                }
-                break;
-            case 190 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1246: T__202
-                {
-                mT__202(); 
-
-                }
-                break;
-            case 191 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1253: T__203
-                {
-                mT__203(); 
-
-                }
-                break;
-            case 192 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1260: T__204
-                {
-                mT__204(); 
-
-                }
-                break;
-            case 193 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1267: T__205
-                {
-                mT__205(); 
-
-                }
-                break;
-            case 194 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1274: T__206
-                {
-                mT__206(); 
-
-                }
-                break;
-            case 195 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1281: T__207
-                {
-                mT__207(); 
-
-                }
-                break;
-            case 196 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1288: T__208
-                {
-                mT__208(); 
-
-                }
-                break;
-            case 197 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1295: T__209
-                {
-                mT__209(); 
-
-                }
-                break;
-            case 198 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1302: T__210
-                {
-                mT__210(); 
-
-                }
-                break;
-            case 199 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1309: T__211
-                {
-                mT__211(); 
-
-                }
-                break;
-            case 200 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1316: T__212
-                {
-                mT__212(); 
-
-                }
-                break;
-            case 201 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1323: T__213
-                {
-                mT__213(); 
-
-                }
-                break;
-            case 202 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1330: T__214
-                {
-                mT__214(); 
-
-                }
-                break;
-            case 203 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1337: T__215
-                {
-                mT__215(); 
-
-                }
-                break;
-            case 204 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1344: RULE_HEX
-                {
-                mRULE_HEX(); 
-
-                }
-                break;
-            case 205 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1353: RULE_INT
-                {
-                mRULE_INT(); 
-
-                }
-                break;
-            case 206 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1362: RULE_DECIMAL
-                {
-                mRULE_DECIMAL(); 
-
-                }
-                break;
-            case 207 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1375: RULE_ID
-                {
-                mRULE_ID(); 
-
-                }
-                break;
-            case 208 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1383: RULE_STRING
-                {
-                mRULE_STRING(); 
-
-                }
-                break;
-            case 209 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1395: RULE_ML_COMMENT
-                {
-                mRULE_ML_COMMENT(); 
-
-                }
-                break;
-            case 210 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1411: RULE_SL_COMMENT
-                {
-                mRULE_SL_COMMENT(); 
-
-                }
-                break;
-            case 211 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1427: RULE_WS
-                {
-                mRULE_WS(); 
-
-                }
-                break;
-            case 212 :
-                // ../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g:1:1435: RULE_ANY_OTHER
-                {
-                mRULE_ANY_OTHER(); 
-
-                }
-                break;
-
-        }
-
-    }
-
-
-    protected DFA21 dfa21 = new DFA21(this);
-    static final String DFA21_eotS =
-        "\1\uffff\1\105\1\107\1\111\1\114\1\120\1\123\1\127\1\131\1\133"+
-        "\1\135\1\140\1\142\1\145\35\147\2\uffff\4\147\2\uffff\1\147\6\uffff"+
-        "\1\u00c0\2\u00c3\1\102\5\uffff\1\u00c8\26\uffff\1\u00ca\6\uffff"+
-        "\1\u00cc\4\uffff\1\147\1\uffff\14\147\1\u00df\6\147\1\u00ed\22\147"+
-        "\1\u010c\10\147\1\u0118\21\147\2\uffff\3\147\1\u0130\1\147\1\u0133"+
-        "\4\147\2\uffff\2\147\11\uffff\1\u00c3\12\uffff\1\u013a\1\u013b\20"+
-        "\147\1\uffff\4\147\1\u0151\10\147\1\uffff\21\147\1\u016b\4\147\1"+
-        "\u0170\7\147\1\uffff\2\147\1\u017c\10\147\1\uffff\1\u0185\23\147"+
-        "\1\uffff\2\147\1\uffff\1\147\2\uffff\6\147\2\uffff\4\147\1\u01a7"+
-        "\16\147\1\u01b7\1\147\1\uffff\1\u01b9\13\147\1\u01c7\1\u01c8\1\147"+
-        "\1\u01ca\1\u01cb\7\147\1\u01d3\1\uffff\1\147\1\u01d5\1\147\1\u01d7"+
-        "\1\uffff\1\u01d8\1\147\1\u01da\1\147\1\u01dd\1\u01de\5\147\1\uffff"+
-        "\1\147\1\u01e5\1\u01e6\5\147\1\uffff\1\u01ec\11\147\1\u01f7\11\147"+
-        "\1\u0201\1\147\1\uffff\1\u0203\3\147\1\u0207\5\147\1\uffff\1\147"+
-        "\1\u020f\6\147\1\u0216\2\147\1\u0219\1\u021a\2\147\1\uffff\1\147"+
-        "\1\uffff\11\147\1\u0227\3\147\2\uffff\1\u022b\2\uffff\2\147\1\u022e"+
-        "\4\147\1\uffff\1\147\1\uffff\1\147\2\uffff\1\u0235\2\uffff\1\u0236"+
-        "\2\uffff\4\147\1\u023b\1\147\2\uffff\5\147\1\uffff\12\147\1\uffff"+
-        "\7\147\1\u025c\1\u025d\1\uffff\1\u0260\1\uffff\1\147\1\uffff\1\147"+
-        "\1\uffff\1\u0263\3\147\1\u0267\1\u0268\1\u0269\1\uffff\3\147\1\u026d"+
-        "\1\u026e\1\147\1\uffff\1\u0270\1\147\2\uffff\1\u0273\6\147\1\u027c"+
-        "\3\147\1\u0281\1\uffff\3\147\2\uffff\1\u0285\1\uffff\6\147\2\uffff"+
-        "\3\147\1\u028f\1\uffff\6\147\1\u0298\1\u0299\1\u029a\1\u029b\1\u029c"+
-        "\1\u029d\1\u029e\1\u029f\1\u02a0\6\147\1\u02a7\3\147\1\u02ab\5\147"+
-        "\1\u02b1\2\uffff\2\147\1\uffff\2\147\1\uffff\1\u02b6\2\147\3\uffff"+
-        "\3\147\2\uffff\1\147\1\uffff\2\147\3\uffff\1\u02c3\1\u02c4\3\147"+
-        "\1\u02c8\1\uffff\3\147\1\u02cc\1\uffff\3\147\1\uffff\1\u02d0\2\147"+
-        "\1\u02d4\5\147\1\uffff\5\147\1\u02df\2\147\11\uffff\6\147\1\uffff"+
-        "\3\147\1\uffff\1\u02ec\4\147\1\uffff\3\147\1\u02f5\1\uffff\1\147"+
-        "\1\u02f7\1\147\1\u02f9\1\u02fa\2\147\1\u02fd\6\uffff\3\147\1\uffff"+
-        "\1\u0305\1\u0306\1\u0307\1\uffff\2\147\1\u030a\1\uffff\1\u030b\1"+
-        "\147\1\u030d\1\uffff\2\147\1\u0310\2\147\1\u0313\4\147\1\uffff\4"+
-        "\147\1\u031c\7\147\1\uffff\5\147\1\u032a\1\uffff\1\u032b\1\uffff"+
-        "\1\u032c\1\uffff\1\u032d\2\uffff\2\147\5\uffff\1\u0334\2\147\3\uffff"+
-        "\1\u0338\1\u0339\2\uffff\1\147\1\uffff\1\147\2\uffff\2\147\1\uffff"+
-        "\1\u033e\3\147\1\u0342\1\u0343\2\147\1\uffff\1\u0346\2\147\1\u0349"+
-        "\5\147\1\u034f\1\u0350\2\147\4\uffff\1\147\1\u0354\5\uffff\1\u0359"+
-        "\1\uffff\1\u035a\2\uffff\1\u035b\1\u035c\2\147\1\uffff\3\147\2\uffff"+
-        "\2\147\1\uffff\2\147\1\uffff\5\147\2\uffff\3\147\11\uffff\2\147"+
-        "\1\u0374\12\147\1\u037f\1\147\1\u0381\1\u0382\4\uffff\1\u038c\1"+
-        "\147\1\uffff\12\147\1\uffff\1\147\14\uffff\1\u039b\6\147\1\u03a2"+
-        "\1\147\1\u03a4\2\147\3\uffff\3\147\1\u03ad\2\147\1\uffff\1\147\1"+
-        "\uffff\1\u03b1\1\u03b2\3\uffff\1\u03b6\2\147\1\uffff\2\147\1\u03bb"+
-        "\6\uffff\1\u03c0\2\147\1\u03c3\6\uffff\1\147\1\u03c9\5\uffff\1\147"+
-        "\5\uffff\1\147\4\uffff\1\147\4\uffff\1\u03dd\33\uffff";
-    static final String DFA21_eofS =
-        "\u03f4\uffff";
-    static final String DFA21_minS =
-        "\1\0\1\75\1\174\1\46\1\53\1\55\2\52\4\75\2\56\1\141\1\154\1\143"+
-        "\1\146\3\141\1\145\3\141\1\145\1\141\1\145\1\157\1\147\1\162\1\165"+
-        "\1\157\1\145\1\141\1\170\1\141\1\164\1\145\1\162\1\143\1\162\1\163"+
-        "\2\uffff\1\160\1\157\1\146\1\141\2\uffff\1\150\6\uffff\1\72\2\60"+
-        "\1\44\5\uffff\1\75\26\uffff\1\75\6\uffff\1\74\4\uffff\1\154\1\uffff"+
-        "\1\143\1\164\1\163\1\141\1\155\1\143\2\151\1\156\1\141\1\160\1\163"+
-        "\1\44\2\154\1\162\1\157\1\143\1\164\1\44\1\154\1\141\1\142\1\163"+
-        "\1\154\1\164\1\143\1\145\1\162\1\167\1\166\1\154\1\156\1\147\1\141"+
-        "\1\153\1\141\1\151\1\44\1\160\1\162\2\141\1\145\1\164\1\145\1\147"+
-        "\1\44\1\144\1\151\1\157\1\163\1\164\1\151\1\143\1\163\1\143\1\155"+
-        "\1\141\1\142\1\163\1\145\1\164\1\157\1\145\2\uffff\1\151\1\40\1"+
-        "\151\1\44\1\40\1\44\1\145\1\164\1\156\1\141\2\uffff\1\164\1\151"+
-        "\11\uffff\1\60\12\uffff\2\44\1\145\1\154\1\145\1\151\1\145\1\164"+
-        "\1\145\1\155\1\164\1\145\1\143\1\164\1\143\1\154\1\157\1\164\1\uffff"+
-        "\2\163\1\154\1\141\1\44\1\155\1\141\1\151\1\143\2\151\2\141\1\uffff"+
-        "\1\165\1\156\1\144\1\160\2\145\1\143\1\163\1\145\1\156\1\165\1\145"+
-        "\1\153\1\166\1\160\1\151\1\164\1\44\1\151\1\154\1\145\1\164\1\44"+
-        "\1\144\2\145\1\162\1\154\1\153\1\143\1\uffff\1\145\1\157\1\44\1"+
-        "\143\1\145\1\144\1\162\1\164\2\162\1\145\1\uffff\1\44\1\163\1\165"+
-        "\1\151\1\145\1\157\1\143\1\151\1\153\1\154\1\151\1\145\1\164\1\152"+
-        "\1\143\1\141\1\151\1\165\1\162\1\156\1\uffff\1\156\1\145\1\uffff"+
-        "\1\40\2\uffff\1\162\1\151\1\171\1\163\1\150\1\154\2\uffff\1\156"+
-        "\1\157\1\160\1\164\1\44\1\151\1\162\1\141\1\151\1\143\1\145\1\143"+
-        "\1\150\1\145\1\162\1\141\1\145\1\164\1\145\1\44\1\154\1\uffff\1"+
-        "\44\1\165\1\141\1\145\1\166\1\155\1\151\2\155\1\164\1\145\1\164"+
-        "\2\44\1\150\2\44\1\144\1\162\1\163\1\141\1\151\1\145\1\157\1\44"+
-        "\1\uffff\1\147\1\44\1\155\1\44\1\uffff\1\44\1\154\1\44\1\55\2\44"+
-        "\1\157\1\165\1\145\1\157\1\167\1\uffff\1\153\2\44\1\141\1\157\1"+
-        "\141\1\145\1\156\1\uffff\1\44\1\160\2\156\1\162\1\145\1\160\1\111"+
-        "\1\165\1\162\1\44\1\165\1\145\1\162\1\164\1\166\1\141\1\160\1\163"+
-        "\1\147\1\44\1\162\1\uffff\1\44\1\157\1\40\1\165\1\44\1\145\2\144"+
-        "\1\164\1\171\1\uffff\1\143\1\44\1\164\1\157\1\164\1\162\1\150\1"+
-        "\162\1\44\1\164\1\156\2\44\2\162\1\uffff\1\154\1\uffff\1\154\1\164"+
-        "\1\156\1\151\1\145\1\141\1\154\1\141\1\156\1\44\1\164\1\156\1\145"+
-        "\2\uffff\1\44\2\uffff\1\40\1\156\1\44\1\147\1\157\1\162\1\144\1"+
-        "\uffff\1\141\1\uffff\1\160\2\uffff\1\44\2\uffff\1\44\2\uffff\1\165"+
-        "\1\155\1\162\1\146\1\44\1\151\2\uffff\1\162\1\155\2\147\1\144\1"+
-        "\uffff\1\61\1\145\1\164\1\151\1\163\1\151\1\144\1\164\1\144\1\141"+
-        "\1\uffff\1\163\1\143\1\151\1\145\1\141\1\154\1\163\2\44\1\uffff"+
-        "\1\44\1\uffff\1\156\1\uffff\1\162\1\uffff\1\44\1\163\1\151\1\145"+
-        "\3\44\1\uffff\1\151\1\156\1\145\2\44\1\157\1\uffff\1\44\1\143\2"+
-        "\uffff\1\44\1\40\1\171\1\164\1\151\1\144\1\142\1\44\1\154\1\145"+
-        "\1\162\1\44\1\uffff\1\151\1\163\1\162\2\uffff\1\44\1\uffff\1\145"+
-        "\1\165\1\164\1\163\2\164\2\uffff\1\156\1\155\1\143\1\44\1\uffff"+
-        "\1\156\2\143\1\145\1\141\1\151\11\44\1\163\1\151\1\164\1\163\1\145"+
-        "\1\151\1\44\1\141\1\145\1\164\1\44\1\164\1\160\1\144\1\164\1\117"+
-        "\1\44\2\uffff\1\156\1\144\1\uffff\1\141\1\145\1\uffff\1\44\1\157"+
-        "\1\144\3\uffff\1\157\1\163\1\144\2\uffff\1\156\1\uffff\1\145\1\144"+
-        "\2\uffff\1\144\2\44\1\157\1\151\1\145\1\44\1\uffff\1\163\1\144\1"+
-        "\164\1\44\1\uffff\1\157\1\145\1\163\1\uffff\1\44\1\163\1\151\1\44"+
-        "\1\151\1\171\1\164\1\141\1\145\1\uffff\1\147\1\150\1\157\1\165\1"+
-        "\145\1\44\1\164\1\156\11\uffff\1\163\1\141\1\171\1\111\1\156\1\164"+
-        "\1\uffff\1\153\1\144\1\151\1\uffff\1\44\1\164\1\102\1\151\1\167"+
-        "\1\uffff\1\147\1\40\1\154\1\44\1\uffff\1\156\1\44\1\156\2\44\1\151"+
-        "\1\157\1\44\1\141\1\151\1\145\1\156\2\uffff\2\156\1\144\1\uffff"+
-        "\3\44\1\uffff\1\156\1\144\1\44\1\uffff\1\44\1\145\1\44\1\uffff\1"+
-        "\157\1\40\1\44\1\164\1\156\1\44\1\171\1\165\1\155\1\162\1\uffff"+
-        "\1\145\1\147\1\101\1\154\1\44\1\144\1\145\1\164\1\151\1\145\1\117"+
-        "\1\157\1\uffff\1\151\1\156\1\171\1\157\1\156\1\44\1\uffff\1\44\1"+
-        "\uffff\1\44\1\uffff\1\44\2\uffff\1\172\1\146\1\uffff\1\164\1\147"+
-        "\1\170\1\163\1\44\1\147\1\40\3\uffff\2\44\2\uffff\1\163\1\uffff"+
-        "\1\156\2\uffff\1\151\1\164\1\uffff\1\44\1\156\1\155\1\143\2\44\1"+
-        "\144\1\117\1\uffff\1\44\2\163\1\44\1\141\1\150\1\167\1\156\1\157"+
-        "\2\44\1\156\1\145\4\uffff\1\145\1\44\1\145\1\156\1\164\1\151\1\uffff"+
-        "\1\44\1\uffff\1\44\2\uffff\2\44\1\157\1\141\1\uffff\1\164\1\141"+
-        "\1\145\2\uffff\1\155\1\167\1\uffff\1\164\1\163\1\uffff\1\164\1\157"+
-        "\1\156\1\124\1\156\2\uffff\1\124\1\162\1\144\1\uffff\1\40\1\145"+
-        "\1\40\1\147\4\uffff\1\156\1\147\1\44\1\164\1\156\1\151\1\156\1\141"+
-        "\1\151\1\157\1\154\1\145\1\151\1\44\1\151\2\44\1\146\1\144\1\160"+
-        "\1\156\1\44\1\145\1\uffff\1\151\1\164\1\156\1\145\1\156\1\157\1"+
-        "\162\1\144\1\162\1\155\1\uffff\1\155\5\uffff\1\55\4\uffff\1\145"+
-        "\1\uffff\1\44\1\157\1\141\1\151\1\162\1\143\1\156\1\44\1\145\1\44"+
-        "\2\145\2\144\1\uffff\1\156\1\147\1\163\1\44\1\145\1\111\1\uffff"+
-        "\1\162\1\uffff\2\44\1\157\1\156\1\55\1\44\1\145\1\164\1\uffff\1"+
-        "\111\1\144\1\44\2\uffff\1\165\1\164\1\144\1\uffff\1\44\1\162\1\144"+
-        "\1\44\1\uffff\1\142\1\145\1\157\1\156\1\uffff\1\141\1\44\1\uffff"+
-        "\1\154\1\147\1\165\2\164\1\uffff\2\145\1\142\1\145\1\157\1\40\1"+
-        "\162\1\154\1\147\2\162\1\40\2\145\1\44\1\141\1\162\1\40\1\162\1"+
-        "\uffff\1\156\1\141\1\162\1\40\1\144\1\156\1\141\1\162\2\uffff\1"+
-        "\144\1\156\1\141\2\uffff\1\144\1\156\2\uffff\1\144\2\uffff";
-    static final String DFA21_maxS =
-        "\1\uffff\1\76\1\174\1\46\1\75\1\76\5\75\1\76\1\56\1\72\1\141\1"+
-        "\170\1\171\1\156\1\162\1\157\1\165\1\157\1\162\1\165\1\151\1\145"+
-        "\1\171\1\151\1\157\1\170\1\162\1\165\1\162\1\145\1\141\1\170\1\141"+
-        "\1\165\1\145\1\162\1\143\1\162\1\163\2\uffff\1\163\1\157\1\166\1"+
-        "\145\2\uffff\1\151\6\uffff\1\72\1\170\1\154\1\172\5\uffff\1\75\26"+
-        "\uffff\1\75\6\uffff\1\74\4\uffff\1\162\1\uffff\2\164\1\163\1\141"+
-        "\1\160\1\154\2\151\1\156\1\141\1\160\1\163\1\172\1\154\2\162\1\157"+
-        "\1\166\1\164\1\172\1\165\1\141\1\142\1\164\1\167\1\164\1\147\1\157"+
-        "\1\162\1\170\1\166\1\154\1\156\1\163\1\166\1\153\1\141\1\163\1\172"+
-        "\1\160\1\162\1\171\1\141\1\145\1\164\1\145\1\147\1\172\1\144\1\151"+
-        "\1\157\1\163\1\164\1\157\1\143\1\163\1\160\1\155\1\141\1\142\1\163"+
-        "\1\145\1\164\1\157\1\145\2\uffff\1\151\1\40\1\151\1\172\1\145\1"+
-        "\172\1\145\1\164\1\156\1\141\2\uffff\1\164\1\151\11\uffff\1\154"+
-        "\12\uffff\2\172\1\145\1\154\1\145\1\151\1\145\1\164\1\145\1\155"+
-        "\1\164\1\145\1\143\1\164\1\143\1\154\1\157\1\164\1\uffff\2\163\1"+
-        "\164\1\141\1\172\1\155\1\141\1\151\1\143\2\151\2\141\1\uffff\1\165"+
-        "\1\156\1\144\1\160\2\145\1\143\1\163\1\145\1\156\1\165\1\145\1\153"+
-        "\1\166\1\160\1\151\1\164\1\172\1\151\1\154\1\145\1\164\1\172\1\144"+
-        "\2\145\1\162\1\154\1\153\1\163\1\uffff\1\145\1\157\1\172\1\143\1"+
-        "\145\1\144\1\162\1\164\2\162\1\145\1\uffff\1\172\1\163\1\165\1\151"+
-        "\1\145\1\157\1\143\1\151\1\153\1\154\1\151\1\145\1\164\1\152\1\143"+
-        "\1\141\2\165\1\162\1\156\1\uffff\1\156\1\145\1\uffff\1\40\2\uffff"+
-        "\1\162\1\151\1\171\1\163\1\150\1\154\2\uffff\1\156\1\157\1\160\1"+
-        "\164\1\172\1\151\1\162\1\141\1\151\1\143\1\145\1\143\1\150\1\145"+
-        "\1\162\1\141\1\145\1\164\1\145\1\172\1\154\1\uffff\1\172\1\165\1"+
-        "\141\1\162\1\166\1\155\1\151\2\155\1\164\1\151\1\164\2\172\1\150"+
-        "\2\172\1\144\1\162\1\163\1\141\1\151\1\145\1\157\1\172\1\uffff\1"+
-        "\147\1\172\1\155\1\172\1\uffff\1\172\1\154\1\172\1\163\2\172\1\157"+
-        "\1\165\1\145\1\157\1\167\1\uffff\1\153\2\172\1\141\1\157\1\141\1"+
-        "\145\1\156\1\uffff\1\172\1\160\2\156\1\162\1\145\1\160\1\123\1\165"+
-        "\1\162\1\172\1\165\1\145\1\162\1\164\1\166\1\141\1\160\1\163\1\147"+
-        "\1\172\1\162\1\uffff\1\172\1\157\1\40\1\165\1\172\1\145\1\163\1"+
-        "\144\1\164\1\171\1\uffff\1\143\1\172\1\164\1\157\1\164\1\162\1\150"+
-        "\1\162\1\172\1\164\1\156\2\172\2\162\1\uffff\1\154\1\uffff\1\154"+
-        "\1\164\1\156\1\151\1\145\1\141\1\154\1\141\1\156\1\172\1\164\1\156"+
-        "\1\145\2\uffff\1\172\2\uffff\1\40\1\156\1\172\1\147\1\157\1\162"+
-        "\1\144\1\uffff\1\141\1\uffff\1\160\2\uffff\1\172\2\uffff\1\172\2"+
-        "\uffff\1\165\1\155\1\162\1\146\1\172\1\151\2\uffff\1\162\1\155\2"+
-        "\147\1\144\1\uffff\1\71\1\145\1\164\1\151\1\163\1\151\1\156\1\164"+
-        "\1\144\1\141\1\uffff\1\163\1\143\1\151\1\145\1\141\1\154\1\163\2"+
-        "\172\1\uffff\1\172\1\uffff\1\156\1\uffff\1\162\1\uffff\1\172\1\163"+
-        "\1\151\1\145\3\172\1\uffff\1\151\1\156\1\145\2\172\1\157\1\uffff"+
-        "\1\172\1\143\2\uffff\1\172\1\55\1\171\1\164\1\151\1\144\1\142\1"+
-        "\172\1\154\1\145\1\162\1\172\1\uffff\1\151\1\163\1\162\2\uffff\1"+
-        "\172\1\uffff\1\145\1\165\1\164\1\163\2\164\2\uffff\1\156\1\155\1"+
-        "\143\1\172\1\uffff\1\156\1\143\1\163\1\145\1\141\1\151\11\172\1"+
-        "\163\1\151\1\164\1\163\1\145\1\151\1\172\1\141\1\145\1\164\1\172"+
-        "\1\164\1\160\1\144\1\164\1\117\1\172\2\uffff\1\156\1\144\1\uffff"+
-        "\1\141\1\145\1\uffff\1\172\1\157\1\144\3\uffff\1\157\1\163\1\144"+
-        "\2\uffff\1\156\1\uffff\1\145\1\144\2\uffff\1\165\2\172\1\157\1\151"+
-        "\1\145\1\172\1\uffff\1\163\1\144\1\164\1\172\1\uffff\1\157\1\145"+
-        "\1\163\1\uffff\1\172\1\163\1\171\1\172\1\151\1\171\1\164\1\141\1"+
-        "\145\1\uffff\1\147\1\150\1\157\1\165\1\145\1\172\1\164\1\156\11"+
-        "\uffff\1\163\1\141\1\171\1\123\1\156\1\164\1\uffff\1\153\1\144\1"+
-        "\151\1\uffff\1\172\1\164\1\117\1\151\1\167\1\uffff\1\147\1\40\1"+
-        "\154\1\172\1\uffff\1\156\1\172\1\156\2\172\1\151\1\157\1\172\1\141"+
-        "\1\151\1\145\1\156\2\uffff\2\156\1\144\1\uffff\3\172\1\uffff\1\156"+
-        "\1\144\1\172\1\uffff\1\172\1\145\1\172\1\uffff\1\157\1\40\1\172"+
-        "\1\164\1\156\1\172\1\171\1\165\1\155\1\162\1\uffff\1\145\1\147\1"+
-        "\101\1\154\1\172\1\156\1\145\1\164\1\151\1\145\1\117\1\157\1\uffff"+
-        "\1\151\1\156\1\171\1\157\1\156\1\172\1\uffff\1\172\1\uffff\1\172"+
-        "\1\uffff\1\172\2\uffff\1\172\1\146\1\uffff\1\164\1\147\1\170\1\163"+
-        "\1\172\1\147\1\40\3\uffff\2\172\2\uffff\1\163\1\uffff\1\156\2\uffff"+
-        "\1\151\1\164\1\uffff\1\172\1\156\1\155\1\143\2\172\1\144\1\117\1"+
-        "\uffff\1\172\2\163\1\172\1\141\1\150\1\167\1\156\1\157\2\172\1\156"+
-        "\1\145\4\uffff\1\145\1\172\1\145\1\156\1\164\1\151\1\uffff\1\172"+
-        "\1\uffff\1\172\2\uffff\2\172\1\157\1\141\1\uffff\1\164\1\141\1\145"+
-        "\2\uffff\1\155\1\167\1\uffff\1\164\1\163\1\uffff\1\164\1\157\1\156"+
-        "\1\124\1\156\2\uffff\1\124\1\162\1\144\1\uffff\1\40\1\145\1\40\1"+
-        "\147\4\uffff\1\156\1\147\1\172\1\164\1\156\1\151\1\156\1\141\1\151"+
-        "\1\157\1\154\1\145\1\151\1\172\1\151\2\172\1\162\1\144\1\167\1\156"+
-        "\1\172\1\145\1\uffff\1\151\1\164\1\156\1\145\1\156\1\157\1\162\1"+
-        "\144\1\162\1\155\1\uffff\1\155\5\uffff\1\55\4\uffff\1\145\1\uffff"+
-        "\1\172\1\157\1\141\1\151\1\162\1\143\1\156\1\172\1\145\1\172\2\145"+
-        "\1\151\1\144\1\uffff\1\156\1\147\1\163\1\172\1\145\1\111\1\uffff"+
-        "\1\162\1\uffff\2\172\1\157\1\156\1\55\1\172\1\145\1\164\1\uffff"+
-        "\1\111\1\144\1\172\2\uffff\1\165\1\164\1\151\1\uffff\1\172\1\162"+
-        "\1\144\1\172\1\uffff\1\142\1\145\1\157\1\156\1\uffff\1\141\1\172"+
-        "\1\uffff\1\154\1\147\1\165\2\164\1\uffff\2\145\1\142\1\145\1\157"+
-        "\1\40\1\162\1\154\1\147\2\162\1\40\2\145\1\172\1\141\1\162\1\40"+
-        "\1\162\1\uffff\1\156\1\141\1\162\1\40\1\147\1\156\1\141\1\162\2"+
-        "\uffff\1\147\1\156\1\141\2\uffff\1\147\1\156\2\uffff\1\147\2\uffff";
-    static final String DFA21_acceptS =
-        "\53\uffff\1\146\1\147\4\uffff\1\177\1\u0080\1\uffff\1\u00a0\1\u00a1"+
-        "\1\u00a2\1\u00a3\1\u00a4\1\u00a7\4\uffff\1\u00cf\2\u00d0\1\u00d3"+
-        "\1\u00d4\1\uffff\1\23\1\1\1\2\1\u00c9\1\3\1\u00b9\1\4\1\35\1\26"+
-        "\1\5\1\20\1\36\1\27\1\6\1\31\1\30\1\7\1\u00d1\1\u00d2\1\32\1\10"+
-        "\1\33\1\uffff\1\34\1\15\1\16\1\24\1\101\1\17\1\uffff\1\37\1\25\1"+
-        "\u00c8\1\u00b8\1\uffff\1\u00cf\101\uffff\1\146\1\147\12\uffff\1"+
-        "\177\1\u0080\2\uffff\1\u00a0\1\u00a1\1\u00a2\1\u00a3\1\u00a4\1\u00a7"+
-        "\1\u00c7\1\u00ab\1\u00cc\1\uffff\1\u00cd\1\u00ce\1\u00d0\1\u00d3"+
-        "\1\13\1\11\1\14\1\12\1\21\1\22\22\uffff\1\u00a8\15\uffff\1\u00ae"+
-        "\36\uffff\1\167\13\uffff\1\u00a6\24\uffff\1\u0091\2\uffff\1\175"+
-        "\1\uffff\1\u00bd\1\u0083\6\uffff\1\40\1\u00ca\25\uffff\1\152\31"+
-        "\uffff\1\u00af\4\uffff\1\61\13\uffff\1\u00b4\10\uffff\1\176\26\uffff"+
-        "\1\171\12\uffff\1\u00a9\17\uffff\1\u008b\1\uffff\1\u0082\15\uffff"+
-        "\1\160\1\u00ac\1\uffff\1\51\1\153\7\uffff\1\56\1\uffff\1\u00b0\1"+
-        "\uffff\1\60\1\62\1\uffff\1\102\1\63\1\uffff\1\65\1\154\6\uffff\1"+
-        "\u00cb\1\66\5\uffff\1\u0086\12\uffff\1\123\11\uffff\1\161\1\uffff"+
-        "\1\u0084\1\uffff\1\170\1\uffff\1\u008c\7\uffff\1\45\6\uffff\1\u00be"+
-        "\2\uffff\1\46\1\57\14\uffff\1\103\3\uffff\1\u00b7\1\u0094\1\uffff"+
-        "\1\52\6\uffff\1\u008a\1\u008e\4\uffff\1\u00b2\40\uffff\1\142\1\151"+
-        "\2\uffff\1\174\2\uffff\1\u00ad\3\uffff\1\u00c5\1\162\1\42\3\uffff"+
-        "\1\u0085\1\u00aa\1\uffff\1\43\2\uffff\1\157\1\166\7\uffff\1\u0081"+
-        "\4\uffff\1\156\3\uffff\1\u00b3\11\uffff\1\u00b1\10\uffff\1\104\1"+
-        "\105\1\106\1\107\1\110\1\111\1\112\1\113\1\114\6\uffff\1\135\3\uffff"+
-        "\1\125\5\uffff\1\141\4\uffff\1\41\14\uffff\1\u00b5\1\47\3\uffff"+
-        "\1\u0087\3\uffff\1\50\3\uffff\1\145\3\uffff\1\64\12\uffff\1\75\14"+
-        "\uffff\1\126\6\uffff\1\u00c6\1\uffff\1\u0088\1\uffff\1\u00c3\1\uffff"+
-        "\1\53\1\u00c1\2\uffff\1\u00bf\7\uffff\1\u0093\1\u00c4\1\150\2\uffff"+
-        "\1\54\1\55\1\uffff\1\172\1\uffff\1\u00bb\1\67\2\uffff\1\u00bc\10"+
-        "\uffff\1\124\15\uffff\1\165\1\u00c0\1\44\1\76\6\uffff\1\100\1\uffff"+
-        "\1\u00ba\1\uffff\1\173\1\u00c2\4\uffff\1\u0089\3\uffff\1\77\1\143"+
-        "\2\uffff\1\136\2\uffff\1\117\5\uffff\1\131\1\132\3\uffff\1\u00a5"+
-        "\4\uffff\1\144\1\155\1\164\1\163\27\uffff\1\72\12\uffff\1\127\1"+
-        "\uffff\1\134\1\u00b6\1\u008d\1\u008f\1\u0090\1\uffff\1\u0098\1\u0099"+
-        "\1\u009a\1\u009b\1\uffff\1\70\16\uffff\1\71\6\uffff\1\120\1\uffff"+
-        "\1\122\10\uffff\1\116\3\uffff\1\130\1\133\3\uffff\1\73\4\uffff\1"+
-        "\121\4\uffff\1\74\2\uffff\1\140\5\uffff\1\137\23\uffff\1\115\10"+
-        "\uffff\1\u0092\1\u0095\3\uffff\1\u0096\1\u0097\2\uffff\1\u009c\1"+
-        "\u009d\1\uffff\1\u009e\1\u009f";
-    static final String DFA21_specialS =
-        "\1\0\u03f3\uffff}>";
-    static final String[] DFA21_transitionS = {
-            "\11\102\2\101\2\102\1\101\22\102\1\101\1\11\1\77\1\67\1\76"+
-            "\1\10\1\3\1\100\1\61\1\62\1\6\1\4\1\65\1\5\1\14\1\7\1\73\11"+
-            "\74\1\72\1\71\1\13\1\1\1\12\1\15\1\64\1\50\1\37\1\47\1\46\1"+
-            "\43\1\76\1\51\6\76\1\44\1\76\1\40\1\76\1\41\1\45\1\42\1\52\5"+
-            "\76\1\70\1\102\1\66\1\75\1\76\1\102\1\35\1\34\1\24\1\23\1\17"+
-            "\1\22\1\36\1\33\1\21\1\56\1\76\1\30\1\60\1\27\1\57\1\26\1\76"+
-            "\1\25\1\20\1\32\1\55\1\16\1\63\1\76\1\31\1\76\1\53\1\2\1\54"+
-            "\uff82\102",
-            "\1\103\1\104",
-            "\1\106",
-            "\1\110",
-            "\1\113\21\uffff\1\112",
-            "\1\117\17\uffff\1\115\1\116",
-            "\1\122\22\uffff\1\121",
-            "\1\125\4\uffff\1\126\15\uffff\1\124",
-            "\1\130",
-            "\1\132",
-            "\1\134",
-            "\1\137\1\136",
-            "\1\141",
-            "\1\144\13\uffff\1\143",
-            "\1\146",
-            "\1\152\1\uffff\1\151\11\uffff\1\150",
-            "\1\161\1\uffff\1\155\6\uffff\1\156\7\uffff\1\153\1\154\1\uffff"+
-            "\1\157\1\uffff\1\160",
-            "\1\164\6\uffff\1\162\1\163",
-            "\1\165\7\uffff\1\166\5\uffff\1\167\2\uffff\1\170",
-            "\1\172\3\uffff\1\171\11\uffff\1\173",
-            "\1\177\6\uffff\1\175\6\uffff\1\174\5\uffff\1\176",
-            "\1\u0081\11\uffff\1\u0080",
-            "\1\u0082\3\uffff\1\u0084\14\uffff\1\u0083",
-            "\1\u0086\3\uffff\1\u0085\11\uffff\1\u0088\5\uffff\1\u0087",
-            "\1\u0089\3\uffff\1\u008a\3\uffff\1\u008b",
-            "\1\u008c",
-            "\1\u008d\6\uffff\1\u0090\6\uffff\1\u008e\2\uffff\1\u0091\6"+
-            "\uffff\1\u008f",
-            "\1\u0092\3\uffff\1\u0093",
-            "\1\u0094",
-            "\1\u0096\6\uffff\1\u0098\4\uffff\1\u0097\2\uffff\1\u0095\1"+
-            "\uffff\1\u0099",
-            "\1\u009a",
-            "\1\u009b",
-            "\1\u009c\2\uffff\1\u009d",
-            "\1\u009e",
-            "\1\u009f",
-            "\1\u00a0",
-            "\1\u00a1",
-            "\1\u00a2\1\u00a3",
-            "\1\u00a4",
-            "\1\u00a5",
-            "\1\u00a6",
-            "\1\u00a7",
-            "\1\u00a8",
-            "",
-            "",
-            "\1\u00ac\2\uffff\1\u00ab",
-            "\1\u00ad",
-            "\1\u00b0\7\uffff\1\u00af\1\uffff\1\u00b2\1\uffff\1\u00ae\3"+
-            "\uffff\1\u00b1",
-            "\1\u00b3\3\uffff\1\u00b4",
-            "",
-            "",
-            "\1\u00b8\1\u00b7",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\u00bf",
-            "\12\u00c2\10\uffff\1\u00c4\1\uffff\3\u00c4\5\uffff\1\u00c4"+
-            "\13\uffff\1\u00c1\6\uffff\1\u00c2\2\uffff\1\u00c4\1\uffff\3"+
-            "\u00c4\5\uffff\1\u00c4\13\uffff\1\u00c1",
-            "\12\u00c2\10\uffff\1\u00c4\1\uffff\3\u00c4\5\uffff\1\u00c4"+
-            "\22\uffff\1\u00c2\2\uffff\1\u00c4\1\uffff\3\u00c4\5\uffff\1"+
-            "\u00c4",
-            "\1\147\34\uffff\32\147\4\uffff\1\147\1\uffff\32\147",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\u00c7",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\u00c9",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\u00cb",
-            "",
-            "",
-            "",
-            "",
-            "\1\u00cd\5\uffff\1\u00ce",
-            "",
-            "\1\u00d1\14\uffff\1\u00d0\3\uffff\1\u00cf",
-            "\1\u00d2",
-            "\1\u00d3",
-            "\1\u00d4",
-            "\1\u00d6\2\uffff\1\u00d5",
-            "\1\u00d7\10\uffff\1\u00d8",
-            "\1\u00d9",
-            "\1\u00da",
-            "\1\u00db",
-            "\1\u00dc",
-            "\1\u00dd",
-            "\1\u00de",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u00e0",
-            "\1\u00e2\1\uffff\1\u00e3\3\uffff\1\u00e1",
-            "\1\u00e4",
-            "\1\u00e5",
-            "\1\u00ea\2\uffff\1\u00e6\13\uffff\1\u00e9\1\u00e8\1\u00eb"+
-            "\1\uffff\1\u00e7",
-            "\1\u00ec",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u00ee\1\uffff\1\u00f0\6\uffff\1\u00ef",
-            "\1\u00f1",
-            "\1\u00f2",
-            "\1\u00f3\1\u00f4",
-            "\1\u00f6\10\uffff\1\u00f7\1\uffff\1\u00f5",
-            "\1\u00f8",
-            "\1\u00fa\3\uffff\1\u00f9",
-            "\1\u00fb\11\uffff\1\u00fc",
-            "\1\u00fd",
-            "\1\u00ff\1\u00fe",
-            "\1\u0100",
-            "\1\u0101",
-            "\1\u0102",
-            "\1\u0104\13\uffff\1\u0103",
-            "\1\u0105\24\uffff\1\u0106",
-            "\1\u0107",
-            "\1\u0108",
-            "\1\u0109\11\uffff\1\u010a",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\17\147\1\u010b\12\147",
-            "\1\u010d",
-            "\1\u010e",
-            "\1\u0110\23\uffff\1\u0111\3\uffff\1\u010f",
-            "\1\u0112",
-            "\1\u0113",
-            "\1\u0114",
-            "\1\u0115",
-            "\1\u0116",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\2\147\1\u0117\27\147",
-            "\1\u0119",
-            "\1\u011a",
-            "\1\u011b",
-            "\1\u011c",
-            "\1\u011d",
-            "\1\u011e\5\uffff\1\u011f",
-            "\1\u0120",
-            "\1\u0121",
-            "\1\u0122\14\uffff\1\u0123",
-            "\1\u0124",
-            "\1\u0125",
-            "\1\u0126",
-            "\1\u0127",
-            "\1\u0128",
-            "\1\u0129",
-            "\1\u012a",
-            "\1\u012b",
-            "",
-            "",
-            "\1\u012c",
-            "\1\u012d",
-            "\1\u012e",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\3\147\1\u012f\26\147",
-            "\1\u0132\104\uffff\1\u0131",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0134",
-            "\1\u0135",
-            "\1\u0136",
-            "\1\u0137",
-            "",
-            "",
-            "\1\u0138",
-            "\1\u0139",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\12\u00c2\10\uffff\1\u00c4\1\uffff\3\u00c4\5\uffff\1\u00c4"+
-            "\22\uffff\1\u00c2\2\uffff\1\u00c4\1\uffff\3\u00c4\5\uffff\1"+
-            "\u00c4",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u013c",
-            "\1\u013d",
-            "\1\u013e",
-            "\1\u013f",
-            "\1\u0140",
-            "\1\u0141",
-            "\1\u0142",
-            "\1\u0143",
-            "\1\u0144",
-            "\1\u0145",
-            "\1\u0146",
-            "\1\u0147",
-            "\1\u0148",
-            "\1\u0149",
-            "\1\u014a",
-            "\1\u014b",
-            "",
-            "\1\u014c",
-            "\1\u014d",
-            "\1\u014f\7\uffff\1\u014e",
-            "\1\u0150",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0152",
-            "\1\u0153",
-            "\1\u0154",
-            "\1\u0155",
-            "\1\u0156",
-            "\1\u0157",
-            "\1\u0158",
-            "\1\u0159",
-            "",
-            "\1\u015a",
-            "\1\u015b",
-            "\1\u015c",
-            "\1\u015d",
-            "\1\u015e",
-            "\1\u015f",
-            "\1\u0160",
-            "\1\u0161",
-            "\1\u0162",
-            "\1\u0163",
-            "\1\u0164",
-            "\1\u0165",
-            "\1\u0166",
-            "\1\u0167",
-            "\1\u0168",
-            "\1\u0169",
-            "\1\u016a",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u016c",
-            "\1\u016d",
-            "\1\u016e",
-            "\1\u016f",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0171",
-            "\1\u0172",
-            "\1\u0173",
-            "\1\u0174",
-            "\1\u0175",
-            "\1\u0176",
-            "\1\u0177\14\uffff\1\u0179\2\uffff\1\u0178",
-            "",
-            "\1\u017a",
-            "\1\u017b",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u017d",
-            "\1\u017e",
-            "\1\u017f",
-            "\1\u0180",
-            "\1\u0181",
-            "\1\u0182",
-            "\1\u0183",
-            "\1\u0184",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0186",
-            "\1\u0187",
-            "\1\u0188",
-            "\1\u0189",
-            "\1\u018a",
-            "\1\u018b",
-            "\1\u018c",
-            "\1\u018d",
-            "\1\u018e",
-            "\1\u018f",
-            "\1\u0190",
-            "\1\u0191",
-            "\1\u0192",
-            "\1\u0193",
-            "\1\u0194",
-            "\1\u0195\13\uffff\1\u0196",
-            "\1\u0197",
-            "\1\u0198",
-            "\1\u0199",
-            "",
-            "\1\u019a",
-            "\1\u019b",
-            "",
-            "\1\u019c",
-            "",
-            "",
-            "\1\u019d",
-            "\1\u019e",
-            "\1\u019f",
-            "\1\u01a0",
-            "\1\u01a1",
-            "\1\u01a2",
-            "",
-            "",
-            "\1\u01a3",
-            "\1\u01a4",
-            "\1\u01a5",
-            "\1\u01a6",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01a8",
-            "\1\u01a9",
-            "\1\u01aa",
-            "\1\u01ab",
-            "\1\u01ac",
-            "\1\u01ad",
-            "\1\u01ae",
-            "\1\u01af",
-            "\1\u01b0",
-            "\1\u01b1",
-            "\1\u01b2",
-            "\1\u01b3",
-            "\1\u01b4",
-            "\1\u01b5",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\4\147\1\u01b6\25\147",
-            "\1\u01b8",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01ba",
-            "\1\u01bb",
-            "\1\u01bc\14\uffff\1\u01bd",
-            "\1\u01be",
-            "\1\u01bf",
-            "\1\u01c0",
-            "\1\u01c1",
-            "\1\u01c2",
-            "\1\u01c3",
-            "\1\u01c5\3\uffff\1\u01c4",
-            "\1\u01c6",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01c9",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01cc",
-            "\1\u01cd",
-            "\1\u01ce",
-            "\1\u01cf",
-            "\1\u01d0",
-            "\1\u01d1",
-            "\1\u01d2",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u01d4",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01d6",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01d9",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01db\105\uffff\1\u01dc",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01df",
-            "\1\u01e0",
-            "\1\u01e1",
-            "\1\u01e2",
-            "\1\u01e3",
-            "",
-            "\1\u01e4",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01e7",
-            "\1\u01e8",
-            "\1\u01e9",
-            "\1\u01ea",
-            "\1\u01eb",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01ed",
-            "\1\u01ee",
-            "\1\u01ef",
-            "\1\u01f0",
-            "\1\u01f1",
-            "\1\u01f2",
-            "\1\u01f3\11\uffff\1\u01f4",
-            "\1\u01f5",
-            "\1\u01f6",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u01f8",
-            "\1\u01f9",
-            "\1\u01fa",
-            "\1\u01fb",
-            "\1\u01fc",
-            "\1\u01fd",
-            "\1\u01fe",
-            "\1\u01ff",
-            "\1\u0200",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0202",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0204",
-            "\1\u0205",
-            "\1\u0206",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0208",
-            "\1\u0209\16\uffff\1\u020a",
-            "\1\u020b",
-            "\1\u020c",
-            "\1\u020d",
-            "",
-            "\1\u020e",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0210",
-            "\1\u0211",
-            "\1\u0212",
-            "\1\u0213",
-            "\1\u0214",
-            "\1\u0215",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0217",
-            "\1\u0218",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u021b",
-            "\1\u021c",
-            "",
-            "\1\u021d",
-            "",
-            "\1\u021e",
-            "\1\u021f",
-            "\1\u0220",
-            "\1\u0221",
-            "\1\u0222",
-            "\1\u0223",
-            "\1\u0224",
-            "\1\u0225",
-            "\1\u0226",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0228",
-            "\1\u0229",
-            "\1\u022a",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\u022c",
-            "\1\u022d",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u022f",
-            "\1\u0230",
-            "\1\u0231",
-            "\1\u0232",
-            "",
-            "\1\u0233",
-            "",
-            "\1\u0234",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\u0237",
-            "\1\u0238",
-            "\1\u0239",
-            "\1\u023a",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u023c",
-            "",
-            "",
-            "\1\u023d",
-            "\1\u023e",
-            "\1\u023f",
-            "\1\u0240",
-            "\1\u0241",
-            "",
-            "\1\u0242\1\u0243\1\u0244\1\u0245\1\u0246\1\u0247\1\u0248\1"+
-            "\u0249\1\u024a",
-            "\1\u024b",
-            "\1\u024c",
-            "\1\u024d",
-            "\1\u024e",
-            "\1\u024f",
-            "\1\u0251\11\uffff\1\u0250",
-            "\1\u0252",
-            "\1\u0253",
-            "\1\u0254",
-            "",
-            "\1\u0255",
-            "\1\u0256",
-            "\1\u0257",
-            "\1\u0258",
-            "\1\u0259",
-            "\1\u025a",
-            "\1\u025b",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\4\147\1\u025f\3\147\1\u025e\21\147",
-            "",
-            "\1\u0261",
-            "",
-            "\1\u0262",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0264",
-            "\1\u0265",
-            "\1\u0266",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u026a",
-            "\1\u026b",
-            "\1\u026c",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u026f",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0271",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\4\147\1\u0272\25\147",
-            "\1\u0274\14\uffff\1\u0275",
-            "\1\u0276",
-            "\1\u0277",
-            "\1\u0278",
-            "\1\u0279",
-            "\1\u027a",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\3\147\1\u027b\26\147",
-            "\1\u027d",
-            "\1\u027e",
-            "\1\u027f",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\22\147\1\u0280\7\147",
-            "",
-            "\1\u0282",
-            "\1\u0283",
-            "\1\u0284",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u0286",
-            "\1\u0287",
-            "\1\u0288",
-            "\1\u0289",
-            "\1\u028a",
-            "\1\u028b",
-            "",
-            "",
-            "\1\u028c",
-            "\1\u028d",
-            "\1\u028e",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u0290",
-            "\1\u0291",
-            "\1\u0292\14\uffff\1\u0294\2\uffff\1\u0293",
-            "\1\u0295",
-            "\1\u0296",
-            "\1\u0297",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02a1",
-            "\1\u02a2",
-            "\1\u02a3",
-            "\1\u02a4",
-            "\1\u02a5",
-            "\1\u02a6",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02a8",
-            "\1\u02a9",
-            "\1\u02aa",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02ac",
-            "\1\u02ad",
-            "\1\u02ae",
-            "\1\u02af",
-            "\1\u02b0",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\u02b2",
-            "\1\u02b3",
-            "",
-            "\1\u02b4",
-            "\1\u02b5",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02b7",
-            "\1\u02b8",
-            "",
-            "",
-            "",
-            "\1\u02b9",
-            "\1\u02ba",
-            "\1\u02bb",
-            "",
-            "",
-            "\1\u02bc",
-            "",
-            "\1\u02bd",
-            "\1\u02be",
-            "",
-            "",
-            "\1\u02bf\16\uffff\1\u02c0\1\u02c1\1\u02c2",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02c5",
-            "\1\u02c6",
-            "\1\u02c7",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u02c9",
-            "\1\u02ca",
-            "\1\u02cb",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u02cd",
-            "\1\u02ce",
-            "\1\u02cf",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02d1",
-            "\1\u02d2\17\uffff\1\u02d3",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02d5",
-            "\1\u02d6",
-            "\1\u02d7",
-            "\1\u02d8",
-            "\1\u02d9",
-            "",
-            "\1\u02da",
-            "\1\u02db",
-            "\1\u02dc",
-            "\1\u02dd",
-            "\1\u02de",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02e0",
-            "\1\u02e1",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\u02e2",
-            "\1\u02e3",
-            "\1\u02e4",
-            "\1\u02e5\11\uffff\1\u02e6",
-            "\1\u02e7",
-            "\1\u02e8",
-            "",
-            "\1\u02e9",
-            "\1\u02ea",
-            "\1\u02eb",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02ed",
-            "\1\u02ef\14\uffff\1\u02ee",
-            "\1\u02f0",
-            "\1\u02f1",
-            "",
-            "\1\u02f2",
-            "\1\u02f3",
-            "\1\u02f4",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u02f6",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02f8",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02fb",
-            "\1\u02fc",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u02fe",
-            "\1\u02ff",
-            "\1\u0300",
-            "\1\u0301",
-            "",
-            "",
-            "\1\u0302",
-            "\1\u0303",
-            "\1\u0304",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u0308",
-            "\1\u0309",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u030c",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u030e",
-            "\1\u030f",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0311",
-            "\1\u0312",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0314",
-            "\1\u0315",
-            "\1\u0316",
-            "\1\u0317",
-            "",
-            "\1\u0318",
-            "\1\u0319",
-            "\1\u031a",
-            "\1\u031b",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u031d\11\uffff\1\u031e",
-            "\1\u031f",
-            "\1\u0320",
-            "\1\u0321",
-            "\1\u0322",
-            "\1\u0323",
-            "\1\u0324",
-            "",
-            "\1\u0325",
-            "\1\u0326",
-            "\1\u0327",
-            "\1\u0328",
-            "\1\u0329",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\u032e",
-            "\1\u032f",
-            "",
-            "\1\u0330",
-            "\1\u0331",
-            "\1\u0332",
-            "\1\u0333",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0335",
-            "\1\u0336",
-            "",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\22\147\1\u0337\7\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\u033a",
-            "",
-            "\1\u033b",
-            "",
-            "",
-            "\1\u033c",
-            "\1\u033d",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u033f",
-            "\1\u0340",
-            "\1\u0341",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0344",
-            "\1\u0345",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0347",
-            "\1\u0348",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u034a",
-            "\1\u034b",
-            "\1\u034c",
-            "\1\u034d",
-            "\1\u034e",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0351",
-            "\1\u0352",
-            "",
-            "",
-            "",
-            "",
-            "\1\u0353",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0355",
-            "\1\u0356",
-            "\1\u0357",
-            "\1\u0358",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u035d",
-            "\1\u035e",
-            "",
-            "\1\u035f",
-            "\1\u0360",
-            "\1\u0361",
-            "",
-            "",
-            "\1\u0362",
-            "\1\u0363",
-            "",
-            "\1\u0364",
-            "\1\u0365",
-            "",
-            "\1\u0366",
-            "\1\u0367",
-            "\1\u0368",
-            "\1\u0369",
-            "\1\u036a",
-            "",
-            "",
-            "\1\u036b",
-            "\1\u036c",
-            "\1\u036d",
-            "",
-            "\1\u036e",
-            "\1\u036f",
-            "\1\u0370",
-            "\1\u0371",
-            "",
-            "",
-            "",
-            "",
-            "\1\u0372",
-            "\1\u0373",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0375",
-            "\1\u0376",
-            "\1\u0377",
-            "\1\u0378",
-            "\1\u0379",
-            "\1\u037a",
-            "\1\u037b",
-            "\1\u037c",
-            "\1\u037d",
-            "\1\u037e",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0380",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u0383\11\uffff\1\u0384\1\uffff\1\u0385",
-            "\1\u0386",
-            "\1\u0388\1\uffff\1\u0387\1\u0389\3\uffff\1\u038a",
-            "\1\u038b",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u038d",
-            "",
-            "\1\u038e",
-            "\1\u038f",
-            "\1\u0390",
-            "\1\u0391",
-            "\1\u0392",
-            "\1\u0393",
-            "\1\u0394",
-            "\1\u0395",
-            "\1\u0396",
-            "\1\u0397",
-            "",
-            "\1\u0398",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\u0399",
-            "",
-            "",
-            "",
-            "",
-            "\1\u039a",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u039c",
-            "\1\u039d",
-            "\1\u039e",
-            "\1\u039f",
-            "\1\u03a0",
-            "\1\u03a1",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u03a3",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u03a5",
-            "\1\u03a6",
-            "\1\u03a7\4\uffff\1\u03a8",
-            "\1\u03a9",
-            "",
-            "\1\u03aa",
-            "\1\u03ab",
-            "\1\u03ac",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u03ae",
-            "\1\u03af",
-            "",
-            "\1\u03b0",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u03b3",
-            "\1\u03b4",
-            "\1\u03b5",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u03b7",
-            "\1\u03b8",
-            "",
-            "\1\u03b9",
-            "\1\u03ba",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "",
-            "\1\u03bc",
-            "\1\u03bd",
-            "\1\u03be\4\uffff\1\u03bf",
-            "",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u03c1",
-            "\1\u03c2",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u03c4",
-            "\1\u03c5",
-            "\1\u03c6",
-            "\1\u03c7",
-            "",
-            "\1\u03c8",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "",
-            "\1\u03ca",
-            "\1\u03cb",
-            "\1\u03cc",
-            "\1\u03cd",
-            "\1\u03ce",
-            "",
-            "\1\u03cf",
-            "\1\u03d0",
-            "\1\u03d1",
-            "\1\u03d2",
-            "\1\u03d3",
-            "\1\u03d4",
-            "\1\u03d5",
-            "\1\u03d6",
-            "\1\u03d7",
-            "\1\u03d8",
-            "\1\u03d9",
-            "\1\u03da",
-            "\1\u03db",
-            "\1\u03dc",
-            "\1\147\13\uffff\12\147\7\uffff\32\147\4\uffff\1\147\1\uffff"+
-            "\32\147",
-            "\1\u03de",
-            "\1\u03df",
-            "\1\u03e0",
-            "\1\u03e1",
-            "",
-            "\1\u03e2",
-            "\1\u03e3",
-            "\1\u03e4",
-            "\1\u03e5",
-            "\1\u03e7\2\uffff\1\u03e6",
-            "\1\u03e8",
-            "\1\u03e9",
-            "\1\u03ea",
-            "",
-            "",
-            "\1\u03ec\2\uffff\1\u03eb",
-            "\1\u03ed",
-            "\1\u03ee",
-            "",
-            "",
-            "\1\u03f0\2\uffff\1\u03ef",
-            "\1\u03f1",
-            "",
-            "",
-            "\1\u03f3\2\uffff\1\u03f2",
-            "",
-            ""
-    };
-
-    static final short[] DFA21_eot = DFA.unpackEncodedString(DFA21_eotS);
-    static final short[] DFA21_eof = DFA.unpackEncodedString(DFA21_eofS);
-    static final char[] DFA21_min = DFA.unpackEncodedStringToUnsignedChars(DFA21_minS);
-    static final char[] DFA21_max = DFA.unpackEncodedStringToUnsignedChars(DFA21_maxS);
-    static final short[] DFA21_accept = DFA.unpackEncodedString(DFA21_acceptS);
-    static final short[] DFA21_special = DFA.unpackEncodedString(DFA21_specialS);
-    static final short[][] DFA21_transition;
-
-    static {
-        int numStates = DFA21_transitionS.length;
-        DFA21_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA21_transition[i] = DFA.unpackEncodedString(DFA21_transitionS[i]);
-        }
-    }
-
-    static class DFA21 extends DFA {
-
-        public DFA21(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 21;
-            this.eot = DFA21_eot;
-            this.eof = DFA21_eof;
-            this.min = DFA21_min;
-            this.max = DFA21_max;
-            this.accept = DFA21_accept;
-            this.special = DFA21_special;
-            this.transition = DFA21_transition;
-        }
-        public String getDescription() {
-            return "1:1: Tokens : ( T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | T__94 | T__95 | T__96 | T__97 | T__98 | T__99 | T__100 | T__101 | T__102 | T__103 | T__104 | T__105 | T__106 | T__107 | T__108 | T__109 | T__110 | T__111 | T__112 | T__113 | T__114 | T__115 | T__116 | T__117 | T__118 | T__119 | T__120 | T__121 | T__122 | T__123 | T__124 | T__125 | T__126 | T__127 | T__128 | T__129 | T__130 | T__131 | T__132 | T__133 | T__134 | T__135 | T__136 | T__137 | T__138 | T__139 | T__140 | T__141 | T__142 | T__143 | T__144 | T__145 | T__146 | T__147 | T__148 | T__149 | T__150 | T__151 | T__152 | T__153 | T__154 | T__155 | T__156 | T__157 | T__158 | T__159 | T__160 | T__161 | T__162 | T__163 | T__164 | T__165 | T__166 | T__167 | T__168 | T__169 | T__170 | T__171 | T__172 | T__173 | T__174 | T__175 | T__176 | T__177 | T__178 | T__179 | T__180 | T__181 | T__182 | T__183 | T__184 | T__185 | T__186 | T__187 | T__188 | T__189 | T__190 | T__191 | T__192 | T__193 | T__194 | T__195 | T__196 | T__197 | T__198 | T__199 | T__200 | T__201 | T__202 | T__203 | T__204 | T__205 | T__206 | T__207 | T__208 | T__209 | T__210 | T__211 | T__212 | T__213 | T__214 | T__215 | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_ID | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            IntStream input = _input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA21_0 = input.LA(1);
-
-                        s = -1;
-                        if ( (LA21_0=='=') ) {s = 1;}
-
-                        else if ( (LA21_0=='|') ) {s = 2;}
-
-                        else if ( (LA21_0=='&') ) {s = 3;}
-
-                        else if ( (LA21_0=='+') ) {s = 4;}
-
-                        else if ( (LA21_0=='-') ) {s = 5;}
-
-                        else if ( (LA21_0=='*') ) {s = 6;}
-
-                        else if ( (LA21_0=='/') ) {s = 7;}
-
-                        else if ( (LA21_0=='%') ) {s = 8;}
-
-                        else if ( (LA21_0=='!') ) {s = 9;}
-
-                        else if ( (LA21_0=='>') ) {s = 10;}
-
-                        else if ( (LA21_0=='<') ) {s = 11;}
-
-                        else if ( (LA21_0=='.') ) {s = 12;}
-
-                        else if ( (LA21_0=='?') ) {s = 13;}
-
-                        else if ( (LA21_0=='v') ) {s = 14;}
-
-                        else if ( (LA21_0=='e') ) {s = 15;}
-
-                        else if ( (LA21_0=='s') ) {s = 16;}
-
-                        else if ( (LA21_0=='i') ) {s = 17;}
-
-                        else if ( (LA21_0=='f') ) {s = 18;}
-
-                        else if ( (LA21_0=='d') ) {s = 19;}
-
-                        else if ( (LA21_0=='c') ) {s = 20;}
-
-                        else if ( (LA21_0=='r') ) {s = 21;}
-
-                        else if ( (LA21_0=='p') ) {s = 22;}
-
-                        else if ( (LA21_0=='n') ) {s = 23;}
-
-                        else if ( (LA21_0=='l') ) {s = 24;}
-
-                        else if ( (LA21_0=='y') ) {s = 25;}
-
-                        else if ( (LA21_0=='t') ) {s = 26;}
-
-                        else if ( (LA21_0=='h') ) {s = 27;}
-
-                        else if ( (LA21_0=='b') ) {s = 28;}
-
-                        else if ( (LA21_0=='a') ) {s = 29;}
-
-                        else if ( (LA21_0=='g') ) {s = 30;}
-
-                        else if ( (LA21_0=='B') ) {s = 31;}
-
-                        else if ( (LA21_0=='P') ) {s = 32;}
-
-                        else if ( (LA21_0=='R') ) {s = 33;}
-
-                        else if ( (LA21_0=='T') ) {s = 34;}
-
-                        else if ( (LA21_0=='E') ) {s = 35;}
-
-                        else if ( (LA21_0=='N') ) {s = 36;}
-
-                        else if ( (LA21_0=='S') ) {s = 37;}
-
-                        else if ( (LA21_0=='D') ) {s = 38;}
-
-                        else if ( (LA21_0=='C') ) {s = 39;}
-
-                        else if ( (LA21_0=='A') ) {s = 40;}
-
-                        else if ( (LA21_0=='G') ) {s = 41;}
-
-                        else if ( (LA21_0=='U') ) {s = 42;}
-
-                        else if ( (LA21_0=='{') ) {s = 43;}
-
-                        else if ( (LA21_0=='}') ) {s = 44;}
-
-                        else if ( (LA21_0=='u') ) {s = 45;}
-
-                        else if ( (LA21_0=='j') ) {s = 46;}
-
-                        else if ( (LA21_0=='o') ) {s = 47;}
-
-                        else if ( (LA21_0=='m') ) {s = 48;}
-
-                        else if ( (LA21_0=='(') ) {s = 49;}
-
-                        else if ( (LA21_0==')') ) {s = 50;}
-
-                        else if ( (LA21_0=='w') ) {s = 51;}
-
-                        else if ( (LA21_0=='@') ) {s = 52;}
-
-                        else if ( (LA21_0==',') ) {s = 53;}
-
-                        else if ( (LA21_0==']') ) {s = 54;}
-
-                        else if ( (LA21_0=='#') ) {s = 55;}
-
-                        else if ( (LA21_0=='[') ) {s = 56;}
-
-                        else if ( (LA21_0==';') ) {s = 57;}
-
-                        else if ( (LA21_0==':') ) {s = 58;}
-
-                        else if ( (LA21_0=='0') ) {s = 59;}
-
-                        else if ( ((LA21_0>='1' && LA21_0<='9')) ) {s = 60;}
-
-                        else if ( (LA21_0=='^') ) {s = 61;}
-
-                        else if ( (LA21_0=='$'||LA21_0=='F'||(LA21_0>='H' && LA21_0<='M')||LA21_0=='O'||LA21_0=='Q'||(LA21_0>='V' && LA21_0<='Z')||LA21_0=='_'||LA21_0=='k'||LA21_0=='q'||LA21_0=='x'||LA21_0=='z') ) {s = 62;}
-
-                        else if ( (LA21_0=='\"') ) {s = 63;}
-
-                        else if ( (LA21_0=='\'') ) {s = 64;}
-
-                        else if ( ((LA21_0>='\t' && LA21_0<='\n')||LA21_0=='\r'||LA21_0==' ') ) {s = 65;}
-
-                        else if ( ((LA21_0>='\u0000' && LA21_0<='\b')||(LA21_0>='\u000B' && LA21_0<='\f')||(LA21_0>='\u000E' && LA21_0<='\u001F')||LA21_0=='\\'||LA21_0=='`'||(LA21_0>='~' && LA21_0<='\uFFFF')) ) {s = 66;}
-
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 21, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
- 
-
-}
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSLParser.java b/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSLParser.java
deleted file mode 100644
index c4b0afe..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSLParser.java
+++ /dev/null
@@ -1,10014 +0,0 @@
-/**
- *                                                                            
- *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-package org.eclipse.osbp.xtext.datamartdsl.ui.contentassist.antlr.internal; 
-
-import java.io.InputStream;
-import org.eclipse.xtext.*;
-import org.eclipse.xtext.parser.*;
-import org.eclipse.xtext.parser.impl.*;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.parser.antlr.XtextTokenStream;
-import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
-import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
-import org.eclipse.osbp.xtext.datamartdsl.services.DatamartDSLGrammarAccess;
-
-
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-@SuppressWarnings("all")
-interface InternalDatamartDSLParserSignatures {
-     void entryRuleDatamartModel() throws RecognitionException;
-     void ruleDatamartModel() throws RecognitionException;
-     void entryRuleDatamartPackage() throws RecognitionException;
-     void ruleDatamartPackage() throws RecognitionException;
-     void entryRuleDatamartDefinition() throws RecognitionException;
-     void ruleDatamartDefinition() throws RecognitionException;
-     void entryRuleDatamartRole() throws RecognitionException;
-     void ruleDatamartRole() throws RecognitionException;
-     void entryRuleDatamartSource() throws RecognitionException;
-     void ruleDatamartSource() throws RecognitionException;
-     void entryRuleDatamartTask() throws RecognitionException;
-     void ruleDatamartTask() throws RecognitionException;
-     void entryRuleDatamartColumn() throws RecognitionException;
-     void ruleDatamartColumn() throws RecognitionException;
-     void entryRuleDatamartTaskFilter() throws RecognitionException;
-     void ruleDatamartTaskFilter() throws RecognitionException;
-     void entryRuleDatamartCube() throws RecognitionException;
-     void ruleDatamartCube() throws RecognitionException;
-     void entryRuleDatamartReference() throws RecognitionException;
-     void ruleDatamartReference() throws RecognitionException;
-     void entryRuleDatamartEntity() throws RecognitionException;
-     void ruleDatamartEntity() throws RecognitionException;
-     void entryRuleDatamartNavigation() throws RecognitionException;
-     void ruleDatamartNavigation() throws RecognitionException;
-     void entryRuleDatamartOwner() throws RecognitionException;
-     void ruleDatamartOwner() throws RecognitionException;
-     void entryRuleDatamartMember() throws RecognitionException;
-     void ruleDatamartMember() throws RecognitionException;
-     void entryRuleDatamartProperty() throws RecognitionException;
-     void ruleDatamartProperty() throws RecognitionException;
-     void entryRuleDatamartCondition() throws RecognitionException;
-     void ruleDatamartCondition() throws RecognitionException;
-     void entryRuleDatamartOrder() throws RecognitionException;
-     void ruleDatamartOrder() throws RecognitionException;
-     void entryRuleDatamartDisjunction() throws RecognitionException;
-     void ruleDatamartDisjunction() throws RecognitionException;
-     void entryRuleDatamartConjunction() throws RecognitionException;
-     void ruleDatamartConjunction() throws RecognitionException;
-     void entryRuleDatamartConditionalExpression() throws RecognitionException;
-     void ruleDatamartConditionalExpression() throws RecognitionException;
-     void entryRuleDatamartOperand() throws RecognitionException;
-     void ruleDatamartOperand() throws RecognitionException;
-     void entryRuleDatamartValue() throws RecognitionException;
-     void ruleDatamartValue() throws RecognitionException;
-     void entryRuleDatamartCubeElement() throws RecognitionException;
-     void ruleDatamartCubeElement() throws RecognitionException;
-     void entryRuleDatamartDefineDerivedMeasure() throws RecognitionException;
-     void ruleDatamartDefineDerivedMeasure() throws RecognitionException;
-     void entryRuleDatamartAddition() throws RecognitionException;
-     void ruleDatamartAddition() throws RecognitionException;
-     void entryRuleDatamartMultiplication() throws RecognitionException;
-     void ruleDatamartMultiplication() throws RecognitionException;
-     void entryRuleDatamartPrimary() throws RecognitionException;
-     void ruleDatamartPrimary() throws RecognitionException;
-     void entryRuleDatamartNumberOrElement() throws RecognitionException;
-     void ruleDatamartNumberOrElement() throws RecognitionException;
-     void entryRuleDatamartMemberTuple() throws RecognitionException;
-     void ruleDatamartMemberTuple() throws RecognitionException;
-     void entryRuleDatamartFunction() throws RecognitionException;
-     void ruleDatamartFunction() throws RecognitionException;
-     void entryRuleDatamartParameterFunction() throws RecognitionException;
-     void ruleDatamartParameterFunction() throws RecognitionException;
-     void entryRuleDatamartFunctionIntParameter() throws RecognitionException;
-     void ruleDatamartFunctionIntParameter() throws RecognitionException;
-     void entryRuleDatamartSetFunction() throws RecognitionException;
-     void ruleDatamartSetFunction() throws RecognitionException;
-     void entryRuleDatamartSetParameterFunction() throws RecognitionException;
-     void ruleDatamartSetParameterFunction() throws RecognitionException;
-     void entryRuleDatamartSetAggregationFunction() throws RecognitionException;
-     void ruleDatamartSetAggregationFunction() throws RecognitionException;
-     void entryRuleDatamartSetTuple() throws RecognitionException;
-     void ruleDatamartSetTuple() throws RecognitionException;
-     void entryRuleDatamartAggregationFunction() throws RecognitionException;
-     void ruleDatamartAggregationFunction() throws RecognitionException;
-     void entryRuleDatamartAggregation() throws RecognitionException;
-     void ruleDatamartAggregation() throws RecognitionException;
-     void entryRuleDatamartSetAggregation() throws RecognitionException;
-     void ruleDatamartSetAggregation() throws RecognitionException;
-     void entryRuleDatamartSlicer() throws RecognitionException;
-     void ruleDatamartSlicer() throws RecognitionException;
-     void entryRuleDatamartAxis() throws RecognitionException;
-     void ruleDatamartAxis() throws RecognitionException;
-     void entryRuleDatamartElement() throws RecognitionException;
-     void ruleDatamartElement() throws RecognitionException;
-     void entryRuleDatamartDerivedMeasure() throws RecognitionException;
-     void ruleDatamartDerivedMeasure() throws RecognitionException;
-     void entryRuleDatamartMeasure() throws RecognitionException;
-     void ruleDatamartMeasure() throws RecognitionException;
-     void entryRuleDatamartHierarchy() throws RecognitionException;
-     void ruleDatamartHierarchy() throws RecognitionException;
-     void entryRuleDatamartImport() throws RecognitionException;
-     void ruleDatamartImport() throws RecognitionException;
-     void entryRuleDatamartQualifiedNameWithWildCard() throws RecognitionException;
-     void ruleDatamartQualifiedNameWithWildCard() throws RecognitionException;
-     void entryRuleQualifiedName() throws RecognitionException;
-     void ruleQualifiedName() throws RecognitionException;
-     void entryRuleValidID() throws RecognitionException;
-     void ruleValidID() throws RecognitionException;
-     void entryRuleTRANSLATABLESTRING() throws RecognitionException;
-     void ruleTRANSLATABLESTRING() throws RecognitionException;
-     void entryRuleTRANSLATABLEID() throws RecognitionException;
-     void ruleTRANSLATABLEID() throws RecognitionException;
-     void entryRulePropertyFillerData() throws RecognitionException;
-     void rulePropertyFillerData() throws RecognitionException;
-     void entryRulePropertyFillerType() throws RecognitionException;
-     void rulePropertyFillerType() throws RecognitionException;
-     void entryRulePropertyFillerDateFuture() throws RecognitionException;
-     void rulePropertyFillerDateFuture() throws RecognitionException;
-     void entryRulePropertyFillerDatePast() throws RecognitionException;
-     void rulePropertyFillerDatePast() throws RecognitionException;
-     void entryRulePropertyFillerDateRange() throws RecognitionException;
-     void rulePropertyFillerDateRange() throws RecognitionException;
-     void entryRulePropertyFillerSignedDoubleRange() throws RecognitionException;
-     void rulePropertyFillerSignedDoubleRange() throws RecognitionException;
-     void entryRulePropertyFillerSignedDoubleRandom() throws RecognitionException;
-     void rulePropertyFillerSignedDoubleRandom() throws RecognitionException;
-     void entryRulePropertyFillerSignedIntegerRange() throws RecognitionException;
-     void rulePropertyFillerSignedIntegerRange() throws RecognitionException;
-     void entryRulePropertyFillerSignedIntegerRandom() throws RecognitionException;
-     void rulePropertyFillerSignedIntegerRandom() throws RecognitionException;
-     void entryRulePropertyFillerTextRandom() throws RecognitionException;
-     void rulePropertyFillerTextRandom() throws RecognitionException;
-     void entryRulePropertyFillerTextParagraphs() throws RecognitionException;
-     void rulePropertyFillerTextParagraphs() throws RecognitionException;
-     void entryRulePropertyFillerTextSentences() throws RecognitionException;
-     void rulePropertyFillerTextSentences() throws RecognitionException;
-     void entryRulePropertyFillerTextWords() throws RecognitionException;
-     void rulePropertyFillerTextWords() throws RecognitionException;
-     void entryRulePropertyFillerUnsignedDoubleRange() throws RecognitionException;
-     void rulePropertyFillerUnsignedDoubleRange() throws RecognitionException;
-     void entryRulePropertyFillerUnsignedDoubleRandom() throws RecognitionException;
-     void rulePropertyFillerUnsignedDoubleRandom() throws RecognitionException;
-     void entryRulePropertyFillerUnsignedIntegerRange() throws RecognitionException;
-     void rulePropertyFillerUnsignedIntegerRange() throws RecognitionException;
-     void entryRulePropertyFillerUnsignedIntegerRandom() throws RecognitionException;
-     void rulePropertyFillerUnsignedIntegerRandom() throws RecognitionException;
-     void entryRuleSignedNumber() throws RecognitionException;
-     void ruleSignedNumber() throws RecognitionException;
-     void entryRuleUnsignedNumber() throws RecognitionException;
-     void ruleUnsignedNumber() throws RecognitionException;
-     void entryRuleSINT() throws RecognitionException;
-     void ruleSINT() throws RecognitionException;
-     void entryRuleXAnnotation() throws RecognitionException;
-     void ruleXAnnotation() throws RecognitionException;
-     void entryRuleXAnnotationElementValuePair() throws RecognitionException;
-     void ruleXAnnotationElementValuePair() throws RecognitionException;
-     void entryRuleXAnnotationElementValueOrCommaList() throws RecognitionException;
-     void ruleXAnnotationElementValueOrCommaList() throws RecognitionException;
-     void entryRuleXAnnotationElementValue() throws RecognitionException;
-     void ruleXAnnotationElementValue() throws RecognitionException;
-     void entryRuleXAnnotationOrExpression() throws RecognitionException;
-     void ruleXAnnotationOrExpression() throws RecognitionException;
-     void entryRuleXExpression() throws RecognitionException;
-     void ruleXExpression() throws RecognitionException;
-     void entryRuleXAssignment() throws RecognitionException;
-     void ruleXAssignment() throws RecognitionException;
-     void entryRuleOpSingleAssign() throws RecognitionException;
-     void ruleOpSingleAssign() throws RecognitionException;
-     void entryRuleOpMultiAssign() throws RecognitionException;
-     void ruleOpMultiAssign() throws RecognitionException;
-     void entryRuleXOrExpression() throws RecognitionException;
-     void ruleXOrExpression() throws RecognitionException;
-     void entryRuleOpOr() throws RecognitionException;
-     void ruleOpOr() throws RecognitionException;
-     void entryRuleXAndExpression() throws RecognitionException;
-     void ruleXAndExpression() throws RecognitionException;
-     void entryRuleOpAnd() throws RecognitionException;
-     void ruleOpAnd() throws RecognitionException;
-     void entryRuleXEqualityExpression() throws RecognitionException;
-     void ruleXEqualityExpression() throws RecognitionException;
-     void entryRuleOpEquality() throws RecognitionException;
-     void ruleOpEquality() throws RecognitionException;
-     void entryRuleXRelationalExpression() throws RecognitionException;
-     void ruleXRelationalExpression() throws RecognitionException;
-     void entryRuleOpCompare() throws RecognitionException;
-     void ruleOpCompare() throws RecognitionException;
-     void entryRuleXOtherOperatorExpression() throws RecognitionException;
-     void ruleXOtherOperatorExpression() throws RecognitionException;
-     void entryRuleOpOther() throws RecognitionException;
-     void ruleOpOther() throws RecognitionException;
-     void entryRuleXAdditiveExpression() throws RecognitionException;
-     void ruleXAdditiveExpression() throws RecognitionException;
-     void entryRuleOpAdd() throws RecognitionException;
-     void ruleOpAdd() throws RecognitionException;
-     void entryRuleXMultiplicativeExpression() throws RecognitionException;
-     void ruleXMultiplicativeExpression() throws RecognitionException;
-     void entryRuleOpMulti() throws RecognitionException;
-     void ruleOpMulti() throws RecognitionException;
-     void entryRuleXUnaryOperation() throws RecognitionException;
-     void ruleXUnaryOperation() throws RecognitionException;
-     void entryRuleOpUnary() throws RecognitionException;
-     void ruleOpUnary() throws RecognitionException;
-     void entryRuleXCastedExpression() throws RecognitionException;
-     void ruleXCastedExpression() throws RecognitionException;
-     void entryRuleXPostfixOperation() throws RecognitionException;
-     void ruleXPostfixOperation() throws RecognitionException;
-     void entryRuleOpPostfix() throws RecognitionException;
-     void ruleOpPostfix() throws RecognitionException;
-     void entryRuleXMemberFeatureCall() throws RecognitionException;
-     void ruleXMemberFeatureCall() throws RecognitionException;
-     void entryRuleXPrimaryExpression() throws RecognitionException;
-     void ruleXPrimaryExpression() throws RecognitionException;
-     void entryRuleXLiteral() throws RecognitionException;
-     void ruleXLiteral() throws RecognitionException;
-     void entryRuleXCollectionLiteral() throws RecognitionException;
-     void ruleXCollectionLiteral() throws RecognitionException;
-     void entryRuleXSetLiteral() throws RecognitionException;
-     void ruleXSetLiteral() throws RecognitionException;
-     void entryRuleXListLiteral() throws RecognitionException;
-     void ruleXListLiteral() throws RecognitionException;
-     void entryRuleXClosure() throws RecognitionException;
-     void ruleXClosure() throws RecognitionException;
-     void entryRuleXExpressionInClosure() throws RecognitionException;
-     void ruleXExpressionInClosure() throws RecognitionException;
-     void entryRuleXShortClosure() throws RecognitionException;
-     void ruleXShortClosure() throws RecognitionException;
-     void entryRuleXParenthesizedExpression() throws RecognitionException;
-     void ruleXParenthesizedExpression() throws RecognitionException;
-     void entryRuleXIfExpression() throws RecognitionException;
-     void ruleXIfExpression() throws RecognitionException;
-     void entryRuleXSwitchExpression() throws RecognitionException;
-     void ruleXSwitchExpression() throws RecognitionException;
-     void entryRuleXCasePart() throws RecognitionException;
-     void ruleXCasePart() throws RecognitionException;
-     void entryRuleXForLoopExpression() throws RecognitionException;
-     void ruleXForLoopExpression() throws RecognitionException;
-     void entryRuleXBasicForLoopExpression() throws RecognitionException;
-     void ruleXBasicForLoopExpression() throws RecognitionException;
-     void entryRuleXWhileExpression() throws RecognitionException;
-     void ruleXWhileExpression() throws RecognitionException;
-     void entryRuleXDoWhileExpression() throws RecognitionException;
-     void ruleXDoWhileExpression() throws RecognitionException;
-     void entryRuleXBlockExpression() throws RecognitionException;
-     void ruleXBlockExpression() throws RecognitionException;
-     void entryRuleXExpressionOrVarDeclaration() throws RecognitionException;
-     void ruleXExpressionOrVarDeclaration() throws RecognitionException;
-     void entryRuleXVariableDeclaration() throws RecognitionException;
-     void ruleXVariableDeclaration() throws RecognitionException;
-     void entryRuleJvmFormalParameter() throws RecognitionException;
-     void ruleJvmFormalParameter() throws RecognitionException;
-     void entryRuleFullJvmFormalParameter() throws RecognitionException;
-     void ruleFullJvmFormalParameter() throws RecognitionException;
-     void entryRuleXFeatureCall() throws RecognitionException;
-     void ruleXFeatureCall() throws RecognitionException;
-     void entryRuleFeatureCallID() throws RecognitionException;
-     void ruleFeatureCallID() throws RecognitionException;
-     void entryRuleIdOrSuper() throws RecognitionException;
-     void ruleIdOrSuper() throws RecognitionException;
-     void entryRuleXConstructorCall() throws RecognitionException;
-     void ruleXConstructorCall() throws RecognitionException;
-     void entryRuleXBooleanLiteral() throws RecognitionException;
-     void ruleXBooleanLiteral() throws RecognitionException;
-     void entryRuleXNullLiteral() throws RecognitionException;
-     void ruleXNullLiteral() throws RecognitionException;
-     void entryRuleXNumberLiteral() throws RecognitionException;
-     void ruleXNumberLiteral() throws RecognitionException;
-     void entryRuleXStringLiteral() throws RecognitionException;
-     void ruleXStringLiteral() throws RecognitionException;
-     void entryRuleXTypeLiteral() throws RecognitionException;
-     void ruleXTypeLiteral() throws RecognitionException;
-     void entryRuleXThrowExpression() throws RecognitionException;
-     void ruleXThrowExpression() throws RecognitionException;
-     void entryRuleXReturnExpression() throws RecognitionException;
-     void ruleXReturnExpression() throws RecognitionException;
-     void entryRuleXTryCatchFinallyExpression() throws RecognitionException;
-     void ruleXTryCatchFinallyExpression() throws RecognitionException;
-     void entryRuleXSynchronizedExpression() throws RecognitionException;
-     void ruleXSynchronizedExpression() throws RecognitionException;
-     void entryRuleXCatchClause() throws RecognitionException;
-     void ruleXCatchClause() throws RecognitionException;
-     void entryRuleNumber() throws RecognitionException;
-     void ruleNumber() throws RecognitionException;
-     void entryRuleJvmTypeReference() throws RecognitionException;
-     void ruleJvmTypeReference() throws RecognitionException;
-     void entryRuleArrayBrackets() throws RecognitionException;
-     void ruleArrayBrackets() throws RecognitionException;
-     void entryRuleXFunctionTypeRef() throws RecognitionException;
-     void ruleXFunctionTypeRef() throws RecognitionException;
-     void entryRuleJvmParameterizedTypeReference() throws RecognitionException;
-     void ruleJvmParameterizedTypeReference() throws RecognitionException;
-     void entryRuleJvmArgumentTypeReference() throws RecognitionException;
-     void ruleJvmArgumentTypeReference() throws RecognitionException;
-     void entryRuleJvmWildcardTypeReference() throws RecognitionException;
-     void ruleJvmWildcardTypeReference() throws RecognitionException;
-     void entryRuleJvmUpperBound() throws RecognitionException;
-     void ruleJvmUpperBound() throws RecognitionException;
-     void entryRuleJvmUpperBoundAnded() throws RecognitionException;
-     void ruleJvmUpperBoundAnded() throws RecognitionException;
-     void entryRuleJvmLowerBound() throws RecognitionException;
-     void ruleJvmLowerBound() throws RecognitionException;
-     void entryRuleJvmLowerBoundAnded() throws RecognitionException;
-     void ruleJvmLowerBoundAnded() throws RecognitionException;
-     void entryRuleQualifiedNameWithWildcard() throws RecognitionException;
-     void ruleQualifiedNameWithWildcard() throws RecognitionException;
-     void entryRuleXImportDeclaration() throws RecognitionException;
-     void ruleXImportDeclaration() throws RecognitionException;
-     void entryRuleQualifiedNameInStaticImport() throws RecognitionException;
-     void ruleQualifiedNameInStaticImport() throws RecognitionException;
-     void ruleAxisEnum() throws RecognitionException;
-     void ruleFunctionEnum() throws RecognitionException;
-     void ruleParameterFunctionEnum() throws RecognitionException;
-     void ruleSetFunctionEnum() throws RecognitionException;
-     void ruleSetParameterFunctionEnum() throws RecognitionException;
-     void ruleSetAggregationEnum() throws RecognitionException;
-     void ruleAggregationEnum() throws RecognitionException;
-     void ruleOperatorEnum() throws RecognitionException;
-     void ruleSqlAggregationEnum() throws RecognitionException;
-     void ruleValueScaleEnum() throws RecognitionException;
-     void ruleTaskQueryTopicEnum() throws RecognitionException;
-     void ruleTaskQueryColumnEnum() throws RecognitionException;
-     void ruleTaskFilterEnum() throws RecognitionException;
-     void ruleOrderEnum() throws RecognitionException;
-     void rule__DatamartSource__Alternatives() throws RecognitionException;
-     void rule__DatamartNavigation__Alternatives() throws RecognitionException;
-     void rule__DatamartOperand__Alternatives() throws RecognitionException;
-     void rule__DatamartValue__Alternatives() throws RecognitionException;
-     void rule__DatamartValue__Alternatives_2() throws RecognitionException;
-     void rule__DatamartCubeElement__Alternatives() throws RecognitionException;
-     void rule__DatamartAddition__Alternatives_1_0() throws RecognitionException;
-     void rule__DatamartMultiplication__Alternatives_1_0() throws RecognitionException;
-     void rule__DatamartPrimary__Alternatives() throws RecognitionException;
-     void rule__DatamartNumberOrElement__Alternatives() throws RecognitionException;
-     void rule__DatamartMemberTuple__Alternatives_0_0() throws RecognitionException;
-     void rule__DatamartSetTuple__Alternatives_0() throws RecognitionException;
-     void rule__DatamartAggregation__Alternatives_2() throws RecognitionException;
-     void rule__DatamartSetAggregation__Alternatives_2() throws RecognitionException;
-     void rule__DatamartElement__Alternatives() throws RecognitionException;
-     void rule__DatamartHierarchy__Alternatives_5_2() throws RecognitionException;
-     void rule__DatamartHierarchy__OrderRefAlternatives_6_2_1_0() throws RecognitionException;
-     void rule__PropertyFillerType__Alternatives() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Alternatives_1_0() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Alternatives_1_2() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Alternatives_2_0() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Alternatives_2_2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_2() throws RecognitionException;
-     void rule__XAnnotation__Alternatives_3_1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Alternatives() throws RecognitionException;
-     void rule__XAnnotationElementValue__Alternatives() throws RecognitionException;
-     void rule__XAnnotationOrExpression__Alternatives() throws RecognitionException;
-     void rule__XAssignment__Alternatives() throws RecognitionException;
-     void rule__OpMultiAssign__Alternatives() throws RecognitionException;
-     void rule__OpEquality__Alternatives() throws RecognitionException;
-     void rule__XRelationalExpression__Alternatives_1() throws RecognitionException;
-     void rule__OpCompare__Alternatives() throws RecognitionException;
-     void rule__OpOther__Alternatives() throws RecognitionException;
-     void rule__OpOther__Alternatives_5_1() throws RecognitionException;
-     void rule__OpOther__Alternatives_6_1() throws RecognitionException;
-     void rule__OpAdd__Alternatives() throws RecognitionException;
-     void rule__OpMulti__Alternatives() throws RecognitionException;
-     void rule__XUnaryOperation__Alternatives() throws RecognitionException;
-     void rule__OpUnary__Alternatives() throws RecognitionException;
-     void rule__OpPostfix__Alternatives() throws RecognitionException;
-     void rule__XMemberFeatureCall__Alternatives_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Alternatives_1_0_0_0_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Alternatives_1_1_0_0_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Alternatives_1_1_3_1() throws RecognitionException;
-     void rule__XPrimaryExpression__Alternatives() throws RecognitionException;
-     void rule__XLiteral__Alternatives() throws RecognitionException;
-     void rule__XCollectionLiteral__Alternatives() throws RecognitionException;
-     void rule__XSwitchExpression__Alternatives_2() throws RecognitionException;
-     void rule__XCasePart__Alternatives_3() throws RecognitionException;
-     void rule__XExpressionOrVarDeclaration__Alternatives() throws RecognitionException;
-     void rule__XVariableDeclaration__Alternatives_1() throws RecognitionException;
-     void rule__XVariableDeclaration__Alternatives_2() throws RecognitionException;
-     void rule__XFeatureCall__Alternatives_3_1() throws RecognitionException;
-     void rule__FeatureCallID__Alternatives() throws RecognitionException;
-     void rule__IdOrSuper__Alternatives() throws RecognitionException;
-     void rule__XConstructorCall__Alternatives_4_1() throws RecognitionException;
-     void rule__XBooleanLiteral__Alternatives_1() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Alternatives_3() throws RecognitionException;
-     void rule__Number__Alternatives() throws RecognitionException;
-     void rule__Number__Alternatives_1_0() throws RecognitionException;
-     void rule__Number__Alternatives_1_1_1() throws RecognitionException;
-     void rule__JvmTypeReference__Alternatives() throws RecognitionException;
-     void rule__JvmArgumentTypeReference__Alternatives() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Alternatives_2() throws RecognitionException;
-     void rule__XImportDeclaration__Alternatives_1() throws RecognitionException;
-     void rule__XImportDeclaration__Alternatives_1_0_3() throws RecognitionException;
-     void rule__AxisEnum__Alternatives() throws RecognitionException;
-     void rule__FunctionEnum__Alternatives() throws RecognitionException;
-     void rule__ParameterFunctionEnum__Alternatives() throws RecognitionException;
-     void rule__SetFunctionEnum__Alternatives() throws RecognitionException;
-     void rule__SetParameterFunctionEnum__Alternatives() throws RecognitionException;
-     void rule__SetAggregationEnum__Alternatives() throws RecognitionException;
-     void rule__AggregationEnum__Alternatives() throws RecognitionException;
-     void rule__OperatorEnum__Alternatives() throws RecognitionException;
-     void rule__SqlAggregationEnum__Alternatives() throws RecognitionException;
-     void rule__ValueScaleEnum__Alternatives() throws RecognitionException;
-     void rule__TaskQueryTopicEnum__Alternatives() throws RecognitionException;
-     void rule__TaskQueryColumnEnum__Alternatives() throws RecognitionException;
-     void rule__TaskFilterEnum__Alternatives() throws RecognitionException;
-     void rule__OrderEnum__Alternatives() throws RecognitionException;
-     void rule__DatamartPackage__Group__0() throws RecognitionException;
-     void rule__DatamartPackage__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartPackage__Group__1() throws RecognitionException;
-     void rule__DatamartPackage__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartPackage__Group__2() throws RecognitionException;
-     void rule__DatamartPackage__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartPackage__Group__3() throws RecognitionException;
-     void rule__DatamartPackage__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__0() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__0__Impl() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__1() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__1__Impl() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__2() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__2__Impl() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__3() throws RecognitionException;
-     void rule__DatamartPackage__Group_3__3__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group__0() throws RecognitionException;
-     void rule__DatamartDefinition__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group__1() throws RecognitionException;
-     void rule__DatamartDefinition__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group__2() throws RecognitionException;
-     void rule__DatamartDefinition__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group__3() throws RecognitionException;
-     void rule__DatamartDefinition__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group__4() throws RecognitionException;
-     void rule__DatamartDefinition__Group__4__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group__5() throws RecognitionException;
-     void rule__DatamartDefinition__Group__5__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group_2__0() throws RecognitionException;
-     void rule__DatamartDefinition__Group_2__0__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group_2__1() throws RecognitionException;
-     void rule__DatamartDefinition__Group_2__1__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__0() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__0__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__1() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__1__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__2() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__2__Impl() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__3() throws RecognitionException;
-     void rule__DatamartDefinition__Group_3__3__Impl() throws RecognitionException;
-     void rule__DatamartRole__Group__0() throws RecognitionException;
-     void rule__DatamartRole__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartRole__Group__1() throws RecognitionException;
-     void rule__DatamartRole__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group__0() throws RecognitionException;
-     void rule__DatamartTask__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group__1() throws RecognitionException;
-     void rule__DatamartTask__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group__2() throws RecognitionException;
-     void rule__DatamartTask__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group__3() throws RecognitionException;
-     void rule__DatamartTask__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_2__0() throws RecognitionException;
-     void rule__DatamartTask__Group_2__0__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_2__1() throws RecognitionException;
-     void rule__DatamartTask__Group_2__1__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_2__2() throws RecognitionException;
-     void rule__DatamartTask__Group_2__2__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_2__3() throws RecognitionException;
-     void rule__DatamartTask__Group_2__3__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_3__0() throws RecognitionException;
-     void rule__DatamartTask__Group_3__0__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_3__1() throws RecognitionException;
-     void rule__DatamartTask__Group_3__1__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_3__2() throws RecognitionException;
-     void rule__DatamartTask__Group_3__2__Impl() throws RecognitionException;
-     void rule__DatamartTask__Group_3__3() throws RecognitionException;
-     void rule__DatamartTask__Group_3__3__Impl() throws RecognitionException;
-     void rule__DatamartColumn__Group__0() throws RecognitionException;
-     void rule__DatamartColumn__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartColumn__Group__1() throws RecognitionException;
-     void rule__DatamartColumn__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartTaskFilter__Group__0() throws RecognitionException;
-     void rule__DatamartTaskFilter__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartTaskFilter__Group__1() throws RecognitionException;
-     void rule__DatamartTaskFilter__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartCube__Group__0() throws RecognitionException;
-     void rule__DatamartCube__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartCube__Group__1() throws RecognitionException;
-     void rule__DatamartCube__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartCube__Group__2() throws RecognitionException;
-     void rule__DatamartCube__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartCube__Group__3() throws RecognitionException;
-     void rule__DatamartCube__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartCube__Group__4() throws RecognitionException;
-     void rule__DatamartCube__Group__4__Impl() throws RecognitionException;
-     void rule__DatamartCube__Group__5() throws RecognitionException;
-     void rule__DatamartCube__Group__5__Impl() throws RecognitionException;
-     void rule__DatamartReference__Group__0() throws RecognitionException;
-     void rule__DatamartReference__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartReference__Group__1() throws RecognitionException;
-     void rule__DatamartReference__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__0() throws RecognitionException;
-     void rule__DatamartEntity__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__1() throws RecognitionException;
-     void rule__DatamartEntity__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__2() throws RecognitionException;
-     void rule__DatamartEntity__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__3() throws RecognitionException;
-     void rule__DatamartEntity__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__4() throws RecognitionException;
-     void rule__DatamartEntity__Group__4__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__5() throws RecognitionException;
-     void rule__DatamartEntity__Group__5__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__6() throws RecognitionException;
-     void rule__DatamartEntity__Group__6__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__7() throws RecognitionException;
-     void rule__DatamartEntity__Group__7__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__8() throws RecognitionException;
-     void rule__DatamartEntity__Group__8__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group__9() throws RecognitionException;
-     void rule__DatamartEntity__Group__9__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__0() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__0__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__1() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__1__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__2() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__2__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__3() throws RecognitionException;
-     void rule__DatamartEntity__Group_4__3__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__0() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__0__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__1() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__1__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__2() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__2__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__3() throws RecognitionException;
-     void rule__DatamartEntity__Group_5__3__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__0() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__0__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__1() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__1__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__2() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__2__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__3() throws RecognitionException;
-     void rule__DatamartEntity__Group_6__3__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__0() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__0__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__1() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__1__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__2() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__2__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__3() throws RecognitionException;
-     void rule__DatamartEntity__Group_7__3__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__0() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__0__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__1() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__1__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__2() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__2__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__3() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__3__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__4() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__4__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__5() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__5__Impl() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__6() throws RecognitionException;
-     void rule__DatamartEntity__Group_8__6__Impl() throws RecognitionException;
-     void rule__DatamartOwner__Group__0() throws RecognitionException;
-     void rule__DatamartOwner__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartOwner__Group__1() throws RecognitionException;
-     void rule__DatamartOwner__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartOwner__Group__2() throws RecognitionException;
-     void rule__DatamartOwner__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartOwner__Group__3() throws RecognitionException;
-     void rule__DatamartOwner__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartMember__Group__0() throws RecognitionException;
-     void rule__DatamartMember__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartMember__Group__1() throws RecognitionException;
-     void rule__DatamartMember__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartMember__Group__2() throws RecognitionException;
-     void rule__DatamartMember__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartMember__Group__3() throws RecognitionException;
-     void rule__DatamartMember__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group__0() throws RecognitionException;
-     void rule__DatamartProperty__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group__1() throws RecognitionException;
-     void rule__DatamartProperty__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group__2() throws RecognitionException;
-     void rule__DatamartProperty__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_0__0() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_0__0__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_0__1() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_0__1__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_1__0() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_1__0__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_1__1() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_1__1__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_2__0() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_2__0__Impl() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_2__1() throws RecognitionException;
-     void rule__DatamartProperty__Group_2_2__1__Impl() throws RecognitionException;
-     void rule__DatamartCondition__Group__0() throws RecognitionException;
-     void rule__DatamartCondition__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartCondition__Group__1() throws RecognitionException;
-     void rule__DatamartCondition__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartOrder__Group__0() throws RecognitionException;
-     void rule__DatamartOrder__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartOrder__Group__1() throws RecognitionException;
-     void rule__DatamartOrder__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartOrder__Group__2() throws RecognitionException;
-     void rule__DatamartOrder__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartDisjunction__Group__0() throws RecognitionException;
-     void rule__DatamartDisjunction__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartDisjunction__Group__1() throws RecognitionException;
-     void rule__DatamartDisjunction__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1__0() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1__1() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1_0__0() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1_0__1() throws RecognitionException;
-     void rule__DatamartDisjunction__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__DatamartConjunction__Group__0() throws RecognitionException;
-     void rule__DatamartConjunction__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartConjunction__Group__1() throws RecognitionException;
-     void rule__DatamartConjunction__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1__0() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1__1() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1_0__0() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1_0__1() throws RecognitionException;
-     void rule__DatamartConjunction__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group__0() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group__1() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1__0() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1__1() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1_0__0() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1_0__1() throws RecognitionException;
-     void rule__DatamartConditionalExpression__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__DatamartOperand__Group_1__0() throws RecognitionException;
-     void rule__DatamartOperand__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartOperand__Group_1__1() throws RecognitionException;
-     void rule__DatamartOperand__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartOperand__Group_1__2() throws RecognitionException;
-     void rule__DatamartOperand__Group_1__2__Impl() throws RecognitionException;
-     void rule__DatamartValue__Group_2_0__0() throws RecognitionException;
-     void rule__DatamartValue__Group_2_0__0__Impl() throws RecognitionException;
-     void rule__DatamartValue__Group_2_0__1() throws RecognitionException;
-     void rule__DatamartValue__Group_2_0__1__Impl() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__0() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__1() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__2() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__3() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group__0() throws RecognitionException;
-     void rule__DatamartAddition__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group__1() throws RecognitionException;
-     void rule__DatamartAddition__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group_1__0() throws RecognitionException;
-     void rule__DatamartAddition__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group_1__1() throws RecognitionException;
-     void rule__DatamartAddition__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_0__0() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_0__1() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_1__0() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_1__0__Impl() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_1__1() throws RecognitionException;
-     void rule__DatamartAddition__Group_1_0_1__1__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group__0() throws RecognitionException;
-     void rule__DatamartMultiplication__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group__1() throws RecognitionException;
-     void rule__DatamartMultiplication__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1__0() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1__1() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_0__0() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_0__1() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_1__0() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_1__0__Impl() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_1__1() throws RecognitionException;
-     void rule__DatamartMultiplication__Group_1_0_1__1__Impl() throws RecognitionException;
-     void rule__DatamartPrimary__Group_1__0() throws RecognitionException;
-     void rule__DatamartPrimary__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartPrimary__Group_1__1() throws RecognitionException;
-     void rule__DatamartPrimary__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartPrimary__Group_1__2() throws RecognitionException;
-     void rule__DatamartPrimary__Group_1__2__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group__0() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group__1() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group__2() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_0__0() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_0__0__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_0__1() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_0__1__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_2__0() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_2__0__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_2__1() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_2__1__Impl() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_2__2() throws RecognitionException;
-     void rule__DatamartMemberTuple__Group_2__2__Impl() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__0() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__1() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__2() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__3() throws RecognitionException;
-     void rule__DatamartParameterFunction__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__0() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__1() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__2() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__3() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__0() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__1() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__2() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__3() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartSetTuple__Group__0() throws RecognitionException;
-     void rule__DatamartSetTuple__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartSetTuple__Group__1() throws RecognitionException;
-     void rule__DatamartSetTuple__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartSetTuple__Group_1__0() throws RecognitionException;
-     void rule__DatamartSetTuple__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartSetTuple__Group_1__1() throws RecognitionException;
-     void rule__DatamartSetTuple__Group_1__1__Impl() throws RecognitionException;
-     void rule__DatamartSetTuple__Group_1__2() throws RecognitionException;
-     void rule__DatamartSetTuple__Group_1__2__Impl() throws RecognitionException;
-     void rule__DatamartAggregation__Group__0() throws RecognitionException;
-     void rule__DatamartAggregation__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartAggregation__Group__1() throws RecognitionException;
-     void rule__DatamartAggregation__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartAggregation__Group__2() throws RecognitionException;
-     void rule__DatamartAggregation__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartAggregation__Group__3() throws RecognitionException;
-     void rule__DatamartAggregation__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartAggregation__Group_3__0() throws RecognitionException;
-     void rule__DatamartAggregation__Group_3__0__Impl() throws RecognitionException;
-     void rule__DatamartAggregation__Group_3__1() throws RecognitionException;
-     void rule__DatamartAggregation__Group_3__1__Impl() throws RecognitionException;
-     void rule__DatamartAggregation__Group_3__2() throws RecognitionException;
-     void rule__DatamartAggregation__Group_3__2__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__0() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__1() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__2() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__3() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group_3__0() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group_3__0__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group_3__1() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group_3__1__Impl() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group_3__2() throws RecognitionException;
-     void rule__DatamartSetAggregation__Group_3__2__Impl() throws RecognitionException;
-     void rule__DatamartSlicer__Group__0() throws RecognitionException;
-     void rule__DatamartSlicer__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartSlicer__Group__1() throws RecognitionException;
-     void rule__DatamartSlicer__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartAxis__Group__0() throws RecognitionException;
-     void rule__DatamartAxis__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartAxis__Group__1() throws RecognitionException;
-     void rule__DatamartAxis__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartAxis__Group__2() throws RecognitionException;
-     void rule__DatamartAxis__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartAxis__Group__3() throws RecognitionException;
-     void rule__DatamartAxis__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartAxis__Group__4() throws RecognitionException;
-     void rule__DatamartAxis__Group__4__Impl() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group__0() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group__1() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group__2() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group_2__0() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group_2__0__Impl() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group_2__1() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__Group_2__1__Impl() throws RecognitionException;
-     void rule__DatamartMeasure__Group__0() throws RecognitionException;
-     void rule__DatamartMeasure__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartMeasure__Group__1() throws RecognitionException;
-     void rule__DatamartMeasure__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartMeasure__Group__2() throws RecognitionException;
-     void rule__DatamartMeasure__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartMeasure__Group_2__0() throws RecognitionException;
-     void rule__DatamartMeasure__Group_2__0__Impl() throws RecognitionException;
-     void rule__DatamartMeasure__Group_2__1() throws RecognitionException;
-     void rule__DatamartMeasure__Group_2__1__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__0() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__1() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__2() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__2__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__3() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__3__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__4() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__4__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__5() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__5__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__6() throws RecognitionException;
-     void rule__DatamartHierarchy__Group__6__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_5__0() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_5__0__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_5__1() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_5__1__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_5__2() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_5__2__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6__0() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6__0__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6__1() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6__1__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6__2() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6__2__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_1__0() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_1__0__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_1__1() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_1__1__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_2__0() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_2__0__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_2__1() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_2__1__Impl() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_2__2() throws RecognitionException;
-     void rule__DatamartHierarchy__Group_6_2__2__Impl() throws RecognitionException;
-     void rule__DatamartImport__Group__0() throws RecognitionException;
-     void rule__DatamartImport__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartImport__Group__1() throws RecognitionException;
-     void rule__DatamartImport__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group__0() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group__0__Impl() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group__1() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group_1__0() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group_1__0__Impl() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group_1__1() throws RecognitionException;
-     void rule__DatamartQualifiedNameWithWildCard__Group_1__1__Impl() throws RecognitionException;
-     void rule__QualifiedName__Group__0() throws RecognitionException;
-     void rule__QualifiedName__Group__0__Impl() throws RecognitionException;
-     void rule__QualifiedName__Group__1() throws RecognitionException;
-     void rule__QualifiedName__Group__1__Impl() throws RecognitionException;
-     void rule__QualifiedName__Group_1__0() throws RecognitionException;
-     void rule__QualifiedName__Group_1__0__Impl() throws RecognitionException;
-     void rule__QualifiedName__Group_1__1() throws RecognitionException;
-     void rule__QualifiedName__Group_1__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerData__Group__0() throws RecognitionException;
-     void rule__PropertyFillerData__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerData__Group__1() throws RecognitionException;
-     void rule__PropertyFillerData__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerData__Group__2() throws RecognitionException;
-     void rule__PropertyFillerData__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerData__Group__3() throws RecognitionException;
-     void rule__PropertyFillerData__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateFuture__Group__0() throws RecognitionException;
-     void rule__PropertyFillerDateFuture__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateFuture__Group__1() throws RecognitionException;
-     void rule__PropertyFillerDateFuture__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateFuture__Group__2() throws RecognitionException;
-     void rule__PropertyFillerDateFuture__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerDatePast__Group__0() throws RecognitionException;
-     void rule__PropertyFillerDatePast__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerDatePast__Group__1() throws RecognitionException;
-     void rule__PropertyFillerDatePast__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerDatePast__Group__2() throws RecognitionException;
-     void rule__PropertyFillerDatePast__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__0() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__1() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__2() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__3() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__4() throws RecognitionException;
-     void rule__PropertyFillerDateRange__Group__4__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__0() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__1() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__2() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__3() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__4() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__4__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__5() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group__5__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_1__0() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_1__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_1__1() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_1__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_1__2() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_1__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_5__0() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_5__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_5__1() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__Group_5__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__0() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__1() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__2() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__3() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__0() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__1() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__2() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__3() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_2__0() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_2__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_2__1() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_2__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_2__2() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_2__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_3__0() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_3__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_3__1() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__Group_3__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__0() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__1() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__2() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__3() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__0() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__1() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__2() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__3() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextParagraphs__Group__0() throws RecognitionException;
-     void rule__PropertyFillerTextParagraphs__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextParagraphs__Group__1() throws RecognitionException;
-     void rule__PropertyFillerTextParagraphs__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextParagraphs__Group__2() throws RecognitionException;
-     void rule__PropertyFillerTextParagraphs__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextSentences__Group__0() throws RecognitionException;
-     void rule__PropertyFillerTextSentences__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextSentences__Group__1() throws RecognitionException;
-     void rule__PropertyFillerTextSentences__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextSentences__Group__2() throws RecognitionException;
-     void rule__PropertyFillerTextSentences__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextWords__Group__0() throws RecognitionException;
-     void rule__PropertyFillerTextWords__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextWords__Group__1() throws RecognitionException;
-     void rule__PropertyFillerTextWords__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerTextWords__Group__2() throws RecognitionException;
-     void rule__PropertyFillerTextWords__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__3() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__4() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__4__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__5() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group__5__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_1__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_1__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_1__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_1__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_1__2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_1__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_5__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_5__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_5__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__Group_5__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__3() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__3() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group__3__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_2__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_2__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_2__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_2__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_2__2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_2__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_3__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_3__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_3__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__Group_3__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__0__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__1__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__2__Impl() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__3() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__Group__3__Impl() throws RecognitionException;
-     void rule__SignedNumber__Group__0() throws RecognitionException;
-     void rule__SignedNumber__Group__0__Impl() throws RecognitionException;
-     void rule__SignedNumber__Group__1() throws RecognitionException;
-     void rule__SignedNumber__Group__1__Impl() throws RecognitionException;
-     void rule__UnsignedNumber__Group__0() throws RecognitionException;
-     void rule__UnsignedNumber__Group__0__Impl() throws RecognitionException;
-     void rule__UnsignedNumber__Group__1() throws RecognitionException;
-     void rule__UnsignedNumber__Group__1__Impl() throws RecognitionException;
-     void rule__UnsignedNumber__Group_1__0() throws RecognitionException;
-     void rule__UnsignedNumber__Group_1__0__Impl() throws RecognitionException;
-     void rule__UnsignedNumber__Group_1__1() throws RecognitionException;
-     void rule__UnsignedNumber__Group_1__1__Impl() throws RecognitionException;
-     void rule__SINT__Group__0() throws RecognitionException;
-     void rule__SINT__Group__0__Impl() throws RecognitionException;
-     void rule__SINT__Group__1() throws RecognitionException;
-     void rule__SINT__Group__1__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group__0() throws RecognitionException;
-     void rule__XAnnotation__Group__0__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group__1() throws RecognitionException;
-     void rule__XAnnotation__Group__1__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group__2() throws RecognitionException;
-     void rule__XAnnotation__Group__2__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group__3() throws RecognitionException;
-     void rule__XAnnotation__Group__3__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group_3__0() throws RecognitionException;
-     void rule__XAnnotation__Group_3__0__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group_3__1() throws RecognitionException;
-     void rule__XAnnotation__Group_3__1__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group_3__2() throws RecognitionException;
-     void rule__XAnnotation__Group_3__2__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0__0() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0__1() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0__1__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0_1__0() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0_1__1() throws RecognitionException;
-     void rule__XAnnotation__Group_3_1_0_1__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group__0() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group__1() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group_0_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group_0_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group_0_0__1() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__Group_0_0__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0__1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0__2() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0__2__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1__1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1__1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1__1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0__1() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0__2() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0__2__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0_0__0() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0_0__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0_0__1() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0_0__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0_0__2() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_0_0__2__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1__0() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1__1() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1__1__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1_1__0() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1_1__0__Impl() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1_1__1() throws RecognitionException;
-     void rule__XAnnotationElementValue__Group_0_1_1__1__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_0__0() throws RecognitionException;
-     void rule__XAssignment__Group_0__0__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_0__1() throws RecognitionException;
-     void rule__XAssignment__Group_0__1__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_0__2() throws RecognitionException;
-     void rule__XAssignment__Group_0__2__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_0__3() throws RecognitionException;
-     void rule__XAssignment__Group_0__3__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_1__0() throws RecognitionException;
-     void rule__XAssignment__Group_1__0__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_1__1() throws RecognitionException;
-     void rule__XAssignment__Group_1__1__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_1_1__0() throws RecognitionException;
-     void rule__XAssignment__Group_1_1__0__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_1_1__1() throws RecognitionException;
-     void rule__XAssignment__Group_1_1__1__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_1_1_0__0() throws RecognitionException;
-     void rule__XAssignment__Group_1_1_0__0__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_1_1_0_0__0() throws RecognitionException;
-     void rule__XAssignment__Group_1_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XAssignment__Group_1_1_0_0__1() throws RecognitionException;
-     void rule__XAssignment__Group_1_1_0_0__1__Impl() throws RecognitionException;
-     void rule__OpMultiAssign__Group_5__0() throws RecognitionException;
-     void rule__OpMultiAssign__Group_5__0__Impl() throws RecognitionException;
-     void rule__OpMultiAssign__Group_5__1() throws RecognitionException;
-     void rule__OpMultiAssign__Group_5__1__Impl() throws RecognitionException;
-     void rule__OpMultiAssign__Group_5__2() throws RecognitionException;
-     void rule__OpMultiAssign__Group_5__2__Impl() throws RecognitionException;
-     void rule__OpMultiAssign__Group_6__0() throws RecognitionException;
-     void rule__OpMultiAssign__Group_6__0__Impl() throws RecognitionException;
-     void rule__OpMultiAssign__Group_6__1() throws RecognitionException;
-     void rule__OpMultiAssign__Group_6__1__Impl() throws RecognitionException;
-     void rule__OpMultiAssign__Group_6__2() throws RecognitionException;
-     void rule__OpMultiAssign__Group_6__2__Impl() throws RecognitionException;
-     void rule__XOrExpression__Group__0() throws RecognitionException;
-     void rule__XOrExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XOrExpression__Group__1() throws RecognitionException;
-     void rule__XOrExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XOrExpression__Group_1__0() throws RecognitionException;
-     void rule__XOrExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__XOrExpression__Group_1__1() throws RecognitionException;
-     void rule__XOrExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__XOrExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XOrExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XOrExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XOrExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XOrExpression__Group_1_0_0__1() throws RecognitionException;
-     void rule__XOrExpression__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XAndExpression__Group__0() throws RecognitionException;
-     void rule__XAndExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XAndExpression__Group__1() throws RecognitionException;
-     void rule__XAndExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XAndExpression__Group_1__0() throws RecognitionException;
-     void rule__XAndExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__XAndExpression__Group_1__1() throws RecognitionException;
-     void rule__XAndExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__XAndExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XAndExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XAndExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XAndExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XAndExpression__Group_1_0_0__1() throws RecognitionException;
-     void rule__XAndExpression__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XEqualityExpression__Group__0() throws RecognitionException;
-     void rule__XEqualityExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XEqualityExpression__Group__1() throws RecognitionException;
-     void rule__XEqualityExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1__0() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1__1() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1_0_0__1() throws RecognitionException;
-     void rule__XEqualityExpression__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group__0() throws RecognitionException;
-     void rule__XRelationalExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group__1() throws RecognitionException;
-     void rule__XRelationalExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0__1() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0_0_0__0() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0_0_0__0__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0_0_0__1() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_0_0_0__1__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1__0() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1__0__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1__1() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1__1__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1_0__0() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1_0__0__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1_0_0__0() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1_0_0__1() throws RecognitionException;
-     void rule__XRelationalExpression__Group_1_1_0_0__1__Impl() throws RecognitionException;
-     void rule__OpCompare__Group_1__0() throws RecognitionException;
-     void rule__OpCompare__Group_1__0__Impl() throws RecognitionException;
-     void rule__OpCompare__Group_1__1() throws RecognitionException;
-     void rule__OpCompare__Group_1__1__Impl() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group__0() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group__1() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1__0() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1__1() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1_0_0__1() throws RecognitionException;
-     void rule__XOtherOperatorExpression__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__OpOther__Group_2__0() throws RecognitionException;
-     void rule__OpOther__Group_2__0__Impl() throws RecognitionException;
-     void rule__OpOther__Group_2__1() throws RecognitionException;
-     void rule__OpOther__Group_2__1__Impl() throws RecognitionException;
-     void rule__OpOther__Group_5__0() throws RecognitionException;
-     void rule__OpOther__Group_5__0__Impl() throws RecognitionException;
-     void rule__OpOther__Group_5__1() throws RecognitionException;
-     void rule__OpOther__Group_5__1__Impl() throws RecognitionException;
-     void rule__OpOther__Group_5_1_0__0() throws RecognitionException;
-     void rule__OpOther__Group_5_1_0__0__Impl() throws RecognitionException;
-     void rule__OpOther__Group_5_1_0_0__0() throws RecognitionException;
-     void rule__OpOther__Group_5_1_0_0__0__Impl() throws RecognitionException;
-     void rule__OpOther__Group_5_1_0_0__1() throws RecognitionException;
-     void rule__OpOther__Group_5_1_0_0__1__Impl() throws RecognitionException;
-     void rule__OpOther__Group_6__0() throws RecognitionException;
-     void rule__OpOther__Group_6__0__Impl() throws RecognitionException;
-     void rule__OpOther__Group_6__1() throws RecognitionException;
-     void rule__OpOther__Group_6__1__Impl() throws RecognitionException;
-     void rule__OpOther__Group_6_1_0__0() throws RecognitionException;
-     void rule__OpOther__Group_6_1_0__0__Impl() throws RecognitionException;
-     void rule__OpOther__Group_6_1_0_0__0() throws RecognitionException;
-     void rule__OpOther__Group_6_1_0_0__0__Impl() throws RecognitionException;
-     void rule__OpOther__Group_6_1_0_0__1() throws RecognitionException;
-     void rule__OpOther__Group_6_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XAdditiveExpression__Group__0() throws RecognitionException;
-     void rule__XAdditiveExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XAdditiveExpression__Group__1() throws RecognitionException;
-     void rule__XAdditiveExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1__0() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1__1() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1_0_0__1() throws RecognitionException;
-     void rule__XAdditiveExpression__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group__0() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group__1() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1__0() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1__1() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1_0_0__1() throws RecognitionException;
-     void rule__XMultiplicativeExpression__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XUnaryOperation__Group_0__0() throws RecognitionException;
-     void rule__XUnaryOperation__Group_0__0__Impl() throws RecognitionException;
-     void rule__XUnaryOperation__Group_0__1() throws RecognitionException;
-     void rule__XUnaryOperation__Group_0__1__Impl() throws RecognitionException;
-     void rule__XUnaryOperation__Group_0__2() throws RecognitionException;
-     void rule__XUnaryOperation__Group_0__2__Impl() throws RecognitionException;
-     void rule__XCastedExpression__Group__0() throws RecognitionException;
-     void rule__XCastedExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XCastedExpression__Group__1() throws RecognitionException;
-     void rule__XCastedExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XCastedExpression__Group_1__0() throws RecognitionException;
-     void rule__XCastedExpression__Group_1__0__Impl() throws RecognitionException;
-     void rule__XCastedExpression__Group_1__1() throws RecognitionException;
-     void rule__XCastedExpression__Group_1__1__Impl() throws RecognitionException;
-     void rule__XCastedExpression__Group_1_0__0() throws RecognitionException;
-     void rule__XCastedExpression__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XCastedExpression__Group_1_0_0__0() throws RecognitionException;
-     void rule__XCastedExpression__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XCastedExpression__Group_1_0_0__1() throws RecognitionException;
-     void rule__XCastedExpression__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XPostfixOperation__Group__0() throws RecognitionException;
-     void rule__XPostfixOperation__Group__0__Impl() throws RecognitionException;
-     void rule__XPostfixOperation__Group__1() throws RecognitionException;
-     void rule__XPostfixOperation__Group__1__Impl() throws RecognitionException;
-     void rule__XPostfixOperation__Group_1__0() throws RecognitionException;
-     void rule__XPostfixOperation__Group_1__0__Impl() throws RecognitionException;
-     void rule__XPostfixOperation__Group_1_0__0() throws RecognitionException;
-     void rule__XPostfixOperation__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XPostfixOperation__Group_1_0__1() throws RecognitionException;
-     void rule__XPostfixOperation__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__2() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__2__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__3() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_0_0_0__3__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__2() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__2__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__3() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__3__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__4() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1__4__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_0__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_0__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_0_0__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_0_0__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__2() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__2__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__3() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1__3__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1_2__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1_2__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1_2__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_1_2__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3__2() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3__2__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1__1__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0__Impl() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1() throws RecognitionException;
-     void rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group__0() throws RecognitionException;
-     void rule__XSetLiteral__Group__0__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group__1() throws RecognitionException;
-     void rule__XSetLiteral__Group__1__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group__2() throws RecognitionException;
-     void rule__XSetLiteral__Group__2__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group__3() throws RecognitionException;
-     void rule__XSetLiteral__Group__3__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group__4() throws RecognitionException;
-     void rule__XSetLiteral__Group__4__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group_3__0() throws RecognitionException;
-     void rule__XSetLiteral__Group_3__0__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group_3__1() throws RecognitionException;
-     void rule__XSetLiteral__Group_3__1__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group_3_1__0() throws RecognitionException;
-     void rule__XSetLiteral__Group_3_1__0__Impl() throws RecognitionException;
-     void rule__XSetLiteral__Group_3_1__1() throws RecognitionException;
-     void rule__XSetLiteral__Group_3_1__1__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group__0() throws RecognitionException;
-     void rule__XListLiteral__Group__0__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group__1() throws RecognitionException;
-     void rule__XListLiteral__Group__1__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group__2() throws RecognitionException;
-     void rule__XListLiteral__Group__2__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group__3() throws RecognitionException;
-     void rule__XListLiteral__Group__3__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group__4() throws RecognitionException;
-     void rule__XListLiteral__Group__4__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group_3__0() throws RecognitionException;
-     void rule__XListLiteral__Group_3__0__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group_3__1() throws RecognitionException;
-     void rule__XListLiteral__Group_3__1__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group_3_1__0() throws RecognitionException;
-     void rule__XListLiteral__Group_3_1__0__Impl() throws RecognitionException;
-     void rule__XListLiteral__Group_3_1__1() throws RecognitionException;
-     void rule__XListLiteral__Group_3_1__1__Impl() throws RecognitionException;
-     void rule__XClosure__Group__0() throws RecognitionException;
-     void rule__XClosure__Group__0__Impl() throws RecognitionException;
-     void rule__XClosure__Group__1() throws RecognitionException;
-     void rule__XClosure__Group__1__Impl() throws RecognitionException;
-     void rule__XClosure__Group__2() throws RecognitionException;
-     void rule__XClosure__Group__2__Impl() throws RecognitionException;
-     void rule__XClosure__Group__3() throws RecognitionException;
-     void rule__XClosure__Group__3__Impl() throws RecognitionException;
-     void rule__XClosure__Group_0__0() throws RecognitionException;
-     void rule__XClosure__Group_0__0__Impl() throws RecognitionException;
-     void rule__XClosure__Group_0_0__0() throws RecognitionException;
-     void rule__XClosure__Group_0_0__0__Impl() throws RecognitionException;
-     void rule__XClosure__Group_0_0__1() throws RecognitionException;
-     void rule__XClosure__Group_0_0__1__Impl() throws RecognitionException;
-     void rule__XClosure__Group_1__0() throws RecognitionException;
-     void rule__XClosure__Group_1__0__Impl() throws RecognitionException;
-     void rule__XClosure__Group_1_0__0() throws RecognitionException;
-     void rule__XClosure__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XClosure__Group_1_0__1() throws RecognitionException;
-     void rule__XClosure__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0__0() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0__1() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0_1__0() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0_1__0__Impl() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0_1__1() throws RecognitionException;
-     void rule__XClosure__Group_1_0_0_1__1__Impl() throws RecognitionException;
-     void rule__XExpressionInClosure__Group__0() throws RecognitionException;
-     void rule__XExpressionInClosure__Group__0__Impl() throws RecognitionException;
-     void rule__XExpressionInClosure__Group__1() throws RecognitionException;
-     void rule__XExpressionInClosure__Group__1__Impl() throws RecognitionException;
-     void rule__XExpressionInClosure__Group_1__0() throws RecognitionException;
-     void rule__XExpressionInClosure__Group_1__0__Impl() throws RecognitionException;
-     void rule__XExpressionInClosure__Group_1__1() throws RecognitionException;
-     void rule__XExpressionInClosure__Group_1__1__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group__0() throws RecognitionException;
-     void rule__XShortClosure__Group__0__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group__1() throws RecognitionException;
-     void rule__XShortClosure__Group__1__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0__0() throws RecognitionException;
-     void rule__XShortClosure__Group_0__0__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0__0() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0__0__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0__1() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0__1__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0__2() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0__2__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1__0() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1__0__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1__1() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1__1__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1_1__0() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1_1__0__Impl() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1_1__1() throws RecognitionException;
-     void rule__XShortClosure__Group_0_0_1_1__1__Impl() throws RecognitionException;
-     void rule__XParenthesizedExpression__Group__0() throws RecognitionException;
-     void rule__XParenthesizedExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XParenthesizedExpression__Group__1() throws RecognitionException;
-     void rule__XParenthesizedExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XParenthesizedExpression__Group__2() throws RecognitionException;
-     void rule__XParenthesizedExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group__0() throws RecognitionException;
-     void rule__XIfExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group__1() throws RecognitionException;
-     void rule__XIfExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group__2() throws RecognitionException;
-     void rule__XIfExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group__3() throws RecognitionException;
-     void rule__XIfExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group__4() throws RecognitionException;
-     void rule__XIfExpression__Group__4__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group__5() throws RecognitionException;
-     void rule__XIfExpression__Group__5__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group__6() throws RecognitionException;
-     void rule__XIfExpression__Group__6__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group_6__0() throws RecognitionException;
-     void rule__XIfExpression__Group_6__0__Impl() throws RecognitionException;
-     void rule__XIfExpression__Group_6__1() throws RecognitionException;
-     void rule__XIfExpression__Group_6__1__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group__1() throws RecognitionException;
-     void rule__XSwitchExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group__2() throws RecognitionException;
-     void rule__XSwitchExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group__3() throws RecognitionException;
-     void rule__XSwitchExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group__4() throws RecognitionException;
-     void rule__XSwitchExpression__Group__4__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group__5() throws RecognitionException;
-     void rule__XSwitchExpression__Group__5__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group__6() throws RecognitionException;
-     void rule__XSwitchExpression__Group__6__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0__1() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0__1__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0__2() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0__2__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0_0__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0_0__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0_0__1() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0_0__1__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0_0__2() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_0_0_0__2__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1__1() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1__1__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1_0__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1_0__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1_0_0__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1_0_0__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1_0_0__1() throws RecognitionException;
-     void rule__XSwitchExpression__Group_2_1_0_0__1__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_5__0() throws RecognitionException;
-     void rule__XSwitchExpression__Group_5__0__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_5__1() throws RecognitionException;
-     void rule__XSwitchExpression__Group_5__1__Impl() throws RecognitionException;
-     void rule__XSwitchExpression__Group_5__2() throws RecognitionException;
-     void rule__XSwitchExpression__Group_5__2__Impl() throws RecognitionException;
-     void rule__XCasePart__Group__0() throws RecognitionException;
-     void rule__XCasePart__Group__0__Impl() throws RecognitionException;
-     void rule__XCasePart__Group__1() throws RecognitionException;
-     void rule__XCasePart__Group__1__Impl() throws RecognitionException;
-     void rule__XCasePart__Group__2() throws RecognitionException;
-     void rule__XCasePart__Group__2__Impl() throws RecognitionException;
-     void rule__XCasePart__Group__3() throws RecognitionException;
-     void rule__XCasePart__Group__3__Impl() throws RecognitionException;
-     void rule__XCasePart__Group_2__0() throws RecognitionException;
-     void rule__XCasePart__Group_2__0__Impl() throws RecognitionException;
-     void rule__XCasePart__Group_2__1() throws RecognitionException;
-     void rule__XCasePart__Group_2__1__Impl() throws RecognitionException;
-     void rule__XCasePart__Group_3_0__0() throws RecognitionException;
-     void rule__XCasePart__Group_3_0__0__Impl() throws RecognitionException;
-     void rule__XCasePart__Group_3_0__1() throws RecognitionException;
-     void rule__XCasePart__Group_3_0__1__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group__0() throws RecognitionException;
-     void rule__XForLoopExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group__1() throws RecognitionException;
-     void rule__XForLoopExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group__2() throws RecognitionException;
-     void rule__XForLoopExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group__3() throws RecognitionException;
-     void rule__XForLoopExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0__0() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0__0__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__0() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__0__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__1() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__1__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__2() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__2__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__3() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__3__Impl() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__4() throws RecognitionException;
-     void rule__XForLoopExpression__Group_0_0__4__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__0() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__1() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__2() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__3() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__4() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__4__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__5() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__5__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__6() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__6__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__7() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__7__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__8() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__8__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__9() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group__9__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3__0() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3__0__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3__1() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3__1__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3_1__0() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3_1__0__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3_1__1() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_3_1__1__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7__0() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7__0__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7__1() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7__1__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7_1__0() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7_1__0__Impl() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7_1__1() throws RecognitionException;
-     void rule__XBasicForLoopExpression__Group_7_1__1__Impl() throws RecognitionException;
-     void rule__XWhileExpression__Group__0() throws RecognitionException;
-     void rule__XWhileExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XWhileExpression__Group__1() throws RecognitionException;
-     void rule__XWhileExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XWhileExpression__Group__2() throws RecognitionException;
-     void rule__XWhileExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XWhileExpression__Group__3() throws RecognitionException;
-     void rule__XWhileExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XWhileExpression__Group__4() throws RecognitionException;
-     void rule__XWhileExpression__Group__4__Impl() throws RecognitionException;
-     void rule__XWhileExpression__Group__5() throws RecognitionException;
-     void rule__XWhileExpression__Group__5__Impl() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__0() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__1() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__2() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__3() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__4() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__4__Impl() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__5() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__5__Impl() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__6() throws RecognitionException;
-     void rule__XDoWhileExpression__Group__6__Impl() throws RecognitionException;
-     void rule__XBlockExpression__Group__0() throws RecognitionException;
-     void rule__XBlockExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XBlockExpression__Group__1() throws RecognitionException;
-     void rule__XBlockExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XBlockExpression__Group__2() throws RecognitionException;
-     void rule__XBlockExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XBlockExpression__Group__3() throws RecognitionException;
-     void rule__XBlockExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XBlockExpression__Group_2__0() throws RecognitionException;
-     void rule__XBlockExpression__Group_2__0__Impl() throws RecognitionException;
-     void rule__XBlockExpression__Group_2__1() throws RecognitionException;
-     void rule__XBlockExpression__Group_2__1__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__0() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__0__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__1() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__1__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__2() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__2__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__3() throws RecognitionException;
-     void rule__XVariableDeclaration__Group__3__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_2_0__0() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_2_0__0__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_2_0_0__0() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_2_0_0__0__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_2_0_0__1() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_2_0_0__1__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_3__0() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_3__0__Impl() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_3__1() throws RecognitionException;
-     void rule__XVariableDeclaration__Group_3__1__Impl() throws RecognitionException;
-     void rule__JvmFormalParameter__Group__0() throws RecognitionException;
-     void rule__JvmFormalParameter__Group__0__Impl() throws RecognitionException;
-     void rule__JvmFormalParameter__Group__1() throws RecognitionException;
-     void rule__JvmFormalParameter__Group__1__Impl() throws RecognitionException;
-     void rule__FullJvmFormalParameter__Group__0() throws RecognitionException;
-     void rule__FullJvmFormalParameter__Group__0__Impl() throws RecognitionException;
-     void rule__FullJvmFormalParameter__Group__1() throws RecognitionException;
-     void rule__FullJvmFormalParameter__Group__1__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group__0() throws RecognitionException;
-     void rule__XFeatureCall__Group__0__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group__1() throws RecognitionException;
-     void rule__XFeatureCall__Group__1__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group__2() throws RecognitionException;
-     void rule__XFeatureCall__Group__2__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group__3() throws RecognitionException;
-     void rule__XFeatureCall__Group__3__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group__4() throws RecognitionException;
-     void rule__XFeatureCall__Group__4__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__0() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__0__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__1() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__1__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__2() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__2__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__3() throws RecognitionException;
-     void rule__XFeatureCall__Group_1__3__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_1_2__0() throws RecognitionException;
-     void rule__XFeatureCall__Group_1_2__0__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_1_2__1() throws RecognitionException;
-     void rule__XFeatureCall__Group_1_2__1__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_3__0() throws RecognitionException;
-     void rule__XFeatureCall__Group_3__0__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_3__1() throws RecognitionException;
-     void rule__XFeatureCall__Group_3__1__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_3__2() throws RecognitionException;
-     void rule__XFeatureCall__Group_3__2__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1__0() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1__0__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1__1() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1__1__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1_1__0() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1_1__0__Impl() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1_1__1() throws RecognitionException;
-     void rule__XFeatureCall__Group_3_1_1_1__1__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group__0() throws RecognitionException;
-     void rule__XConstructorCall__Group__0__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group__1() throws RecognitionException;
-     void rule__XConstructorCall__Group__1__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group__2() throws RecognitionException;
-     void rule__XConstructorCall__Group__2__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group__3() throws RecognitionException;
-     void rule__XConstructorCall__Group__3__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group__4() throws RecognitionException;
-     void rule__XConstructorCall__Group__4__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group__5() throws RecognitionException;
-     void rule__XConstructorCall__Group__5__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__0() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__0__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__1() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__1__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__2() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__2__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__3() throws RecognitionException;
-     void rule__XConstructorCall__Group_3__3__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_3_2__0() throws RecognitionException;
-     void rule__XConstructorCall__Group_3_2__0__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_3_2__1() throws RecognitionException;
-     void rule__XConstructorCall__Group_3_2__1__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_4__0() throws RecognitionException;
-     void rule__XConstructorCall__Group_4__0__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_4__1() throws RecognitionException;
-     void rule__XConstructorCall__Group_4__1__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_4__2() throws RecognitionException;
-     void rule__XConstructorCall__Group_4__2__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1__0() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1__0__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1__1() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1__1__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1_1__0() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1_1__0__Impl() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1_1__1() throws RecognitionException;
-     void rule__XConstructorCall__Group_4_1_1_1__1__Impl() throws RecognitionException;
-     void rule__XBooleanLiteral__Group__0() throws RecognitionException;
-     void rule__XBooleanLiteral__Group__0__Impl() throws RecognitionException;
-     void rule__XBooleanLiteral__Group__1() throws RecognitionException;
-     void rule__XBooleanLiteral__Group__1__Impl() throws RecognitionException;
-     void rule__XNullLiteral__Group__0() throws RecognitionException;
-     void rule__XNullLiteral__Group__0__Impl() throws RecognitionException;
-     void rule__XNullLiteral__Group__1() throws RecognitionException;
-     void rule__XNullLiteral__Group__1__Impl() throws RecognitionException;
-     void rule__XNumberLiteral__Group__0() throws RecognitionException;
-     void rule__XNumberLiteral__Group__0__Impl() throws RecognitionException;
-     void rule__XNumberLiteral__Group__1() throws RecognitionException;
-     void rule__XNumberLiteral__Group__1__Impl() throws RecognitionException;
-     void rule__XStringLiteral__Group__0() throws RecognitionException;
-     void rule__XStringLiteral__Group__0__Impl() throws RecognitionException;
-     void rule__XStringLiteral__Group__1() throws RecognitionException;
-     void rule__XStringLiteral__Group__1__Impl() throws RecognitionException;
-     void rule__XTypeLiteral__Group__0() throws RecognitionException;
-     void rule__XTypeLiteral__Group__0__Impl() throws RecognitionException;
-     void rule__XTypeLiteral__Group__1() throws RecognitionException;
-     void rule__XTypeLiteral__Group__1__Impl() throws RecognitionException;
-     void rule__XTypeLiteral__Group__2() throws RecognitionException;
-     void rule__XTypeLiteral__Group__2__Impl() throws RecognitionException;
-     void rule__XTypeLiteral__Group__3() throws RecognitionException;
-     void rule__XTypeLiteral__Group__3__Impl() throws RecognitionException;
-     void rule__XTypeLiteral__Group__4() throws RecognitionException;
-     void rule__XTypeLiteral__Group__4__Impl() throws RecognitionException;
-     void rule__XTypeLiteral__Group__5() throws RecognitionException;
-     void rule__XTypeLiteral__Group__5__Impl() throws RecognitionException;
-     void rule__XThrowExpression__Group__0() throws RecognitionException;
-     void rule__XThrowExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XThrowExpression__Group__1() throws RecognitionException;
-     void rule__XThrowExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XThrowExpression__Group__2() throws RecognitionException;
-     void rule__XThrowExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XReturnExpression__Group__0() throws RecognitionException;
-     void rule__XReturnExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XReturnExpression__Group__1() throws RecognitionException;
-     void rule__XReturnExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XReturnExpression__Group__2() throws RecognitionException;
-     void rule__XReturnExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__0() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__1() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__2() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__3() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0__0() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0__0__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0__1() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0__1__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0_1__0() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0_1__0__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0_1__1() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_0_1__1__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_1__0() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_1__0__Impl() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_1__1() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__Group_3_1__1__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__0() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__0__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__1() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__1__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__2() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__2__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__3() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group__3__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0__0() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0__0__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0_0__0() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0_0__0__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0_0__1() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0_0__1__Impl() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0_0__2() throws RecognitionException;
-     void rule__XSynchronizedExpression__Group_0_0__2__Impl() throws RecognitionException;
-     void rule__XCatchClause__Group__0() throws RecognitionException;
-     void rule__XCatchClause__Group__0__Impl() throws RecognitionException;
-     void rule__XCatchClause__Group__1() throws RecognitionException;
-     void rule__XCatchClause__Group__1__Impl() throws RecognitionException;
-     void rule__XCatchClause__Group__2() throws RecognitionException;
-     void rule__XCatchClause__Group__2__Impl() throws RecognitionException;
-     void rule__XCatchClause__Group__3() throws RecognitionException;
-     void rule__XCatchClause__Group__3__Impl() throws RecognitionException;
-     void rule__XCatchClause__Group__4() throws RecognitionException;
-     void rule__XCatchClause__Group__4__Impl() throws RecognitionException;
-     void rule__Number__Group_1__0() throws RecognitionException;
-     void rule__Number__Group_1__0__Impl() throws RecognitionException;
-     void rule__Number__Group_1__1() throws RecognitionException;
-     void rule__Number__Group_1__1__Impl() throws RecognitionException;
-     void rule__Number__Group_1_1__0() throws RecognitionException;
-     void rule__Number__Group_1_1__0__Impl() throws RecognitionException;
-     void rule__Number__Group_1_1__1() throws RecognitionException;
-     void rule__Number__Group_1_1__1__Impl() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0__0() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0__0__Impl() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0__1() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0__1__Impl() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0_1__0() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0_1__0__Impl() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0_1_0__0() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0_1_0__0__Impl() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0_1_0__1() throws RecognitionException;
-     void rule__JvmTypeReference__Group_0_1_0__1__Impl() throws RecognitionException;
-     void rule__ArrayBrackets__Group__0() throws RecognitionException;
-     void rule__ArrayBrackets__Group__0__Impl() throws RecognitionException;
-     void rule__ArrayBrackets__Group__1() throws RecognitionException;
-     void rule__ArrayBrackets__Group__1__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group__0() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group__0__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group__1() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group__1__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group__2() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group__2__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0__0() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0__0__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0__1() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0__1__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0__2() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0__2__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1__0() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1__0__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1__1() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1__1__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1_1__0() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1_1__0__Impl() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1_1__1() throws RecognitionException;
-     void rule__XFunctionTypeRef__Group_0_1_1__1__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group__1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group__1__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__1__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__2() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__2__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__3() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__3__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__4() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1__4__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_2__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_2__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_2__1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_2__1__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4__1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4__1__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4__2() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4__2__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_0__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_0__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_0_0__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_0_0__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_0_0__1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_0_0__1__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__1__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__2() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__2__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__3() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2__3__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2_2__0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2_2__0__Impl() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2_2__1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__Group_1_4_2_2__1__Impl() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group__0() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group__0__Impl() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group__1() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group__1__Impl() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group__2() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group__2__Impl() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_0__0() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_0__0__Impl() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_0__1() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_0__1__Impl() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_1__0() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_1__0__Impl() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_1__1() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__Group_2_1__1__Impl() throws RecognitionException;
-     void rule__JvmUpperBound__Group__0() throws RecognitionException;
-     void rule__JvmUpperBound__Group__0__Impl() throws RecognitionException;
-     void rule__JvmUpperBound__Group__1() throws RecognitionException;
-     void rule__JvmUpperBound__Group__1__Impl() throws RecognitionException;
-     void rule__JvmUpperBoundAnded__Group__0() throws RecognitionException;
-     void rule__JvmUpperBoundAnded__Group__0__Impl() throws RecognitionException;
-     void rule__JvmUpperBoundAnded__Group__1() throws RecognitionException;
-     void rule__JvmUpperBoundAnded__Group__1__Impl() throws RecognitionException;
-     void rule__JvmLowerBound__Group__0() throws RecognitionException;
-     void rule__JvmLowerBound__Group__0__Impl() throws RecognitionException;
-     void rule__JvmLowerBound__Group__1() throws RecognitionException;
-     void rule__JvmLowerBound__Group__1__Impl() throws RecognitionException;
-     void rule__JvmLowerBoundAnded__Group__0() throws RecognitionException;
-     void rule__JvmLowerBoundAnded__Group__0__Impl() throws RecognitionException;
-     void rule__JvmLowerBoundAnded__Group__1() throws RecognitionException;
-     void rule__JvmLowerBoundAnded__Group__1__Impl() throws RecognitionException;
-     void rule__QualifiedNameWithWildcard__Group__0() throws RecognitionException;
-     void rule__QualifiedNameWithWildcard__Group__0__Impl() throws RecognitionException;
-     void rule__QualifiedNameWithWildcard__Group__1() throws RecognitionException;
-     void rule__QualifiedNameWithWildcard__Group__1__Impl() throws RecognitionException;
-     void rule__QualifiedNameWithWildcard__Group__2() throws RecognitionException;
-     void rule__QualifiedNameWithWildcard__Group__2__Impl() throws RecognitionException;
-     void rule__XImportDeclaration__Group__0() throws RecognitionException;
-     void rule__XImportDeclaration__Group__0__Impl() throws RecognitionException;
-     void rule__XImportDeclaration__Group__1() throws RecognitionException;
-     void rule__XImportDeclaration__Group__1__Impl() throws RecognitionException;
-     void rule__XImportDeclaration__Group__2() throws RecognitionException;
-     void rule__XImportDeclaration__Group__2__Impl() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__0() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__0__Impl() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__1() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__1__Impl() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__2() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__2__Impl() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__3() throws RecognitionException;
-     void rule__XImportDeclaration__Group_1_0__3__Impl() throws RecognitionException;
-     void rule__QualifiedNameInStaticImport__Group__0() throws RecognitionException;
-     void rule__QualifiedNameInStaticImport__Group__0__Impl() throws RecognitionException;
-     void rule__QualifiedNameInStaticImport__Group__1() throws RecognitionException;
-     void rule__QualifiedNameInStaticImport__Group__1__Impl() throws RecognitionException;
-     void rule__DatamartProperty__UnorderedGroup_2() throws RecognitionException;
-     void rule__DatamartProperty__UnorderedGroup_2__Impl() throws RecognitionException;
-     void rule__DatamartProperty__UnorderedGroup_2__0() throws RecognitionException;
-     void rule__DatamartProperty__UnorderedGroup_2__1() throws RecognitionException;
-     void rule__DatamartProperty__UnorderedGroup_2__2() throws RecognitionException;
-     void rule__DatamartModel__PackagesAssignment() throws RecognitionException;
-     void rule__DatamartPackage__NameAssignment_2() throws RecognitionException;
-     void rule__DatamartPackage__ImportsAssignment_3_1() throws RecognitionException;
-     void rule__DatamartPackage__DefinitionsAssignment_3_2() throws RecognitionException;
-     void rule__DatamartDefinition__NameAssignment_1() throws RecognitionException;
-     void rule__DatamartDefinition__DescriptionAssignment_2_0() throws RecognitionException;
-     void rule__DatamartDefinition__DescriptionValueAssignment_2_1() throws RecognitionException;
-     void rule__DatamartDefinition__RolesAssignment_3_2() throws RecognitionException;
-     void rule__DatamartDefinition__SourceAssignment_5() throws RecognitionException;
-     void rule__DatamartRole__AssignedRoleAssignment_1() throws RecognitionException;
-     void rule__DatamartTask__TaskQueryAssignment_1() throws RecognitionException;
-     void rule__DatamartTask__ColumnsAssignment_2_2() throws RecognitionException;
-     void rule__DatamartTask__ConditionsAssignment_3_2() throws RecognitionException;
-     void rule__DatamartColumn__ColumnRefAssignment_1() throws RecognitionException;
-     void rule__DatamartTaskFilter__FilterRefAssignment_1() throws RecognitionException;
-     void rule__DatamartCube__CubeRefAssignment_1() throws RecognitionException;
-     void rule__DatamartCube__NonEmptyAssignment_2() throws RecognitionException;
-     void rule__DatamartCube__AxisslicerAssignment_4() throws RecognitionException;
-     void rule__DatamartReference__RefAssignment_1() throws RecognitionException;
-     void rule__DatamartEntity__EntityRefAssignment_1() throws RecognitionException;
-     void rule__DatamartEntity__TrackingAssignment_2() throws RecognitionException;
-     void rule__DatamartEntity__NavigationsAssignment_4_2() throws RecognitionException;
-     void rule__DatamartEntity__PropertiesAssignment_5_2() throws RecognitionException;
-     void rule__DatamartEntity__ConditionsAssignment_6_2() throws RecognitionException;
-     void rule__DatamartEntity__OrderingAssignment_7_2() throws RecognitionException;
-     void rule__DatamartEntity__FillerMinCountRowsAssignment_8_1() throws RecognitionException;
-     void rule__DatamartEntity__FillerMaxCountRowsAssignment_8_3() throws RecognitionException;
-     void rule__DatamartEntity__FillerDatasAssignment_8_5() throws RecognitionException;
-     void rule__DatamartOwner__JoinRefAssignment_1() throws RecognitionException;
-     void rule__DatamartOwner__DatamartEntityAssignment_3() throws RecognitionException;
-     void rule__DatamartMember__JoinRefAssignment_1() throws RecognitionException;
-     void rule__DatamartMember__DatamartEntityAssignment_3() throws RecognitionException;
-     void rule__DatamartProperty__PropertyRefAssignment_1() throws RecognitionException;
-     void rule__DatamartProperty__AggregatedAssignment_2_0_0() throws RecognitionException;
-     void rule__DatamartProperty__AggregateAssignment_2_0_1() throws RecognitionException;
-     void rule__DatamartProperty__PlacedAssignment_2_1_0() throws RecognitionException;
-     void rule__DatamartProperty__AxisAssignment_2_1_1() throws RecognitionException;
-     void rule__DatamartProperty__ScaledAssignment_2_2_0() throws RecognitionException;
-     void rule__DatamartProperty__ScaleAssignment_2_2_1() throws RecognitionException;
-     void rule__DatamartCondition__ConditionAssignment_1() throws RecognitionException;
-     void rule__DatamartOrder__OrderByAssignment_1() throws RecognitionException;
-     void rule__DatamartOrder__OrderHowAssignment_2() throws RecognitionException;
-     void rule__DatamartDisjunction__RightAssignment_1_1() throws RecognitionException;
-     void rule__DatamartConjunction__RightAssignment_1_1() throws RecognitionException;
-     void rule__DatamartConditionalExpression__OperatorAssignment_1_0_1() throws RecognitionException;
-     void rule__DatamartConditionalExpression__RightAssignment_1_1() throws RecognitionException;
-     void rule__DatamartValue__NumberValueAssignment_0() throws RecognitionException;
-     void rule__DatamartValue__StringValueAssignment_1() throws RecognitionException;
-     void rule__DatamartValue__FilteredAssignment_2_0_0() throws RecognitionException;
-     void rule__DatamartValue__OptionalAssignment_2_0_1() throws RecognitionException;
-     void rule__DatamartValue__SelectedAssignment_2_1() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__NameAssignment_1() throws RecognitionException;
-     void rule__DatamartDefineDerivedMeasure__DerivedElementAssignment_3() throws RecognitionException;
-     void rule__DatamartAddition__RightAssignment_1_1() throws RecognitionException;
-     void rule__DatamartMultiplication__RightAssignment_1_1() throws RecognitionException;
-     void rule__DatamartNumberOrElement__ValueAssignment_0() throws RecognitionException;
-     void rule__DatamartMemberTuple__FunctionAssignment_0_0_0() throws RecognitionException;
-     void rule__DatamartMemberTuple__FunctionAssignment_0_0_1() throws RecognitionException;
-     void rule__DatamartMemberTuple__HierarchyAssignment_1() throws RecognitionException;
-     void rule__DatamartMemberTuple__RightAssignment_2_2() throws RecognitionException;
-     void rule__DatamartFunction__FunctionAssignment() throws RecognitionException;
-     void rule__DatamartParameterFunction__FunctionAssignment_0() throws RecognitionException;
-     void rule__DatamartParameterFunction__ParameterAssignment_2() throws RecognitionException;
-     void rule__DatamartFunctionIntParameter__ValueAssignment() throws RecognitionException;
-     void rule__DatamartSetFunction__SetFunctionAssignment() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__SetFunctionAssignment_0() throws RecognitionException;
-     void rule__DatamartSetParameterFunction__ParameterAssignment_2() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__AggregationAssignment_0() throws RecognitionException;
-     void rule__DatamartSetAggregationFunction__ParameterAssignment_2() throws RecognitionException;
-     void rule__DatamartSetTuple__SetFunctionAssignment_0_0() throws RecognitionException;
-     void rule__DatamartSetTuple__SetFunctionAssignment_0_1() throws RecognitionException;
-     void rule__DatamartSetTuple__RightAssignment_1_2() throws RecognitionException;
-     void rule__DatamartAggregationFunction__AggregationAssignment() throws RecognitionException;
-     void rule__DatamartAggregation__AggregationAssignment_0() throws RecognitionException;
-     void rule__DatamartAggregation__SetAssignment_2_0() throws RecognitionException;
-     void rule__DatamartAggregation__SetAssignment_2_1() throws RecognitionException;
-     void rule__DatamartAggregation__RightAssignment_3_2() throws RecognitionException;
-     void rule__DatamartSetAggregation__AggregationAssignment_0() throws RecognitionException;
-     void rule__DatamartSetAggregation__SetAssignment_2_0() throws RecognitionException;
-     void rule__DatamartSetAggregation__SetAssignment_2_1() throws RecognitionException;
-     void rule__DatamartSetAggregation__RightAssignment_3_2() throws RecognitionException;
-     void rule__DatamartSlicer__ElementAssignment_1() throws RecognitionException;
-     void rule__DatamartAxis__NameAssignment_1() throws RecognitionException;
-     void rule__DatamartAxis__ElementsAssignment_3() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__DerivedRefAssignment_1() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__ScaledAssignment_2_0() throws RecognitionException;
-     void rule__DatamartDerivedMeasure__ScaleAssignment_2_1() throws RecognitionException;
-     void rule__DatamartMeasure__MeasureRefAssignment_1() throws RecognitionException;
-     void rule__DatamartMeasure__ScaledAssignment_2_0() throws RecognitionException;
-     void rule__DatamartMeasure__ScaleAssignment_2_1() throws RecognitionException;
-     void rule__DatamartHierarchy__HierarchyRefAssignment_1() throws RecognitionException;
-     void rule__DatamartHierarchy__DefaultMemberAssignment_2() throws RecognitionException;
-     void rule__DatamartHierarchy__AllMemberAssignment_3() throws RecognitionException;
-     void rule__DatamartHierarchy__AllLevelsAssignment_4() throws RecognitionException;
-     void rule__DatamartHierarchy__LevelRefAssignment_5_1() throws RecognitionException;
-     void rule__DatamartHierarchy__FilteredAssignment_5_2_0() throws RecognitionException;
-     void rule__DatamartHierarchy__SelectedAssignment_5_2_1() throws RecognitionException;
-     void rule__DatamartHierarchy__AllAssignment_6_0() throws RecognitionException;
-     void rule__DatamartHierarchy__ExceptAssignment_6_1_0() throws RecognitionException;
-     void rule__DatamartHierarchy__ExceptRefAssignment_6_1_1() throws RecognitionException;
-     void rule__DatamartHierarchy__OrderedAssignment_6_2_0() throws RecognitionException;
-     void rule__DatamartHierarchy__OrderRefAssignment_6_2_1() throws RecognitionException;
-     void rule__DatamartHierarchy__DescendingAssignment_6_2_2() throws RecognitionException;
-     void rule__DatamartImport__ImportedNamespaceAssignment_1() throws RecognitionException;
-     void rule__PropertyFillerData__PropertyRefAssignment_1() throws RecognitionException;
-     void rule__PropertyFillerData__FillerTypeAssignment_3() throws RecognitionException;
-     void rule__PropertyFillerDateFuture__DateFutureYearsAssignment_1() throws RecognitionException;
-     void rule__PropertyFillerDatePast__DatePastYearsAssignment_1() throws RecognitionException;
-     void rule__PropertyFillerDateRange__DateBeginYearsAssignment_1() throws RecognitionException;
-     void rule__PropertyFillerDateRange__DateEndYearsAssignment_3() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__BeginRangeAssignment_1_0_0() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__BeginRangeRefAssignment_1_0_1() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__EndRangeAssignment_1_2_0() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__EndRangeRefAssignment_1_2_1() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__DecimalsAssignment_3() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRange__RoundedAssignment_5_1() throws RecognitionException;
-     void rule__PropertyFillerSignedDoubleRandom__ItemsAssignment_2() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__BeginRangeAssignment_2_0_0() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__BeginRangeRefAssignment_2_0_1() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__EndRangeAssignment_2_2_0() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__EndRangeRefAssignment_2_2_1() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRange__RoundedAssignment_3_1() throws RecognitionException;
-     void rule__PropertyFillerSignedIntegerRandom__ItemsAssignment_2() throws RecognitionException;
-     void rule__PropertyFillerTextRandom__ItemsAssignment_2() throws RecognitionException;
-     void rule__PropertyFillerTextParagraphs__CountAssignment_2() throws RecognitionException;
-     void rule__PropertyFillerTextSentences__CountAssignment_2() throws RecognitionException;
-     void rule__PropertyFillerTextWords__CountAssignment_2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__BeginRangeAssignment_1_0_0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__BeginRangeRefAssignment_1_0_1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__EndRangeAssignment_1_2_0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__EndRangeRefAssignment_1_2_1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__DecimalsAssignment_3() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRange__RoundedAssignment_5_1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedDoubleRandom__ItemsAssignment_2() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__BeginRangeAssignment_2_0_0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__BeginRangeRefAssignment_2_0_1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__EndRangeAssignment_2_2_0() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__EndRangeRefAssignment_2_2_1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRange__RoundedAssignment_3_1() throws RecognitionException;
-     void rule__PropertyFillerUnsignedIntegerRandom__ItemsAssignment_2() throws RecognitionException;
-     void rule__XAnnotation__AnnotationTypeAssignment_2() throws RecognitionException;
-     void rule__XAnnotation__ElementValuePairsAssignment_3_1_0_0() throws RecognitionException;
-     void rule__XAnnotation__ElementValuePairsAssignment_3_1_0_1_1() throws RecognitionException;
-     void rule__XAnnotation__ValueAssignment_3_1_1() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__ElementAssignment_0_0_0() throws RecognitionException;
-     void rule__XAnnotationElementValuePair__ValueAssignment_1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_0() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_1_1() throws RecognitionException;
-     void rule__XAnnotationElementValueOrCommaList__ElementsAssignment_1_1_1_1() throws RecognitionException;
-     void rule__XAnnotationElementValue__ElementsAssignment_0_1_0() throws RecognitionException;
-     void rule__XAnnotationElementValue__ElementsAssignment_0_1_1_1() throws RecognitionException;
-     void rule__XAssignment__FeatureAssignment_0_1() throws RecognitionException;
-     void rule__XAssignment__ValueAssignment_0_3() throws RecognitionException;
-     void rule__XAssignment__FeatureAssignment_1_1_0_0_1() throws RecognitionException;
-     void rule__XAssignment__RightOperandAssignment_1_1_1() throws RecognitionException;
-     void rule__XOrExpression__FeatureAssignment_1_0_0_1() throws RecognitionException;
-     void rule__XOrExpression__RightOperandAssignment_1_1() throws RecognitionException;
-     void rule__XAndExpression__FeatureAssignment_1_0_0_1() throws RecognitionException;
-     void rule__XAndExpression__RightOperandAssignment_1_1() throws RecognitionException;
-     void rule__XEqualityExpression__FeatureAssignment_1_0_0_1() throws RecognitionException;
-     void rule__XEqualityExpression__RightOperandAssignment_1_1() throws RecognitionException;
-     void rule__XRelationalExpression__TypeAssignment_1_0_1() throws RecognitionException;
-     void rule__XRelationalExpression__FeatureAssignment_1_1_0_0_1() throws RecognitionException;
-     void rule__XRelationalExpression__RightOperandAssignment_1_1_1() throws RecognitionException;
-     void rule__XOtherOperatorExpression__FeatureAssignment_1_0_0_1() throws RecognitionException;
-     void rule__XOtherOperatorExpression__RightOperandAssignment_1_1() throws RecognitionException;
-     void rule__XAdditiveExpression__FeatureAssignment_1_0_0_1() throws RecognitionException;
-     void rule__XAdditiveExpression__RightOperandAssignment_1_1() throws RecognitionException;
-     void rule__XMultiplicativeExpression__FeatureAssignment_1_0_0_1() throws RecognitionException;
-     void rule__XMultiplicativeExpression__RightOperandAssignment_1_1() throws RecognitionException;
-     void rule__XUnaryOperation__FeatureAssignment_0_1() throws RecognitionException;
-     void rule__XUnaryOperation__OperandAssignment_0_2() throws RecognitionException;
-     void rule__XCastedExpression__TypeAssignment_1_1() throws RecognitionException;
-     void rule__XPostfixOperation__FeatureAssignment_1_0_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__ExplicitStaticAssignment_1_0_0_0_1_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__FeatureAssignment_1_0_0_0_2() throws RecognitionException;
-     void rule__XMemberFeatureCall__ValueAssignment_1_0_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__NullSafeAssignment_1_1_0_0_1_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__ExplicitStaticAssignment_1_1_0_0_1_2() throws RecognitionException;
-     void rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_2_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__FeatureAssignment_1_1_2() throws RecognitionException;
-     void rule__XMemberFeatureCall__ExplicitOperationCallAssignment_1_1_3_0() throws RecognitionException;
-     void rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_0() throws RecognitionException;
-     void rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_0() throws RecognitionException;
-     void rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_1_1() throws RecognitionException;
-     void rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_4() throws RecognitionException;
-     void rule__XSetLiteral__ElementsAssignment_3_0() throws RecognitionException;
-     void rule__XSetLiteral__ElementsAssignment_3_1_1() throws RecognitionException;
-     void rule__XListLiteral__ElementsAssignment_3_0() throws RecognitionException;
-     void rule__XListLiteral__ElementsAssignment_3_1_1() throws RecognitionException;
-     void rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_0() throws RecognitionException;
-     void rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_1_1() throws RecognitionException;
-     void rule__XClosure__ExplicitSyntaxAssignment_1_0_1() throws RecognitionException;
-     void rule__XClosure__ExpressionAssignment_2() throws RecognitionException;
-     void rule__XExpressionInClosure__ExpressionsAssignment_1_0() throws RecognitionException;
-     void rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_0() throws RecognitionException;
-     void rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_1_1() throws RecognitionException;
-     void rule__XShortClosure__ExplicitSyntaxAssignment_0_0_2() throws RecognitionException;
-     void rule__XShortClosure__ExpressionAssignment_1() throws RecognitionException;
-     void rule__XIfExpression__IfAssignment_3() throws RecognitionException;
-     void rule__XIfExpression__ThenAssignment_5() throws RecognitionException;
-     void rule__XIfExpression__ElseAssignment_6_1() throws RecognitionException;
-     void rule__XSwitchExpression__DeclaredParamAssignment_2_0_0_0_1() throws RecognitionException;
-     void rule__XSwitchExpression__SwitchAssignment_2_0_1() throws RecognitionException;
-     void rule__XSwitchExpression__DeclaredParamAssignment_2_1_0_0_0() throws RecognitionException;
-     void rule__XSwitchExpression__SwitchAssignment_2_1_1() throws RecognitionException;
-     void rule__XSwitchExpression__CasesAssignment_4() throws RecognitionException;
-     void rule__XSwitchExpression__DefaultAssignment_5_2() throws RecognitionException;
-     void rule__XCasePart__TypeGuardAssignment_1() throws RecognitionException;
-     void rule__XCasePart__CaseAssignment_2_1() throws RecognitionException;
-     void rule__XCasePart__ThenAssignment_3_0_1() throws RecognitionException;
-     void rule__XCasePart__FallThroughAssignment_3_1() throws RecognitionException;
-     void rule__XForLoopExpression__DeclaredParamAssignment_0_0_3() throws RecognitionException;
-     void rule__XForLoopExpression__ForExpressionAssignment_1() throws RecognitionException;
-     void rule__XForLoopExpression__EachExpressionAssignment_3() throws RecognitionException;
-     void rule__XBasicForLoopExpression__InitExpressionsAssignment_3_0() throws RecognitionException;
-     void rule__XBasicForLoopExpression__InitExpressionsAssignment_3_1_1() throws RecognitionException;
-     void rule__XBasicForLoopExpression__ExpressionAssignment_5() throws RecognitionException;
-     void rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_0() throws RecognitionException;
-     void rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_1_1() throws RecognitionException;
-     void rule__XBasicForLoopExpression__EachExpressionAssignment_9() throws RecognitionException;
-     void rule__XWhileExpression__PredicateAssignment_3() throws RecognitionException;
-     void rule__XWhileExpression__BodyAssignment_5() throws RecognitionException;
-     void rule__XDoWhileExpression__BodyAssignment_2() throws RecognitionException;
-     void rule__XDoWhileExpression__PredicateAssignment_5() throws RecognitionException;
-     void rule__XBlockExpression__ExpressionsAssignment_2_0() throws RecognitionException;
-     void rule__XVariableDeclaration__WriteableAssignment_1_0() throws RecognitionException;
-     void rule__XVariableDeclaration__TypeAssignment_2_0_0_0() throws RecognitionException;
-     void rule__XVariableDeclaration__NameAssignment_2_0_0_1() throws RecognitionException;
-     void rule__XVariableDeclaration__NameAssignment_2_1() throws RecognitionException;
-     void rule__XVariableDeclaration__RightAssignment_3_1() throws RecognitionException;
-     void rule__JvmFormalParameter__ParameterTypeAssignment_0() throws RecognitionException;
-     void rule__JvmFormalParameter__NameAssignment_1() throws RecognitionException;
-     void rule__FullJvmFormalParameter__ParameterTypeAssignment_0() throws RecognitionException;
-     void rule__FullJvmFormalParameter__NameAssignment_1() throws RecognitionException;
-     void rule__XFeatureCall__TypeArgumentsAssignment_1_1() throws RecognitionException;
-     void rule__XFeatureCall__TypeArgumentsAssignment_1_2_1() throws RecognitionException;
-     void rule__XFeatureCall__FeatureAssignment_2() throws RecognitionException;
-     void rule__XFeatureCall__ExplicitOperationCallAssignment_3_0() throws RecognitionException;
-     void rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_0() throws RecognitionException;
-     void rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_0() throws RecognitionException;
-     void rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_1_1() throws RecognitionException;
-     void rule__XFeatureCall__FeatureCallArgumentsAssignment_4() throws RecognitionException;
-     void rule__XConstructorCall__ConstructorAssignment_2() throws RecognitionException;
-     void rule__XConstructorCall__TypeArgumentsAssignment_3_1() throws RecognitionException;
-     void rule__XConstructorCall__TypeArgumentsAssignment_3_2_1() throws RecognitionException;
-     void rule__XConstructorCall__ExplicitConstructorCallAssignment_4_0() throws RecognitionException;
-     void rule__XConstructorCall__ArgumentsAssignment_4_1_0() throws RecognitionException;
-     void rule__XConstructorCall__ArgumentsAssignment_4_1_1_0() throws RecognitionException;
-     void rule__XConstructorCall__ArgumentsAssignment_4_1_1_1_1() throws RecognitionException;
-     void rule__XConstructorCall__ArgumentsAssignment_5() throws RecognitionException;
-     void rule__XBooleanLiteral__IsTrueAssignment_1_1() throws RecognitionException;
-     void rule__XNumberLiteral__ValueAssignment_1() throws RecognitionException;
-     void rule__XStringLiteral__ValueAssignment_1() throws RecognitionException;
-     void rule__XTypeLiteral__TypeAssignment_3() throws RecognitionException;
-     void rule__XTypeLiteral__ArrayDimensionsAssignment_4() throws RecognitionException;
-     void rule__XThrowExpression__ExpressionAssignment_2() throws RecognitionException;
-     void rule__XReturnExpression__ExpressionAssignment_2() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__ExpressionAssignment_2() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__CatchClausesAssignment_3_0_0() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_0_1_1() throws RecognitionException;
-     void rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_1_1() throws RecognitionException;
-     void rule__XSynchronizedExpression__ParamAssignment_1() throws RecognitionException;
-     void rule__XSynchronizedExpression__ExpressionAssignment_3() throws RecognitionException;
-     void rule__XCatchClause__DeclaredParamAssignment_2() throws RecognitionException;
-     void rule__XCatchClause__ExpressionAssignment_4() throws RecognitionException;
-     void rule__XFunctionTypeRef__ParamTypesAssignment_0_1_0() throws RecognitionException;
-     void rule__XFunctionTypeRef__ParamTypesAssignment_0_1_1_1() throws RecognitionException;
-     void rule__XFunctionTypeRef__ReturnTypeAssignment_2() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__TypeAssignment_0() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_2_1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__TypeAssignment_1_4_1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_1() throws RecognitionException;
-     void rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_2_1() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_0() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_1() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_0() throws RecognitionException;
-     void rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_1() throws RecognitionException;
-     void rule__JvmUpperBound__TypeReferenceAssignment_1() throws RecognitionException;
-     void rule__JvmUpperBoundAnded__TypeReferenceAssignment_1() throws RecognitionException;
-     void rule__JvmLowerBound__TypeReferenceAssignment_1() throws RecognitionException;
-     void rule__JvmLowerBoundAnded__TypeReferenceAssignment_1() throws RecognitionException;
-     void rule__XImportDeclaration__StaticAssignment_1_0_0() throws RecognitionException;
-     void rule__XImportDeclaration__ExtensionAssignment_1_0_1() throws RecognitionException;
-     void rule__XImportDeclaration__ImportedTypeAssignment_1_0_2() throws RecognitionException;
-     void rule__XImportDeclaration__WildcardAssignment_1_0_3_0() throws RecognitionException;
-     void rule__XImportDeclaration__MemberNameAssignment_1_0_3_1() throws RecognitionException;
-     void rule__XImportDeclaration__ImportedTypeAssignment_1_1() throws RecognitionException;
-     void rule__XImportDeclaration__ImportedNamespaceAssignment_1_2() throws RecognitionException;
-     void synpred53_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred54_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred55_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred80_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred81_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred94_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred102_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred103_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred116_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred120_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred121_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred127_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred237_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred270_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred272_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred273_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred274_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred275_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred276_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred277_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred278_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred279_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred280_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred281_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred283_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred284_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred292_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred299_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred302_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred315_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred316_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred320_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred321_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred322_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred327_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred328_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred329_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred331_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred335_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred337_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred338_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred345_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred346_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred347_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred348_InternalDatamartDSL_fragment() throws RecognitionException;   
-     void synpred349_InternalDatamartDSL_fragment() throws RecognitionException;   
-}
-
-@SuppressWarnings("all")
-abstract class InternalDatamartDSLParser1 extends AbstractInternalContentAssistParser implements InternalDatamartDSLParserSignatures {
-
-        InternalDatamartDSLParser1(TokenStream input) {
-            this(input, new RecognizerSharedState());
-        }
-
-        InternalDatamartDSLParser1(TokenStream input, RecognizerSharedState state) {
-            super(input, state);
-        }
-
-    public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_HEX", "RULE_INT", "RULE_DECIMAL", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'='", "'||'", "'&&'", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", "'!='", "'==='", "'!=='", "'>='", "'>'", "'<'", "'->'", "'..<'", "'..'", "'=>'", "'<>'", "'?:'", "'+'", "'-'", "'*'", "'**'", "'/'", "'%'", "'!'", "'++'", "'--'", "'.'", "'val'", "'extends'", "'static'", "'import'", "'extension'", "'super'", "'false'", "'default'", "'columns'", "'rows'", "'pages'", "'sections'", "'chapters'", "'previous'", "'next'", "'first'", "'last'", "'lag'", "'lead'", "'year-to-date'", "'periods'", "'tail'", "'head'", "'topcount'", "'topsummation'", "'toppercentage'", "'bottomcount'", "'bottomsummation'", "'bottompercentage'", "'average'", "'summation'", "'aggregate'", "'deviation'", "'<='", "'like'", "'count'", "'group1'", "'group2'", "'group3'", "'group4'", "'group5'", "'group6'", "'group7'", "'group8'", "'group9'", "'BusinessAdministrator'", "'PotentialOwner'", "'Recipient'", "'TaskInitiator'", "'TaskStakeholder'", "'ExcludedOwner'", "'Name'", "'Priority'", "'Status'", "'Subject'", "'Description'", "'ExpirationTime'", "'CreatedOn'", "'CreatedBy'", "'ActivationTime'", "'ActualOwner'", "'TaskId'", "'ProcessId'", "'ProcessInstanceId'", "'ProcessSessionId'", "'Groups'", "'Users'", "'ascending'", "'descending'", "'package'", "'{'", "'}'", "'datamart'", "'using'", "'for'", "'role'", "'task'", "'conditions'", "'column'", "'filter'", "'cube'", "'join'", "'entity'", "'navigation'", "'properties'", "'ordering'", "'filler rows'", "'to'", "'many to one'", "'one to many'", "'property'", "'condition'", "'order'", "'or'", "'and'", "'('", "')'", "'derive'", "'from'", "'of'", "'over'", "'slicer'", "'axis'", "'derived'", "'measure'", "'hierarchy'", "'level'", "'fill'", "'with'", "'filler-date future'", "'years'", "'filler-date past'", "'filler-date range'", "'up to and including'", "'filler-signed-double range'", "'decimals'", "'round to'", "'filler-signed-double random'", "'filler-signed-integer range'", "'filler-signed-integer random'", "'filler-text random'", "'filler-text paragraps'", "'filler-text sentences'", "'filler-text words'", "'filler-unsigned-double range'", "'filler-unsigned-double random'", "'filler-unsigned-integer range'", "'filler-unsigned-integer random'", "'@'", "','", "']'", "'#'", "'['", "'instanceof'", "'as'", "';'", "'if'", "'else'", "'switch'", "':'", "'case'", "'while'", "'do'", "'new'", "'null'", "'typeof'", "'throw'", "'return'", "'try'", "'finally'", "'synchronized'", "'catch'", "'?'", "'&'", "'described by'", "'nonempty values'", "'tracking'", "'on axis'", "'scale'", "'filtered'", "'optional'", "'selected'", "'condensed'", "'exploded'", "'detailed'", "'except'", "'ordered by'", "'::'", "'?.'", "'|'", "'var'", "'true'"
-    };
-    public static final int T__144=144;
-    public static final int T__143=143;
-    public static final int T__146=146;
-    public static final int T__50=50;
-    public static final int T__145=145;
-    public static final int T__140=140;
-    public static final int T__142=142;
-    public static final int T__141=141;
-    public static final int T__59=59;
-    public static final int T__55=55;
-    public static final int T__56=56;
-    public static final int T__57=57;
-    public static final int T__58=58;
-    public static final int T__51=51;
-    public static final int T__137=137;
-    public static final int T__52=52;
-    public static final int T__136=136;
-    public static final int T__53=53;
-    public static final int T__139=139;
-    public static final int T__54=54;
-    public static final int T__138=138;
-    public static final int T__133=133;
-    public static final int T__132=132;
-    public static final int T__60=60;
-    public static final int T__135=135;
-    public static final int T__61=61;
-    public static final int T__134=134;
-    public static final int RULE_ID=4;
-    public static final int T__131=131;
-    public static final int T__130=130;
-    public static final int RULE_INT=7;
-    public static final int T__66=66;
-    public static final int T__67=67;
-    public static final int T__129=129;
-    public static final int T__68=68;
-    public static final int T__69=69;
-    public static final int T__62=62;
-    public static final int T__126=126;
-    public static final int T__63=63;
-    public static final int T__125=125;
-    public static final int T__64=64;
-    public static final int T__128=128;
-    public static final int T__65=65;
-    public static final int T__127=127;
-    public static final int T__166=166;
-    public static final int T__165=165;
-    public static final int T__168=168;
-    public static final int T__167=167;
-    public static final int T__162=162;
-    public static final int T__161=161;
-    public static final int T__164=164;
-    public static final int T__163=163;
-    public static final int T__160=160;
-    public static final int T__37=37;
-    public static final int T__38=38;
-    public static final int T__39=39;
-    public static final int T__33=33;
-    public static final int T__34=34;
-    public static final int T__35=35;
-    public static final int T__36=36;
-    public static final int T__159=159;
-    public static final int T__30=30;
-    public static final int T__158=158;
-    public static final int T__31=31;
-    public static final int T__32=32;
-    public static final int T__155=155;
-    public static final int T__154=154;
-    public static final int T__157=157;
-    public static final int T__156=156;
-    public static final int T__151=151;
-    public static final int T__150=150;
-    public static final int T__153=153;
-    public static final int T__152=152;
-    public static final int T__48=48;
-    public static final int T__49=49;
-    public static final int T__44=44;
-    public static final int T__45=45;
-    public static final int T__46=46;
-    public static final int T__47=47;
-    public static final int T__40=40;
-    public static final int T__148=148;
-    public static final int T__41=41;
-    public static final int T__147=147;
-    public static final int T__42=42;
-    public static final int T__43=43;
-    public static final int T__149=149;
-    public static final int T__100=100;
-    public static final int T__102=102;
-    public static final int T__101=101;
-    public static final int T__19=19;
-    public static final int T__15=15;
-    public static final int T__16=16;
-    public static final int T__17=17;
-    public static final int T__18=18;
-    public static final int T__13=13;
-    public static final int T__14=14;
-    public static final int T__214=214;
-    public static final int T__213=213;
-    public static final int T__215=215;
-    public static final int T__210=210;
-    public static final int T__212=212;
-    public static final int T__211=211;
-    public static final int RULE_DECIMAL=8;
-    public static final int T__26=26;
-    public static final int T__27=27;
-    public static final int T__28=28;
-    public static final int T__29=29;
-    public static final int T__22=22;
-    public static final int T__207=207;
-    public static final int T__23=23;
-    public static final int T__206=206;
-    public static final int T__24=24;
-    public static final int T__209=209;
-    public static final int T__25=25;
-    public static final int T__208=208;
-    public static final int T__203=203;
-    public static final int T__202=202;
-    public static final int T__20=20;
-    public static final int T__205=205;
-    public static final int T__21=21;
-    public static final int T__204=204;
-    public static final int T__122=122;
-    public static final int T__121=121;
-    public static final int T__124=124;
-    public static final int T__123=123;
-    public static final int T__120=120;
-    public static final int RULE_SL_COMMENT=10;
-    public static final int T__119=119;
-    public static final int T__118=118;
-    public static final int T__115=115;
-    public static final int EOF=-1;
-    public static final int T__114=114;
-    public static final int T__117=117;
-    public static final int T__116=116;
-    public static final int T__111=111;
-    public static final int T__110=110;
-    public static final int T__113=113;
-    public static final int T__112=112;
-    public static final int T__108=108;
-    public static final int T__107=107;
-    public static final int T__109=109;
-    public static final int T__104=104;
-    public static final int T__103=103;
-    public static final int T__106=106;
-    public static final int T__105=105;
-    public static final int RULE_HEX=6;
-    public static final int RULE_ML_COMMENT=9;
-    public static final int T__201=201;
-    public static final int T__200=200;
-    public static final int T__91=91;
-    public static final int T__188=188;
-    public static final int T__92=92;
-    public static final int T__187=187;
-    public static final int T__93=93;
-    public static final int T__94=94;
-    public static final int T__189=189;
-    public static final int T__184=184;
-    public static final int T__183=183;
-    public static final int T__186=186;
-    public static final int T__90=90;
-    public static final int T__185=185;
-    public static final int T__180=180;
-    public static final int T__182=182;
-    public static final int T__181=181;
-    public static final int T__99=99;
-    public static final int T__95=95;
-    public static final int T__96=96;
-    public static final int T__97=97;
-    public static final int T__98=98;
-    public static final int T__177=177;
-    public static final int T__176=176;
-    public static final int T__179=179;
-    public static final int T__178=178;
-    public static final int T__173=173;
-    public static final int T__172=172;
-    public static final int T__175=175;
-    public static final int T__174=174;
-    public static final int T__171=171;
-    public static final int T__170=170;
-    public static final int T__169=169;
-    public static final int T__70=70;
-    public static final int T__71=71;
-    public static final int T__72=72;
-    public static final int RULE_STRING=5;
-    public static final int T__77=77;
-    public static final int T__78=78;
-    public static final int T__79=79;
-    public static final int T__73=73;
-    public static final int T__74=74;
-    public static final int T__75=75;
-    public static final int T__76=76;
-    public static final int T__80=80;
-    public static final int T__199=199;
-    public static final int T__81=81;
-    public static final int T__198=198;
-    public static final int T__82=82;
-    public static final int T__83=83;
-    public static final int T__195=195;
-    public static final int T__194=194;
-    public static final int RULE_WS=11;
-    public static final int T__197=197;
-    public static final int T__196=196;
-    public static final int T__191=191;
-    public static final int T__190=190;
-    public static final int T__193=193;
-    public static final int T__192=192;
-    public static final int RULE_ANY_OTHER=12;
-    public static final int T__88=88;
-    public static final int T__89=89;
-    public static final int T__84=84;
-    public static final int T__85=85;
-    public static final int T__86=86;
-    public static final int T__87=87;
-
-
-    public String[] getTokenNames() { return InternalDatamartDSLParser.tokenNames; }
-    public String getGrammarFileName() { return "../org.eclipse.osbp.xtext.datamartdsl.ui/src-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/antlr/internal/InternalDatamartDSL.g"; }
-
-
-     
-     	protected DatamartDSLGrammarAccess grammarAccess;
-     	
-        public void setGrammarAccess(DatamartDSLGrammarAccess grammarAccess) {
-        	this.grammarAccess = grammarAccess;
-        }
-        
-        @Override
-        protected Grammar getGrammar() {
-        	return grammarAccess.getGrammar();
-        }
-        
-        @Override
-        protected String getValueForTokenName(String tokenName) {
-        	return tokenName;
-        }
-
-
-
-
-
-    // Delegated rules
-
-    public final boolean synpred127_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred127_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred292_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred292_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred116_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred116_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred80_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred80_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred102_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred102_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred270_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred270_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred281_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred281_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred345_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred345_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred329_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred329_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred275_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred275_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred94_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred94_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred273_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred273_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred284_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred284_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred276_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred276_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred103_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred103_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred328_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred328_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred278_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred278_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred315_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred315_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred55_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred55_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred120_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred120_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred337_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred337_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred321_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred321_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred348_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred348_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred279_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred279_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred81_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred81_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred302_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred302_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred274_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred274_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred53_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred53_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred335_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred335_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred280_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred280_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred346_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred346_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred237_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred237_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred277_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred277_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred54_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred54_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred331_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred331_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred320_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred320_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred347_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred347_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred349_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred349_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred322_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred322_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred121_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred121_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred299_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred299_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred338_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred338_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred327_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred327_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred272_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred272_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred316_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred316_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-    public final boolean synpred283_InternalDatamartDSL() {
-        state.backtracking++;
-        int start = input.mark();
-        try {
-            synpred283_InternalDatamartDSL_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !state.failed;
-        input.rewind(start);
-        state.backtracking--;
-        state.failed=false;
-        return success;
-    }
-
-
-    protected DFA29 dfa29 = new DFA29(this);
-    protected DFA30 dfa30 = new DFA30(this);
-    protected DFA31 dfa31 = new DFA31(this);
-    protected DFA38 dfa38 = new DFA38(this);
-    protected DFA46 dfa46 = new DFA46(this);
-    protected DFA49 dfa49 = new DFA49(this);
-    protected DFA50 dfa50 = new DFA50(this);
-    protected DFA53 dfa53 = new DFA53(this);
-    protected DFA58 dfa58 = new DFA58(this);
-    protected DFA61 dfa61 = new DFA61(this);
-    protected DFA70 dfa70 = new DFA70(this);
-    protected DFA163 dfa163 = new DFA163(this);
-    protected DFA169 dfa169 = new DFA169(this);
-    protected DFA176 dfa176 = new DFA176(this);
-    protected DFA177 dfa177 = new DFA177(this);
-    protected DFA185 dfa185 = new DFA185(this);
-    protected DFA195 dfa195 = new DFA195(this);
-    protected DFA208 dfa208 = new DFA208(this);
-    protected DFA209 dfa209 = new DFA209(this);
-    protected DFA213 dfa213 = new DFA213(this);
-    protected DFA214 dfa214 = new DFA214(this);
-    protected DFA215 dfa215 = new DFA215(this);
-    protected DFA220 dfa220 = new DFA220(this);
-    protected DFA228 dfa228 = new DFA228(this);
-    protected DFA231 dfa231 = new DFA231(this);
-    static final String DFA29_eotS =
-        "\43\uffff";
-    static final String DFA29_eofS =
-        "\43\uffff";
-    static final String DFA29_minS =
-        "\1\4\1\0\41\uffff";
-    static final String DFA29_maxS =
-        "\1\u00d7\1\0\41\uffff";
-    static final String DFA29_acceptS =
-        "\2\uffff\1\2\37\uffff\1\1";
-    static final String DFA29_specialS =
-        "\1\uffff\1\0\41\uffff}>";
-    static final String[] DFA29_transitionS = {
-            "\1\1\4\2\22\uffff\1\2\6\uffff\2\2\4\uffff\1\2\4\uffff\6\2\77"+
-            "\uffff\1\2\3\uffff\1\2\24\uffff\1\2\40\uffff\1\2\2\uffff\2\2"+
-            "\3\uffff\1\2\1\uffff\1\2\2\uffff\10\2\1\uffff\1\2\24\uffff\1"+
-            "\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA29_eot = DFA.unpackEncodedString(DFA29_eotS);
-    static final short[] DFA29_eof = DFA.unpackEncodedString(DFA29_eofS);
-    static final char[] DFA29_min = DFA.unpackEncodedStringToUnsignedChars(DFA29_minS);
-    static final char[] DFA29_max = DFA.unpackEncodedStringToUnsignedChars(DFA29_maxS);
-    static final short[] DFA29_accept = DFA.unpackEncodedString(DFA29_acceptS);
-    static final short[] DFA29_special = DFA.unpackEncodedString(DFA29_specialS);
-    static final short[][] DFA29_transition;
-
-    static {
-        int numStates = DFA29_transitionS.length;
-        DFA29_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA29_transition[i] = DFA.unpackEncodedString(DFA29_transitionS[i]);
-        }
-    }
-
-    class DFA29 extends DFA {
-
-        public DFA29(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 29;
-            this.eot = DFA29_eot;
-            this.eof = DFA29_eof;
-            this.min = DFA29_min;
-            this.max = DFA29_max;
-            this.accept = DFA29_accept;
-            this.special = DFA29_special;
-            this.transition = DFA29_transition;
-        }
-        public String getDescription() {
-            return "5242:1: rule__XAnnotation__Alternatives_3_1 : ( ( ( rule__XAnnotation__Group_3_1_0__0 ) ) | ( ( rule__XAnnotation__ValueAssignment_3_1_1 ) ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA29_1 = input.LA(1);
-
-                         
-                        int index29_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred53_InternalDatamartDSL()) ) {s = 34;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index29_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 29, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA30_eotS =
-        "\43\uffff";
-    static final String DFA30_eofS =
-        "\43\uffff";
-    static final String DFA30_minS =
-        "\1\4\1\0\41\uffff";
-    static final String DFA30_maxS =
-        "\1\u00d7\1\0\41\uffff";
-    static final String DFA30_acceptS =
-        "\2\uffff\1\2\37\uffff\1\1";
-    static final String DFA30_specialS =
-        "\1\uffff\1\0\41\uffff}>";
-    static final String[] DFA30_transitionS = {
-            "\5\2\22\uffff\1\2\6\uffff\2\2\4\uffff\1\2\4\uffff\6\2\77\uffff"+
-            "\1\2\3\uffff\1\2\24\uffff\1\2\40\uffff\1\2\2\uffff\1\1\1\2\3"+
-            "\uffff\1\2\1\uffff\1\2\2\uffff\10\2\1\uffff\1\2\24\uffff\1\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA30_eot = DFA.unpackEncodedString(DFA30_eotS);
-    static final short[] DFA30_eof = DFA.unpackEncodedString(DFA30_eofS);
-    static final char[] DFA30_min = DFA.unpackEncodedStringToUnsignedChars(DFA30_minS);
-    static final char[] DFA30_max = DFA.unpackEncodedStringToUnsignedChars(DFA30_maxS);
-    static final short[] DFA30_accept = DFA.unpackEncodedString(DFA30_acceptS);
-    static final short[] DFA30_special = DFA.unpackEncodedString(DFA30_specialS);
-    static final short[][] DFA30_transition;
-
-    static {
-        int numStates = DFA30_transitionS.length;
-        DFA30_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA30_transition[i] = DFA.unpackEncodedString(DFA30_transitionS[i]);
-        }
-    }
-
-    class DFA30 extends DFA {
-
-        public DFA30(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 30;
-            this.eot = DFA30_eot;
-            this.eof = DFA30_eof;
-            this.min = DFA30_min;
-            this.max = DFA30_max;
-            this.accept = DFA30_accept;
-            this.special = DFA30_special;
-            this.transition = DFA30_transition;
-        }
-        public String getDescription() {
-            return "5264:1: rule__XAnnotationElementValueOrCommaList__Alternatives : ( ( ( rule__XAnnotationElementValueOrCommaList__Group_0__0 ) ) | ( ( rule__XAnnotationElementValueOrCommaList__Group_1__0 ) ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA30_1 = input.LA(1);
-
-                         
-                        int index30_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred54_InternalDatamartDSL()) ) {s = 34;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index30_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 30, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA31_eotS =
-        "\43\uffff";
-    static final String DFA31_eofS =
-        "\43\uffff";
-    static final String DFA31_minS =
-        "\1\4\1\0\41\uffff";
-    static final String DFA31_maxS =
-        "\1\u00d7\1\0\41\uffff";
-    static final String DFA31_acceptS =
-        "\2\uffff\1\2\37\uffff\1\1";
-    static final String DFA31_specialS =
-        "\1\uffff\1\0\41\uffff}>";
-    static final String[] DFA31_transitionS = {
-            "\5\2\22\uffff\1\2\6\uffff\2\2\4\uffff\1\2\4\uffff\6\2\77\uffff"+
-            "\1\2\3\uffff\1\2\24\uffff\1\2\40\uffff\1\2\2\uffff\1\1\1\2\3"+
-            "\uffff\1\2\1\uffff\1\2\2\uffff\10\2\1\uffff\1\2\24\uffff\1\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA31_eot = DFA.unpackEncodedString(DFA31_eotS);
-    static final short[] DFA31_eof = DFA.unpackEncodedString(DFA31_eofS);
-    static final char[] DFA31_min = DFA.unpackEncodedStringToUnsignedChars(DFA31_minS);
-    static final char[] DFA31_max = DFA.unpackEncodedStringToUnsignedChars(DFA31_maxS);
-    static final short[] DFA31_accept = DFA.unpackEncodedString(DFA31_acceptS);
-    static final short[] DFA31_special = DFA.unpackEncodedString(DFA31_specialS);
-    static final short[][] DFA31_transition;
-
-    static {
-        int numStates = DFA31_transitionS.length;
-        DFA31_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA31_transition[i] = DFA.unpackEncodedString(DFA31_transitionS[i]);
-        }
-    }
-
-    class DFA31 extends DFA {
-
-        public DFA31(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 31;
-            this.eot = DFA31_eot;
-            this.eof = DFA31_eof;
-            this.min = DFA31_min;
-            this.max = DFA31_max;
-            this.accept = DFA31_accept;
-            this.special = DFA31_special;
-            this.transition = DFA31_transition;
-        }
-        public String getDescription() {
-            return "5286:1: rule__XAnnotationElementValue__Alternatives : ( ( ( rule__XAnnotationElementValue__Group_0__0 ) ) | ( ruleXAnnotationOrExpression ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA31_1 = input.LA(1);
-
-                         
-                        int index31_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred55_InternalDatamartDSL()) ) {s = 34;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index31_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 31, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA38_eotS =
-        "\13\uffff";
-    static final String DFA38_eofS =
-        "\13\uffff";
-    static final String DFA38_minS =
-        "\1\32\2\uffff\1\32\7\uffff";
-    static final String DFA38_maxS =
-        "\1\41\2\uffff\1\36\7\uffff";
-    static final String DFA38_acceptS =
-        "\1\uffff\1\1\1\2\1\uffff\1\4\1\5\1\7\1\10\1\11\1\6\1\3";
-    static final String DFA38_specialS =
-        "\13\uffff}>";
-    static final String[] DFA38_transitionS = {
-            "\1\3\1\6\1\1\1\2\1\4\1\5\1\7\1\10",
-            "",
-            "",
-            "\1\11\3\uffff\1\12",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA38_eot = DFA.unpackEncodedString(DFA38_eotS);
-    static final short[] DFA38_eof = DFA.unpackEncodedString(DFA38_eofS);
-    static final char[] DFA38_min = DFA.unpackEncodedStringToUnsignedChars(DFA38_minS);
-    static final char[] DFA38_max = DFA.unpackEncodedStringToUnsignedChars(DFA38_maxS);
-    static final short[] DFA38_accept = DFA.unpackEncodedString(DFA38_acceptS);
-    static final short[] DFA38_special = DFA.unpackEncodedString(DFA38_specialS);
-    static final short[][] DFA38_transition;
-
-    static {
-        int numStates = DFA38_transitionS.length;
-        DFA38_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA38_transition[i] = DFA.unpackEncodedString(DFA38_transitionS[i]);
-        }
-    }
-
-    class DFA38 extends DFA {
-
-        public DFA38(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 38;
-            this.eot = DFA38_eot;
-            this.eof = DFA38_eof;
-            this.min = DFA38_min;
-            this.max = DFA38_max;
-            this.accept = DFA38_accept;
-            this.special = DFA38_special;
-            this.transition = DFA38_transition;
-        }
-        public String getDescription() {
-            return "5518:1: rule__OpOther__Alternatives : ( ( '->' ) | ( '..<' ) | ( ( rule__OpOther__Group_2__0 ) ) | ( '..' ) | ( '=>' ) | ( ( rule__OpOther__Group_5__0 ) ) | ( ( rule__OpOther__Group_6__0 ) ) | ( '<>' ) | ( '?:' ) );";
-        }
-    }
-    static final String DFA46_eotS =
-        "\12\uffff";
-    static final String DFA46_eofS =
-        "\4\uffff\5\3\1\uffff";
-    static final String DFA46_minS =
-        "\1\53\2\4\1\uffff\5\4\1\uffff";
-    static final String DFA46_maxS =
-        "\1\u00d4\2\61\1\uffff\5\u00d7\1\uffff";
-    static final String DFA46_acceptS =
-        "\3\uffff\1\2\5\uffff\1\1";
-    static final String DFA46_specialS =
-        "\12\uffff}>";
-    static final String[] DFA46_transitionS = {
-            "\1\1\u00a7\uffff\1\2\1\3",
-            "\1\4\26\uffff\1\3\21\uffff\1\5\1\6\1\7\1\10\1\3",
-            "\1\4\26\uffff\1\3\21\uffff\1\5\1\6\1\7\1\10\1\3",
-            "",
-            "\5\3\4\uffff\1\11\46\3\76\uffff\2\3\2\uffff\1\3\24\uffff\2"+
-            "\3\40\uffff\27\3\17\uffff\2\3\1\uffff\2\3",
-            "\5\3\4\uffff\1\11\46\3\76\uffff\2\3\2\uffff\1\3\24\uffff\2"+
-            "\3\40\uffff\27\3\17\uffff\2\3\1\uffff\2\3",
-            "\5\3\4\uffff\1\11\46\3\76\uffff\2\3\2\uffff\1\3\24\uffff\2"+
-            "\3\40\uffff\27\3\17\uffff\2\3\1\uffff\2\3",
-            "\5\3\4\uffff\1\11\46\3\76\uffff\2\3\2\uffff\1\3\24\uffff\2"+
-            "\3\40\uffff\27\3\17\uffff\2\3\1\uffff\2\3",
-            "\5\3\4\uffff\1\11\46\3\76\uffff\2\3\2\uffff\1\3\24\uffff\2"+
-            "\3\40\uffff\27\3\17\uffff\2\3\1\uffff\2\3",
-            ""
-    };
-
-    static final short[] DFA46_eot = DFA.unpackEncodedString(DFA46_eotS);
-    static final short[] DFA46_eof = DFA.unpackEncodedString(DFA46_eofS);
-    static final char[] DFA46_min = DFA.unpackEncodedStringToUnsignedChars(DFA46_minS);
-    static final char[] DFA46_max = DFA.unpackEncodedStringToUnsignedChars(DFA46_maxS);
-    static final short[] DFA46_accept = DFA.unpackEncodedString(DFA46_acceptS);
-    static final short[] DFA46_special = DFA.unpackEncodedString(DFA46_specialS);
-    static final short[][] DFA46_transition;
-
-    static {
-        int numStates = DFA46_transitionS.length;
-        DFA46_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA46_transition[i] = DFA.unpackEncodedString(DFA46_transitionS[i]);
-        }
-    }
-
-    class DFA46 extends DFA {
-
-        public DFA46(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 46;
-            this.eot = DFA46_eot;
-            this.eof = DFA46_eof;
-            this.min = DFA46_min;
-            this.max = DFA46_max;
-            this.accept = DFA46_accept;
-            this.special = DFA46_special;
-            this.transition = DFA46_transition;
-        }
-        public String getDescription() {
-            return "5800:1: rule__XMemberFeatureCall__Alternatives_1 : ( ( ( rule__XMemberFeatureCall__Group_1_0__0 ) ) | ( ( rule__XMemberFeatureCall__Group_1_1__0 ) ) );";
-        }
-    }
-    static final String DFA49_eotS =
-        "\43\uffff";
-    static final String DFA49_eofS =
-        "\43\uffff";
-    static final String DFA49_minS =
-        "\1\4\2\0\40\uffff";
-    static final String DFA49_maxS =
-        "\1\u00d7\2\0\40\uffff";
-    static final String DFA49_acceptS =
-        "\3\uffff\1\1\1\uffff\1\2\35\uffff";
-    static final String DFA49_specialS =
-        "\1\uffff\1\0\1\1\40\uffff}>";
-    static final String[] DFA49_transitionS = {
-            "\1\1\4\5\22\uffff\1\5\3\uffff\1\3\2\uffff\2\5\4\uffff\1\5\4"+
-            "\uffff\6\5\77\uffff\1\5\3\uffff\1\5\24\uffff\1\2\43\uffff\2"+
-            "\5\3\uffff\1\5\1\uffff\1\5\2\uffff\10\5\1\uffff\1\5\22\uffff"+
-            "\1\3\1\uffff\1\5",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA49_eot = DFA.unpackEncodedString(DFA49_eotS);
-    static final short[] DFA49_eof = DFA.unpackEncodedString(DFA49_eofS);
-    static final char[] DFA49_min = DFA.unpackEncodedStringToUnsignedChars(DFA49_minS);
-    static final char[] DFA49_max = DFA.unpackEncodedStringToUnsignedChars(DFA49_maxS);
-    static final short[] DFA49_accept = DFA.unpackEncodedString(DFA49_acceptS);
-    static final short[] DFA49_special = DFA.unpackEncodedString(DFA49_specialS);
-    static final short[][] DFA49_transition;
-
-    static {
-        int numStates = DFA49_transitionS.length;
-        DFA49_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA49_transition[i] = DFA.unpackEncodedString(DFA49_transitionS[i]);
-        }
-    }
-
-    class DFA49 extends DFA {
-
-        public DFA49(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 49;
-            this.eot = DFA49_eot;
-            this.eof = DFA49_eof;
-            this.min = DFA49_min;
-            this.max = DFA49_max;
-            this.accept = DFA49_accept;
-            this.special = DFA49_special;
-            this.transition = DFA49_transition;
-        }
-        public String getDescription() {
-            return "5876:1: rule__XMemberFeatureCall__Alternatives_1_1_3_1 : ( ( ( rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_0 ) ) | ( ( rule__XMemberFeatureCall__Group_1_1_3_1_1__0 ) ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA49_1 = input.LA(1);
-
-                         
-                        int index49_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred94_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index49_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA49_2 = input.LA(1);
-
-                         
-                        int index49_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred94_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index49_2);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 49, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA50_eotS =
-        "\40\uffff";
-    static final String DFA50_eofS =
-        "\40\uffff";
-    static final String DFA50_minS =
-        "\1\4\26\uffff\1\0\10\uffff";
-    static final String DFA50_maxS =
-        "\1\u00d7\26\uffff\1\0\10\uffff";
-    static final String DFA50_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\4\1\5\6\uffff\1\6\11\uffff\1\7\1\uffff\1"+
-        "\12\1\13\1\14\1\15\1\16\1\17\1\10\1\11";
-    static final String DFA50_specialS =
-        "\27\uffff\1\0\10\uffff}>";
-    static final String[] DFA50_transitionS = {
-            "\1\5\4\14\22\uffff\1\5\21\uffff\5\5\1\14\77\uffff\1\2\3\uffff"+
-            "\1\27\24\uffff\1\35\43\uffff\2\14\3\uffff\1\26\1\uffff\1\3\2"+
-            "\uffff\1\30\1\31\1\1\2\14\1\32\1\33\1\34\1\uffff\1\4\24\uffff"+
-            "\1\14",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA50_eot = DFA.unpackEncodedString(DFA50_eotS);
-    static final short[] DFA50_eof = DFA.unpackEncodedString(DFA50_eofS);
-    static final char[] DFA50_min = DFA.unpackEncodedStringToUnsignedChars(DFA50_minS);
-    static final char[] DFA50_max = DFA.unpackEncodedStringToUnsignedChars(DFA50_maxS);
-    static final short[] DFA50_accept = DFA.unpackEncodedString(DFA50_acceptS);
-    static final short[] DFA50_special = DFA.unpackEncodedString(DFA50_specialS);
-    static final short[][] DFA50_transition;
-
-    static {
-        int numStates = DFA50_transitionS.length;
-        DFA50_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA50_transition[i] = DFA.unpackEncodedString(DFA50_transitionS[i]);
-        }
-    }
-
-    class DFA50 extends DFA {
-
-        public DFA50(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 50;
-            this.eot = DFA50_eot;
-            this.eof = DFA50_eof;
-            this.min = DFA50_min;
-            this.max = DFA50_max;
-            this.accept = DFA50_accept;
-            this.special = DFA50_special;
-            this.transition = DFA50_transition;
-        }
-        public String getDescription() {
-            return "5898:1: rule__XPrimaryExpression__Alternatives : ( ( ruleXConstructorCall ) | ( ruleXBlockExpression ) | ( ruleXSwitchExpression ) | ( ( ruleXSynchronizedExpression ) ) | ( ruleXFeatureCall ) | ( ruleXLiteral ) | ( ruleXIfExpression ) | ( ( ruleXForLoopExpression ) ) | ( ruleXBasicForLoopExpression ) | ( ruleXWhileExpression ) | ( ruleXDoWhileExpression ) | ( ruleXThrowExpression ) | ( ruleXReturnExpression ) | ( ruleXTryCatchFinallyExpression ) | ( ruleXParenthesizedExpression ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA50_23 = input.LA(1);
-
-                         
-                        int index50_23 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred102_InternalDatamartDSL()) ) {s = 30;}
-
-                        else if ( (synpred103_InternalDatamartDSL()) ) {s = 31;}
-
-                         
-                        input.seek(index50_23);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 50, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA53_eotS =
-        "\43\uffff";
-    static final String DFA53_eofS =
-        "\43\uffff";
-    static final String DFA53_minS =
-        "\1\4\1\0\41\uffff";
-    static final String DFA53_maxS =
-        "\1\u00d7\1\0\41\uffff";
-    static final String DFA53_acceptS =
-        "\2\uffff\1\2\37\uffff\1\1";
-    static final String DFA53_specialS =
-        "\1\uffff\1\0\41\uffff}>";
-    static final String[] DFA53_transitionS = {
-            "\5\2\22\uffff\1\2\3\uffff\1\2\2\uffff\2\2\4\uffff\1\2\4\uffff"+
-            "\6\2\77\uffff\1\2\3\uffff\1\2\24\uffff\1\1\43\uffff\2\2\3\uffff"+
-            "\1\2\1\uffff\1\2\2\uffff\10\2\1\uffff\1\2\24\uffff\1\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA53_eot = DFA.unpackEncodedString(DFA53_eotS);
-    static final short[] DFA53_eof = DFA.unpackEncodedString(DFA53_eofS);
-    static final char[] DFA53_min = DFA.unpackEncodedStringToUnsignedChars(DFA53_minS);
-    static final char[] DFA53_max = DFA.unpackEncodedStringToUnsignedChars(DFA53_maxS);
-    static final short[] DFA53_accept = DFA.unpackEncodedString(DFA53_acceptS);
-    static final short[] DFA53_special = DFA.unpackEncodedString(DFA53_specialS);
-    static final short[][] DFA53_transition;
-
-    static {
-        int numStates = DFA53_transitionS.length;
-        DFA53_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA53_transition[i] = DFA.unpackEncodedString(DFA53_transitionS[i]);
-        }
-    }
-
-    class DFA53 extends DFA {
-
-        public DFA53(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 53;
-            this.eot = DFA53_eot;
-            this.eof = DFA53_eof;
-            this.min = DFA53_min;
-            this.max = DFA53_max;
-            this.accept = DFA53_accept;
-            this.special = DFA53_special;
-            this.transition = DFA53_transition;
-        }
-        public String getDescription() {
-            return "6072:1: rule__XSwitchExpression__Alternatives_2 : ( ( ( rule__XSwitchExpression__Group_2_0__0 ) ) | ( ( rule__XSwitchExpression__Group_2_1__0 ) ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA53_1 = input.LA(1);
-
-                         
-                        int index53_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred116_InternalDatamartDSL()) ) {s = 34;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index53_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 53, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA58_eotS =
-        "\43\uffff";
-    static final String DFA58_eofS =
-        "\43\uffff";
-    static final String DFA58_minS =
-        "\1\4\2\0\40\uffff";
-    static final String DFA58_maxS =
-        "\1\u00d7\2\0\40\uffff";
-    static final String DFA58_acceptS =
-        "\3\uffff\1\1\1\uffff\1\2\35\uffff";
-    static final String DFA58_specialS =
-        "\1\uffff\1\0\1\1\40\uffff}>";
-    static final String[] DFA58_transitionS = {
-            "\1\1\4\5\22\uffff\1\5\3\uffff\1\3\2\uffff\2\5\4\uffff\1\5\4"+
-            "\uffff\6\5\77\uffff\1\5\3\uffff\1\5\24\uffff\1\2\43\uffff\2"+
-            "\5\3\uffff\1\5\1\uffff\1\5\2\uffff\10\5\1\uffff\1\5\22\uffff"+
-            "\1\3\1\uffff\1\5",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA58_eot = DFA.unpackEncodedString(DFA58_eotS);
-    static final short[] DFA58_eof = DFA.unpackEncodedString(DFA58_eofS);
-    static final char[] DFA58_min = DFA.unpackEncodedStringToUnsignedChars(DFA58_minS);
-    static final char[] DFA58_max = DFA.unpackEncodedStringToUnsignedChars(DFA58_maxS);
-    static final short[] DFA58_accept = DFA.unpackEncodedString(DFA58_acceptS);
-    static final short[] DFA58_special = DFA.unpackEncodedString(DFA58_specialS);
-    static final short[][] DFA58_transition;
-
-    static {
-        int numStates = DFA58_transitionS.length;
-        DFA58_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA58_transition[i] = DFA.unpackEncodedString(DFA58_transitionS[i]);
-        }
-    }
-
-    class DFA58 extends DFA {
-
-        public DFA58(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 58;
-            this.eot = DFA58_eot;
-            this.eof = DFA58_eof;
-            this.min = DFA58_min;
-            this.max = DFA58_max;
-            this.accept = DFA58_accept;
-            this.special = DFA58_special;
-            this.transition = DFA58_transition;
-        }
-        public String getDescription() {
-            return "6184:1: rule__XFeatureCall__Alternatives_3_1 : ( ( ( rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_0 ) ) | ( ( rule__XFeatureCall__Group_3_1_1__0 ) ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA58_1 = input.LA(1);
-
-                         
-                        int index58_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred121_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index58_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA58_2 = input.LA(1);
-
-                         
-                        int index58_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred121_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index58_2);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 58, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA61_eotS =
-        "\43\uffff";
-    static final String DFA61_eofS =
-        "\43\uffff";
-    static final String DFA61_minS =
-        "\1\4\2\0\40\uffff";
-    static final String DFA61_maxS =
-        "\1\u00d7\2\0\40\uffff";
-    static final String DFA61_acceptS =
-        "\3\uffff\1\1\1\uffff\1\2\35\uffff";
-    static final String DFA61_specialS =
-        "\1\uffff\1\0\1\1\40\uffff}>";
-    static final String[] DFA61_transitionS = {
-            "\1\1\4\5\22\uffff\1\5\3\uffff\1\3\2\uffff\2\5\4\uffff\1\5\4"+
-            "\uffff\6\5\77\uffff\1\5\3\uffff\1\5\24\uffff\1\2\43\uffff\2"+
-            "\5\3\uffff\1\5\1\uffff\1\5\2\uffff\10\5\1\uffff\1\5\22\uffff"+
-            "\1\3\1\uffff\1\5",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA61_eot = DFA.unpackEncodedString(DFA61_eotS);
-    static final short[] DFA61_eof = DFA.unpackEncodedString(DFA61_eofS);
-    static final char[] DFA61_min = DFA.unpackEncodedStringToUnsignedChars(DFA61_minS);
-    static final char[] DFA61_max = DFA.unpackEncodedStringToUnsignedChars(DFA61_maxS);
-    static final short[] DFA61_accept = DFA.unpackEncodedString(DFA61_acceptS);
-    static final short[] DFA61_special = DFA.unpackEncodedString(DFA61_specialS);
-    static final short[][] DFA61_transition;
-
-    static {
-        int numStates = DFA61_transitionS.length;
-        DFA61_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA61_transition[i] = DFA.unpackEncodedString(DFA61_transitionS[i]);
-        }
-    }
-
-    class DFA61 extends DFA {
-
-        public DFA61(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 61;
-            this.eot = DFA61_eot;
-            this.eof = DFA61_eof;
-            this.min = DFA61_min;
-            this.max = DFA61_max;
-            this.accept = DFA61_accept;
-            this.special = DFA61_special;
-            this.transition = DFA61_transition;
-        }
-        public String getDescription() {
-            return "6278:1: rule__XConstructorCall__Alternatives_4_1 : ( ( ( rule__XConstructorCall__ArgumentsAssignment_4_1_0 ) ) | ( ( rule__XConstructorCall__Group_4_1_1__0 ) ) );";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA61_1 = input.LA(1);
-
-                         
-                        int index61_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred127_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index61_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA61_2 = input.LA(1);
-
-                         
-                        int index61_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred127_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index61_2);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 61, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA70_eotS =
-        "\7\uffff";
-    static final String DFA70_eofS =
-        "\2\uffff\1\4\2\uffff\1\4\1\uffff";
-    static final String DFA70_minS =
-        "\1\4\1\uffff\1\53\1\4\1\uffff\1\53\1\uffff";
-    static final String DFA70_maxS =
-        "\1\56\1\uffff\1\u00b3\1\44\1\uffff\1\u00b3\1\uffff";
-    static final String DFA70_acceptS =
-        "\1\uffff\1\1\2\uffff\1\2\1\uffff\1\3";
-    static final String DFA70_specialS =
-        "\7\uffff}>";
-    static final String[] DFA70_transitionS = {
-            "\1\2\51\uffff\1\1",
-            "",
-            "\1\3\u0087\uffff\1\4",
-            "\1\5\37\uffff\1\6",
-            "",
-            "\1\3\u0087\uffff\1\4",
-            ""
-    };
-
-    static final short[] DFA70_eot = DFA.unpackEncodedString(DFA70_eotS);
-    static final short[] DFA70_eof = DFA.unpackEncodedString(DFA70_eofS);
-    static final char[] DFA70_min = DFA.unpackEncodedStringToUnsignedChars(DFA70_minS);
-    static final char[] DFA70_max = DFA.unpackEncodedStringToUnsignedChars(DFA70_maxS);
-    static final short[] DFA70_accept = DFA.unpackEncodedString(DFA70_acceptS);
-    static final short[] DFA70_special = DFA.unpackEncodedString(DFA70_specialS);
-    static final short[][] DFA70_transition;
-
-    static {
-        int numStates = DFA70_transitionS.length;
-        DFA70_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA70_transition[i] = DFA.unpackEncodedString(DFA70_transitionS[i]);
-        }
-    }
-
-    class DFA70 extends DFA {
-
-        public DFA70(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 70;
-            this.eot = DFA70_eot;
-            this.eof = DFA70_eof;
-            this.min = DFA70_min;
-            this.max = DFA70_max;
-            this.accept = DFA70_accept;
-            this.special = DFA70_special;
-            this.transition = DFA70_transition;
-        }
-        public String getDescription() {
-            return "6478:1: rule__XImportDeclaration__Alternatives_1 : ( ( ( rule__XImportDeclaration__Group_1_0__0 ) ) | ( ( rule__XImportDeclaration__ImportedTypeAssignment_1_1 ) ) | ( ( rule__XImportDeclaration__ImportedNamespaceAssignment_1_2 ) ) );";
-        }
-    }
-    static final String DFA163_eotS =
-        "\12\uffff";
-    static final String DFA163_eofS =
-        "\1\10\11\uffff";
-    static final String DFA163_minS =
-        "\1\4\7\0\2\uffff";
-    static final String DFA163_maxS =
-        "\1\u00d7\7\0\2\uffff";
-    static final String DFA163_acceptS =
-        "\10\uffff\1\2\1\1";
-    static final String DFA163_specialS =
-        "\1\uffff\1\4\1\3\1\1\1\0\1\5\1\6\1\2\2\uffff}>";
-    static final String[] DFA163_transitionS = {
-            "\5\10\5\uffff\2\10\1\1\1\2\1\3\1\4\1\5\5\10\1\7\1\6\30\10\76"+
-            "\uffff\2\10\2\uffff\1\10\24\uffff\2\10\40\uffff\27\10\17\uffff"+
-            "\2\10\1\uffff\2\10",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            ""
-    };
-
-    static final short[] DFA163_eot = DFA.unpackEncodedString(DFA163_eotS);
-    static final short[] DFA163_eof = DFA.unpackEncodedString(DFA163_eofS);
-    static final char[] DFA163_min = DFA.unpackEncodedStringToUnsignedChars(DFA163_minS);
-    static final char[] DFA163_max = DFA.unpackEncodedStringToUnsignedChars(DFA163_maxS);
-    static final short[] DFA163_accept = DFA.unpackEncodedString(DFA163_acceptS);
-    static final short[] DFA163_special = DFA.unpackEncodedString(DFA163_specialS);
-    static final short[][] DFA163_transition;
-
-    static {
-        int numStates = DFA163_transitionS.length;
-        DFA163_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA163_transition[i] = DFA.unpackEncodedString(DFA163_transitionS[i]);
-        }
-    }
-
-    class DFA163 extends DFA {
-
-        public DFA163(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 163;
-            this.eot = DFA163_eot;
-            this.eof = DFA163_eof;
-            this.min = DFA163_min;
-            this.max = DFA163_max;
-            this.accept = DFA163_accept;
-            this.special = DFA163_special;
-            this.transition = DFA163_transition;
-        }
-        public String getDescription() {
-            return "18945:1: ( rule__XAssignment__Group_1_1__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA163_4 = input.LA(1);
-
-                         
-                        int index163_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred270_InternalDatamartDSL()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 8;}
-
-                         
-                        input.seek(index163_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA163_3 = input.LA(1);
-
-                         
-                        int index163_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred270_InternalDatamartDSL()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 8;}
-
-                         
-                        input.seek(index163_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA163_7 = input.LA(1);
-
-                         
-                        int index163_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred270_InternalDatamartDSL()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 8;}
-
-                         
-                        input.seek(index163_7);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA163_2 = input.LA(1);
-
-                         
-                        int index163_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred270_InternalDatamartDSL()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 8;}
-
-                         
-                        input.seek(index163_2);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA163_1 = input.LA(1);
-
-                         
-                        int index163_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred270_InternalDatamartDSL()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 8;}
-
-                         
-                        input.seek(index163_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA163_5 = input.LA(1);
-
-                         
-                        int index163_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred270_InternalDatamartDSL()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 8;}
-
-                         
-                        input.seek(index163_5);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA163_6 = input.LA(1);
-
-                         
-                        int index163_6 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred270_InternalDatamartDSL()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 8;}
-
-                         
-                        input.seek(index163_6);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 163, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA169_eotS =
-        "\13\uffff";
-    static final String DFA169_eofS =
-        "\1\1\12\uffff";
-    static final String DFA169_minS =
-        "\1\4\1\uffff\10\0\1\uffff";
-    static final String DFA169_maxS =
-        "\1\u00d7\1\uffff\10\0\1\uffff";
-    static final String DFA169_acceptS =
-        "\1\uffff\1\2\10\uffff\1\1";
-    static final String DFA169_specialS =
-        "\2\uffff\1\7\1\4\1\0\1\2\1\5\1\1\1\6\1\3\1\uffff}>";
-    static final String[] DFA169_transitionS = {
-            "\5\1\5\uffff\14\1\1\3\1\2\1\4\1\5\1\6\1\7\1\10\1\11\22\1\76"+
-            "\uffff\2\1\2\uffff\1\1\24\uffff\2\1\40\uffff\27\1\17\uffff\2"+
-            "\1\1\uffff\2\1",
-            "",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            ""
-    };
-
-    static final short[] DFA169_eot = DFA.unpackEncodedString(DFA169_eotS);
-    static final short[] DFA169_eof = DFA.unpackEncodedString(DFA169_eofS);
-    static final char[] DFA169_min = DFA.unpackEncodedStringToUnsignedChars(DFA169_minS);
-    static final char[] DFA169_max = DFA.unpackEncodedStringToUnsignedChars(DFA169_maxS);
-    static final short[] DFA169_accept = DFA.unpackEncodedString(DFA169_acceptS);
-    static final short[] DFA169_special = DFA.unpackEncodedString(DFA169_specialS);
-    static final short[][] DFA169_transition;
-
-    static {
-        int numStates = DFA169_transitionS.length;
-        DFA169_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA169_transition[i] = DFA.unpackEncodedString(DFA169_transitionS[i]);
-        }
-    }
-
-    class DFA169 extends DFA {
-
-        public DFA169(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 169;
-            this.eot = DFA169_eot;
-            this.eof = DFA169_eof;
-            this.min = DFA169_min;
-            this.max = DFA169_max;
-            this.accept = DFA169_accept;
-            this.special = DFA169_special;
-            this.transition = DFA169_transition;
-        }
-        public String getDescription() {
-            return "()* loopback of 20437:1: ( rule__XOtherOperatorExpression__Group_1__0 )*";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA169_4 = input.LA(1);
-
-                         
-                        int index169_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA169_7 = input.LA(1);
-
-                         
-                        int index169_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_7);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA169_5 = input.LA(1);
-
-                         
-                        int index169_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_5);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA169_9 = input.LA(1);
-
-                         
-                        int index169_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA169_3 = input.LA(1);
-
-                         
-                        int index169_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA169_6 = input.LA(1);
-
-                         
-                        int index169_6 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_6);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA169_8 = input.LA(1);
-
-                         
-                        int index169_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 7 : 
-                        int LA169_2 = input.LA(1);
-
-                         
-                        int index169_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred276_InternalDatamartDSL()) ) {s = 10;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index169_2);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 169, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA176_eotS =
-        "\116\uffff";
-    static final String DFA176_eofS =
-        "\1\2\115\uffff";
-    static final String DFA176_minS =
-        "\1\4\1\0\114\uffff";
-    static final String DFA176_maxS =
-        "\1\u00d7\1\0\114\uffff";
-    static final String DFA176_acceptS =
-        "\2\uffff\1\2\112\uffff\1\1";
-    static final String DFA176_specialS =
-        "\1\uffff\1\0\114\uffff}>";
-    static final String[] DFA176_transitionS = {
-            "\5\2\5\uffff\46\2\76\uffff\2\2\2\uffff\1\2\24\uffff\1\1\1\2"+
-            "\40\uffff\27\2\17\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA176_eot = DFA.unpackEncodedString(DFA176_eotS);
-    static final short[] DFA176_eof = DFA.unpackEncodedString(DFA176_eofS);
-    static final char[] DFA176_min = DFA.unpackEncodedStringToUnsignedChars(DFA176_minS);
-    static final char[] DFA176_max = DFA.unpackEncodedStringToUnsignedChars(DFA176_maxS);
-    static final short[] DFA176_accept = DFA.unpackEncodedString(DFA176_acceptS);
-    static final short[] DFA176_special = DFA.unpackEncodedString(DFA176_specialS);
-    static final short[][] DFA176_transition;
-
-    static {
-        int numStates = DFA176_transitionS.length;
-        DFA176_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA176_transition[i] = DFA.unpackEncodedString(DFA176_transitionS[i]);
-        }
-    }
-
-    class DFA176 extends DFA {
-
-        public DFA176(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 176;
-            this.eot = DFA176_eot;
-            this.eof = DFA176_eof;
-            this.min = DFA176_min;
-            this.max = DFA176_max;
-            this.accept = DFA176_accept;
-            this.special = DFA176_special;
-            this.transition = DFA176_transition;
-        }
-        public String getDescription() {
-            return "22264:1: ( rule__XMemberFeatureCall__Group_1_1_3__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA176_1 = input.LA(1);
-
-                         
-                        int index176_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred283_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index176_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 176, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA177_eotS =
-        "\116\uffff";
-    static final String DFA177_eofS =
-        "\1\2\115\uffff";
-    static final String DFA177_minS =
-        "\1\4\1\0\114\uffff";
-    static final String DFA177_maxS =
-        "\1\u00d7\1\0\114\uffff";
-    static final String DFA177_acceptS =
-        "\2\uffff\1\2\112\uffff\1\1";
-    static final String DFA177_specialS =
-        "\1\uffff\1\0\114\uffff}>";
-    static final String[] DFA177_transitionS = {
-            "\5\2\5\uffff\46\2\76\uffff\2\2\2\uffff\1\2\24\uffff\2\2\40"+
-            "\uffff\3\2\1\1\23\2\17\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA177_eot = DFA.unpackEncodedString(DFA177_eotS);
-    static final short[] DFA177_eof = DFA.unpackEncodedString(DFA177_eofS);
-    static final char[] DFA177_min = DFA.unpackEncodedStringToUnsignedChars(DFA177_minS);
-    static final char[] DFA177_max = DFA.unpackEncodedStringToUnsignedChars(DFA177_maxS);
-    static final short[] DFA177_accept = DFA.unpackEncodedString(DFA177_acceptS);
-    static final short[] DFA177_special = DFA.unpackEncodedString(DFA177_specialS);
-    static final short[][] DFA177_transition;
-
-    static {
-        int numStates = DFA177_transitionS.length;
-        DFA177_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA177_transition[i] = DFA.unpackEncodedString(DFA177_transitionS[i]);
-        }
-    }
-
-    class DFA177 extends DFA {
-
-        public DFA177(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 177;
-            this.eot = DFA177_eot;
-            this.eof = DFA177_eof;
-            this.min = DFA177_min;
-            this.max = DFA177_max;
-            this.accept = DFA177_accept;
-            this.special = DFA177_special;
-            this.transition = DFA177_transition;
-        }
-        public String getDescription() {
-            return "22292:1: ( rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_4 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA177_1 = input.LA(1);
-
-                         
-                        int index177_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred284_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index177_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 177, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA185_eotS =
-        "\46\uffff";
-    static final String DFA185_eofS =
-        "\46\uffff";
-    static final String DFA185_minS =
-        "\1\4\2\0\43\uffff";
-    static final String DFA185_maxS =
-        "\1\u00d7\2\0\43\uffff";
-    static final String DFA185_acceptS =
-        "\3\uffff\1\1\1\uffff\1\2\40\uffff";
-    static final String DFA185_specialS =
-        "\1\uffff\1\0\1\1\43\uffff}>";
-    static final String[] DFA185_transitionS = {
-            "\1\1\4\5\22\uffff\1\5\3\uffff\1\3\2\uffff\2\5\4\uffff\1\5\3"+
-            "\uffff\7\5\77\uffff\1\5\3\uffff\1\5\24\uffff\1\2\42\uffff\3"+
-            "\5\3\uffff\1\5\1\uffff\1\5\2\uffff\10\5\1\uffff\1\5\22\uffff"+
-            "\1\3\2\5",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA185_eot = DFA.unpackEncodedString(DFA185_eotS);
-    static final short[] DFA185_eof = DFA.unpackEncodedString(DFA185_eofS);
-    static final char[] DFA185_min = DFA.unpackEncodedStringToUnsignedChars(DFA185_minS);
-    static final char[] DFA185_max = DFA.unpackEncodedStringToUnsignedChars(DFA185_maxS);
-    static final short[] DFA185_accept = DFA.unpackEncodedString(DFA185_acceptS);
-    static final short[] DFA185_special = DFA.unpackEncodedString(DFA185_specialS);
-    static final short[][] DFA185_transition;
-
-    static {
-        int numStates = DFA185_transitionS.length;
-        DFA185_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA185_transition[i] = DFA.unpackEncodedString(DFA185_transitionS[i]);
-        }
-    }
-
-    class DFA185 extends DFA {
-
-        public DFA185(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 185;
-            this.eot = DFA185_eot;
-            this.eof = DFA185_eof;
-            this.min = DFA185_min;
-            this.max = DFA185_max;
-            this.accept = DFA185_accept;
-            this.special = DFA185_special;
-            this.transition = DFA185_transition;
-        }
-        public String getDescription() {
-            return "23433:1: ( rule__XClosure__Group_1__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA185_1 = input.LA(1);
-
-                         
-                        int index185_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred292_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index185_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA185_2 = input.LA(1);
-
-                         
-                        int index185_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred292_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 5;}
-
-                         
-                        input.seek(index185_2);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 185, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA195_eotS =
-        "\42\uffff";
-    static final String DFA195_eofS =
-        "\42\uffff";
-    static final String DFA195_minS =
-        "\1\4\2\0\37\uffff";
-    static final String DFA195_maxS =
-        "\1\u00d7\2\0\37\uffff";
-    static final String DFA195_acceptS =
-        "\3\uffff\1\1\1\2\35\uffff";
-    static final String DFA195_specialS =
-        "\1\uffff\1\0\1\1\37\uffff}>";
-    static final String[] DFA195_transitionS = {
-            "\1\1\4\4\22\uffff\1\4\3\uffff\1\3\2\uffff\2\4\4\uffff\1\4\4"+
-            "\uffff\6\4\77\uffff\1\4\3\uffff\1\4\24\uffff\1\2\43\uffff\2"+
-            "\4\3\uffff\1\4\1\uffff\1\4\2\uffff\10\4\1\uffff\1\4\24\uffff"+
-            "\1\4",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA195_eot = DFA.unpackEncodedString(DFA195_eotS);
-    static final short[] DFA195_eof = DFA.unpackEncodedString(DFA195_eofS);
-    static final char[] DFA195_min = DFA.unpackEncodedStringToUnsignedChars(DFA195_minS);
-    static final char[] DFA195_max = DFA.unpackEncodedStringToUnsignedChars(DFA195_maxS);
-    static final short[] DFA195_accept = DFA.unpackEncodedString(DFA195_acceptS);
-    static final short[] DFA195_special = DFA.unpackEncodedString(DFA195_specialS);
-    static final short[][] DFA195_transition;
-
-    static {
-        int numStates = DFA195_transitionS.length;
-        DFA195_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA195_transition[i] = DFA.unpackEncodedString(DFA195_transitionS[i]);
-        }
-    }
-
-    class DFA195 extends DFA {
-
-        public DFA195(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 195;
-            this.eot = DFA195_eot;
-            this.eof = DFA195_eof;
-            this.min = DFA195_min;
-            this.max = DFA195_max;
-            this.accept = DFA195_accept;
-            this.special = DFA195_special;
-            this.transition = DFA195_transition;
-        }
-        public String getDescription() {
-            return "25101:1: ( rule__XSwitchExpression__Group_2_1_0__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA195_1 = input.LA(1);
-
-                         
-                        int index195_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred302_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 4;}
-
-                         
-                        input.seek(index195_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA195_2 = input.LA(1);
-
-                         
-                        int index195_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred302_InternalDatamartDSL()) ) {s = 3;}
-
-                        else if ( (true) ) {s = 4;}
-
-                         
-                        input.seek(index195_2);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 195, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA208_eotS =
-        "\116\uffff";
-    static final String DFA208_eofS =
-        "\1\2\115\uffff";
-    static final String DFA208_minS =
-        "\1\4\1\0\114\uffff";
-    static final String DFA208_maxS =
-        "\1\u00d7\1\0\114\uffff";
-    static final String DFA208_acceptS =
-        "\2\uffff\1\2\112\uffff\1\1";
-    static final String DFA208_specialS =
-        "\1\uffff\1\0\114\uffff}>";
-    static final String[] DFA208_transitionS = {
-            "\5\2\5\uffff\46\2\76\uffff\2\2\2\uffff\1\2\24\uffff\1\1\1\2"+
-            "\40\uffff\27\2\17\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA208_eot = DFA.unpackEncodedString(DFA208_eotS);
-    static final short[] DFA208_eof = DFA.unpackEncodedString(DFA208_eofS);
-    static final char[] DFA208_min = DFA.unpackEncodedStringToUnsignedChars(DFA208_minS);
-    static final char[] DFA208_max = DFA.unpackEncodedStringToUnsignedChars(DFA208_maxS);
-    static final short[] DFA208_accept = DFA.unpackEncodedString(DFA208_acceptS);
-    static final short[] DFA208_special = DFA.unpackEncodedString(DFA208_specialS);
-    static final short[][] DFA208_transition;
-
-    static {
-        int numStates = DFA208_transitionS.length;
-        DFA208_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA208_transition[i] = DFA.unpackEncodedString(DFA208_transitionS[i]);
-        }
-    }
-
-    class DFA208 extends DFA {
-
-        public DFA208(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 208;
-            this.eot = DFA208_eot;
-            this.eof = DFA208_eof;
-            this.min = DFA208_min;
-            this.max = DFA208_max;
-            this.accept = DFA208_accept;
-            this.special = DFA208_special;
-            this.transition = DFA208_transition;
-        }
-        public String getDescription() {
-            return "27589:1: ( rule__XFeatureCall__Group_3__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA208_1 = input.LA(1);
-
-                         
-                        int index208_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred315_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index208_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 208, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA209_eotS =
-        "\116\uffff";
-    static final String DFA209_eofS =
-        "\1\2\115\uffff";
-    static final String DFA209_minS =
-        "\1\4\1\0\114\uffff";
-    static final String DFA209_maxS =
-        "\1\u00d7\1\0\114\uffff";
-    static final String DFA209_acceptS =
-        "\2\uffff\1\2\112\uffff\1\1";
-    static final String DFA209_specialS =
-        "\1\uffff\1\0\114\uffff}>";
-    static final String[] DFA209_transitionS = {
-            "\5\2\5\uffff\46\2\76\uffff\2\2\2\uffff\1\2\24\uffff\2\2\40"+
-            "\uffff\3\2\1\1\23\2\17\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA209_eot = DFA.unpackEncodedString(DFA209_eotS);
-    static final short[] DFA209_eof = DFA.unpackEncodedString(DFA209_eofS);
-    static final char[] DFA209_min = DFA.unpackEncodedStringToUnsignedChars(DFA209_minS);
-    static final char[] DFA209_max = DFA.unpackEncodedStringToUnsignedChars(DFA209_maxS);
-    static final short[] DFA209_accept = DFA.unpackEncodedString(DFA209_acceptS);
-    static final short[] DFA209_special = DFA.unpackEncodedString(DFA209_specialS);
-    static final short[][] DFA209_transition;
-
-    static {
-        int numStates = DFA209_transitionS.length;
-        DFA209_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA209_transition[i] = DFA.unpackEncodedString(DFA209_transitionS[i]);
-        }
-    }
-
-    class DFA209 extends DFA {
-
-        public DFA209(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 209;
-            this.eot = DFA209_eot;
-            this.eof = DFA209_eof;
-            this.min = DFA209_min;
-            this.max = DFA209_max;
-            this.accept = DFA209_accept;
-            this.special = DFA209_special;
-            this.transition = DFA209_transition;
-        }
-        public String getDescription() {
-            return "27617:1: ( rule__XFeatureCall__FeatureCallArgumentsAssignment_4 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA209_1 = input.LA(1);
-
-                         
-                        int index209_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred316_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index209_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 209, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA213_eotS =
-        "\116\uffff";
-    static final String DFA213_eofS =
-        "\1\2\115\uffff";
-    static final String DFA213_minS =
-        "\1\4\1\0\114\uffff";
-    static final String DFA213_maxS =
-        "\1\u00d7\1\0\114\uffff";
-    static final String DFA213_acceptS =
-        "\2\uffff\1\2\112\uffff\1\1";
-    static final String DFA213_specialS =
-        "\1\uffff\1\0\114\uffff}>";
-    static final String[] DFA213_transitionS = {
-            "\5\2\5\uffff\15\2\1\1\30\2\76\uffff\2\2\2\uffff\1\2\24\uffff"+
-            "\2\2\40\uffff\27\2\17\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA213_eot = DFA.unpackEncodedString(DFA213_eotS);
-    static final short[] DFA213_eof = DFA.unpackEncodedString(DFA213_eofS);
-    static final char[] DFA213_min = DFA.unpackEncodedStringToUnsignedChars(DFA213_minS);
-    static final char[] DFA213_max = DFA.unpackEncodedStringToUnsignedChars(DFA213_maxS);
-    static final short[] DFA213_accept = DFA.unpackEncodedString(DFA213_acceptS);
-    static final short[] DFA213_special = DFA.unpackEncodedString(DFA213_specialS);
-    static final short[][] DFA213_transition;
-
-    static {
-        int numStates = DFA213_transitionS.length;
-        DFA213_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA213_transition[i] = DFA.unpackEncodedString(DFA213_transitionS[i]);
-        }
-    }
-
-    class DFA213 extends DFA {
-
-        public DFA213(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 213;
-            this.eot = DFA213_eot;
-            this.eof = DFA213_eof;
-            this.min = DFA213_min;
-            this.max = DFA213_max;
-            this.accept = DFA213_accept;
-            this.special = DFA213_special;
-            this.transition = DFA213_transition;
-        }
-        public String getDescription() {
-            return "28155:1: ( rule__XConstructorCall__Group_3__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA213_1 = input.LA(1);
-
-                         
-                        int index213_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred320_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index213_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 213, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA214_eotS =
-        "\116\uffff";
-    static final String DFA214_eofS =
-        "\1\2\115\uffff";
-    static final String DFA214_minS =
-        "\1\4\1\0\114\uffff";
-    static final String DFA214_maxS =
-        "\1\u00d7\1\0\114\uffff";
-    static final String DFA214_acceptS =
-        "\2\uffff\1\2\112\uffff\1\1";
-    static final String DFA214_specialS =
-        "\1\uffff\1\0\114\uffff}>";
-    static final String[] DFA214_transitionS = {
-            "\5\2\5\uffff\46\2\76\uffff\2\2\2\uffff\1\2\24\uffff\1\1\1\2"+
-            "\40\uffff\27\2\17\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA214_eot = DFA.unpackEncodedString(DFA214_eotS);
-    static final short[] DFA214_eof = DFA.unpackEncodedString(DFA214_eofS);
-    static final char[] DFA214_min = DFA.unpackEncodedStringToUnsignedChars(DFA214_minS);
-    static final char[] DFA214_max = DFA.unpackEncodedStringToUnsignedChars(DFA214_maxS);
-    static final short[] DFA214_accept = DFA.unpackEncodedString(DFA214_acceptS);
-    static final short[] DFA214_special = DFA.unpackEncodedString(DFA214_specialS);
-    static final short[][] DFA214_transition;
-
-    static {
-        int numStates = DFA214_transitionS.length;
-        DFA214_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA214_transition[i] = DFA.unpackEncodedString(DFA214_transitionS[i]);
-        }
-    }
-
-    class DFA214 extends DFA {
-
-        public DFA214(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 214;
-            this.eot = DFA214_eot;
-            this.eof = DFA214_eof;
-            this.min = DFA214_min;
-            this.max = DFA214_max;
-            this.accept = DFA214_accept;
-            this.special = DFA214_special;
-            this.transition = DFA214_transition;
-        }
-        public String getDescription() {
-            return "28184:1: ( rule__XConstructorCall__Group_4__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA214_1 = input.LA(1);
-
-                         
-                        int index214_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred321_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index214_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 214, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA215_eotS =
-        "\116\uffff";
-    static final String DFA215_eofS =
-        "\1\2\115\uffff";
-    static final String DFA215_minS =
-        "\1\4\1\0\114\uffff";
-    static final String DFA215_maxS =
-        "\1\u00d7\1\0\114\uffff";
-    static final String DFA215_acceptS =
-        "\2\uffff\1\2\112\uffff\1\1";
-    static final String DFA215_specialS =
-        "\1\uffff\1\0\114\uffff}>";
-    static final String[] DFA215_transitionS = {
-            "\5\2\5\uffff\46\2\76\uffff\2\2\2\uffff\1\2\24\uffff\2\2\40"+
-            "\uffff\3\2\1\1\23\2\17\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA215_eot = DFA.unpackEncodedString(DFA215_eotS);
-    static final short[] DFA215_eof = DFA.unpackEncodedString(DFA215_eofS);
-    static final char[] DFA215_min = DFA.unpackEncodedStringToUnsignedChars(DFA215_minS);
-    static final char[] DFA215_max = DFA.unpackEncodedStringToUnsignedChars(DFA215_maxS);
-    static final short[] DFA215_accept = DFA.unpackEncodedString(DFA215_acceptS);
-    static final short[] DFA215_special = DFA.unpackEncodedString(DFA215_specialS);
-    static final short[][] DFA215_transition;
-
-    static {
-        int numStates = DFA215_transitionS.length;
-        DFA215_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA215_transition[i] = DFA.unpackEncodedString(DFA215_transitionS[i]);
-        }
-    }
-
-    class DFA215 extends DFA {
-
-        public DFA215(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 215;
-            this.eot = DFA215_eot;
-            this.eof = DFA215_eof;
-            this.min = DFA215_min;
-            this.max = DFA215_max;
-            this.accept = DFA215_accept;
-            this.special = DFA215_special;
-            this.transition = DFA215_transition;
-        }
-        public String getDescription() {
-            return "28212:1: ( rule__XConstructorCall__ArgumentsAssignment_5 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA215_1 = input.LA(1);
-
-                         
-                        int index215_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred322_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index215_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 215, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA220_eotS =
-        "\116\uffff";
-    static final String DFA220_eofS =
-        "\1\41\115\uffff";
-    static final String DFA220_minS =
-        "\1\4\40\0\55\uffff";
-    static final String DFA220_maxS =
-        "\1\u00d7\40\0\55\uffff";
-    static final String DFA220_acceptS =
-        "\41\uffff\1\2\53\uffff\1\1";
-    static final String DFA220_specialS =
-        "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+
-        "\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30"+
-        "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\55\uffff}>";
-    static final String[] DFA220_transitionS = {
-            "\1\1\1\27\1\23\1\24\1\25\5\uffff\15\41\1\15\6\41\1\10\1\7\4"+
-            "\41\1\6\4\41\1\2\1\3\1\4\1\5\1\16\1\21\1\41\76\uffff\1\12\1"+
-            "\41\2\uffff\1\32\24\uffff\1\40\1\41\40\uffff\2\41\1\17\1\20"+
-            "\3\41\1\31\1\41\1\13\2\41\1\33\1\34\1\11\1\26\1\30\1\35\1\36"+
-            "\1\37\1\41\1\14\1\41\17\uffff\2\41\1\uffff\1\41\1\22",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA220_eot = DFA.unpackEncodedString(DFA220_eotS);
-    static final short[] DFA220_eof = DFA.unpackEncodedString(DFA220_eofS);
-    static final char[] DFA220_min = DFA.unpackEncodedStringToUnsignedChars(DFA220_minS);
-    static final char[] DFA220_max = DFA.unpackEncodedStringToUnsignedChars(DFA220_maxS);
-    static final short[] DFA220_accept = DFA.unpackEncodedString(DFA220_acceptS);
-    static final short[] DFA220_special = DFA.unpackEncodedString(DFA220_specialS);
-    static final short[][] DFA220_transition;
-
-    static {
-        int numStates = DFA220_transitionS.length;
-        DFA220_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA220_transition[i] = DFA.unpackEncodedString(DFA220_transitionS[i]);
-        }
-    }
-
-    class DFA220 extends DFA {
-
-        public DFA220(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 220;
-            this.eot = DFA220_eot;
-            this.eof = DFA220_eof;
-            this.min = DFA220_min;
-            this.max = DFA220_max;
-            this.accept = DFA220_accept;
-            this.special = DFA220_special;
-            this.transition = DFA220_transition;
-        }
-        public String getDescription() {
-            return "29265:1: ( rule__XReturnExpression__ExpressionAssignment_2 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA220_1 = input.LA(1);
-
-                         
-                        int index220_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA220_2 = input.LA(1);
-
-                         
-                        int index220_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_2);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA220_3 = input.LA(1);
-
-                         
-                        int index220_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA220_4 = input.LA(1);
-
-                         
-                        int index220_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA220_5 = input.LA(1);
-
-                         
-                        int index220_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_5);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA220_6 = input.LA(1);
-
-                         
-                        int index220_6 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_6);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA220_7 = input.LA(1);
-
-                         
-                        int index220_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_7);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 7 : 
-                        int LA220_8 = input.LA(1);
-
-                         
-                        int index220_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA220_9 = input.LA(1);
-
-                         
-                        int index220_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA220_10 = input.LA(1);
-
-                         
-                        int index220_10 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_10);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 10 : 
-                        int LA220_11 = input.LA(1);
-
-                         
-                        int index220_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_11);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        int LA220_12 = input.LA(1);
-
-                         
-                        int index220_12 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_12);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 12 : 
-                        int LA220_13 = input.LA(1);
-
-                         
-                        int index220_13 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_13);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 13 : 
-                        int LA220_14 = input.LA(1);
-
-                         
-                        int index220_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 14 : 
-                        int LA220_15 = input.LA(1);
-
-                         
-                        int index220_15 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_15);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 15 : 
-                        int LA220_16 = input.LA(1);
-
-                         
-                        int index220_16 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_16);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 16 : 
-                        int LA220_17 = input.LA(1);
-
-                         
-                        int index220_17 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_17);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 17 : 
-                        int LA220_18 = input.LA(1);
-
-                         
-                        int index220_18 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_18);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 18 : 
-                        int LA220_19 = input.LA(1);
-
-                         
-                        int index220_19 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_19);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 19 : 
-                        int LA220_20 = input.LA(1);
-
-                         
-                        int index220_20 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_20);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 20 : 
-                        int LA220_21 = input.LA(1);
-
-                         
-                        int index220_21 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_21);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 21 : 
-                        int LA220_22 = input.LA(1);
-
-                         
-                        int index220_22 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_22);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 22 : 
-                        int LA220_23 = input.LA(1);
-
-                         
-                        int index220_23 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_23);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 23 : 
-                        int LA220_24 = input.LA(1);
-
-                         
-                        int index220_24 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_24);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 24 : 
-                        int LA220_25 = input.LA(1);
-
-                         
-                        int index220_25 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_25);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 25 : 
-                        int LA220_26 = input.LA(1);
-
-                         
-                        int index220_26 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_26);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 26 : 
-                        int LA220_27 = input.LA(1);
-
-                         
-                        int index220_27 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_27);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 27 : 
-                        int LA220_28 = input.LA(1);
-
-                         
-                        int index220_28 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_28);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 28 : 
-                        int LA220_29 = input.LA(1);
-
-                         
-                        int index220_29 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_29);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 29 : 
-                        int LA220_30 = input.LA(1);
-
-                         
-                        int index220_30 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_30);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 30 : 
-                        int LA220_31 = input.LA(1);
-
-                         
-                        int index220_31 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_31);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 31 : 
-                        int LA220_32 = input.LA(1);
-
-                         
-                        int index220_32 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred327_InternalDatamartDSL()) ) {s = 77;}
-
-                        else if ( (true) ) {s = 33;}
-
-                         
-                        input.seek(index220_32);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 220, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA228_eotS =
-        "\117\uffff";
-    static final String DFA228_eofS =
-        "\1\2\116\uffff";
-    static final String DFA228_minS =
-        "\1\4\1\0\115\uffff";
-    static final String DFA228_maxS =
-        "\1\u00d7\1\0\115\uffff";
-    static final String DFA228_acceptS =
-        "\2\uffff\1\2\113\uffff\1\1";
-    static final String DFA228_specialS =
-        "\1\uffff\1\0\115\uffff}>";
-    static final String[] DFA228_transitionS = {
-            "\5\2\5\uffff\15\2\1\1\30\2\76\uffff\2\2\2\uffff\1\2\24\uffff"+
-            "\2\2\40\uffff\27\2\1\uffff\1\2\15\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA228_eot = DFA.unpackEncodedString(DFA228_eotS);
-    static final short[] DFA228_eof = DFA.unpackEncodedString(DFA228_eofS);
-    static final char[] DFA228_min = DFA.unpackEncodedStringToUnsignedChars(DFA228_minS);
-    static final char[] DFA228_max = DFA.unpackEncodedStringToUnsignedChars(DFA228_maxS);
-    static final short[] DFA228_accept = DFA.unpackEncodedString(DFA228_acceptS);
-    static final short[] DFA228_special = DFA.unpackEncodedString(DFA228_specialS);
-    static final short[][] DFA228_transition;
-
-    static {
-        int numStates = DFA228_transitionS.length;
-        DFA228_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA228_transition[i] = DFA.unpackEncodedString(DFA228_transitionS[i]);
-        }
-    }
-
-    class DFA228 extends DFA {
-
-        public DFA228(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 228;
-            this.eot = DFA228_eot;
-            this.eof = DFA228_eof;
-            this.min = DFA228_min;
-            this.max = DFA228_max;
-            this.accept = DFA228_accept;
-            this.special = DFA228_special;
-            this.transition = DFA228_transition;
-        }
-        public String getDescription() {
-            return "30720:1: ( rule__JvmParameterizedTypeReference__Group_1__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA228_1 = input.LA(1);
-
-                         
-                        int index228_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred335_InternalDatamartDSL()) ) {s = 78;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index228_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 228, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA231_eotS =
-        "\117\uffff";
-    static final String DFA231_eofS =
-        "\1\2\116\uffff";
-    static final String DFA231_minS =
-        "\1\4\1\0\115\uffff";
-    static final String DFA231_maxS =
-        "\1\u00d7\1\0\115\uffff";
-    static final String DFA231_acceptS =
-        "\2\uffff\1\2\113\uffff\1\1";
-    static final String DFA231_specialS =
-        "\1\uffff\1\0\115\uffff}>";
-    static final String[] DFA231_transitionS = {
-            "\5\2\5\uffff\15\2\1\1\30\2\76\uffff\2\2\2\uffff\1\2\24\uffff"+
-            "\2\2\40\uffff\27\2\1\uffff\1\2\15\uffff\2\2\1\uffff\2\2",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-    };
-
-    static final short[] DFA231_eot = DFA.unpackEncodedString(DFA231_eotS);
-    static final short[] DFA231_eof = DFA.unpackEncodedString(DFA231_eofS);
-    static final char[] DFA231_min = DFA.unpackEncodedStringToUnsignedChars(DFA231_minS);
-    static final char[] DFA231_max = DFA.unpackEncodedStringToUnsignedChars(DFA231_maxS);
-    static final short[] DFA231_accept = DFA.unpackEncodedString(DFA231_acceptS);
-    static final short[] DFA231_special = DFA.unpackEncodedString(DFA231_specialS);
-    static final short[][] DFA231_transition;
-
-    static {
-        int numStates = DFA231_transitionS.length;
-        DFA231_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA231_transition[i] = DFA.unpackEncodedString(DFA231_transitionS[i]);
-        }
-    }
-
-    class DFA231 extends DFA {
-
-        public DFA231(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 231;
-            this.eot = DFA231_eot;
-            this.eof = DFA231_eof;
-            this.min = DFA231_min;
-            this.max = DFA231_max;
-            this.accept = DFA231_accept;
-            this.special = DFA231_special;
-            this.transition = DFA231_transition;
-        }
-        public String getDescription() {
-            return "31031:1: ( rule__JvmParameterizedTypeReference__Group_1_4_2__0 )?";
-        }
-        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
-            TokenStream input = (TokenStream)_input;
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA231_1 = input.LA(1);
-
-                         
-                        int index231_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred338_InternalDatamartDSL()) ) {s = 78;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index231_1);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (state.backtracking>0) {state.failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 231, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
- 
-
-    
-    protected static class FollowSets000 {
-        public static final BitSet FOLLOW_ruleDatamartModel_in_entryRuleDatamartModel67 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartModel74 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartModel__PackagesAssignment_in_ruleDatamartModel100 = new BitSet(new long[]{0x0000000000000002L,0x0002000000000000L});
-        public static final BitSet FOLLOW_ruleDatamartPackage_in_entryRuleDatamartPackage128 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartPackage135 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__0_in_ruleDatamartPackage161 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDefinition_in_entryRuleDatamartDefinition188 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartDefinition195 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__0_in_ruleDatamartDefinition221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartRole_in_entryRuleDatamartRole248 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartRole255 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartRole__Group__0_in_ruleDatamartRole281 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSource_in_entryRuleDatamartSource308 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartSource315 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSource__Alternatives_in_ruleDatamartSource341 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartTask_in_entryRuleDatamartTask368 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartTask375 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__0_in_ruleDatamartTask401 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartColumn_in_entryRuleDatamartColumn428 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartColumn435 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartColumn__Group__0_in_ruleDatamartColumn461 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartTaskFilter_in_entryRuleDatamartTaskFilter488 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartTaskFilter495 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTaskFilter__Group__0_in_ruleDatamartTaskFilter521 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartCube_in_entryRuleDatamartCube548 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartCube555 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__0_in_ruleDatamartCube581 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartReference_in_entryRuleDatamartReference608 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartReference615 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartReference__Group__0_in_ruleDatamartReference641 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartEntity_in_entryRuleDatamartEntity668 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartEntity675 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__0_in_ruleDatamartEntity701 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartNavigation_in_entryRuleDatamartNavigation728 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartNavigation735 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartNavigation__Alternatives_in_ruleDatamartNavigation761 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartOwner_in_entryRuleDatamartOwner788 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartOwner795 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__0_in_ruleDatamartOwner821 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMember_in_entryRuleDatamartMember848 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartMember855 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__0_in_ruleDatamartMember881 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartProperty_in_entryRuleDatamartProperty908 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartProperty915 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group__0_in_ruleDatamartProperty941 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartCondition_in_entryRuleDatamartCondition968 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartCondition975 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCondition__Group__0_in_ruleDatamartCondition1001 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartOrder_in_entryRuleDatamartOrder1028 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartOrder1035 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__Group__0_in_ruleDatamartOrder1061 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDisjunction_in_entryRuleDatamartDisjunction1088 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartDisjunction1095 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group__0_in_ruleDatamartDisjunction1121 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartConjunction_in_entryRuleDatamartConjunction1148 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartConjunction1155 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group__0_in_ruleDatamartConjunction1181 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartConditionalExpression_in_entryRuleDatamartConditionalExpression1208 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartConditionalExpression1215 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group__0_in_ruleDatamartConditionalExpression1241 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartOperand_in_entryRuleDatamartOperand1268 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartOperand1275 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOperand__Alternatives_in_ruleDatamartOperand1301 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartValue_in_entryRuleDatamartValue1328 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartValue1335 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__Alternatives_in_ruleDatamartValue1361 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartCubeElement_in_entryRuleDatamartCubeElement1388 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartCubeElement1395 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCubeElement__Alternatives_in_ruleDatamartCubeElement1421 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDefineDerivedMeasure_in_entryRuleDatamartDefineDerivedMeasure1448 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartDefineDerivedMeasure1455 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__0_in_ruleDatamartDefineDerivedMeasure1481 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAddition_in_entryRuleDatamartAddition1508 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartAddition1515 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group__0_in_ruleDatamartAddition1541 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMultiplication_in_entryRuleDatamartMultiplication1568 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartMultiplication1575 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group__0_in_ruleDatamartMultiplication1601 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartPrimary_in_entryRuleDatamartPrimary1628 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartPrimary1635 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPrimary__Alternatives_in_ruleDatamartPrimary1661 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartNumberOrElement_in_entryRuleDatamartNumberOrElement1688 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartNumberOrElement1695 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartNumberOrElement__Alternatives_in_ruleDatamartNumberOrElement1721 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMemberTuple_in_entryRuleDatamartMemberTuple1748 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartMemberTuple1755 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group__0_in_ruleDatamartMemberTuple1781 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartFunction_in_entryRuleDatamartFunction1808 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartFunction1815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartFunction__FunctionAssignment_in_ruleDatamartFunction1841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartParameterFunction_in_entryRuleDatamartParameterFunction1868 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartParameterFunction1875 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__0_in_ruleDatamartParameterFunction1901 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartFunctionIntParameter_in_entryRuleDatamartFunctionIntParameter1928 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartFunctionIntParameter1935 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartFunctionIntParameter__ValueAssignment_in_ruleDatamartFunctionIntParameter1961 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetFunction_in_entryRuleDatamartSetFunction1988 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartSetFunction1995 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetFunction__SetFunctionAssignment_in_ruleDatamartSetFunction2021 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetParameterFunction_in_entryRuleDatamartSetParameterFunction2048 = new BitSet(new long[]{0x0000000000000000L});
-    }
-
-    protected static class FollowSets001 {
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartSetParameterFunction2055 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__0_in_ruleDatamartSetParameterFunction2081 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetAggregationFunction_in_entryRuleDatamartSetAggregationFunction2108 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartSetAggregationFunction2115 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__0_in_ruleDatamartSetAggregationFunction2141 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetTuple_in_entryRuleDatamartSetTuple2168 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartSetTuple2175 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group__0_in_ruleDatamartSetTuple2201 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAggregationFunction_in_entryRuleDatamartAggregationFunction2228 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartAggregationFunction2235 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregationFunction__AggregationAssignment_in_ruleDatamartAggregationFunction2261 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAggregation_in_entryRuleDatamartAggregation2288 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartAggregation2295 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__0_in_ruleDatamartAggregation2321 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetAggregation_in_entryRuleDatamartSetAggregation2348 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartSetAggregation2355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__0_in_ruleDatamartSetAggregation2381 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSlicer_in_entryRuleDatamartSlicer2408 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartSlicer2415 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSlicer__Group__0_in_ruleDatamartSlicer2441 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAxis_in_entryRuleDatamartAxis2468 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartAxis2475 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__0_in_ruleDatamartAxis2501 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartElement_in_entryRuleDatamartElement2528 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartElement2535 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartElement__Alternatives_in_ruleDatamartElement2561 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDerivedMeasure_in_entryRuleDatamartDerivedMeasure2588 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartDerivedMeasure2595 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group__0_in_ruleDatamartDerivedMeasure2621 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMeasure_in_entryRuleDatamartMeasure2648 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartMeasure2655 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group__0_in_ruleDatamartMeasure2681 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartHierarchy_in_entryRuleDatamartHierarchy2708 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartHierarchy2715 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__0_in_ruleDatamartHierarchy2741 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartImport_in_entryRuleDatamartImport2768 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartImport2775 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartImport__Group__0_in_ruleDatamartImport2801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartQualifiedNameWithWildCard_in_entryRuleDatamartQualifiedNameWithWildCard2828 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleDatamartQualifiedNameWithWildCard2835 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group__0_in_ruleDatamartQualifiedNameWithWildCard2861 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName2888 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedName2895 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group__0_in_ruleQualifiedName2921 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValidID_in_entryRuleValidID2948 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleValidID2955 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_ruleValidID2981 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTRANSLATABLESTRING_in_entryRuleTRANSLATABLESTRING3007 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTRANSLATABLESTRING3014 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_STRING_in_ruleTRANSLATABLESTRING3040 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTRANSLATABLEID_in_entryRuleTRANSLATABLEID3066 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleTRANSLATABLEID3073 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_ruleTRANSLATABLEID3099 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerData_in_entryRulePropertyFillerData3125 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerData3132 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__0_in_rulePropertyFillerData3158 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerType_in_entryRulePropertyFillerType3185 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerType3192 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerType__Alternatives_in_rulePropertyFillerType3218 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerDateFuture_in_entryRulePropertyFillerDateFuture3245 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerDateFuture3252 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateFuture__Group__0_in_rulePropertyFillerDateFuture3278 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerDatePast_in_entryRulePropertyFillerDatePast3305 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerDatePast3312 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDatePast__Group__0_in_rulePropertyFillerDatePast3338 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerDateRange_in_entryRulePropertyFillerDateRange3365 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerDateRange3372 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__0_in_rulePropertyFillerDateRange3398 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedDoubleRange_in_entryRulePropertyFillerSignedDoubleRange3425 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerSignedDoubleRange3432 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__0_in_rulePropertyFillerSignedDoubleRange3458 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedDoubleRandom_in_entryRulePropertyFillerSignedDoubleRandom3485 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerSignedDoubleRandom3492 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__0_in_rulePropertyFillerSignedDoubleRandom3518 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedIntegerRange_in_entryRulePropertyFillerSignedIntegerRange3545 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerSignedIntegerRange3552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__0_in_rulePropertyFillerSignedIntegerRange3578 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedIntegerRandom_in_entryRulePropertyFillerSignedIntegerRandom3605 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerSignedIntegerRandom3612 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__0_in_rulePropertyFillerSignedIntegerRandom3638 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextRandom_in_entryRulePropertyFillerTextRandom3665 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerTextRandom3672 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__0_in_rulePropertyFillerTextRandom3698 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextParagraphs_in_entryRulePropertyFillerTextParagraphs3725 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerTextParagraphs3732 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextParagraphs__Group__0_in_rulePropertyFillerTextParagraphs3758 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextSentences_in_entryRulePropertyFillerTextSentences3785 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerTextSentences3792 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextSentences__Group__0_in_rulePropertyFillerTextSentences3818 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextWords_in_entryRulePropertyFillerTextWords3845 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerTextWords3852 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextWords__Group__0_in_rulePropertyFillerTextWords3878 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedDoubleRange_in_entryRulePropertyFillerUnsignedDoubleRange3905 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerUnsignedDoubleRange3912 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__0_in_rulePropertyFillerUnsignedDoubleRange3938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedDoubleRandom_in_entryRulePropertyFillerUnsignedDoubleRandom3965 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerUnsignedDoubleRandom3972 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__0_in_rulePropertyFillerUnsignedDoubleRandom3998 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedIntegerRange_in_entryRulePropertyFillerUnsignedIntegerRange4025 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerUnsignedIntegerRange4032 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets002 {
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__0_in_rulePropertyFillerUnsignedIntegerRange4058 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedIntegerRandom_in_entryRulePropertyFillerUnsignedIntegerRandom4085 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRulePropertyFillerUnsignedIntegerRandom4092 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__0_in_rulePropertyFillerUnsignedIntegerRandom4118 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSignedNumber_in_entryRuleSignedNumber4145 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleSignedNumber4152 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SignedNumber__Group__0_in_ruleSignedNumber4178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnsignedNumber_in_entryRuleUnsignedNumber4205 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleUnsignedNumber4212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group__0_in_ruleUnsignedNumber4238 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSINT_in_entryRuleSINT4265 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleSINT4272 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SINT__Group__0_in_ruleSINT4298 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotation_in_entryRuleXAnnotation4325 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAnnotation4332 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__0_in_ruleXAnnotation4358 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotationElementValuePair_in_entryRuleXAnnotationElementValuePair4385 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAnnotationElementValuePair4392 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group__0_in_ruleXAnnotationElementValuePair4418 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotationElementValueOrCommaList_in_entryRuleXAnnotationElementValueOrCommaList4445 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAnnotationElementValueOrCommaList4452 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Alternatives_in_ruleXAnnotationElementValueOrCommaList4478 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotationElementValue_in_entryRuleXAnnotationElementValue4505 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAnnotationElementValue4512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Alternatives_in_ruleXAnnotationElementValue4538 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotationOrExpression_in_entryRuleXAnnotationOrExpression4565 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAnnotationOrExpression4572 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationOrExpression__Alternatives_in_ruleXAnnotationOrExpression4598 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXExpression_in_entryRuleXExpression4625 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXExpression4632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAssignment_in_ruleXExpression4658 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAssignment_in_entryRuleXAssignment4684 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAssignment4691 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Alternatives_in_ruleXAssignment4717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpSingleAssign_in_entryRuleOpSingleAssign4744 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpSingleAssign4751 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_13_in_ruleOpSingleAssign4778 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpMultiAssign_in_entryRuleOpMultiAssign4806 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpMultiAssign4813 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Alternatives_in_ruleOpMultiAssign4839 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXOrExpression_in_entryRuleXOrExpression4866 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXOrExpression4873 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group__0_in_ruleXOrExpression4899 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpOr_in_entryRuleOpOr4926 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpOr4933 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_14_in_ruleOpOr4960 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAndExpression_in_entryRuleXAndExpression4988 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAndExpression4995 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group__0_in_ruleXAndExpression5021 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpAnd_in_entryRuleOpAnd5048 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpAnd5055 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_15_in_ruleOpAnd5082 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXEqualityExpression_in_entryRuleXEqualityExpression5110 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXEqualityExpression5117 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group__0_in_ruleXEqualityExpression5143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpEquality_in_entryRuleOpEquality5170 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpEquality5177 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpEquality__Alternatives_in_ruleOpEquality5203 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXRelationalExpression_in_entryRuleXRelationalExpression5230 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXRelationalExpression5237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group__0_in_ruleXRelationalExpression5263 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpCompare_in_entryRuleOpCompare5290 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpCompare5297 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpCompare__Alternatives_in_ruleOpCompare5323 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXOtherOperatorExpression_in_entryRuleXOtherOperatorExpression5350 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXOtherOperatorExpression5357 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group__0_in_ruleXOtherOperatorExpression5383 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpOther_in_entryRuleOpOther5410 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpOther5417 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Alternatives_in_ruleOpOther5443 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAdditiveExpression_in_entryRuleXAdditiveExpression5470 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXAdditiveExpression5477 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group__0_in_ruleXAdditiveExpression5503 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpAdd_in_entryRuleOpAdd5530 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpAdd5537 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpAdd__Alternatives_in_ruleOpAdd5563 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXMultiplicativeExpression_in_entryRuleXMultiplicativeExpression5590 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXMultiplicativeExpression5597 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group__0_in_ruleXMultiplicativeExpression5623 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpMulti_in_entryRuleOpMulti5650 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpMulti5657 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMulti__Alternatives_in_ruleOpMulti5683 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXUnaryOperation_in_entryRuleXUnaryOperation5710 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXUnaryOperation5717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__Alternatives_in_ruleXUnaryOperation5743 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpUnary_in_entryRuleOpUnary5770 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpUnary5777 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpUnary__Alternatives_in_ruleOpUnary5803 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXCastedExpression_in_entryRuleXCastedExpression5830 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXCastedExpression5837 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group__0_in_ruleXCastedExpression5863 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXPostfixOperation_in_entryRuleXPostfixOperation5890 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXPostfixOperation5897 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group__0_in_ruleXPostfixOperation5923 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpPostfix_in_entryRuleOpPostfix5950 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleOpPostfix5957 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpPostfix__Alternatives_in_ruleOpPostfix5983 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXMemberFeatureCall_in_entryRuleXMemberFeatureCall6010 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXMemberFeatureCall6017 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group__0_in_ruleXMemberFeatureCall6043 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets003 {
-        public static final BitSet FOLLOW_ruleXPrimaryExpression_in_entryRuleXPrimaryExpression6070 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXPrimaryExpression6077 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPrimaryExpression__Alternatives_in_ruleXPrimaryExpression6103 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXLiteral_in_entryRuleXLiteral6130 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXLiteral6137 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XLiteral__Alternatives_in_ruleXLiteral6163 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXCollectionLiteral_in_entryRuleXCollectionLiteral6190 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXCollectionLiteral6197 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCollectionLiteral__Alternatives_in_ruleXCollectionLiteral6223 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXSetLiteral_in_entryRuleXSetLiteral6250 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXSetLiteral6257 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__0_in_ruleXSetLiteral6283 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXListLiteral_in_entryRuleXListLiteral6310 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXListLiteral6317 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__0_in_ruleXListLiteral6343 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXClosure_in_entryRuleXClosure6370 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXClosure6377 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__0_in_ruleXClosure6403 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXExpressionInClosure_in_entryRuleXExpressionInClosure6430 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXExpressionInClosure6437 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group__0_in_ruleXExpressionInClosure6463 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXShortClosure_in_entryRuleXShortClosure6490 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXShortClosure6497 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group__0_in_ruleXShortClosure6523 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXParenthesizedExpression_in_entryRuleXParenthesizedExpression6550 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXParenthesizedExpression6557 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XParenthesizedExpression__Group__0_in_ruleXParenthesizedExpression6583 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXIfExpression_in_entryRuleXIfExpression6610 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXIfExpression6617 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__0_in_ruleXIfExpression6643 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXSwitchExpression_in_entryRuleXSwitchExpression6670 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXSwitchExpression6677 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__0_in_ruleXSwitchExpression6703 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXCasePart_in_entryRuleXCasePart6730 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXCasePart6737 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__0_in_ruleXCasePart6763 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXForLoopExpression_in_entryRuleXForLoopExpression6790 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXForLoopExpression6797 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__0_in_ruleXForLoopExpression6823 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXBasicForLoopExpression_in_entryRuleXBasicForLoopExpression6850 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXBasicForLoopExpression6857 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__0_in_ruleXBasicForLoopExpression6883 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXWhileExpression_in_entryRuleXWhileExpression6910 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXWhileExpression6917 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__0_in_ruleXWhileExpression6943 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXDoWhileExpression_in_entryRuleXDoWhileExpression6970 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXDoWhileExpression6977 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__0_in_ruleXDoWhileExpression7003 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXBlockExpression_in_entryRuleXBlockExpression7030 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXBlockExpression7037 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__0_in_ruleXBlockExpression7063 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXExpressionOrVarDeclaration_in_entryRuleXExpressionOrVarDeclaration7090 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXExpressionOrVarDeclaration7097 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XExpressionOrVarDeclaration__Alternatives_in_ruleXExpressionOrVarDeclaration7123 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXVariableDeclaration_in_entryRuleXVariableDeclaration7150 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXVariableDeclaration7157 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__0_in_ruleXVariableDeclaration7183 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmFormalParameter_in_entryRuleJvmFormalParameter7210 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmFormalParameter7217 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmFormalParameter__Group__0_in_ruleJvmFormalParameter7243 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleFullJvmFormalParameter_in_entryRuleFullJvmFormalParameter7270 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleFullJvmFormalParameter7277 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__FullJvmFormalParameter__Group__0_in_ruleFullJvmFormalParameter7303 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXFeatureCall_in_entryRuleXFeatureCall7330 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXFeatureCall7337 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__0_in_ruleXFeatureCall7363 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleFeatureCallID_in_entryRuleFeatureCallID7390 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleFeatureCallID7397 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__FeatureCallID__Alternatives_in_ruleFeatureCallID7423 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleIdOrSuper_in_entryRuleIdOrSuper7450 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleIdOrSuper7457 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__IdOrSuper__Alternatives_in_ruleIdOrSuper7483 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXConstructorCall_in_entryRuleXConstructorCall7510 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXConstructorCall7517 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__0_in_ruleXConstructorCall7543 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXBooleanLiteral_in_entryRuleXBooleanLiteral7570 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXBooleanLiteral7577 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBooleanLiteral__Group__0_in_ruleXBooleanLiteral7603 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXNullLiteral_in_entryRuleXNullLiteral7630 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXNullLiteral7637 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XNullLiteral__Group__0_in_ruleXNullLiteral7663 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXNumberLiteral_in_entryRuleXNumberLiteral7690 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXNumberLiteral7697 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XNumberLiteral__Group__0_in_ruleXNumberLiteral7723 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXStringLiteral_in_entryRuleXStringLiteral7750 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXStringLiteral7757 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XStringLiteral__Group__0_in_ruleXStringLiteral7783 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXTypeLiteral_in_entryRuleXTypeLiteral7810 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXTypeLiteral7817 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__0_in_ruleXTypeLiteral7843 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXThrowExpression_in_entryRuleXThrowExpression7870 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXThrowExpression7877 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XThrowExpression__Group__0_in_ruleXThrowExpression7903 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXReturnExpression_in_entryRuleXReturnExpression7930 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXReturnExpression7937 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XReturnExpression__Group__0_in_ruleXReturnExpression7963 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXTryCatchFinallyExpression_in_entryRuleXTryCatchFinallyExpression7990 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXTryCatchFinallyExpression7997 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__0_in_ruleXTryCatchFinallyExpression8023 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXSynchronizedExpression_in_entryRuleXSynchronizedExpression8050 = new BitSet(new long[]{0x0000000000000000L});
-    }
-
-    protected static class FollowSets004 {
-        public static final BitSet FOLLOW_EOF_in_entryRuleXSynchronizedExpression8057 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__0_in_ruleXSynchronizedExpression8083 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXCatchClause_in_entryRuleXCatchClause8110 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXCatchClause8117 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__0_in_ruleXCatchClause8143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNumber_in_entryRuleNumber8175 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleNumber8182 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Alternatives_in_ruleNumber8212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmTypeReference_in_entryRuleJvmTypeReference8241 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmTypeReference8248 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Alternatives_in_ruleJvmTypeReference8274 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleArrayBrackets_in_entryRuleArrayBrackets8301 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleArrayBrackets8308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ArrayBrackets__Group__0_in_ruleArrayBrackets8334 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXFunctionTypeRef_in_entryRuleXFunctionTypeRef8361 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXFunctionTypeRef8368 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group__0_in_ruleXFunctionTypeRef8394 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmParameterizedTypeReference_in_entryRuleJvmParameterizedTypeReference8421 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmParameterizedTypeReference8428 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group__0_in_ruleJvmParameterizedTypeReference8454 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmArgumentTypeReference_in_entryRuleJvmArgumentTypeReference8481 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmArgumentTypeReference8488 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmArgumentTypeReference__Alternatives_in_ruleJvmArgumentTypeReference8514 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmWildcardTypeReference_in_entryRuleJvmWildcardTypeReference8541 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmWildcardTypeReference8548 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group__0_in_ruleJvmWildcardTypeReference8574 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmUpperBound_in_entryRuleJvmUpperBound8601 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmUpperBound8608 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmUpperBound__Group__0_in_ruleJvmUpperBound8634 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmUpperBoundAnded_in_entryRuleJvmUpperBoundAnded8661 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmUpperBoundAnded8668 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmUpperBoundAnded__Group__0_in_ruleJvmUpperBoundAnded8694 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmLowerBound_in_entryRuleJvmLowerBound8721 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmLowerBound8728 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBound__Group__0_in_ruleJvmLowerBound8754 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmLowerBoundAnded_in_entryRuleJvmLowerBoundAnded8781 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleJvmLowerBoundAnded8788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBoundAnded__Group__0_in_ruleJvmLowerBoundAnded8814 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleQualifiedNameWithWildcard_in_entryRuleQualifiedNameWithWildcard8843 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedNameWithWildcard8850 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedNameWithWildcard__Group__0_in_ruleQualifiedNameWithWildcard8876 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXImportDeclaration_in_entryRuleXImportDeclaration8905 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleXImportDeclaration8912 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group__0_in_ruleXImportDeclaration8938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleQualifiedNameInStaticImport_in_entryRuleQualifiedNameInStaticImport8965 = new BitSet(new long[]{0x0000000000000000L});
-        public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedNameInStaticImport8972 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedNameInStaticImport__Group__0_in_ruleQualifiedNameInStaticImport9000 = new BitSet(new long[]{0x0000000000000012L});
-        public static final BitSet FOLLOW_rule__QualifiedNameInStaticImport__Group__0_in_ruleQualifiedNameInStaticImport9012 = new BitSet(new long[]{0x0000000000000012L});
-        public static final BitSet FOLLOW_rule__AxisEnum__Alternatives_in_ruleAxisEnum9052 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__FunctionEnum__Alternatives_in_ruleFunctionEnum9088 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ParameterFunctionEnum__Alternatives_in_ruleParameterFunctionEnum9124 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SetFunctionEnum__Alternatives_in_ruleSetFunctionEnum9160 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SetParameterFunctionEnum__Alternatives_in_ruleSetParameterFunctionEnum9196 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SetAggregationEnum__Alternatives_in_ruleSetAggregationEnum9232 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__AggregationEnum__Alternatives_in_ruleAggregationEnum9268 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OperatorEnum__Alternatives_in_ruleOperatorEnum9304 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SqlAggregationEnum__Alternatives_in_ruleSqlAggregationEnum9340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ValueScaleEnum__Alternatives_in_ruleValueScaleEnum9376 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TaskQueryTopicEnum__Alternatives_in_ruleTaskQueryTopicEnum9412 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TaskQueryColumnEnum__Alternatives_in_ruleTaskQueryColumnEnum9448 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__TaskFilterEnum__Alternatives_in_ruleTaskFilterEnum9484 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OrderEnum__Alternatives_in_ruleOrderEnum9520 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartCube_in_rule__DatamartSource__Alternatives9555 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartEntity_in_rule__DatamartSource__Alternatives9572 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartTask_in_rule__DatamartSource__Alternatives9589 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartOwner_in_rule__DatamartNavigation__Alternatives9621 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMember_in_rule__DatamartNavigation__Alternatives9638 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartValue_in_rule__DatamartOperand__Alternatives9670 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOperand__Group_1__0_in_rule__DatamartOperand__Alternatives9687 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__NumberValueAssignment_0_in_rule__DatamartValue__Alternatives9720 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__StringValueAssignment_1_in_rule__DatamartValue__Alternatives9738 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__Alternatives_2_in_rule__DatamartValue__Alternatives9756 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartProperty_in_rule__DatamartValue__Alternatives9774 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartTaskFilter_in_rule__DatamartValue__Alternatives9791 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartColumn_in_rule__DatamartValue__Alternatives9808 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__Group_2_0__0_in_rule__DatamartValue__Alternatives_29840 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__SelectedAssignment_2_1_in_rule__DatamartValue__Alternatives_29858 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAxis_in_rule__DatamartCubeElement__Alternatives9891 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSlicer_in_rule__DatamartCubeElement__Alternatives9908 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDefineDerivedMeasure_in_rule__DatamartCubeElement__Alternatives9925 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_0__0_in_rule__DatamartAddition__Alternatives_1_09957 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_1__0_in_rule__DatamartAddition__Alternatives_1_09975 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_0__0_in_rule__DatamartMultiplication__Alternatives_1_010008 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_1__0_in_rule__DatamartMultiplication__Alternatives_1_010026 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartNumberOrElement_in_rule__DatamartPrimary__Alternatives10059 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPrimary__Group_1__0_in_rule__DatamartPrimary__Alternatives10076 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartNumberOrElement__ValueAssignment_0_in_rule__DatamartNumberOrElement__Alternatives10109 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMeasure_in_rule__DatamartNumberOrElement__Alternatives10127 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDerivedMeasure_in_rule__DatamartNumberOrElement__Alternatives10144 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMemberTuple_in_rule__DatamartNumberOrElement__Alternatives10161 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAggregation_in_rule__DatamartNumberOrElement__Alternatives10178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__FunctionAssignment_0_0_0_in_rule__DatamartMemberTuple__Alternatives_0_010210 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__FunctionAssignment_0_0_1_in_rule__DatamartMemberTuple__Alternatives_0_010228 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__SetFunctionAssignment_0_0_in_rule__DatamartSetTuple__Alternatives_010261 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__SetFunctionAssignment_0_1_in_rule__DatamartSetTuple__Alternatives_010279 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__SetAssignment_2_0_in_rule__DatamartAggregation__Alternatives_210312 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__SetAssignment_2_1_in_rule__DatamartAggregation__Alternatives_210330 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__SetAssignment_2_0_in_rule__DatamartSetAggregation__Alternatives_210363 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__SetAssignment_2_1_in_rule__DatamartSetAggregation__Alternatives_210381 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartHierarchy_in_rule__DatamartElement__Alternatives10414 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets005 {
-        public static final BitSet FOLLOW_ruleDatamartMeasure_in_rule__DatamartElement__Alternatives10431 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDerivedMeasure_in_rule__DatamartElement__Alternatives10448 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetAggregation_in_rule__DatamartElement__Alternatives10465 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__FilteredAssignment_5_2_0_in_rule__DatamartHierarchy__Alternatives_5_210497 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__SelectedAssignment_5_2_1_in_rule__DatamartHierarchy__Alternatives_5_210515 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMeasure_in_rule__DatamartHierarchy__OrderRefAlternatives_6_2_1_010548 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDerivedMeasure_in_rule__DatamartHierarchy__OrderRefAlternatives_6_2_1_010565 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerDateFuture_in_rule__PropertyFillerType__Alternatives10597 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerDatePast_in_rule__PropertyFillerType__Alternatives10614 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerDateRange_in_rule__PropertyFillerType__Alternatives10631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedDoubleRange_in_rule__PropertyFillerType__Alternatives10648 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedDoubleRandom_in_rule__PropertyFillerType__Alternatives10665 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedIntegerRange_in_rule__PropertyFillerType__Alternatives10682 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerSignedIntegerRandom_in_rule__PropertyFillerType__Alternatives10699 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextRandom_in_rule__PropertyFillerType__Alternatives10716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextParagraphs_in_rule__PropertyFillerType__Alternatives10733 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextSentences_in_rule__PropertyFillerType__Alternatives10750 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerTextWords_in_rule__PropertyFillerType__Alternatives10767 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedDoubleRange_in_rule__PropertyFillerType__Alternatives10784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedDoubleRandom_in_rule__PropertyFillerType__Alternatives10801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedIntegerRange_in_rule__PropertyFillerType__Alternatives10818 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerUnsignedIntegerRandom_in_rule__PropertyFillerType__Alternatives10835 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__BeginRangeAssignment_1_0_0_in_rule__PropertyFillerSignedDoubleRange__Alternatives_1_010867 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__BeginRangeRefAssignment_1_0_1_in_rule__PropertyFillerSignedDoubleRange__Alternatives_1_010885 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__EndRangeAssignment_1_2_0_in_rule__PropertyFillerSignedDoubleRange__Alternatives_1_210918 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__EndRangeRefAssignment_1_2_1_in_rule__PropertyFillerSignedDoubleRange__Alternatives_1_210936 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__BeginRangeAssignment_2_0_0_in_rule__PropertyFillerSignedIntegerRange__Alternatives_2_010969 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__BeginRangeRefAssignment_2_0_1_in_rule__PropertyFillerSignedIntegerRange__Alternatives_2_010987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__EndRangeAssignment_2_2_0_in_rule__PropertyFillerSignedIntegerRange__Alternatives_2_211020 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__EndRangeRefAssignment_2_2_1_in_rule__PropertyFillerSignedIntegerRange__Alternatives_2_211038 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__BeginRangeAssignment_1_0_0_in_rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_011071 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__BeginRangeRefAssignment_1_0_1_in_rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_011089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__EndRangeAssignment_1_2_0_in_rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_211122 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__EndRangeRefAssignment_1_2_1_in_rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_211140 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__BeginRangeAssignment_2_0_0_in_rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_011173 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__BeginRangeRefAssignment_2_0_1_in_rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_011191 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__EndRangeAssignment_2_2_0_in_rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_211224 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__EndRangeRefAssignment_2_2_1_in_rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_211242 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0__0_in_rule__XAnnotation__Alternatives_3_111275 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__ValueAssignment_3_1_1_in_rule__XAnnotation__Alternatives_3_111293 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0__0_in_rule__XAnnotationElementValueOrCommaList__Alternatives11326 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1__0_in_rule__XAnnotationElementValueOrCommaList__Alternatives11344 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0__0_in_rule__XAnnotationElementValue__Alternatives11377 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotationOrExpression_in_rule__XAnnotationElementValue__Alternatives11395 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotation_in_rule__XAnnotationOrExpression__Alternatives11427 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXExpression_in_rule__XAnnotationOrExpression__Alternatives11444 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__0_in_rule__XAssignment__Alternatives11476 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1__0_in_rule__XAssignment__Alternatives11494 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_16_in_rule__OpMultiAssign__Alternatives11528 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_17_in_rule__OpMultiAssign__Alternatives11548 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_18_in_rule__OpMultiAssign__Alternatives11568 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_19_in_rule__OpMultiAssign__Alternatives11588 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_20_in_rule__OpMultiAssign__Alternatives11608 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_5__0_in_rule__OpMultiAssign__Alternatives11627 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_6__0_in_rule__OpMultiAssign__Alternatives11645 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_21_in_rule__OpEquality__Alternatives11679 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_22_in_rule__OpEquality__Alternatives11699 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_23_in_rule__OpEquality__Alternatives11719 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_24_in_rule__OpEquality__Alternatives11739 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0__0_in_rule__XRelationalExpression__Alternatives_111773 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1__0_in_rule__XRelationalExpression__Alternatives_111791 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_25_in_rule__OpCompare__Alternatives11825 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpCompare__Group_1__0_in_rule__OpCompare__Alternatives11844 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpCompare__Alternatives11863 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpCompare__Alternatives11883 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_28_in_rule__OpOther__Alternatives11918 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_29_in_rule__OpOther__Alternatives11938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_2__0_in_rule__OpOther__Alternatives11957 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_30_in_rule__OpOther__Alternatives11976 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_31_in_rule__OpOther__Alternatives11996 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5__0_in_rule__OpOther__Alternatives12015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6__0_in_rule__OpOther__Alternatives12033 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_32_in_rule__OpOther__Alternatives12052 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_33_in_rule__OpOther__Alternatives12072 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5_1_0__0_in_rule__OpOther__Alternatives_5_112106 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpOther__Alternatives_5_112125 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6_1_0__0_in_rule__OpOther__Alternatives_6_112159 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpOther__Alternatives_6_112178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_31_in_rule__OpOther__Alternatives_6_112198 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_34_in_rule__OpAdd__Alternatives12233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_35_in_rule__OpAdd__Alternatives12253 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_36_in_rule__OpMulti__Alternatives12288 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_37_in_rule__OpMulti__Alternatives12308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_38_in_rule__OpMulti__Alternatives12328 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_39_in_rule__OpMulti__Alternatives12348 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__Group_0__0_in_rule__XUnaryOperation__Alternatives12382 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXCastedExpression_in_rule__XUnaryOperation__Alternatives12400 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_40_in_rule__OpUnary__Alternatives12433 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_35_in_rule__OpUnary__Alternatives12453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_34_in_rule__OpUnary__Alternatives12473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_41_in_rule__OpPostfix__Alternatives12508 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_42_in_rule__OpPostfix__Alternatives12528 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0__0_in_rule__XMemberFeatureCall__Alternatives_112562 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__0_in_rule__XMemberFeatureCall__Alternatives_112580 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__XMemberFeatureCall__Alternatives_1_0_0_0_112614 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__ExplicitStaticAssignment_1_0_0_0_1_1_in_rule__XMemberFeatureCall__Alternatives_1_0_0_0_112633 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__XMemberFeatureCall__Alternatives_1_1_0_0_112667 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__NullSafeAssignment_1_1_0_0_1_1_in_rule__XMemberFeatureCall__Alternatives_1_1_0_0_112686 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__ExplicitStaticAssignment_1_1_0_0_1_2_in_rule__XMemberFeatureCall__Alternatives_1_1_0_0_112704 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_0_in_rule__XMemberFeatureCall__Alternatives_1_1_3_112737 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets006 {
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1__0_in_rule__XMemberFeatureCall__Alternatives_1_1_3_112755 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXConstructorCall_in_rule__XPrimaryExpression__Alternatives12788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXBlockExpression_in_rule__XPrimaryExpression__Alternatives12805 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXSwitchExpression_in_rule__XPrimaryExpression__Alternatives12822 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXSynchronizedExpression_in_rule__XPrimaryExpression__Alternatives12840 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXFeatureCall_in_rule__XPrimaryExpression__Alternatives12858 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXLiteral_in_rule__XPrimaryExpression__Alternatives12875 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXIfExpression_in_rule__XPrimaryExpression__Alternatives12892 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXForLoopExpression_in_rule__XPrimaryExpression__Alternatives12910 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXBasicForLoopExpression_in_rule__XPrimaryExpression__Alternatives12928 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXWhileExpression_in_rule__XPrimaryExpression__Alternatives12945 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXDoWhileExpression_in_rule__XPrimaryExpression__Alternatives12962 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXThrowExpression_in_rule__XPrimaryExpression__Alternatives12979 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXReturnExpression_in_rule__XPrimaryExpression__Alternatives12996 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXTryCatchFinallyExpression_in_rule__XPrimaryExpression__Alternatives13013 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXParenthesizedExpression_in_rule__XPrimaryExpression__Alternatives13030 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXCollectionLiteral_in_rule__XLiteral__Alternatives13062 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXClosure_in_rule__XLiteral__Alternatives13080 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXBooleanLiteral_in_rule__XLiteral__Alternatives13098 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXNumberLiteral_in_rule__XLiteral__Alternatives13115 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXNullLiteral_in_rule__XLiteral__Alternatives13132 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXStringLiteral_in_rule__XLiteral__Alternatives13149 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXTypeLiteral_in_rule__XLiteral__Alternatives13166 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXSetLiteral_in_rule__XCollectionLiteral__Alternatives13198 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXListLiteral_in_rule__XCollectionLiteral__Alternatives13215 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0__0_in_rule__XSwitchExpression__Alternatives_213247 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1__0_in_rule__XSwitchExpression__Alternatives_213265 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_3_0__0_in_rule__XCasePart__Alternatives_313298 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__FallThroughAssignment_3_1_in_rule__XCasePart__Alternatives_313316 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXVariableDeclaration_in_rule__XExpressionOrVarDeclaration__Alternatives13349 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXExpression_in_rule__XExpressionOrVarDeclaration__Alternatives13366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__WriteableAssignment_1_0_in_rule__XVariableDeclaration__Alternatives_113398 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_44_in_rule__XVariableDeclaration__Alternatives_113417 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_2_0__0_in_rule__XVariableDeclaration__Alternatives_213451 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__NameAssignment_2_1_in_rule__XVariableDeclaration__Alternatives_213469 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_0_in_rule__XFeatureCall__Alternatives_3_113502 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1__0_in_rule__XFeatureCall__Alternatives_3_113520 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValidID_in_rule__FeatureCallID__Alternatives13553 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_45_in_rule__FeatureCallID__Alternatives13571 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_46_in_rule__FeatureCallID__Alternatives13591 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_rule__FeatureCallID__Alternatives13611 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_48_in_rule__FeatureCallID__Alternatives13631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleFeatureCallID_in_rule__IdOrSuper__Alternatives13665 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_49_in_rule__IdOrSuper__Alternatives13683 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__ArgumentsAssignment_4_1_0_in_rule__XConstructorCall__Alternatives_4_113717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1__0_in_rule__XConstructorCall__Alternatives_4_113735 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_50_in_rule__XBooleanLiteral__Alternatives_113769 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBooleanLiteral__IsTrueAssignment_1_1_in_rule__XBooleanLiteral__Alternatives_113788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0__0_in_rule__XTryCatchFinallyExpression__Alternatives_313821 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_1__0_in_rule__XTryCatchFinallyExpression__Alternatives_313839 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_HEX_in_rule__Number__Alternatives13872 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Group_1__0_in_rule__Number__Alternatives13889 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__Number__Alternatives_1_013922 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_DECIMAL_in_rule__Number__Alternatives_1_013939 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__Number__Alternatives_1_1_113971 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_DECIMAL_in_rule__Number__Alternatives_1_1_113988 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0__0_in_rule__JvmTypeReference__Alternatives14020 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXFunctionTypeRef_in_rule__JvmTypeReference__Alternatives14038 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmTypeReference_in_rule__JvmArgumentTypeReference__Alternatives14070 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmWildcardTypeReference_in_rule__JvmArgumentTypeReference__Alternatives14087 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_0__0_in_rule__JvmWildcardTypeReference__Alternatives_214119 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_1__0_in_rule__JvmWildcardTypeReference__Alternatives_214137 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__0_in_rule__XImportDeclaration__Alternatives_114170 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__ImportedTypeAssignment_1_1_in_rule__XImportDeclaration__Alternatives_114188 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__ImportedNamespaceAssignment_1_2_in_rule__XImportDeclaration__Alternatives_114206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__WildcardAssignment_1_0_3_0_in_rule__XImportDeclaration__Alternatives_1_0_314239 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__MemberNameAssignment_1_0_3_1_in_rule__XImportDeclaration__Alternatives_1_0_314257 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_51_in_rule__AxisEnum__Alternatives14291 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_52_in_rule__AxisEnum__Alternatives14312 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_53_in_rule__AxisEnum__Alternatives14333 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_54_in_rule__AxisEnum__Alternatives14354 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_55_in_rule__AxisEnum__Alternatives14375 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_56_in_rule__AxisEnum__Alternatives14396 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_57_in_rule__FunctionEnum__Alternatives14432 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_58_in_rule__FunctionEnum__Alternatives14453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_59_in_rule__FunctionEnum__Alternatives14474 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_60_in_rule__FunctionEnum__Alternatives14495 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_61_in_rule__ParameterFunctionEnum__Alternatives14531 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_62_in_rule__ParameterFunctionEnum__Alternatives14552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_63_in_rule__SetFunctionEnum__Alternatives14588 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_64_in_rule__SetFunctionEnum__Alternatives14609 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_65_in_rule__SetParameterFunctionEnum__Alternatives14645 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_66_in_rule__SetParameterFunctionEnum__Alternatives14666 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_67_in_rule__SetAggregationEnum__Alternatives14702 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_68_in_rule__SetAggregationEnum__Alternatives14723 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_69_in_rule__SetAggregationEnum__Alternatives14744 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_70_in_rule__SetAggregationEnum__Alternatives14765 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_71_in_rule__SetAggregationEnum__Alternatives14786 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_72_in_rule__SetAggregationEnum__Alternatives14807 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_73_in_rule__AggregationEnum__Alternatives14843 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_74_in_rule__AggregationEnum__Alternatives14864 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_75_in_rule__AggregationEnum__Alternatives14885 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_76_in_rule__AggregationEnum__Alternatives14906 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_13_in_rule__OperatorEnum__Alternatives14942 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OperatorEnum__Alternatives14963 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OperatorEnum__Alternatives14984 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_77_in_rule__OperatorEnum__Alternatives15005 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_25_in_rule__OperatorEnum__Alternatives15026 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_78_in_rule__OperatorEnum__Alternatives15047 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_73_in_rule__SqlAggregationEnum__Alternatives15083 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets007 {
-        public static final BitSet FOLLOW_74_in_rule__SqlAggregationEnum__Alternatives15104 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_79_in_rule__SqlAggregationEnum__Alternatives15125 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_80_in_rule__ValueScaleEnum__Alternatives15161 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_81_in_rule__ValueScaleEnum__Alternatives15182 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_82_in_rule__ValueScaleEnum__Alternatives15203 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_83_in_rule__ValueScaleEnum__Alternatives15224 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_84_in_rule__ValueScaleEnum__Alternatives15245 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_85_in_rule__ValueScaleEnum__Alternatives15266 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_86_in_rule__ValueScaleEnum__Alternatives15287 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_87_in_rule__ValueScaleEnum__Alternatives15308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_88_in_rule__ValueScaleEnum__Alternatives15329 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_89_in_rule__TaskQueryTopicEnum__Alternatives15365 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_90_in_rule__TaskQueryTopicEnum__Alternatives15386 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_91_in_rule__TaskQueryTopicEnum__Alternatives15407 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_92_in_rule__TaskQueryTopicEnum__Alternatives15428 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_93_in_rule__TaskQueryTopicEnum__Alternatives15449 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_94_in_rule__TaskQueryTopicEnum__Alternatives15470 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_95_in_rule__TaskQueryColumnEnum__Alternatives15506 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_96_in_rule__TaskQueryColumnEnum__Alternatives15527 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_97_in_rule__TaskQueryColumnEnum__Alternatives15548 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_98_in_rule__TaskQueryColumnEnum__Alternatives15569 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_99_in_rule__TaskQueryColumnEnum__Alternatives15590 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_100_in_rule__TaskQueryColumnEnum__Alternatives15611 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_101_in_rule__TaskQueryColumnEnum__Alternatives15632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_102_in_rule__TaskQueryColumnEnum__Alternatives15653 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_103_in_rule__TaskQueryColumnEnum__Alternatives15674 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_104_in_rule__TaskQueryColumnEnum__Alternatives15695 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_105_in_rule__TaskQueryColumnEnum__Alternatives15716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_106_in_rule__TaskQueryColumnEnum__Alternatives15737 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_107_in_rule__TaskQueryColumnEnum__Alternatives15758 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_108_in_rule__TaskQueryColumnEnum__Alternatives15779 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_109_in_rule__TaskFilterEnum__Alternatives15815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_110_in_rule__TaskFilterEnum__Alternatives15836 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_111_in_rule__OrderEnum__Alternatives15872 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_112_in_rule__OrderEnum__Alternatives15893 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__0__Impl_in_rule__DatamartPackage__Group__015926 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__1_in_rule__DatamartPackage__Group__015929 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__1__Impl_in_rule__DatamartPackage__Group__115987 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__2_in_rule__DatamartPackage__Group__115990 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_113_in_rule__DatamartPackage__Group__1__Impl16018 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__2__Impl_in_rule__DatamartPackage__Group__216049 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__3_in_rule__DatamartPackage__Group__216052 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__NameAssignment_2_in_rule__DatamartPackage__Group__2__Impl16079 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group__3__Impl_in_rule__DatamartPackage__Group__316109 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__0_in_rule__DatamartPackage__Group__3__Impl16136 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__0__Impl_in_rule__DatamartPackage__Group_3__016175 = new BitSet(new long[]{0x0000800000000000L,0x0018000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__1_in_rule__DatamartPackage__Group_3__016178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartPackage__Group_3__0__Impl16206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__1__Impl_in_rule__DatamartPackage__Group_3__116237 = new BitSet(new long[]{0x0000800000000000L,0x0018000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__2_in_rule__DatamartPackage__Group_3__116240 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__ImportsAssignment_3_1_in_rule__DatamartPackage__Group_3__1__Impl16267 = new BitSet(new long[]{0x0000800000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__2__Impl_in_rule__DatamartPackage__Group_3__216298 = new BitSet(new long[]{0x0000800000000000L,0x0018000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__3_in_rule__DatamartPackage__Group_3__216301 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__DefinitionsAssignment_3_2_in_rule__DatamartPackage__Group_3__2__Impl16328 = new BitSet(new long[]{0x0000000000000002L,0x0010000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartPackage__Group_3__3__Impl_in_rule__DatamartPackage__Group_3__316359 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartPackage__Group_3__3__Impl16387 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__0__Impl_in_rule__DatamartDefinition__Group__016426 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__1_in_rule__DatamartDefinition__Group__016429 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_116_in_rule__DatamartDefinition__Group__0__Impl16457 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__1__Impl_in_rule__DatamartDefinition__Group__116488 = new BitSet(new long[]{0x0000000000000000L,0x0060000000000000L,0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__2_in_rule__DatamartDefinition__Group__116491 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__NameAssignment_1_in_rule__DatamartDefinition__Group__1__Impl16518 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__2__Impl_in_rule__DatamartDefinition__Group__216548 = new BitSet(new long[]{0x0000000000000000L,0x0060000000000000L,0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__3_in_rule__DatamartDefinition__Group__216551 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_2__0_in_rule__DatamartDefinition__Group__2__Impl16578 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__3__Impl_in_rule__DatamartDefinition__Group__316609 = new BitSet(new long[]{0x0000000000000000L,0x0060000000000000L,0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__4_in_rule__DatamartDefinition__Group__316612 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__0_in_rule__DatamartDefinition__Group__3__Impl16639 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__4__Impl_in_rule__DatamartDefinition__Group__416670 = new BitSet(new long[]{0x0000000000000000L,0x5100000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__5_in_rule__DatamartDefinition__Group__416673 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_117_in_rule__DatamartDefinition__Group__4__Impl16701 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group__5__Impl_in_rule__DatamartDefinition__Group__516732 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__SourceAssignment_5_in_rule__DatamartDefinition__Group__5__Impl16759 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_2__0__Impl_in_rule__DatamartDefinition__Group_2__016801 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_2__1_in_rule__DatamartDefinition__Group_2__016804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__DescriptionAssignment_2_0_in_rule__DatamartDefinition__Group_2__0__Impl16831 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_2__1__Impl_in_rule__DatamartDefinition__Group_2__116861 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__DescriptionValueAssignment_2_1_in_rule__DatamartDefinition__Group_2__1__Impl16888 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__0__Impl_in_rule__DatamartDefinition__Group_3__016922 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__1_in_rule__DatamartDefinition__Group_3__016925 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_118_in_rule__DatamartDefinition__Group_3__0__Impl16953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__1__Impl_in_rule__DatamartDefinition__Group_3__116984 = new BitSet(new long[]{0x0000000000000000L,0x0088000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__2_in_rule__DatamartDefinition__Group_3__116987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartDefinition__Group_3__1__Impl17015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__2__Impl_in_rule__DatamartDefinition__Group_3__217046 = new BitSet(new long[]{0x0000000000000000L,0x0088000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__3_in_rule__DatamartDefinition__Group_3__217049 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__RolesAssignment_3_2_in_rule__DatamartDefinition__Group_3__2__Impl17076 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartDefinition__Group_3__3__Impl_in_rule__DatamartDefinition__Group_3__317107 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartDefinition__Group_3__3__Impl17135 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartRole__Group__0__Impl_in_rule__DatamartRole__Group__017174 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartRole__Group__1_in_rule__DatamartRole__Group__017177 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_119_in_rule__DatamartRole__Group__0__Impl17205 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartRole__Group__1__Impl_in_rule__DatamartRole__Group__117236 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartRole__AssignedRoleAssignment_1_in_rule__DatamartRole__Group__1__Impl17263 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__0__Impl_in_rule__DatamartTask__Group__017297 = new BitSet(new long[]{0x0000000000000000L,0x000000007E000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__1_in_rule__DatamartTask__Group__017300 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_120_in_rule__DatamartTask__Group__0__Impl17328 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__1__Impl_in_rule__DatamartTask__Group__117359 = new BitSet(new long[]{0x0010000000000000L,0x0200000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__2_in_rule__DatamartTask__Group__117362 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__TaskQueryAssignment_1_in_rule__DatamartTask__Group__1__Impl17389 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets008 {
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__2__Impl_in_rule__DatamartTask__Group__217419 = new BitSet(new long[]{0x0010000000000000L,0x0200000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__3_in_rule__DatamartTask__Group__217422 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__0_in_rule__DatamartTask__Group__2__Impl17449 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group__3__Impl_in_rule__DatamartTask__Group__317480 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__0_in_rule__DatamartTask__Group__3__Impl17507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__0__Impl_in_rule__DatamartTask__Group_2__017546 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__1_in_rule__DatamartTask__Group_2__017549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_52_in_rule__DatamartTask__Group_2__0__Impl17577 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__1__Impl_in_rule__DatamartTask__Group_2__117608 = new BitSet(new long[]{0x0000000000000000L,0x0408000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__2_in_rule__DatamartTask__Group_2__117611 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartTask__Group_2__1__Impl17639 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__2__Impl_in_rule__DatamartTask__Group_2__217670 = new BitSet(new long[]{0x0000000000000000L,0x0408000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__3_in_rule__DatamartTask__Group_2__217673 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__ColumnsAssignment_2_2_in_rule__DatamartTask__Group_2__2__Impl17700 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_2__3__Impl_in_rule__DatamartTask__Group_2__317731 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartTask__Group_2__3__Impl17759 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__0__Impl_in_rule__DatamartTask__Group_3__017798 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__1_in_rule__DatamartTask__Group_3__017801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_121_in_rule__DatamartTask__Group_3__0__Impl17829 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__1__Impl_in_rule__DatamartTask__Group_3__117860 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__2_in_rule__DatamartTask__Group_3__117863 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartTask__Group_3__1__Impl17891 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__2__Impl_in_rule__DatamartTask__Group_3__217922 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__3_in_rule__DatamartTask__Group_3__217925 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTask__ConditionsAssignment_3_2_in_rule__DatamartTask__Group_3__2__Impl17952 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartTask__Group_3__3__Impl_in_rule__DatamartTask__Group_3__317983 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartTask__Group_3__3__Impl18011 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartColumn__Group__0__Impl_in_rule__DatamartColumn__Group__018050 = new BitSet(new long[]{0x0000000000000000L,0x00001FFF80000000L});
-        public static final BitSet FOLLOW_rule__DatamartColumn__Group__1_in_rule__DatamartColumn__Group__018053 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_122_in_rule__DatamartColumn__Group__0__Impl18081 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartColumn__Group__1__Impl_in_rule__DatamartColumn__Group__118112 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartColumn__ColumnRefAssignment_1_in_rule__DatamartColumn__Group__1__Impl18139 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTaskFilter__Group__0__Impl_in_rule__DatamartTaskFilter__Group__018173 = new BitSet(new long[]{0x0000000000000000L,0x0000600000000000L});
-        public static final BitSet FOLLOW_rule__DatamartTaskFilter__Group__1_in_rule__DatamartTaskFilter__Group__018176 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_123_in_rule__DatamartTaskFilter__Group__0__Impl18204 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTaskFilter__Group__1__Impl_in_rule__DatamartTaskFilter__Group__118235 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartTaskFilter__FilterRefAssignment_1_in_rule__DatamartTaskFilter__Group__1__Impl18262 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__0__Impl_in_rule__DatamartCube__Group__018296 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__1_in_rule__DatamartCube__Group__018299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_124_in_rule__DatamartCube__Group__0__Impl18327 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__1__Impl_in_rule__DatamartCube__Group__118358 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L,0x0000000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__2_in_rule__DatamartCube__Group__118361 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__CubeRefAssignment_1_in_rule__DatamartCube__Group__1__Impl18388 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__2__Impl_in_rule__DatamartCube__Group__218418 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L,0x0000000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__3_in_rule__DatamartCube__Group__218421 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__NonEmptyAssignment_2_in_rule__DatamartCube__Group__2__Impl18448 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__3__Impl_in_rule__DatamartCube__Group__318479 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000062000L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__4_in_rule__DatamartCube__Group__318482 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartCube__Group__3__Impl18510 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__4__Impl_in_rule__DatamartCube__Group__418541 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000062000L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__5_in_rule__DatamartCube__Group__418544 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCube__AxisslicerAssignment_4_in_rule__DatamartCube__Group__4__Impl18571 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000062000L});
-        public static final BitSet FOLLOW_rule__DatamartCube__Group__5__Impl_in_rule__DatamartCube__Group__518602 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartCube__Group__5__Impl18630 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartReference__Group__0__Impl_in_rule__DatamartReference__Group__018673 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartReference__Group__1_in_rule__DatamartReference__Group__018676 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_125_in_rule__DatamartReference__Group__0__Impl18704 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartReference__Group__1__Impl_in_rule__DatamartReference__Group__118735 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartReference__RefAssignment_1_in_rule__DatamartReference__Group__1__Impl18762 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__0__Impl_in_rule__DatamartEntity__Group__018796 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__1_in_rule__DatamartEntity__Group__018799 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_126_in_rule__DatamartEntity__Group__0__Impl18827 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__1__Impl_in_rule__DatamartEntity__Group__118858 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L,0x0000000000000000L,0x0000000000000100L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__2_in_rule__DatamartEntity__Group__118861 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__EntityRefAssignment_1_in_rule__DatamartEntity__Group__1__Impl18888 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__2__Impl_in_rule__DatamartEntity__Group__218918 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L,0x0000000000000000L,0x0000000000000100L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__3_in_rule__DatamartEntity__Group__218921 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__TrackingAssignment_2_in_rule__DatamartEntity__Group__2__Impl18948 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__3__Impl_in_rule__DatamartEntity__Group__318979 = new BitSet(new long[]{0x0000000000000000L,0x8208000000000000L,0x0000000000000007L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__4_in_rule__DatamartEntity__Group__318982 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartEntity__Group__3__Impl19010 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__4__Impl_in_rule__DatamartEntity__Group__419041 = new BitSet(new long[]{0x0000000000000000L,0x8208000000000000L,0x0000000000000007L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__5_in_rule__DatamartEntity__Group__419044 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__0_in_rule__DatamartEntity__Group__4__Impl19071 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__5__Impl_in_rule__DatamartEntity__Group__519102 = new BitSet(new long[]{0x0000000000000000L,0x8208000000000000L,0x0000000000000007L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__6_in_rule__DatamartEntity__Group__519105 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__0_in_rule__DatamartEntity__Group__5__Impl19132 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__6__Impl_in_rule__DatamartEntity__Group__619163 = new BitSet(new long[]{0x0000000000000000L,0x8208000000000000L,0x0000000000000007L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__7_in_rule__DatamartEntity__Group__619166 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__0_in_rule__DatamartEntity__Group__6__Impl19193 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__7__Impl_in_rule__DatamartEntity__Group__719224 = new BitSet(new long[]{0x0000000000000000L,0x8208000000000000L,0x0000000000000007L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__8_in_rule__DatamartEntity__Group__719227 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__0_in_rule__DatamartEntity__Group__7__Impl19254 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__8__Impl_in_rule__DatamartEntity__Group__819285 = new BitSet(new long[]{0x0000000000000000L,0x8208000000000000L,0x0000000000000007L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__9_in_rule__DatamartEntity__Group__819288 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__0_in_rule__DatamartEntity__Group__8__Impl19315 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group__9__Impl_in_rule__DatamartEntity__Group__919346 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartEntity__Group__9__Impl19374 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__0__Impl_in_rule__DatamartEntity__Group_4__019425 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__1_in_rule__DatamartEntity__Group_4__019428 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_127_in_rule__DatamartEntity__Group_4__0__Impl19456 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__1__Impl_in_rule__DatamartEntity__Group_4__119487 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000030L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__2_in_rule__DatamartEntity__Group_4__119490 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartEntity__Group_4__1__Impl19518 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__2__Impl_in_rule__DatamartEntity__Group_4__219549 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000030L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__3_in_rule__DatamartEntity__Group_4__219552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__NavigationsAssignment_4_2_in_rule__DatamartEntity__Group_4__2__Impl19579 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000030L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_4__3__Impl_in_rule__DatamartEntity__Group_4__319610 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartEntity__Group_4__3__Impl19638 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__0__Impl_in_rule__DatamartEntity__Group_5__019677 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    }
-
-    protected static class FollowSets009 {
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__1_in_rule__DatamartEntity__Group_5__019680 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_128_in_rule__DatamartEntity__Group_5__0__Impl19708 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__1__Impl_in_rule__DatamartEntity__Group_5__119739 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__2_in_rule__DatamartEntity__Group_5__119742 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartEntity__Group_5__1__Impl19770 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__2__Impl_in_rule__DatamartEntity__Group_5__219801 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__3_in_rule__DatamartEntity__Group_5__219804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__PropertiesAssignment_5_2_in_rule__DatamartEntity__Group_5__2__Impl19831 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000040L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_5__3__Impl_in_rule__DatamartEntity__Group_5__319862 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartEntity__Group_5__3__Impl19890 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__0__Impl_in_rule__DatamartEntity__Group_6__019929 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__1_in_rule__DatamartEntity__Group_6__019932 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_121_in_rule__DatamartEntity__Group_6__0__Impl19960 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__1__Impl_in_rule__DatamartEntity__Group_6__119991 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__2_in_rule__DatamartEntity__Group_6__119994 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartEntity__Group_6__1__Impl20022 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__2__Impl_in_rule__DatamartEntity__Group_6__220053 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__3_in_rule__DatamartEntity__Group_6__220056 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__ConditionsAssignment_6_2_in_rule__DatamartEntity__Group_6__2__Impl20083 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_6__3__Impl_in_rule__DatamartEntity__Group_6__320114 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartEntity__Group_6__3__Impl20142 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__0__Impl_in_rule__DatamartEntity__Group_7__020181 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__1_in_rule__DatamartEntity__Group_7__020184 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_129_in_rule__DatamartEntity__Group_7__0__Impl20212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__1__Impl_in_rule__DatamartEntity__Group_7__120243 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000100L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__2_in_rule__DatamartEntity__Group_7__120246 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartEntity__Group_7__1__Impl20274 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__2__Impl_in_rule__DatamartEntity__Group_7__220305 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000000100L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__3_in_rule__DatamartEntity__Group_7__220308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__OrderingAssignment_7_2_in_rule__DatamartEntity__Group_7__2__Impl20335 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000100L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_7__3__Impl_in_rule__DatamartEntity__Group_7__320366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartEntity__Group_7__3__Impl20394 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__0__Impl_in_rule__DatamartEntity__Group_8__020433 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__1_in_rule__DatamartEntity__Group_8__020436 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_130_in_rule__DatamartEntity__Group_8__0__Impl20464 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__1__Impl_in_rule__DatamartEntity__Group_8__120495 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__2_in_rule__DatamartEntity__Group_8__120498 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__FillerMinCountRowsAssignment_8_1_in_rule__DatamartEntity__Group_8__1__Impl20525 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__2__Impl_in_rule__DatamartEntity__Group_8__220555 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__3_in_rule__DatamartEntity__Group_8__220558 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_131_in_rule__DatamartEntity__Group_8__2__Impl20586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__3__Impl_in_rule__DatamartEntity__Group_8__320617 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__4_in_rule__DatamartEntity__Group_8__320620 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__FillerMaxCountRowsAssignment_8_3_in_rule__DatamartEntity__Group_8__3__Impl20647 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__4__Impl_in_rule__DatamartEntity__Group_8__420677 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000800000L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__5_in_rule__DatamartEntity__Group_8__420680 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartEntity__Group_8__4__Impl20708 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__5__Impl_in_rule__DatamartEntity__Group_8__520739 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L,0x0000000000800000L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__6_in_rule__DatamartEntity__Group_8__520742 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__FillerDatasAssignment_8_5_in_rule__DatamartEntity__Group_8__5__Impl20769 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000800000L});
-        public static final BitSet FOLLOW_rule__DatamartEntity__Group_8__6__Impl_in_rule__DatamartEntity__Group_8__620800 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartEntity__Group_8__6__Impl20828 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__0__Impl_in_rule__DatamartOwner__Group__020873 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__1_in_rule__DatamartOwner__Group__020876 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_132_in_rule__DatamartOwner__Group__0__Impl20904 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__1__Impl_in_rule__DatamartOwner__Group__120935 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__2_in_rule__DatamartOwner__Group__120938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__JoinRefAssignment_1_in_rule__DatamartOwner__Group__1__Impl20965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__2__Impl_in_rule__DatamartOwner__Group__220995 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__3_in_rule__DatamartOwner__Group__220998 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_131_in_rule__DatamartOwner__Group__2__Impl21026 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__Group__3__Impl_in_rule__DatamartOwner__Group__321057 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOwner__DatamartEntityAssignment_3_in_rule__DatamartOwner__Group__3__Impl21084 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__0__Impl_in_rule__DatamartMember__Group__021122 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__1_in_rule__DatamartMember__Group__021125 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_133_in_rule__DatamartMember__Group__0__Impl21153 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__1__Impl_in_rule__DatamartMember__Group__121184 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__2_in_rule__DatamartMember__Group__121187 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMember__JoinRefAssignment_1_in_rule__DatamartMember__Group__1__Impl21214 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__2__Impl_in_rule__DatamartMember__Group__221244 = new BitSet(new long[]{0x0000000000000000L,0x4000000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__3_in_rule__DatamartMember__Group__221247 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_131_in_rule__DatamartMember__Group__2__Impl21275 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMember__Group__3__Impl_in_rule__DatamartMember__Group__321306 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMember__DatamartEntityAssignment_3_in_rule__DatamartMember__Group__3__Impl21333 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group__0__Impl_in_rule__DatamartProperty__Group__021371 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group__1_in_rule__DatamartProperty__Group__021374 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_134_in_rule__DatamartProperty__Group__0__Impl21402 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group__1__Impl_in_rule__DatamartProperty__Group__121433 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L,0x0000000000000000L,0x0000000000000600L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group__2_in_rule__DatamartProperty__Group__121436 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__PropertyRefAssignment_1_in_rule__DatamartProperty__Group__1__Impl21463 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group__2__Impl_in_rule__DatamartProperty__Group__221493 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__UnorderedGroup_2_in_rule__DatamartProperty__Group__2__Impl21520 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_0__0__Impl_in_rule__DatamartProperty__Group_2_0__021556 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008600L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_0__1_in_rule__DatamartProperty__Group_2_0__021559 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__AggregatedAssignment_2_0_0_in_rule__DatamartProperty__Group_2_0__0__Impl21586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_0__1__Impl_in_rule__DatamartProperty__Group_2_0__121616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__AggregateAssignment_2_0_1_in_rule__DatamartProperty__Group_2_0__1__Impl21643 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_1__0__Impl_in_rule__DatamartProperty__Group_2_1__021677 = new BitSet(new long[]{0x01F8000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_1__1_in_rule__DatamartProperty__Group_2_1__021680 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__PlacedAssignment_2_1_0_in_rule__DatamartProperty__Group_2_1__0__Impl21707 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_1__1__Impl_in_rule__DatamartProperty__Group_2_1__121737 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__AxisAssignment_2_1_1_in_rule__DatamartProperty__Group_2_1__1__Impl21764 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_2__0__Impl_in_rule__DatamartProperty__Group_2_2__021798 = new BitSet(new long[]{0x0000000000000000L,0x0000000001FF0000L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_2__1_in_rule__DatamartProperty__Group_2_2__021801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__ScaledAssignment_2_2_0_in_rule__DatamartProperty__Group_2_2__0__Impl21828 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_2__1__Impl_in_rule__DatamartProperty__Group_2_2__121858 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__ScaleAssignment_2_2_1_in_rule__DatamartProperty__Group_2_2__1__Impl21885 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCondition__Group__0__Impl_in_rule__DatamartCondition__Group__021919 = new BitSet(new long[]{0x00000000000001E0L,0x0C00000000000000L,0x0000000000000840L,0x0000000000002800L});
-        public static final BitSet FOLLOW_rule__DatamartCondition__Group__1_in_rule__DatamartCondition__Group__021922 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_135_in_rule__DatamartCondition__Group__0__Impl21950 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets010 {
-        public static final BitSet FOLLOW_rule__DatamartCondition__Group__1__Impl_in_rule__DatamartCondition__Group__121981 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartCondition__ConditionAssignment_1_in_rule__DatamartCondition__Group__1__Impl22008 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__Group__0__Impl_in_rule__DatamartOrder__Group__022042 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__Group__1_in_rule__DatamartOrder__Group__022045 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_136_in_rule__DatamartOrder__Group__0__Impl22073 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__Group__1__Impl_in_rule__DatamartOrder__Group__122104 = new BitSet(new long[]{0x0000000000000000L,0x0001800000000000L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__Group__2_in_rule__DatamartOrder__Group__122107 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__OrderByAssignment_1_in_rule__DatamartOrder__Group__1__Impl22134 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__Group__2__Impl_in_rule__DatamartOrder__Group__222164 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOrder__OrderHowAssignment_2_in_rule__DatamartOrder__Group__2__Impl22191 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group__0__Impl_in_rule__DatamartDisjunction__Group__022227 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group__1_in_rule__DatamartDisjunction__Group__022230 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartConjunction_in_rule__DatamartDisjunction__Group__0__Impl22257 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group__1__Impl_in_rule__DatamartDisjunction__Group__122286 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1__0_in_rule__DatamartDisjunction__Group__1__Impl22313 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000200L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1__0__Impl_in_rule__DatamartDisjunction__Group_1__022348 = new BitSet(new long[]{0x00000000000001E0L,0x0C00000000000000L,0x0000000000000840L,0x0000000000002800L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1__1_in_rule__DatamartDisjunction__Group_1__022351 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1_0__0_in_rule__DatamartDisjunction__Group_1__0__Impl22378 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1__1__Impl_in_rule__DatamartDisjunction__Group_1__122408 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__RightAssignment_1_1_in_rule__DatamartDisjunction__Group_1__1__Impl22435 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1_0__0__Impl_in_rule__DatamartDisjunction__Group_1_0__022469 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1_0__1_in_rule__DatamartDisjunction__Group_1_0__022472 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDisjunction__Group_1_0__1__Impl_in_rule__DatamartDisjunction__Group_1_0__122530 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_137_in_rule__DatamartDisjunction__Group_1_0__1__Impl22558 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group__0__Impl_in_rule__DatamartConjunction__Group__022593 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group__1_in_rule__DatamartConjunction__Group__022596 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartConditionalExpression_in_rule__DatamartConjunction__Group__0__Impl22623 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group__1__Impl_in_rule__DatamartConjunction__Group__122652 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1__0_in_rule__DatamartConjunction__Group__1__Impl22679 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000400L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1__0__Impl_in_rule__DatamartConjunction__Group_1__022714 = new BitSet(new long[]{0x00000000000001E0L,0x0C00000000000000L,0x0000000000000840L,0x0000000000002800L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1__1_in_rule__DatamartConjunction__Group_1__022717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1_0__0_in_rule__DatamartConjunction__Group_1__0__Impl22744 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1__1__Impl_in_rule__DatamartConjunction__Group_1__122774 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__RightAssignment_1_1_in_rule__DatamartConjunction__Group_1__1__Impl22801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1_0__0__Impl_in_rule__DatamartConjunction__Group_1_0__022835 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1_0__1_in_rule__DatamartConjunction__Group_1_0__022838 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConjunction__Group_1_0__1__Impl_in_rule__DatamartConjunction__Group_1_0__122896 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_138_in_rule__DatamartConjunction__Group_1_0__1__Impl22924 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group__0__Impl_in_rule__DatamartConditionalExpression__Group__022959 = new BitSet(new long[]{0x000000000E002000L,0x0000000000006000L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group__1_in_rule__DatamartConditionalExpression__Group__022962 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartOperand_in_rule__DatamartConditionalExpression__Group__0__Impl22989 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group__1__Impl_in_rule__DatamartConditionalExpression__Group__123018 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1__0_in_rule__DatamartConditionalExpression__Group__1__Impl23045 = new BitSet(new long[]{0x000000000E002002L,0x0000000000006000L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1__0__Impl_in_rule__DatamartConditionalExpression__Group_1__023080 = new BitSet(new long[]{0x00000000000001E0L,0x0C00000000000000L,0x0000000000000840L,0x0000000000002800L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1__1_in_rule__DatamartConditionalExpression__Group_1__023083 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1_0__0_in_rule__DatamartConditionalExpression__Group_1__0__Impl23110 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1__1__Impl_in_rule__DatamartConditionalExpression__Group_1__123140 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__RightAssignment_1_1_in_rule__DatamartConditionalExpression__Group_1__1__Impl23167 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1_0__0__Impl_in_rule__DatamartConditionalExpression__Group_1_0__023201 = new BitSet(new long[]{0x000000000E002000L,0x0000000000006000L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1_0__1_in_rule__DatamartConditionalExpression__Group_1_0__023204 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__Group_1_0__1__Impl_in_rule__DatamartConditionalExpression__Group_1_0__123262 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartConditionalExpression__OperatorAssignment_1_0_1_in_rule__DatamartConditionalExpression__Group_1_0__1__Impl23289 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOperand__Group_1__0__Impl_in_rule__DatamartOperand__Group_1__023323 = new BitSet(new long[]{0x00000000000001E0L,0x0C00000000000000L,0x0000000000000840L,0x0000000000002800L});
-        public static final BitSet FOLLOW_rule__DatamartOperand__Group_1__1_in_rule__DatamartOperand__Group_1__023326 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__DatamartOperand__Group_1__0__Impl23354 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOperand__Group_1__1__Impl_in_rule__DatamartOperand__Group_1__123385 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__DatamartOperand__Group_1__2_in_rule__DatamartOperand__Group_1__123388 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDisjunction_in_rule__DatamartOperand__Group_1__1__Impl23415 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartOperand__Group_1__2__Impl_in_rule__DatamartOperand__Group_1__223444 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__DatamartOperand__Group_1__2__Impl23472 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__Group_2_0__0__Impl_in_rule__DatamartValue__Group_2_0__023509 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__DatamartValue__Group_2_0__1_in_rule__DatamartValue__Group_2_0__023512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__FilteredAssignment_2_0_0_in_rule__DatamartValue__Group_2_0__0__Impl23539 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__Group_2_0__1__Impl_in_rule__DatamartValue__Group_2_0__123569 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartValue__OptionalAssignment_2_0_1_in_rule__DatamartValue__Group_2_0__1__Impl23596 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__0__Impl_in_rule__DatamartDefineDerivedMeasure__Group__023631 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__1_in_rule__DatamartDefineDerivedMeasure__Group__023634 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_141_in_rule__DatamartDefineDerivedMeasure__Group__0__Impl23662 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__1__Impl_in_rule__DatamartDefineDerivedMeasure__Group__123693 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__2_in_rule__DatamartDefineDerivedMeasure__Group__123696 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__NameAssignment_1_in_rule__DatamartDefineDerivedMeasure__Group__1__Impl23723 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__2__Impl_in_rule__DatamartDefineDerivedMeasure__Group__223753 = new BitSet(new long[]{0x7E000000000001C0L,0x0000000000001E00L,0x0000000000380800L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__3_in_rule__DatamartDefineDerivedMeasure__Group__223756 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_142_in_rule__DatamartDefineDerivedMeasure__Group__2__Impl23784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__Group__3__Impl_in_rule__DatamartDefineDerivedMeasure__Group__323815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDefineDerivedMeasure__DerivedElementAssignment_3_in_rule__DatamartDefineDerivedMeasure__Group__3__Impl23842 = new BitSet(new long[]{0x7E000000000001C2L,0x0000000000001E00L,0x0000000000380800L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group__0__Impl_in_rule__DatamartAddition__Group__023881 = new BitSet(new long[]{0x0000000C00000000L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group__1_in_rule__DatamartAddition__Group__023884 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMultiplication_in_rule__DatamartAddition__Group__0__Impl23911 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group__1__Impl_in_rule__DatamartAddition__Group__123940 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1__0_in_rule__DatamartAddition__Group__1__Impl23967 = new BitSet(new long[]{0x0000000C00000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1__0__Impl_in_rule__DatamartAddition__Group_1__024002 = new BitSet(new long[]{0x7E000000000001C0L,0x0000000000001E00L,0x0000000000380800L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1__1_in_rule__DatamartAddition__Group_1__024005 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Alternatives_1_0_in_rule__DatamartAddition__Group_1__0__Impl24032 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1__1__Impl_in_rule__DatamartAddition__Group_1__124062 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__RightAssignment_1_1_in_rule__DatamartAddition__Group_1__1__Impl24089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_0__0__Impl_in_rule__DatamartAddition__Group_1_0_0__024123 = new BitSet(new long[]{0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_0__1_in_rule__DatamartAddition__Group_1_0_0__024126 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_0__1__Impl_in_rule__DatamartAddition__Group_1_0_0__124184 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_34_in_rule__DatamartAddition__Group_1_0_0__1__Impl24212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_1__0__Impl_in_rule__DatamartAddition__Group_1_0_1__024247 = new BitSet(new long[]{0x0000000C00000000L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_1__1_in_rule__DatamartAddition__Group_1_0_1__024250 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAddition__Group_1_0_1__1__Impl_in_rule__DatamartAddition__Group_1_0_1__124308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_35_in_rule__DatamartAddition__Group_1_0_1__1__Impl24336 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group__0__Impl_in_rule__DatamartMultiplication__Group__024371 = new BitSet(new long[]{0x0000005000000000L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group__1_in_rule__DatamartMultiplication__Group__024374 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartPrimary_in_rule__DatamartMultiplication__Group__0__Impl24401 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group__1__Impl_in_rule__DatamartMultiplication__Group__124430 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1__0_in_rule__DatamartMultiplication__Group__1__Impl24457 = new BitSet(new long[]{0x0000005000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1__0__Impl_in_rule__DatamartMultiplication__Group_1__024492 = new BitSet(new long[]{0x7E000000000001C0L,0x0000000000001E00L,0x0000000000380800L});
-    }
-
-    protected static class FollowSets011 {
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1__1_in_rule__DatamartMultiplication__Group_1__024495 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Alternatives_1_0_in_rule__DatamartMultiplication__Group_1__0__Impl24522 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1__1__Impl_in_rule__DatamartMultiplication__Group_1__124552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__RightAssignment_1_1_in_rule__DatamartMultiplication__Group_1__1__Impl24579 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_0__0__Impl_in_rule__DatamartMultiplication__Group_1_0_0__024613 = new BitSet(new long[]{0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_0__1_in_rule__DatamartMultiplication__Group_1_0_0__024616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_0__1__Impl_in_rule__DatamartMultiplication__Group_1_0_0__124674 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_36_in_rule__DatamartMultiplication__Group_1_0_0__1__Impl24702 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_1__0__Impl_in_rule__DatamartMultiplication__Group_1_0_1__024737 = new BitSet(new long[]{0x0000005000000000L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_1__1_in_rule__DatamartMultiplication__Group_1_0_1__024740 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMultiplication__Group_1_0_1__1__Impl_in_rule__DatamartMultiplication__Group_1_0_1__124798 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_38_in_rule__DatamartMultiplication__Group_1_0_1__1__Impl24826 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPrimary__Group_1__0__Impl_in_rule__DatamartPrimary__Group_1__024861 = new BitSet(new long[]{0x7E000000000001C0L,0x0000000000001E00L,0x0000000000380800L});
-        public static final BitSet FOLLOW_rule__DatamartPrimary__Group_1__1_in_rule__DatamartPrimary__Group_1__024864 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__DatamartPrimary__Group_1__0__Impl24892 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPrimary__Group_1__1__Impl_in_rule__DatamartPrimary__Group_1__124923 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__DatamartPrimary__Group_1__2_in_rule__DatamartPrimary__Group_1__124926 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAddition_in_rule__DatamartPrimary__Group_1__1__Impl24953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartPrimary__Group_1__2__Impl_in_rule__DatamartPrimary__Group_1__224982 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__DatamartPrimary__Group_1__2__Impl25010 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group__0__Impl_in_rule__DatamartMemberTuple__Group__025047 = new BitSet(new long[]{0x7E00000000000000L,0x0000000000000000L,0x0000000000200000L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group__1_in_rule__DatamartMemberTuple__Group__025050 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_0__0_in_rule__DatamartMemberTuple__Group__0__Impl25077 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group__1__Impl_in_rule__DatamartMemberTuple__Group__125108 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group__2_in_rule__DatamartMemberTuple__Group__125111 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__HierarchyAssignment_1_in_rule__DatamartMemberTuple__Group__1__Impl25138 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group__2__Impl_in_rule__DatamartMemberTuple__Group__225168 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_2__0_in_rule__DatamartMemberTuple__Group__2__Impl25195 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_0__0__Impl_in_rule__DatamartMemberTuple__Group_0__025231 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_0__1_in_rule__DatamartMemberTuple__Group_0__025234 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Alternatives_0_0_in_rule__DatamartMemberTuple__Group_0__0__Impl25261 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_0__1__Impl_in_rule__DatamartMemberTuple__Group_0__125291 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_143_in_rule__DatamartMemberTuple__Group_0__1__Impl25319 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_2__0__Impl_in_rule__DatamartMemberTuple__Group_2__025354 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_2__1_in_rule__DatamartMemberTuple__Group_2__025357 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_2__1__Impl_in_rule__DatamartMemberTuple__Group_2__125415 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000100000L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_2__2_in_rule__DatamartMemberTuple__Group_2__125418 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_144_in_rule__DatamartMemberTuple__Group_2__1__Impl25446 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__Group_2__2__Impl_in_rule__DatamartMemberTuple__Group_2__225477 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMemberTuple__RightAssignment_2_2_in_rule__DatamartMemberTuple__Group_2__2__Impl25504 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__0__Impl_in_rule__DatamartParameterFunction__Group__025540 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__1_in_rule__DatamartParameterFunction__Group__025543 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__FunctionAssignment_0_in_rule__DatamartParameterFunction__Group__0__Impl25570 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__1__Impl_in_rule__DatamartParameterFunction__Group__125600 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__2_in_rule__DatamartParameterFunction__Group__125603 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__DatamartParameterFunction__Group__1__Impl25631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__2__Impl_in_rule__DatamartParameterFunction__Group__225662 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__3_in_rule__DatamartParameterFunction__Group__225665 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__ParameterAssignment_2_in_rule__DatamartParameterFunction__Group__2__Impl25692 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartParameterFunction__Group__3__Impl_in_rule__DatamartParameterFunction__Group__325722 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__DatamartParameterFunction__Group__3__Impl25750 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__0__Impl_in_rule__DatamartSetParameterFunction__Group__025789 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__1_in_rule__DatamartSetParameterFunction__Group__025792 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__SetFunctionAssignment_0_in_rule__DatamartSetParameterFunction__Group__0__Impl25819 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__1__Impl_in_rule__DatamartSetParameterFunction__Group__125849 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__2_in_rule__DatamartSetParameterFunction__Group__125852 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__DatamartSetParameterFunction__Group__1__Impl25880 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__2__Impl_in_rule__DatamartSetParameterFunction__Group__225911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__3_in_rule__DatamartSetParameterFunction__Group__225914 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__ParameterAssignment_2_in_rule__DatamartSetParameterFunction__Group__2__Impl25941 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetParameterFunction__Group__3__Impl_in_rule__DatamartSetParameterFunction__Group__325971 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__DatamartSetParameterFunction__Group__3__Impl25999 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__0__Impl_in_rule__DatamartSetAggregationFunction__Group__026038 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__1_in_rule__DatamartSetAggregationFunction__Group__026041 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__AggregationAssignment_0_in_rule__DatamartSetAggregationFunction__Group__0__Impl26068 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__1__Impl_in_rule__DatamartSetAggregationFunction__Group__126098 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__2_in_rule__DatamartSetAggregationFunction__Group__126101 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__DatamartSetAggregationFunction__Group__1__Impl26129 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__2__Impl_in_rule__DatamartSetAggregationFunction__Group__226160 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__3_in_rule__DatamartSetAggregationFunction__Group__226163 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__ParameterAssignment_2_in_rule__DatamartSetAggregationFunction__Group__2__Impl26190 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregationFunction__Group__3__Impl_in_rule__DatamartSetAggregationFunction__Group__326220 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__DatamartSetAggregationFunction__Group__3__Impl26248 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group__0__Impl_in_rule__DatamartSetTuple__Group__026287 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group__1_in_rule__DatamartSetTuple__Group__026290 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Alternatives_0_in_rule__DatamartSetTuple__Group__0__Impl26317 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group__1__Impl_in_rule__DatamartSetTuple__Group__126347 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group_1__0_in_rule__DatamartSetTuple__Group__1__Impl26374 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group_1__0__Impl_in_rule__DatamartSetTuple__Group_1__026408 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group_1__1_in_rule__DatamartSetTuple__Group_1__026411 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group_1__1__Impl_in_rule__DatamartSetTuple__Group_1__126469 = new BitSet(new long[]{0x7E00000000000000L,0x0000000000000000L,0x0000000000200000L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group_1__2_in_rule__DatamartSetTuple__Group_1__126472 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_143_in_rule__DatamartSetTuple__Group_1__1__Impl26500 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__Group_1__2__Impl_in_rule__DatamartSetTuple__Group_1__226531 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetTuple__RightAssignment_1_2_in_rule__DatamartSetTuple__Group_1__2__Impl26558 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__0__Impl_in_rule__DatamartAggregation__Group__026594 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__1_in_rule__DatamartAggregation__Group__026597 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__AggregationAssignment_0_in_rule__DatamartAggregation__Group__0__Impl26624 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__1__Impl_in_rule__DatamartAggregation__Group__126654 = new BitSet(new long[]{0xFE00000000000000L,0x0000000000000007L,0x0000000000200000L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__2_in_rule__DatamartAggregation__Group__126657 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_143_in_rule__DatamartAggregation__Group__1__Impl26685 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__2__Impl_in_rule__DatamartAggregation__Group__226716 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__3_in_rule__DatamartAggregation__Group__226719 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Alternatives_2_in_rule__DatamartAggregation__Group__2__Impl26746 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group__3__Impl_in_rule__DatamartAggregation__Group__326776 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group_3__0_in_rule__DatamartAggregation__Group__3__Impl26803 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group_3__0__Impl_in_rule__DatamartAggregation__Group_3__026841 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group_3__1_in_rule__DatamartAggregation__Group_3__026844 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group_3__1__Impl_in_rule__DatamartAggregation__Group_3__126902 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000100000L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group_3__2_in_rule__DatamartAggregation__Group_3__126905 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets012 {
-        public static final BitSet FOLLOW_144_in_rule__DatamartAggregation__Group_3__1__Impl26933 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__Group_3__2__Impl_in_rule__DatamartAggregation__Group_3__226964 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAggregation__RightAssignment_3_2_in_rule__DatamartAggregation__Group_3__2__Impl26991 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__0__Impl_in_rule__DatamartSetAggregation__Group__027027 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__1_in_rule__DatamartSetAggregation__Group__027030 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__AggregationAssignment_0_in_rule__DatamartSetAggregation__Group__0__Impl27057 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__1__Impl_in_rule__DatamartSetAggregation__Group__127087 = new BitSet(new long[]{0xFE00000000000000L,0x0000000000000007L,0x0000000000200000L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__2_in_rule__DatamartSetAggregation__Group__127090 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_143_in_rule__DatamartSetAggregation__Group__1__Impl27118 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__2__Impl_in_rule__DatamartSetAggregation__Group__227149 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__3_in_rule__DatamartSetAggregation__Group__227152 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Alternatives_2_in_rule__DatamartSetAggregation__Group__2__Impl27179 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group__3__Impl_in_rule__DatamartSetAggregation__Group__327209 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group_3__0_in_rule__DatamartSetAggregation__Group__3__Impl27236 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group_3__0__Impl_in_rule__DatamartSetAggregation__Group_3__027274 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group_3__1_in_rule__DatamartSetAggregation__Group_3__027277 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group_3__1__Impl_in_rule__DatamartSetAggregation__Group_3__127335 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000100000L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group_3__2_in_rule__DatamartSetAggregation__Group_3__127338 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_144_in_rule__DatamartSetAggregation__Group_3__1__Impl27366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__Group_3__2__Impl_in_rule__DatamartSetAggregation__Group_3__227397 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSetAggregation__RightAssignment_3_2_in_rule__DatamartSetAggregation__Group_3__2__Impl27424 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSlicer__Group__0__Impl_in_rule__DatamartSlicer__Group__027460 = new BitSet(new long[]{0x7E00000000000000L,0x00000000000001F8L,0x0000000000380000L});
-        public static final BitSet FOLLOW_rule__DatamartSlicer__Group__1_in_rule__DatamartSlicer__Group__027463 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_145_in_rule__DatamartSlicer__Group__0__Impl27491 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSlicer__Group__1__Impl_in_rule__DatamartSlicer__Group__127522 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartSlicer__ElementAssignment_1_in_rule__DatamartSlicer__Group__1__Impl27549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__0__Impl_in_rule__DatamartAxis__Group__027583 = new BitSet(new long[]{0x01F8000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__1_in_rule__DatamartAxis__Group__027586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_146_in_rule__DatamartAxis__Group__0__Impl27614 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__1__Impl_in_rule__DatamartAxis__Group__127645 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__2_in_rule__DatamartAxis__Group__127648 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__NameAssignment_1_in_rule__DatamartAxis__Group__1__Impl27675 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__2__Impl_in_rule__DatamartAxis__Group__227705 = new BitSet(new long[]{0x7E00000000000000L,0x00080000000001F8L,0x0000000000380000L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__3_in_rule__DatamartAxis__Group__227708 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__DatamartAxis__Group__2__Impl27736 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__3__Impl_in_rule__DatamartAxis__Group__327767 = new BitSet(new long[]{0x7E00000000000000L,0x00080000000001F8L,0x0000000000380000L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__4_in_rule__DatamartAxis__Group__327770 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__ElementsAssignment_3_in_rule__DatamartAxis__Group__3__Impl27797 = new BitSet(new long[]{0x7E00000000000002L,0x00000000000001F8L,0x0000000000380000L});
-        public static final BitSet FOLLOW_rule__DatamartAxis__Group__4__Impl_in_rule__DatamartAxis__Group__427828 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__DatamartAxis__Group__4__Impl27856 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group__0__Impl_in_rule__DatamartDerivedMeasure__Group__027897 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group__1_in_rule__DatamartDerivedMeasure__Group__027900 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_147_in_rule__DatamartDerivedMeasure__Group__0__Impl27928 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group__1__Impl_in_rule__DatamartDerivedMeasure__Group__127959 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group__2_in_rule__DatamartDerivedMeasure__Group__127962 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__DerivedRefAssignment_1_in_rule__DatamartDerivedMeasure__Group__1__Impl27989 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group__2__Impl_in_rule__DatamartDerivedMeasure__Group__228019 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group_2__0_in_rule__DatamartDerivedMeasure__Group__2__Impl28046 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group_2__0__Impl_in_rule__DatamartDerivedMeasure__Group_2__028083 = new BitSet(new long[]{0x0000000000000000L,0x0000000001FF0000L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group_2__1_in_rule__DatamartDerivedMeasure__Group_2__028086 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__ScaledAssignment_2_0_in_rule__DatamartDerivedMeasure__Group_2__0__Impl28113 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__Group_2__1__Impl_in_rule__DatamartDerivedMeasure__Group_2__128143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartDerivedMeasure__ScaleAssignment_2_1_in_rule__DatamartDerivedMeasure__Group_2__1__Impl28170 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group__0__Impl_in_rule__DatamartMeasure__Group__028204 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group__1_in_rule__DatamartMeasure__Group__028207 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_148_in_rule__DatamartMeasure__Group__0__Impl28235 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group__1__Impl_in_rule__DatamartMeasure__Group__128266 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group__2_in_rule__DatamartMeasure__Group__128269 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__MeasureRefAssignment_1_in_rule__DatamartMeasure__Group__1__Impl28296 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group__2__Impl_in_rule__DatamartMeasure__Group__228326 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group_2__0_in_rule__DatamartMeasure__Group__2__Impl28353 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group_2__0__Impl_in_rule__DatamartMeasure__Group_2__028390 = new BitSet(new long[]{0x0000000000000000L,0x0000000001FF0000L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group_2__1_in_rule__DatamartMeasure__Group_2__028393 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__ScaledAssignment_2_0_in_rule__DatamartMeasure__Group_2__0__Impl28420 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__Group_2__1__Impl_in_rule__DatamartMeasure__Group_2__128450 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartMeasure__ScaleAssignment_2_1_in_rule__DatamartMeasure__Group_2__1__Impl28477 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__0__Impl_in_rule__DatamartHierarchy__Group__028511 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__1_in_rule__DatamartHierarchy__Group__028514 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_149_in_rule__DatamartHierarchy__Group__0__Impl28542 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__1__Impl_in_rule__DatamartHierarchy__Group__128573 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000000L,0x0000000000400000L,0x000000000001C000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__2_in_rule__DatamartHierarchy__Group__128576 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__HierarchyRefAssignment_1_in_rule__DatamartHierarchy__Group__1__Impl28603 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__2__Impl_in_rule__DatamartHierarchy__Group__228633 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000000L,0x0000000000400000L,0x000000000001C000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__3_in_rule__DatamartHierarchy__Group__228636 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__DefaultMemberAssignment_2_in_rule__DatamartHierarchy__Group__2__Impl28663 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__3__Impl_in_rule__DatamartHierarchy__Group__328694 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000000L,0x0000000000400000L,0x000000000001C000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__4_in_rule__DatamartHierarchy__Group__328697 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__AllMemberAssignment_3_in_rule__DatamartHierarchy__Group__3__Impl28724 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__4__Impl_in_rule__DatamartHierarchy__Group__428755 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000000L,0x0000000000400000L,0x000000000001C000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__5_in_rule__DatamartHierarchy__Group__428758 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__AllLevelsAssignment_4_in_rule__DatamartHierarchy__Group__4__Impl28785 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__5__Impl_in_rule__DatamartHierarchy__Group__528816 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000000L,0x0000000000400000L,0x000000000001C000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__6_in_rule__DatamartHierarchy__Group__528819 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_5__0_in_rule__DatamartHierarchy__Group__5__Impl28846 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group__6__Impl_in_rule__DatamartHierarchy__Group__628877 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6__0_in_rule__DatamartHierarchy__Group__6__Impl28904 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_5__0__Impl_in_rule__DatamartHierarchy__Group_5__028949 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_5__1_in_rule__DatamartHierarchy__Group_5__028952 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_150_in_rule__DatamartHierarchy__Group_5__0__Impl28980 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_5__1__Impl_in_rule__DatamartHierarchy__Group_5__129011 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000002800L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_5__2_in_rule__DatamartHierarchy__Group_5__129014 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__LevelRefAssignment_5_1_in_rule__DatamartHierarchy__Group_5__1__Impl29041 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_5__2__Impl_in_rule__DatamartHierarchy__Group_5__229071 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Alternatives_5_2_in_rule__DatamartHierarchy__Group_5__2__Impl29098 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6__0__Impl_in_rule__DatamartHierarchy__Group_6__029135 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000060000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6__1_in_rule__DatamartHierarchy__Group_6__029138 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__AllAssignment_6_0_in_rule__DatamartHierarchy__Group_6__0__Impl29165 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6__1__Impl_in_rule__DatamartHierarchy__Group_6__129195 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000060000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6__2_in_rule__DatamartHierarchy__Group_6__129198 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_1__0_in_rule__DatamartHierarchy__Group_6__1__Impl29225 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets013 {
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6__2__Impl_in_rule__DatamartHierarchy__Group_6__229256 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_2__0_in_rule__DatamartHierarchy__Group_6__2__Impl29283 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_1__0__Impl_in_rule__DatamartHierarchy__Group_6_1__029320 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_1__1_in_rule__DatamartHierarchy__Group_6_1__029323 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__ExceptAssignment_6_1_0_in_rule__DatamartHierarchy__Group_6_1__0__Impl29350 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_1__1__Impl_in_rule__DatamartHierarchy__Group_6_1__129380 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__ExceptRefAssignment_6_1_1_in_rule__DatamartHierarchy__Group_6_1__1__Impl29407 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_2__0__Impl_in_rule__DatamartHierarchy__Group_6_2__029441 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000180000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_2__1_in_rule__DatamartHierarchy__Group_6_2__029444 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__OrderedAssignment_6_2_0_in_rule__DatamartHierarchy__Group_6_2__0__Impl29471 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_2__1__Impl_in_rule__DatamartHierarchy__Group_6_2__129501 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_2__2_in_rule__DatamartHierarchy__Group_6_2__129504 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__OrderRefAssignment_6_2_1_in_rule__DatamartHierarchy__Group_6_2__1__Impl29531 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__Group_6_2__2__Impl_in_rule__DatamartHierarchy__Group_6_2__229561 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__DescendingAssignment_6_2_2_in_rule__DatamartHierarchy__Group_6_2__2__Impl29588 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartImport__Group__0__Impl_in_rule__DatamartImport__Group__029625 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__DatamartImport__Group__1_in_rule__DatamartImport__Group__029628 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_rule__DatamartImport__Group__0__Impl29656 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartImport__Group__1__Impl_in_rule__DatamartImport__Group__129687 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartImport__ImportedNamespaceAssignment_1_in_rule__DatamartImport__Group__1__Impl29714 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group__0__Impl_in_rule__DatamartQualifiedNameWithWildCard__Group__029748 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group__1_in_rule__DatamartQualifiedNameWithWildCard__Group__029751 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleQualifiedName_in_rule__DatamartQualifiedNameWithWildCard__Group__0__Impl29778 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group__1__Impl_in_rule__DatamartQualifiedNameWithWildCard__Group__129807 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group_1__0_in_rule__DatamartQualifiedNameWithWildCard__Group__1__Impl29834 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group_1__0__Impl_in_rule__DatamartQualifiedNameWithWildCard__Group_1__029869 = new BitSet(new long[]{0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group_1__1_in_rule__DatamartQualifiedNameWithWildCard__Group_1__029872 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__DatamartQualifiedNameWithWildCard__Group_1__0__Impl29900 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartQualifiedNameWithWildCard__Group_1__1__Impl_in_rule__DatamartQualifiedNameWithWildCard__Group_1__129931 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_36_in_rule__DatamartQualifiedNameWithWildCard__Group_1__1__Impl29959 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group__0__Impl_in_rule__QualifiedName__Group__029994 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group__1_in_rule__QualifiedName__Group__029997 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValidID_in_rule__QualifiedName__Group__0__Impl30024 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group__1__Impl_in_rule__QualifiedName__Group__130053 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group_1__0_in_rule__QualifiedName__Group__1__Impl30080 = new BitSet(new long[]{0x0000080000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group_1__0__Impl_in_rule__QualifiedName__Group_1__030115 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group_1__1_in_rule__QualifiedName__Group_1__030118 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__QualifiedName__Group_1__0__Impl30147 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedName__Group_1__1__Impl_in_rule__QualifiedName__Group_1__130179 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValidID_in_rule__QualifiedName__Group_1__1__Impl30206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__0__Impl_in_rule__PropertyFillerData__Group__030239 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__1_in_rule__PropertyFillerData__Group__030242 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_151_in_rule__PropertyFillerData__Group__0__Impl30270 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__1__Impl_in_rule__PropertyFillerData__Group__130301 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000001000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__2_in_rule__PropertyFillerData__Group__130304 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__PropertyRefAssignment_1_in_rule__PropertyFillerData__Group__1__Impl30331 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__2__Impl_in_rule__PropertyFillerData__Group__230361 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x00000FFE5A000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__3_in_rule__PropertyFillerData__Group__230364 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_152_in_rule__PropertyFillerData__Group__2__Impl30392 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__Group__3__Impl_in_rule__PropertyFillerData__Group__330423 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerData__FillerTypeAssignment_3_in_rule__PropertyFillerData__Group__3__Impl30450 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateFuture__Group__0__Impl_in_rule__PropertyFillerDateFuture__Group__030488 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateFuture__Group__1_in_rule__PropertyFillerDateFuture__Group__030491 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_153_in_rule__PropertyFillerDateFuture__Group__0__Impl30519 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateFuture__Group__1__Impl_in_rule__PropertyFillerDateFuture__Group__130550 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateFuture__Group__2_in_rule__PropertyFillerDateFuture__Group__130553 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateFuture__DateFutureYearsAssignment_1_in_rule__PropertyFillerDateFuture__Group__1__Impl30580 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateFuture__Group__2__Impl_in_rule__PropertyFillerDateFuture__Group__230610 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_154_in_rule__PropertyFillerDateFuture__Group__2__Impl30638 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDatePast__Group__0__Impl_in_rule__PropertyFillerDatePast__Group__030675 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDatePast__Group__1_in_rule__PropertyFillerDatePast__Group__030678 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_155_in_rule__PropertyFillerDatePast__Group__0__Impl30706 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDatePast__Group__1__Impl_in_rule__PropertyFillerDatePast__Group__130737 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDatePast__Group__2_in_rule__PropertyFillerDatePast__Group__130740 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDatePast__DatePastYearsAssignment_1_in_rule__PropertyFillerDatePast__Group__1__Impl30767 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDatePast__Group__2__Impl_in_rule__PropertyFillerDatePast__Group__230797 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_154_in_rule__PropertyFillerDatePast__Group__2__Impl30825 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__0__Impl_in_rule__PropertyFillerDateRange__Group__030862 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__1_in_rule__PropertyFillerDateRange__Group__030865 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_156_in_rule__PropertyFillerDateRange__Group__0__Impl30893 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__1__Impl_in_rule__PropertyFillerDateRange__Group__130924 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__2_in_rule__PropertyFillerDateRange__Group__130927 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__DateBeginYearsAssignment_1_in_rule__PropertyFillerDateRange__Group__1__Impl30954 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__2__Impl_in_rule__PropertyFillerDateRange__Group__230984 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__3_in_rule__PropertyFillerDateRange__Group__230987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_157_in_rule__PropertyFillerDateRange__Group__2__Impl31015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__3__Impl_in_rule__PropertyFillerDateRange__Group__331046 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__4_in_rule__PropertyFillerDateRange__Group__331049 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__DateEndYearsAssignment_3_in_rule__PropertyFillerDateRange__Group__3__Impl31076 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerDateRange__Group__4__Impl_in_rule__PropertyFillerDateRange__Group__431106 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_154_in_rule__PropertyFillerDateRange__Group__4__Impl31134 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__0__Impl_in_rule__PropertyFillerSignedDoubleRange__Group__031175 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000021000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__1_in_rule__PropertyFillerSignedDoubleRange__Group__031178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_158_in_rule__PropertyFillerSignedDoubleRange__Group__0__Impl31206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__1__Impl_in_rule__PropertyFillerSignedDoubleRange__Group__131237 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000021000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__2_in_rule__PropertyFillerSignedDoubleRange__Group__131240 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_1__0_in_rule__PropertyFillerSignedDoubleRange__Group__1__Impl31267 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__2__Impl_in_rule__PropertyFillerSignedDoubleRange__Group__231298 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__3_in_rule__PropertyFillerSignedDoubleRange__Group__231301 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_152_in_rule__PropertyFillerSignedDoubleRange__Group__2__Impl31329 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__3__Impl_in_rule__PropertyFillerSignedDoubleRange__Group__331360 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__4_in_rule__PropertyFillerSignedDoubleRange__Group__331363 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__DecimalsAssignment_3_in_rule__PropertyFillerSignedDoubleRange__Group__3__Impl31390 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__4__Impl_in_rule__PropertyFillerSignedDoubleRange__Group__431420 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__5_in_rule__PropertyFillerSignedDoubleRange__Group__431423 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_159_in_rule__PropertyFillerSignedDoubleRange__Group__4__Impl31451 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group__5__Impl_in_rule__PropertyFillerSignedDoubleRange__Group__531482 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_5__0_in_rule__PropertyFillerSignedDoubleRange__Group__5__Impl31509 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_1__0__Impl_in_rule__PropertyFillerSignedDoubleRange__Group_1__031552 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000020000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_1__1_in_rule__PropertyFillerSignedDoubleRange__Group_1__031555 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets014 {
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Alternatives_1_0_in_rule__PropertyFillerSignedDoubleRange__Group_1__0__Impl31582 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_1__1__Impl_in_rule__PropertyFillerSignedDoubleRange__Group_1__131613 = new BitSet(new long[]{0x0000000800000090L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_1__2_in_rule__PropertyFillerSignedDoubleRange__Group_1__131616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_157_in_rule__PropertyFillerSignedDoubleRange__Group_1__1__Impl31644 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_1__2__Impl_in_rule__PropertyFillerSignedDoubleRange__Group_1__231675 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Alternatives_1_2_in_rule__PropertyFillerSignedDoubleRange__Group_1__2__Impl31702 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_5__0__Impl_in_rule__PropertyFillerSignedDoubleRange__Group_5__031738 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_5__1_in_rule__PropertyFillerSignedDoubleRange__Group_5__031741 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_160_in_rule__PropertyFillerSignedDoubleRange__Group_5__0__Impl31769 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__Group_5__1__Impl_in_rule__PropertyFillerSignedDoubleRange__Group_5__131800 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRange__RoundedAssignment_5_1_in_rule__PropertyFillerSignedDoubleRange__Group_5__1__Impl31827 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__0__Impl_in_rule__PropertyFillerSignedDoubleRandom__Group__031861 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__1_in_rule__PropertyFillerSignedDoubleRandom__Group__031864 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_161_in_rule__PropertyFillerSignedDoubleRandom__Group__0__Impl31892 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__1__Impl_in_rule__PropertyFillerSignedDoubleRandom__Group__131923 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__2_in_rule__PropertyFillerSignedDoubleRandom__Group__131926 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__PropertyFillerSignedDoubleRandom__Group__1__Impl31954 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__2__Impl_in_rule__PropertyFillerSignedDoubleRandom__Group__231985 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__3_in_rule__PropertyFillerSignedDoubleRandom__Group__231988 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__ItemsAssignment_2_in_rule__PropertyFillerSignedDoubleRandom__Group__2__Impl32017 = new BitSet(new long[]{0x0000000800000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__ItemsAssignment_2_in_rule__PropertyFillerSignedDoubleRandom__Group__2__Impl32029 = new BitSet(new long[]{0x0000000800000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedDoubleRandom__Group__3__Impl_in_rule__PropertyFillerSignedDoubleRandom__Group__332062 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__PropertyFillerSignedDoubleRandom__Group__3__Impl32090 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__0__Impl_in_rule__PropertyFillerSignedIntegerRange__Group__032129 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000400000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__1_in_rule__PropertyFillerSignedIntegerRange__Group__032132 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__1__Impl_in_rule__PropertyFillerSignedIntegerRange__Group__132190 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000120000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__2_in_rule__PropertyFillerSignedIntegerRange__Group__132193 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_162_in_rule__PropertyFillerSignedIntegerRange__Group__1__Impl32221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__2__Impl_in_rule__PropertyFillerSignedIntegerRange__Group__232252 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000120000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__3_in_rule__PropertyFillerSignedIntegerRange__Group__232255 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_2__0_in_rule__PropertyFillerSignedIntegerRange__Group__2__Impl32282 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group__3__Impl_in_rule__PropertyFillerSignedIntegerRange__Group__332313 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_3__0_in_rule__PropertyFillerSignedIntegerRange__Group__3__Impl32340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_2__0__Impl_in_rule__PropertyFillerSignedIntegerRange__Group_2__032379 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000020000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_2__1_in_rule__PropertyFillerSignedIntegerRange__Group_2__032382 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Alternatives_2_0_in_rule__PropertyFillerSignedIntegerRange__Group_2__0__Impl32409 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_2__1__Impl_in_rule__PropertyFillerSignedIntegerRange__Group_2__132440 = new BitSet(new long[]{0x0000000800000090L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_2__2_in_rule__PropertyFillerSignedIntegerRange__Group_2__132443 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_157_in_rule__PropertyFillerSignedIntegerRange__Group_2__1__Impl32471 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_2__2__Impl_in_rule__PropertyFillerSignedIntegerRange__Group_2__232502 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Alternatives_2_2_in_rule__PropertyFillerSignedIntegerRange__Group_2__2__Impl32529 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_3__0__Impl_in_rule__PropertyFillerSignedIntegerRange__Group_3__032565 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_3__1_in_rule__PropertyFillerSignedIntegerRange__Group_3__032568 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_160_in_rule__PropertyFillerSignedIntegerRange__Group_3__0__Impl32596 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__Group_3__1__Impl_in_rule__PropertyFillerSignedIntegerRange__Group_3__132627 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRange__RoundedAssignment_3_1_in_rule__PropertyFillerSignedIntegerRange__Group_3__1__Impl32654 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__0__Impl_in_rule__PropertyFillerSignedIntegerRandom__Group__032688 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__1_in_rule__PropertyFillerSignedIntegerRandom__Group__032691 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_163_in_rule__PropertyFillerSignedIntegerRandom__Group__0__Impl32719 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__1__Impl_in_rule__PropertyFillerSignedIntegerRandom__Group__132750 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__2_in_rule__PropertyFillerSignedIntegerRandom__Group__132753 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__PropertyFillerSignedIntegerRandom__Group__1__Impl32781 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__2__Impl_in_rule__PropertyFillerSignedIntegerRandom__Group__232812 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__3_in_rule__PropertyFillerSignedIntegerRandom__Group__232815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__ItemsAssignment_2_in_rule__PropertyFillerSignedIntegerRandom__Group__2__Impl32844 = new BitSet(new long[]{0x0000000800000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__ItemsAssignment_2_in_rule__PropertyFillerSignedIntegerRandom__Group__2__Impl32856 = new BitSet(new long[]{0x0000000800000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerSignedIntegerRandom__Group__3__Impl_in_rule__PropertyFillerSignedIntegerRandom__Group__332889 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__PropertyFillerSignedIntegerRandom__Group__3__Impl32917 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__0__Impl_in_rule__PropertyFillerTextRandom__Group__032956 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__1_in_rule__PropertyFillerTextRandom__Group__032959 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_164_in_rule__PropertyFillerTextRandom__Group__0__Impl32987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__1__Impl_in_rule__PropertyFillerTextRandom__Group__133018 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__2_in_rule__PropertyFillerTextRandom__Group__133021 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__PropertyFillerTextRandom__Group__1__Impl33049 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__2__Impl_in_rule__PropertyFillerTextRandom__Group__233080 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__3_in_rule__PropertyFillerTextRandom__Group__233083 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__ItemsAssignment_2_in_rule__PropertyFillerTextRandom__Group__2__Impl33112 = new BitSet(new long[]{0x0000000000000022L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__ItemsAssignment_2_in_rule__PropertyFillerTextRandom__Group__2__Impl33124 = new BitSet(new long[]{0x0000000000000022L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextRandom__Group__3__Impl_in_rule__PropertyFillerTextRandom__Group__333157 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__PropertyFillerTextRandom__Group__3__Impl33185 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextParagraphs__Group__0__Impl_in_rule__PropertyFillerTextParagraphs__Group__033224 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000002000000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextParagraphs__Group__1_in_rule__PropertyFillerTextParagraphs__Group__033227 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextParagraphs__Group__1__Impl_in_rule__PropertyFillerTextParagraphs__Group__133285 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextParagraphs__Group__2_in_rule__PropertyFillerTextParagraphs__Group__133288 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_165_in_rule__PropertyFillerTextParagraphs__Group__1__Impl33316 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextParagraphs__Group__2__Impl_in_rule__PropertyFillerTextParagraphs__Group__233347 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextParagraphs__CountAssignment_2_in_rule__PropertyFillerTextParagraphs__Group__2__Impl33374 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextSentences__Group__0__Impl_in_rule__PropertyFillerTextSentences__Group__033411 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000004000000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextSentences__Group__1_in_rule__PropertyFillerTextSentences__Group__033414 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextSentences__Group__1__Impl_in_rule__PropertyFillerTextSentences__Group__133472 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextSentences__Group__2_in_rule__PropertyFillerTextSentences__Group__133475 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_166_in_rule__PropertyFillerTextSentences__Group__1__Impl33503 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextSentences__Group__2__Impl_in_rule__PropertyFillerTextSentences__Group__233534 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextSentences__CountAssignment_2_in_rule__PropertyFillerTextSentences__Group__2__Impl33561 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextWords__Group__0__Impl_in_rule__PropertyFillerTextWords__Group__033598 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000008000000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextWords__Group__1_in_rule__PropertyFillerTextWords__Group__033601 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextWords__Group__1__Impl_in_rule__PropertyFillerTextWords__Group__133659 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextWords__Group__2_in_rule__PropertyFillerTextWords__Group__133662 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_167_in_rule__PropertyFillerTextWords__Group__1__Impl33690 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextWords__Group__2__Impl_in_rule__PropertyFillerTextWords__Group__233721 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerTextWords__CountAssignment_2_in_rule__PropertyFillerTextWords__Group__2__Impl33748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__0__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group__033785 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000021000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__1_in_rule__PropertyFillerUnsignedDoubleRange__Group__033788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_168_in_rule__PropertyFillerUnsignedDoubleRange__Group__0__Impl33816 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__1__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group__133847 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000021000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__2_in_rule__PropertyFillerUnsignedDoubleRange__Group__133850 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_1__0_in_rule__PropertyFillerUnsignedDoubleRange__Group__1__Impl33877 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__2__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group__233908 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__3_in_rule__PropertyFillerUnsignedDoubleRange__Group__233911 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_152_in_rule__PropertyFillerUnsignedDoubleRange__Group__2__Impl33939 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets015 {
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__3__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group__333970 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000080000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__4_in_rule__PropertyFillerUnsignedDoubleRange__Group__333973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__DecimalsAssignment_3_in_rule__PropertyFillerUnsignedDoubleRange__Group__3__Impl34000 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__4__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group__434030 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000100000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__5_in_rule__PropertyFillerUnsignedDoubleRange__Group__434033 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_159_in_rule__PropertyFillerUnsignedDoubleRange__Group__4__Impl34061 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group__5__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group__534092 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_5__0_in_rule__PropertyFillerUnsignedDoubleRange__Group__5__Impl34119 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_1__0__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__034162 = new BitSet(new long[]{0x0000000800000090L,0x0000000000000000L,0x0000000020000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_1__1_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__034165 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_0_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__0__Impl34192 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_1__1__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__134223 = new BitSet(new long[]{0x0000000800000090L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_1__2_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__134226 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_157_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__1__Impl34254 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_1__2__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__234285 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Alternatives_1_2_in_rule__PropertyFillerUnsignedDoubleRange__Group_1__2__Impl34312 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_5__0__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group_5__034348 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_5__1_in_rule__PropertyFillerUnsignedDoubleRange__Group_5__034351 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_160_in_rule__PropertyFillerUnsignedDoubleRange__Group_5__0__Impl34379 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__Group_5__1__Impl_in_rule__PropertyFillerUnsignedDoubleRange__Group_5__134410 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRange__RoundedAssignment_5_1_in_rule__PropertyFillerUnsignedDoubleRange__Group_5__1__Impl34437 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__0__Impl_in_rule__PropertyFillerUnsignedDoubleRandom__Group__034471 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__1_in_rule__PropertyFillerUnsignedDoubleRandom__Group__034474 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_169_in_rule__PropertyFillerUnsignedDoubleRandom__Group__0__Impl34502 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__1__Impl_in_rule__PropertyFillerUnsignedDoubleRandom__Group__134533 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__2_in_rule__PropertyFillerUnsignedDoubleRandom__Group__134536 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__PropertyFillerUnsignedDoubleRandom__Group__1__Impl34564 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__2__Impl_in_rule__PropertyFillerUnsignedDoubleRandom__Group__234595 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__3_in_rule__PropertyFillerUnsignedDoubleRandom__Group__234598 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__ItemsAssignment_2_in_rule__PropertyFillerUnsignedDoubleRandom__Group__2__Impl34627 = new BitSet(new long[]{0x0000000800000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__ItemsAssignment_2_in_rule__PropertyFillerUnsignedDoubleRandom__Group__2__Impl34639 = new BitSet(new long[]{0x0000000800000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedDoubleRandom__Group__3__Impl_in_rule__PropertyFillerUnsignedDoubleRandom__Group__334672 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__PropertyFillerUnsignedDoubleRandom__Group__3__Impl34700 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__0__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group__034739 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000040000000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__1_in_rule__PropertyFillerUnsignedIntegerRange__Group__034742 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__1__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group__134800 = new BitSet(new long[]{0x0000000000000090L,0x0000000000000000L,0x0000000120000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__2_in_rule__PropertyFillerUnsignedIntegerRange__Group__134803 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_170_in_rule__PropertyFillerUnsignedIntegerRange__Group__1__Impl34831 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__2__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group__234862 = new BitSet(new long[]{0x0000000000000090L,0x0000000000000000L,0x0000000120000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__3_in_rule__PropertyFillerUnsignedIntegerRange__Group__234865 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_2__0_in_rule__PropertyFillerUnsignedIntegerRange__Group__2__Impl34892 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group__3__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group__334923 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_3__0_in_rule__PropertyFillerUnsignedIntegerRange__Group__3__Impl34950 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_2__0__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__034989 = new BitSet(new long[]{0x0000000000000090L,0x0000000000000000L,0x0000000020000000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_2__1_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__034992 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_0_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__0__Impl35019 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_2__1__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__135050 = new BitSet(new long[]{0x0000000000000090L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_2__2_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__135053 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_157_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__1__Impl35081 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_2__2__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__235112 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Alternatives_2_2_in_rule__PropertyFillerUnsignedIntegerRange__Group_2__2__Impl35139 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_3__0__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group_3__035175 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_3__1_in_rule__PropertyFillerUnsignedIntegerRange__Group_3__035178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_160_in_rule__PropertyFillerUnsignedIntegerRange__Group_3__0__Impl35206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__Group_3__1__Impl_in_rule__PropertyFillerUnsignedIntegerRange__Group_3__135237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRange__RoundedAssignment_3_1_in_rule__PropertyFillerUnsignedIntegerRange__Group_3__1__Impl35264 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__0__Impl_in_rule__PropertyFillerUnsignedIntegerRandom__Group__035298 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__1_in_rule__PropertyFillerUnsignedIntegerRandom__Group__035301 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_171_in_rule__PropertyFillerUnsignedIntegerRandom__Group__0__Impl35329 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__1__Impl_in_rule__PropertyFillerUnsignedIntegerRandom__Group__135360 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__2_in_rule__PropertyFillerUnsignedIntegerRandom__Group__135363 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__PropertyFillerUnsignedIntegerRandom__Group__1__Impl35391 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__2__Impl_in_rule__PropertyFillerUnsignedIntegerRandom__Group__235422 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__3_in_rule__PropertyFillerUnsignedIntegerRandom__Group__235425 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__ItemsAssignment_2_in_rule__PropertyFillerUnsignedIntegerRandom__Group__2__Impl35454 = new BitSet(new long[]{0x0000000000000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__ItemsAssignment_2_in_rule__PropertyFillerUnsignedIntegerRandom__Group__2__Impl35466 = new BitSet(new long[]{0x0000000000000082L});
-        public static final BitSet FOLLOW_rule__PropertyFillerUnsignedIntegerRandom__Group__3__Impl_in_rule__PropertyFillerUnsignedIntegerRandom__Group__335499 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__PropertyFillerUnsignedIntegerRandom__Group__3__Impl35527 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SignedNumber__Group__0__Impl_in_rule__SignedNumber__Group__035566 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__SignedNumber__Group__1_in_rule__SignedNumber__Group__035569 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_35_in_rule__SignedNumber__Group__0__Impl35598 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SignedNumber__Group__1__Impl_in_rule__SignedNumber__Group__135631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnsignedNumber_in_rule__SignedNumber__Group__1__Impl35658 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group__0__Impl_in_rule__UnsignedNumber__Group__035691 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group__1_in_rule__UnsignedNumber__Group__035694 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__UnsignedNumber__Group__0__Impl35721 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group__1__Impl_in_rule__UnsignedNumber__Group__135750 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group_1__0_in_rule__UnsignedNumber__Group__1__Impl35777 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group_1__0__Impl_in_rule__UnsignedNumber__Group_1__035812 = new BitSet(new long[]{0x0000000000000080L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group_1__1_in_rule__UnsignedNumber__Group_1__035815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__UnsignedNumber__Group_1__0__Impl35843 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__UnsignedNumber__Group_1__1__Impl_in_rule__UnsignedNumber__Group_1__135874 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__UnsignedNumber__Group_1__1__Impl35901 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SINT__Group__0__Impl_in_rule__SINT__Group__035934 = new BitSet(new long[]{0x0000000800000080L});
-        public static final BitSet FOLLOW_rule__SINT__Group__1_in_rule__SINT__Group__035937 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_35_in_rule__SINT__Group__0__Impl35966 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__SINT__Group__1__Impl_in_rule__SINT__Group__135999 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__SINT__Group__1__Impl36026 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__0__Impl_in_rule__XAnnotation__Group__036059 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000100000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__1_in_rule__XAnnotation__Group__036062 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__1__Impl_in_rule__XAnnotation__Group__136120 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__2_in_rule__XAnnotation__Group__136123 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_172_in_rule__XAnnotation__Group__1__Impl36151 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__2__Impl_in_rule__XAnnotation__Group__236182 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__3_in_rule__XAnnotation__Group__236185 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__AnnotationTypeAssignment_2_in_rule__XAnnotation__Group__2__Impl36212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group__3__Impl_in_rule__XAnnotation__Group__336242 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3__0_in_rule__XAnnotation__Group__3__Impl36269 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3__0__Impl_in_rule__XAnnotation__Group_3__036308 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3__1_in_rule__XAnnotation__Group_3__036311 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets016 {
-        public static final BitSet FOLLOW_139_in_rule__XAnnotation__Group_3__0__Impl36340 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3__1__Impl_in_rule__XAnnotation__Group_3__136372 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3__2_in_rule__XAnnotation__Group_3__136375 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Alternatives_3_1_in_rule__XAnnotation__Group_3__1__Impl36402 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3__2__Impl_in_rule__XAnnotation__Group_3__236433 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XAnnotation__Group_3__2__Impl36461 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0__0__Impl_in_rule__XAnnotation__Group_3_1_0__036498 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0__1_in_rule__XAnnotation__Group_3_1_0__036501 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__ElementValuePairsAssignment_3_1_0_0_in_rule__XAnnotation__Group_3_1_0__0__Impl36528 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0__1__Impl_in_rule__XAnnotation__Group_3_1_0__136558 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0_1__0_in_rule__XAnnotation__Group_3_1_0__1__Impl36585 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0_1__0__Impl_in_rule__XAnnotation__Group_3_1_0_1__036620 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0_1__1_in_rule__XAnnotation__Group_3_1_0_1__036623 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XAnnotation__Group_3_1_0_1__0__Impl36651 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__Group_3_1_0_1__1__Impl_in_rule__XAnnotation__Group_3_1_0_1__136682 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotation__ElementValuePairsAssignment_3_1_0_1_1_in_rule__XAnnotation__Group_3_1_0_1__1__Impl36709 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group__0__Impl_in_rule__XAnnotationElementValuePair__Group__036743 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group__1_in_rule__XAnnotationElementValuePair__Group__036746 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group_0__0_in_rule__XAnnotationElementValuePair__Group__0__Impl36773 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group__1__Impl_in_rule__XAnnotationElementValuePair__Group__136803 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__ValueAssignment_1_in_rule__XAnnotationElementValuePair__Group__1__Impl36830 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group_0__0__Impl_in_rule__XAnnotationElementValuePair__Group_0__036864 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group_0_0__0_in_rule__XAnnotationElementValuePair__Group_0__0__Impl36891 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group_0_0__0__Impl_in_rule__XAnnotationElementValuePair__Group_0_0__036923 = new BitSet(new long[]{0x0000000000002000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group_0_0__1_in_rule__XAnnotationElementValuePair__Group_0_0__036926 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__ElementAssignment_0_0_0_in_rule__XAnnotationElementValuePair__Group_0_0__0__Impl36953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValuePair__Group_0_0__1__Impl_in_rule__XAnnotationElementValuePair__Group_0_0__136983 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_13_in_rule__XAnnotationElementValuePair__Group_0_0__1__Impl37011 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0__037046 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51D00000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0__1_in_rule__XAnnotationElementValueOrCommaList__Group_0__037049 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0__0_in_rule__XAnnotationElementValueOrCommaList__Group_0__0__Impl37076 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0__1__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0__137106 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51D00000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0__2_in_rule__XAnnotationElementValueOrCommaList__Group_0__137109 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1__0_in_rule__XAnnotationElementValueOrCommaList__Group_0__1__Impl37136 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0__2__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0__237167 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_174_in_rule__XAnnotationElementValueOrCommaList__Group_0__2__Impl37195 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_0__037232 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0_in_rule__XAnnotationElementValueOrCommaList__Group_0_0__0__Impl37259 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__037291 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000800000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1_in_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__037294 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__137352 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2_in_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__137355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_175_in_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__1__Impl37383 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__237414 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_176_in_rule__XAnnotationElementValueOrCommaList__Group_0_0_0__2__Impl37442 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_1__037479 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1__1_in_rule__XAnnotationElementValueOrCommaList__Group_0_1__037482 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_0_in_rule__XAnnotationElementValueOrCommaList__Group_0_1__0__Impl37509 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1__1__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_1__137539 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0_in_rule__XAnnotationElementValueOrCommaList__Group_0_1__1__Impl37566 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__037601 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1_in_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__037604 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__0__Impl37632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__137663 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__ElementsAssignment_0_1_1_1_in_rule__XAnnotationElementValueOrCommaList__Group_0_1_1__1__Impl37690 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_1__037724 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1__1_in_rule__XAnnotationElementValueOrCommaList__Group_1__037727 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAnnotationOrExpression_in_rule__XAnnotationElementValueOrCommaList__Group_1__0__Impl37754 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1__1__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_1__137783 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1__0_in_rule__XAnnotationElementValueOrCommaList__Group_1__1__Impl37810 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_1_1__037845 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1__1_in_rule__XAnnotationElementValueOrCommaList__Group_1_1__037848 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1__1__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_1_1__137906 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0_in_rule__XAnnotationElementValueOrCommaList__Group_1_1__1__Impl37935 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0_in_rule__XAnnotationElementValueOrCommaList__Group_1_1__1__Impl37947 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__037984 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1_in_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__037987 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__0__Impl38015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1__Impl_in_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__138046 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValueOrCommaList__ElementsAssignment_1_1_1_1_in_rule__XAnnotationElementValueOrCommaList__Group_1_1_1__1__Impl38073 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0__0__Impl_in_rule__XAnnotationElementValue__Group_0__038107 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51D00000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0__1_in_rule__XAnnotationElementValue__Group_0__038110 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0__0_in_rule__XAnnotationElementValue__Group_0__0__Impl38137 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0__1__Impl_in_rule__XAnnotationElementValue__Group_0__138167 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51D00000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0__2_in_rule__XAnnotationElementValue__Group_0__138170 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1__0_in_rule__XAnnotationElementValue__Group_0__1__Impl38197 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0__2__Impl_in_rule__XAnnotationElementValue__Group_0__238228 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_174_in_rule__XAnnotationElementValue__Group_0__2__Impl38256 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0__0__Impl_in_rule__XAnnotationElementValue__Group_0_0__038293 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0_0__0_in_rule__XAnnotationElementValue__Group_0_0__0__Impl38320 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0_0__0__Impl_in_rule__XAnnotationElementValue__Group_0_0_0__038352 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000800000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0_0__1_in_rule__XAnnotationElementValue__Group_0_0_0__038355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0_0__1__Impl_in_rule__XAnnotationElementValue__Group_0_0_0__138413 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0_0__2_in_rule__XAnnotationElementValue__Group_0_0_0__138416 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_175_in_rule__XAnnotationElementValue__Group_0_0_0__1__Impl38444 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_0_0__2__Impl_in_rule__XAnnotationElementValue__Group_0_0_0__238475 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_176_in_rule__XAnnotationElementValue__Group_0_0_0__2__Impl38503 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1__0__Impl_in_rule__XAnnotationElementValue__Group_0_1__038540 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1__1_in_rule__XAnnotationElementValue__Group_0_1__038543 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__ElementsAssignment_0_1_0_in_rule__XAnnotationElementValue__Group_0_1__0__Impl38570 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1__1__Impl_in_rule__XAnnotationElementValue__Group_0_1__138600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1_1__0_in_rule__XAnnotationElementValue__Group_0_1__1__Impl38627 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1_1__0__Impl_in_rule__XAnnotationElementValue__Group_0_1_1__038662 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1_1__1_in_rule__XAnnotationElementValue__Group_0_1_1__038665 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XAnnotationElementValue__Group_0_1_1__0__Impl38693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__Group_0_1_1__1__Impl_in_rule__XAnnotationElementValue__Group_0_1_1__138724 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAnnotationElementValue__ElementsAssignment_0_1_1_1_in_rule__XAnnotationElementValue__Group_0_1_1__1__Impl38751 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__0__Impl_in_rule__XAssignment__Group_0__038785 = new BitSet(new long[]{0x0001E00000000010L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__1_in_rule__XAssignment__Group_0__038788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__1__Impl_in_rule__XAssignment__Group_0__138846 = new BitSet(new long[]{0x0000000000002000L});
-    }
-
-    protected static class FollowSets017 {
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__2_in_rule__XAssignment__Group_0__138849 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__FeatureAssignment_0_1_in_rule__XAssignment__Group_0__1__Impl38876 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__2__Impl_in_rule__XAssignment__Group_0__238906 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__3_in_rule__XAssignment__Group_0__238909 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpSingleAssign_in_rule__XAssignment__Group_0__2__Impl38936 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_0__3__Impl_in_rule__XAssignment__Group_0__338965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__ValueAssignment_0_3_in_rule__XAssignment__Group_0__3__Impl38992 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1__0__Impl_in_rule__XAssignment__Group_1__039030 = new BitSet(new long[]{0x000000000C1F0000L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1__1_in_rule__XAssignment__Group_1__039033 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXOrExpression_in_rule__XAssignment__Group_1__0__Impl39060 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1__1__Impl_in_rule__XAssignment__Group_1__139089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1__0_in_rule__XAssignment__Group_1__1__Impl39116 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1__0__Impl_in_rule__XAssignment__Group_1_1__039151 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1__1_in_rule__XAssignment__Group_1_1__039154 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1_0__0_in_rule__XAssignment__Group_1_1__0__Impl39181 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1__1__Impl_in_rule__XAssignment__Group_1_1__139211 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__RightOperandAssignment_1_1_1_in_rule__XAssignment__Group_1_1__1__Impl39238 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1_0__0__Impl_in_rule__XAssignment__Group_1_1_0__039272 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1_0_0__0_in_rule__XAssignment__Group_1_1_0__0__Impl39299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1_0_0__0__Impl_in_rule__XAssignment__Group_1_1_0_0__039331 = new BitSet(new long[]{0x000000000C1F0000L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1_0_0__1_in_rule__XAssignment__Group_1_1_0_0__039334 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__Group_1_1_0_0__1__Impl_in_rule__XAssignment__Group_1_1_0_0__139392 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAssignment__FeatureAssignment_1_1_0_0_1_in_rule__XAssignment__Group_1_1_0_0__1__Impl39419 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_5__0__Impl_in_rule__OpMultiAssign__Group_5__039453 = new BitSet(new long[]{0x0000000008000000L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_5__1_in_rule__OpMultiAssign__Group_5__039456 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpMultiAssign__Group_5__0__Impl39484 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_5__1__Impl_in_rule__OpMultiAssign__Group_5__139515 = new BitSet(new long[]{0x0000000000002000L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_5__2_in_rule__OpMultiAssign__Group_5__139518 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpMultiAssign__Group_5__1__Impl39546 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_5__2__Impl_in_rule__OpMultiAssign__Group_5__239577 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_13_in_rule__OpMultiAssign__Group_5__2__Impl39605 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_6__0__Impl_in_rule__OpMultiAssign__Group_6__039642 = new BitSet(new long[]{0x0000000006000000L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_6__1_in_rule__OpMultiAssign__Group_6__039645 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpMultiAssign__Group_6__0__Impl39673 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_6__1__Impl_in_rule__OpMultiAssign__Group_6__139704 = new BitSet(new long[]{0x0000000006000000L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_6__2_in_rule__OpMultiAssign__Group_6__139707 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpMultiAssign__Group_6__1__Impl39736 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpMultiAssign__Group_6__2__Impl_in_rule__OpMultiAssign__Group_6__239769 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_25_in_rule__OpMultiAssign__Group_6__2__Impl39797 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group__0__Impl_in_rule__XOrExpression__Group__039834 = new BitSet(new long[]{0x0000000000004000L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group__1_in_rule__XOrExpression__Group__039837 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAndExpression_in_rule__XOrExpression__Group__0__Impl39864 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group__1__Impl_in_rule__XOrExpression__Group__139893 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1__0_in_rule__XOrExpression__Group__1__Impl39920 = new BitSet(new long[]{0x0000000000004002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1__0__Impl_in_rule__XOrExpression__Group_1__039955 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1__1_in_rule__XOrExpression__Group_1__039958 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1_0__0_in_rule__XOrExpression__Group_1__0__Impl39985 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1__1__Impl_in_rule__XOrExpression__Group_1__140015 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__RightOperandAssignment_1_1_in_rule__XOrExpression__Group_1__1__Impl40042 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1_0__0__Impl_in_rule__XOrExpression__Group_1_0__040076 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1_0_0__0_in_rule__XOrExpression__Group_1_0__0__Impl40103 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1_0_0__0__Impl_in_rule__XOrExpression__Group_1_0_0__040135 = new BitSet(new long[]{0x0000000000004000L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1_0_0__1_in_rule__XOrExpression__Group_1_0_0__040138 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__Group_1_0_0__1__Impl_in_rule__XOrExpression__Group_1_0_0__140196 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOrExpression__FeatureAssignment_1_0_0_1_in_rule__XOrExpression__Group_1_0_0__1__Impl40223 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group__0__Impl_in_rule__XAndExpression__Group__040257 = new BitSet(new long[]{0x0000000000008000L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group__1_in_rule__XAndExpression__Group__040260 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXEqualityExpression_in_rule__XAndExpression__Group__0__Impl40287 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group__1__Impl_in_rule__XAndExpression__Group__140316 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1__0_in_rule__XAndExpression__Group__1__Impl40343 = new BitSet(new long[]{0x0000000000008002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1__0__Impl_in_rule__XAndExpression__Group_1__040378 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1__1_in_rule__XAndExpression__Group_1__040381 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1_0__0_in_rule__XAndExpression__Group_1__0__Impl40408 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1__1__Impl_in_rule__XAndExpression__Group_1__140438 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__RightOperandAssignment_1_1_in_rule__XAndExpression__Group_1__1__Impl40465 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1_0__0__Impl_in_rule__XAndExpression__Group_1_0__040499 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1_0_0__0_in_rule__XAndExpression__Group_1_0__0__Impl40526 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1_0_0__0__Impl_in_rule__XAndExpression__Group_1_0_0__040558 = new BitSet(new long[]{0x0000000000008000L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1_0_0__1_in_rule__XAndExpression__Group_1_0_0__040561 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__Group_1_0_0__1__Impl_in_rule__XAndExpression__Group_1_0_0__140619 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAndExpression__FeatureAssignment_1_0_0_1_in_rule__XAndExpression__Group_1_0_0__1__Impl40646 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group__0__Impl_in_rule__XEqualityExpression__Group__040680 = new BitSet(new long[]{0x0000000001E00000L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group__1_in_rule__XEqualityExpression__Group__040683 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXRelationalExpression_in_rule__XEqualityExpression__Group__0__Impl40710 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group__1__Impl_in_rule__XEqualityExpression__Group__140739 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1__0_in_rule__XEqualityExpression__Group__1__Impl40766 = new BitSet(new long[]{0x0000000001E00002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1__0__Impl_in_rule__XEqualityExpression__Group_1__040801 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1__1_in_rule__XEqualityExpression__Group_1__040804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1_0__0_in_rule__XEqualityExpression__Group_1__0__Impl40831 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1__1__Impl_in_rule__XEqualityExpression__Group_1__140861 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__RightOperandAssignment_1_1_in_rule__XEqualityExpression__Group_1__1__Impl40888 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1_0__0__Impl_in_rule__XEqualityExpression__Group_1_0__040922 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1_0_0__0_in_rule__XEqualityExpression__Group_1_0__0__Impl40949 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1_0_0__0__Impl_in_rule__XEqualityExpression__Group_1_0_0__040981 = new BitSet(new long[]{0x0000000001E00000L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1_0_0__1_in_rule__XEqualityExpression__Group_1_0_0__040984 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__Group_1_0_0__1__Impl_in_rule__XEqualityExpression__Group_1_0_0__141042 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XEqualityExpression__FeatureAssignment_1_0_0_1_in_rule__XEqualityExpression__Group_1_0_0__1__Impl41069 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group__0__Impl_in_rule__XRelationalExpression__Group__041103 = new BitSet(new long[]{0x000000000E000000L,0x0000000000000000L,0x0002000000000000L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group__1_in_rule__XRelationalExpression__Group__041106 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXOtherOperatorExpression_in_rule__XRelationalExpression__Group__0__Impl41133 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group__1__Impl_in_rule__XRelationalExpression__Group__141162 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Alternatives_1_in_rule__XRelationalExpression__Group__1__Impl41189 = new BitSet(new long[]{0x000000000E000002L,0x0000000000000000L,0x0002000000000000L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0__0__Impl_in_rule__XRelationalExpression__Group_1_0__041224 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0__1_in_rule__XRelationalExpression__Group_1_0__041227 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0_0__0_in_rule__XRelationalExpression__Group_1_0__0__Impl41254 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0__1__Impl_in_rule__XRelationalExpression__Group_1_0__141284 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__TypeAssignment_1_0_1_in_rule__XRelationalExpression__Group_1_0__1__Impl41311 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0_0__0__Impl_in_rule__XRelationalExpression__Group_1_0_0__041345 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0_0_0__0_in_rule__XRelationalExpression__Group_1_0_0__0__Impl41372 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0_0_0__0__Impl_in_rule__XRelationalExpression__Group_1_0_0_0__041404 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0002000000000000L});
-    }
-
-    protected static class FollowSets018 {
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0_0_0__1_in_rule__XRelationalExpression__Group_1_0_0_0__041407 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_0_0_0__1__Impl_in_rule__XRelationalExpression__Group_1_0_0_0__141465 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_177_in_rule__XRelationalExpression__Group_1_0_0_0__1__Impl41493 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1__0__Impl_in_rule__XRelationalExpression__Group_1_1__041528 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1__1_in_rule__XRelationalExpression__Group_1_1__041531 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1_0__0_in_rule__XRelationalExpression__Group_1_1__0__Impl41558 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1__1__Impl_in_rule__XRelationalExpression__Group_1_1__141588 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__RightOperandAssignment_1_1_1_in_rule__XRelationalExpression__Group_1_1__1__Impl41615 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1_0__0__Impl_in_rule__XRelationalExpression__Group_1_1_0__041649 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1_0_0__0_in_rule__XRelationalExpression__Group_1_1_0__0__Impl41676 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1_0_0__0__Impl_in_rule__XRelationalExpression__Group_1_1_0_0__041708 = new BitSet(new long[]{0x000000000E000000L,0x0000000000000000L,0x0002000000000000L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1_0_0__1_in_rule__XRelationalExpression__Group_1_1_0_0__041711 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__Group_1_1_0_0__1__Impl_in_rule__XRelationalExpression__Group_1_1_0_0__141769 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XRelationalExpression__FeatureAssignment_1_1_0_0_1_in_rule__XRelationalExpression__Group_1_1_0_0__1__Impl41796 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpCompare__Group_1__0__Impl_in_rule__OpCompare__Group_1__041830 = new BitSet(new long[]{0x0000000000002000L});
-        public static final BitSet FOLLOW_rule__OpCompare__Group_1__1_in_rule__OpCompare__Group_1__041833 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpCompare__Group_1__0__Impl41861 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpCompare__Group_1__1__Impl_in_rule__OpCompare__Group_1__141892 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_13_in_rule__OpCompare__Group_1__1__Impl41920 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group__0__Impl_in_rule__XOtherOperatorExpression__Group__041955 = new BitSet(new long[]{0x00000003FC000000L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group__1_in_rule__XOtherOperatorExpression__Group__041958 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXAdditiveExpression_in_rule__XOtherOperatorExpression__Group__0__Impl41985 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group__1__Impl_in_rule__XOtherOperatorExpression__Group__142014 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1__0_in_rule__XOtherOperatorExpression__Group__1__Impl42041 = new BitSet(new long[]{0x00000003FC000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1__0__Impl_in_rule__XOtherOperatorExpression__Group_1__042076 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1__1_in_rule__XOtherOperatorExpression__Group_1__042079 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1_0__0_in_rule__XOtherOperatorExpression__Group_1__0__Impl42106 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1__1__Impl_in_rule__XOtherOperatorExpression__Group_1__142136 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__RightOperandAssignment_1_1_in_rule__XOtherOperatorExpression__Group_1__1__Impl42163 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1_0__0__Impl_in_rule__XOtherOperatorExpression__Group_1_0__042197 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1_0_0__0_in_rule__XOtherOperatorExpression__Group_1_0__0__Impl42224 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1_0_0__0__Impl_in_rule__XOtherOperatorExpression__Group_1_0_0__042256 = new BitSet(new long[]{0x00000003FC000000L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1_0_0__1_in_rule__XOtherOperatorExpression__Group_1_0_0__042259 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__Group_1_0_0__1__Impl_in_rule__XOtherOperatorExpression__Group_1_0_0__142317 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XOtherOperatorExpression__FeatureAssignment_1_0_0_1_in_rule__XOtherOperatorExpression__Group_1_0_0__1__Impl42344 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_2__0__Impl_in_rule__OpOther__Group_2__042378 = new BitSet(new long[]{0x0000000040000000L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_2__1_in_rule__OpOther__Group_2__042381 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpOther__Group_2__0__Impl42409 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_2__1__Impl_in_rule__OpOther__Group_2__142440 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_30_in_rule__OpOther__Group_2__1__Impl42468 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5__0__Impl_in_rule__OpOther__Group_5__042503 = new BitSet(new long[]{0x0000000004000000L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5__1_in_rule__OpOther__Group_5__042506 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpOther__Group_5__0__Impl42534 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5__1__Impl_in_rule__OpOther__Group_5__142565 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Alternatives_5_1_in_rule__OpOther__Group_5__1__Impl42592 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5_1_0__0__Impl_in_rule__OpOther__Group_5_1_0__042626 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5_1_0_0__0_in_rule__OpOther__Group_5_1_0__0__Impl42653 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5_1_0_0__0__Impl_in_rule__OpOther__Group_5_1_0_0__042685 = new BitSet(new long[]{0x0000000004000000L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5_1_0_0__1_in_rule__OpOther__Group_5_1_0_0__042688 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpOther__Group_5_1_0_0__0__Impl42716 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_5_1_0_0__1__Impl_in_rule__OpOther__Group_5_1_0_0__142747 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__OpOther__Group_5_1_0_0__1__Impl42775 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6__0__Impl_in_rule__OpOther__Group_6__042810 = new BitSet(new long[]{0x0000000088000000L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6__1_in_rule__OpOther__Group_6__042813 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpOther__Group_6__0__Impl42841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6__1__Impl_in_rule__OpOther__Group_6__142872 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Alternatives_6_1_in_rule__OpOther__Group_6__1__Impl42899 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6_1_0__0__Impl_in_rule__OpOther__Group_6_1_0__042933 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6_1_0_0__0_in_rule__OpOther__Group_6_1_0__0__Impl42960 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6_1_0_0__0__Impl_in_rule__OpOther__Group_6_1_0_0__042992 = new BitSet(new long[]{0x0000000008000000L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6_1_0_0__1_in_rule__OpOther__Group_6_1_0_0__042995 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpOther__Group_6_1_0_0__0__Impl43023 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__OpOther__Group_6_1_0_0__1__Impl_in_rule__OpOther__Group_6_1_0_0__143054 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__OpOther__Group_6_1_0_0__1__Impl43082 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group__0__Impl_in_rule__XAdditiveExpression__Group__043117 = new BitSet(new long[]{0x0000000C00000000L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group__1_in_rule__XAdditiveExpression__Group__043120 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXMultiplicativeExpression_in_rule__XAdditiveExpression__Group__0__Impl43147 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group__1__Impl_in_rule__XAdditiveExpression__Group__143176 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1__0_in_rule__XAdditiveExpression__Group__1__Impl43203 = new BitSet(new long[]{0x0000000C00000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1__0__Impl_in_rule__XAdditiveExpression__Group_1__043238 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1__1_in_rule__XAdditiveExpression__Group_1__043241 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1_0__0_in_rule__XAdditiveExpression__Group_1__0__Impl43268 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1__1__Impl_in_rule__XAdditiveExpression__Group_1__143298 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__RightOperandAssignment_1_1_in_rule__XAdditiveExpression__Group_1__1__Impl43325 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1_0__0__Impl_in_rule__XAdditiveExpression__Group_1_0__043359 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1_0_0__0_in_rule__XAdditiveExpression__Group_1_0__0__Impl43386 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1_0_0__0__Impl_in_rule__XAdditiveExpression__Group_1_0_0__043418 = new BitSet(new long[]{0x0000000C00000000L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1_0_0__1_in_rule__XAdditiveExpression__Group_1_0_0__043421 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__Group_1_0_0__1__Impl_in_rule__XAdditiveExpression__Group_1_0_0__143479 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XAdditiveExpression__FeatureAssignment_1_0_0_1_in_rule__XAdditiveExpression__Group_1_0_0__1__Impl43506 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group__0__Impl_in_rule__XMultiplicativeExpression__Group__043540 = new BitSet(new long[]{0x000000F000000000L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group__1_in_rule__XMultiplicativeExpression__Group__043543 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXUnaryOperation_in_rule__XMultiplicativeExpression__Group__0__Impl43570 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group__1__Impl_in_rule__XMultiplicativeExpression__Group__143599 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1__0_in_rule__XMultiplicativeExpression__Group__1__Impl43626 = new BitSet(new long[]{0x000000F000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1__0__Impl_in_rule__XMultiplicativeExpression__Group_1__043661 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1__1_in_rule__XMultiplicativeExpression__Group_1__043664 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1_0__0_in_rule__XMultiplicativeExpression__Group_1__0__Impl43691 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1__1__Impl_in_rule__XMultiplicativeExpression__Group_1__143721 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__RightOperandAssignment_1_1_in_rule__XMultiplicativeExpression__Group_1__1__Impl43748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1_0__0__Impl_in_rule__XMultiplicativeExpression__Group_1_0__043782 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1_0_0__0_in_rule__XMultiplicativeExpression__Group_1_0__0__Impl43809 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1_0_0__0__Impl_in_rule__XMultiplicativeExpression__Group_1_0_0__043841 = new BitSet(new long[]{0x000000F000000000L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1_0_0__1_in_rule__XMultiplicativeExpression__Group_1_0_0__043844 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__Group_1_0_0__1__Impl_in_rule__XMultiplicativeExpression__Group_1_0_0__143902 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMultiplicativeExpression__FeatureAssignment_1_0_0_1_in_rule__XMultiplicativeExpression__Group_1_0_0__1__Impl43929 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__Group_0__0__Impl_in_rule__XUnaryOperation__Group_0__043963 = new BitSet(new long[]{0x0000010C00000000L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__Group_0__1_in_rule__XUnaryOperation__Group_0__043966 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__Group_0__1__Impl_in_rule__XUnaryOperation__Group_0__144024 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__Group_0__2_in_rule__XUnaryOperation__Group_0__144027 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets019 {
-        public static final BitSet FOLLOW_rule__XUnaryOperation__FeatureAssignment_0_1_in_rule__XUnaryOperation__Group_0__1__Impl44054 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__Group_0__2__Impl_in_rule__XUnaryOperation__Group_0__244084 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XUnaryOperation__OperandAssignment_0_2_in_rule__XUnaryOperation__Group_0__2__Impl44111 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group__0__Impl_in_rule__XCastedExpression__Group__044147 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group__1_in_rule__XCastedExpression__Group__044150 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXPostfixOperation_in_rule__XCastedExpression__Group__0__Impl44177 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group__1__Impl_in_rule__XCastedExpression__Group__144206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1__0_in_rule__XCastedExpression__Group__1__Impl44233 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1__0__Impl_in_rule__XCastedExpression__Group_1__044268 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1__1_in_rule__XCastedExpression__Group_1__044271 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1_0__0_in_rule__XCastedExpression__Group_1__0__Impl44298 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1__1__Impl_in_rule__XCastedExpression__Group_1__144328 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__TypeAssignment_1_1_in_rule__XCastedExpression__Group_1__1__Impl44355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1_0__0__Impl_in_rule__XCastedExpression__Group_1_0__044389 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1_0_0__0_in_rule__XCastedExpression__Group_1_0__0__Impl44416 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1_0_0__0__Impl_in_rule__XCastedExpression__Group_1_0_0__044448 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1_0_0__1_in_rule__XCastedExpression__Group_1_0_0__044451 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCastedExpression__Group_1_0_0__1__Impl_in_rule__XCastedExpression__Group_1_0_0__144509 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_178_in_rule__XCastedExpression__Group_1_0_0__1__Impl44537 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group__0__Impl_in_rule__XPostfixOperation__Group__044572 = new BitSet(new long[]{0x0000060000000000L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group__1_in_rule__XPostfixOperation__Group__044575 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXMemberFeatureCall_in_rule__XPostfixOperation__Group__0__Impl44602 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group__1__Impl_in_rule__XPostfixOperation__Group__144631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group_1__0_in_rule__XPostfixOperation__Group__1__Impl44658 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group_1__0__Impl_in_rule__XPostfixOperation__Group_1__044693 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group_1_0__0_in_rule__XPostfixOperation__Group_1__0__Impl44720 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group_1_0__0__Impl_in_rule__XPostfixOperation__Group_1_0__044752 = new BitSet(new long[]{0x0000060000000000L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group_1_0__1_in_rule__XPostfixOperation__Group_1_0__044755 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__Group_1_0__1__Impl_in_rule__XPostfixOperation__Group_1_0__144813 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XPostfixOperation__FeatureAssignment_1_0_1_in_rule__XPostfixOperation__Group_1_0__1__Impl44840 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group__0__Impl_in_rule__XMemberFeatureCall__Group__044874 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000180000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group__1_in_rule__XMemberFeatureCall__Group__044877 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXPrimaryExpression_in_rule__XMemberFeatureCall__Group__0__Impl44904 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group__1__Impl_in_rule__XMemberFeatureCall__Group__144933 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Alternatives_1_in_rule__XMemberFeatureCall__Group__1__Impl44960 = new BitSet(new long[]{0x0000080000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000180000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0__0__Impl_in_rule__XMemberFeatureCall__Group_1_0__044995 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0__1_in_rule__XMemberFeatureCall__Group_1_0__044998 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0__0_in_rule__XMemberFeatureCall__Group_1_0__0__Impl45025 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0__1__Impl_in_rule__XMemberFeatureCall__Group_1_0__145055 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__ValueAssignment_1_0_1_in_rule__XMemberFeatureCall__Group_1_0__1__Impl45082 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0__0__Impl_in_rule__XMemberFeatureCall__Group_1_0_0__045116 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__0_in_rule__XMemberFeatureCall__Group_1_0_0__0__Impl45143 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__0__Impl_in_rule__XMemberFeatureCall__Group_1_0_0_0__045175 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000080000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__1_in_rule__XMemberFeatureCall__Group_1_0_0_0__045178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__1__Impl_in_rule__XMemberFeatureCall__Group_1_0_0_0__145236 = new BitSet(new long[]{0x0001E00000000010L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__2_in_rule__XMemberFeatureCall__Group_1_0_0_0__145239 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Alternatives_1_0_0_0_1_in_rule__XMemberFeatureCall__Group_1_0_0_0__1__Impl45266 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__2__Impl_in_rule__XMemberFeatureCall__Group_1_0_0_0__245296 = new BitSet(new long[]{0x0000000000002000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__3_in_rule__XMemberFeatureCall__Group_1_0_0_0__245299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__FeatureAssignment_1_0_0_0_2_in_rule__XMemberFeatureCall__Group_1_0_0_0__2__Impl45326 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_0_0_0__3__Impl_in_rule__XMemberFeatureCall__Group_1_0_0_0__345356 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOpSingleAssign_in_rule__XMemberFeatureCall__Group_1_0_0_0__3__Impl45383 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__0__Impl_in_rule__XMemberFeatureCall__Group_1_1__045420 = new BitSet(new long[]{0x0003E00008000010L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__1_in_rule__XMemberFeatureCall__Group_1_1__045423 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_0__0_in_rule__XMemberFeatureCall__Group_1_1__0__Impl45450 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__1__Impl_in_rule__XMemberFeatureCall__Group_1_1__145480 = new BitSet(new long[]{0x0003E00008000010L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__2_in_rule__XMemberFeatureCall__Group_1_1__145483 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__0_in_rule__XMemberFeatureCall__Group_1_1__1__Impl45510 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__2__Impl_in_rule__XMemberFeatureCall__Group_1_1__245541 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000800L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__3_in_rule__XMemberFeatureCall__Group_1_1__245544 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__FeatureAssignment_1_1_2_in_rule__XMemberFeatureCall__Group_1_1__2__Impl45571 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__3__Impl_in_rule__XMemberFeatureCall__Group_1_1__345601 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000800L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__4_in_rule__XMemberFeatureCall__Group_1_1__345604 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3__0_in_rule__XMemberFeatureCall__Group_1_1__3__Impl45631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1__4__Impl_in_rule__XMemberFeatureCall__Group_1_1__445662 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_4_in_rule__XMemberFeatureCall__Group_1_1__4__Impl45689 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_0__0__Impl_in_rule__XMemberFeatureCall__Group_1_1_0__045730 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_0_0__0_in_rule__XMemberFeatureCall__Group_1_1_0__0__Impl45757 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_0_0__0__Impl_in_rule__XMemberFeatureCall__Group_1_1_0_0__045789 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000180000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_0_0__1_in_rule__XMemberFeatureCall__Group_1_1_0_0__045792 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_0_0__1__Impl_in_rule__XMemberFeatureCall__Group_1_1_0_0__145850 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Alternatives_1_1_0_0_1_in_rule__XMemberFeatureCall__Group_1_1_0_0__1__Impl45877 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__0__Impl_in_rule__XMemberFeatureCall__Group_1_1_1__045911 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__1_in_rule__XMemberFeatureCall__Group_1_1_1__045914 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__XMemberFeatureCall__Group_1_1_1__0__Impl45942 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__1__Impl_in_rule__XMemberFeatureCall__Group_1_1_1__145973 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__2_in_rule__XMemberFeatureCall__Group_1_1_1__145976 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_1_in_rule__XMemberFeatureCall__Group_1_1_1__1__Impl46003 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__2__Impl_in_rule__XMemberFeatureCall__Group_1_1_1__246033 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__3_in_rule__XMemberFeatureCall__Group_1_1_1__246036 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1_2__0_in_rule__XMemberFeatureCall__Group_1_1_1__2__Impl46063 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1__3__Impl_in_rule__XMemberFeatureCall__Group_1_1_1__346094 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__XMemberFeatureCall__Group_1_1_1__3__Impl46122 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1_2__0__Impl_in_rule__XMemberFeatureCall__Group_1_1_1_2__046161 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1_2__1_in_rule__XMemberFeatureCall__Group_1_1_1_2__046164 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XMemberFeatureCall__Group_1_1_1_2__0__Impl46192 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_1_2__1__Impl_in_rule__XMemberFeatureCall__Group_1_1_1_2__146223 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__TypeArgumentsAssignment_1_1_1_2_1_in_rule__XMemberFeatureCall__Group_1_1_1_2__1__Impl46250 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3__0__Impl_in_rule__XMemberFeatureCall__Group_1_1_3__046284 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000A00005L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3__1_in_rule__XMemberFeatureCall__Group_1_1_3__046287 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__ExplicitOperationCallAssignment_1_1_3_0_in_rule__XMemberFeatureCall__Group_1_1_3__0__Impl46314 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3__1__Impl_in_rule__XMemberFeatureCall__Group_1_1_3__146344 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000A00005L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3__2_in_rule__XMemberFeatureCall__Group_1_1_3__146347 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Alternatives_1_1_3_1_in_rule__XMemberFeatureCall__Group_1_1_3__1__Impl46374 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3__2__Impl_in_rule__XMemberFeatureCall__Group_1_1_3__246405 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XMemberFeatureCall__Group_1_1_3__2__Impl46433 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1__0__Impl_in_rule__XMemberFeatureCall__Group_1_1_3_1_1__046470 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1__1_in_rule__XMemberFeatureCall__Group_1_1_3_1_1__046473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_0_in_rule__XMemberFeatureCall__Group_1_1_3_1_1__0__Impl46500 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1__1__Impl_in_rule__XMemberFeatureCall__Group_1_1_3_1_1__146530 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets020 {
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0_in_rule__XMemberFeatureCall__Group_1_1_3_1_1__1__Impl46557 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0__Impl_in_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__046592 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1_in_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__046595 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__0__Impl46623 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1__Impl_in_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__146654 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XMemberFeatureCall__MemberCallArgumentsAssignment_1_1_3_1_1_1_1_in_rule__XMemberFeatureCall__Group_1_1_3_1_1_1__1__Impl46681 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__0__Impl_in_rule__XSetLiteral__Group__046715 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000800000000000L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__1_in_rule__XSetLiteral__Group__046718 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__1__Impl_in_rule__XSetLiteral__Group__146776 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__2_in_rule__XSetLiteral__Group__146779 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_175_in_rule__XSetLiteral__Group__1__Impl46807 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__2__Impl_in_rule__XSetLiteral__Group__246838 = new BitSet(new long[]{0x0007E10C080001F0L,0x004C000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__3_in_rule__XSetLiteral__Group__246841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__XSetLiteral__Group__2__Impl46869 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__3__Impl_in_rule__XSetLiteral__Group__346900 = new BitSet(new long[]{0x0007E10C080001F0L,0x004C000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__4_in_rule__XSetLiteral__Group__346903 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3__0_in_rule__XSetLiteral__Group__3__Impl46930 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group__4__Impl_in_rule__XSetLiteral__Group__446961 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__XSetLiteral__Group__4__Impl46989 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3__0__Impl_in_rule__XSetLiteral__Group_3__047030 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3__1_in_rule__XSetLiteral__Group_3__047033 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__ElementsAssignment_3_0_in_rule__XSetLiteral__Group_3__0__Impl47060 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3__1__Impl_in_rule__XSetLiteral__Group_3__147090 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3_1__0_in_rule__XSetLiteral__Group_3__1__Impl47117 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3_1__0__Impl_in_rule__XSetLiteral__Group_3_1__047152 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3_1__1_in_rule__XSetLiteral__Group_3_1__047155 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XSetLiteral__Group_3_1__0__Impl47183 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__Group_3_1__1__Impl_in_rule__XSetLiteral__Group_3_1__147214 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSetLiteral__ElementsAssignment_3_1_1_in_rule__XSetLiteral__Group_3_1__1__Impl47241 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__0__Impl_in_rule__XListLiteral__Group__047275 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000800000000000L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__1_in_rule__XListLiteral__Group__047278 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__1__Impl_in_rule__XListLiteral__Group__147336 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__2_in_rule__XListLiteral__Group__147339 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_175_in_rule__XListLiteral__Group__1__Impl47367 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__2__Impl_in_rule__XListLiteral__Group__247398 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51D00000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__3_in_rule__XListLiteral__Group__247401 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_176_in_rule__XListLiteral__Group__2__Impl47429 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__3__Impl_in_rule__XListLiteral__Group__347460 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51D00000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__4_in_rule__XListLiteral__Group__347463 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3__0_in_rule__XListLiteral__Group__3__Impl47490 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group__4__Impl_in_rule__XListLiteral__Group__447521 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_174_in_rule__XListLiteral__Group__4__Impl47549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3__0__Impl_in_rule__XListLiteral__Group_3__047590 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3__1_in_rule__XListLiteral__Group_3__047593 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__ElementsAssignment_3_0_in_rule__XListLiteral__Group_3__0__Impl47620 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3__1__Impl_in_rule__XListLiteral__Group_3__147650 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3_1__0_in_rule__XListLiteral__Group_3__1__Impl47677 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3_1__0__Impl_in_rule__XListLiteral__Group_3_1__047712 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3_1__1_in_rule__XListLiteral__Group_3_1__047715 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XListLiteral__Group_3_1__0__Impl47743 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__Group_3_1__1__Impl_in_rule__XListLiteral__Group_3_1__147774 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XListLiteral__ElementsAssignment_3_1_1_in_rule__XListLiteral__Group_3_1__1__Impl47801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__0__Impl_in_rule__XClosure__Group__047835 = new BitSet(new long[]{0x0007F10C880001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000E00005L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__1_in_rule__XClosure__Group__047838 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_0__0_in_rule__XClosure__Group__0__Impl47865 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__1__Impl_in_rule__XClosure__Group__147895 = new BitSet(new long[]{0x0007F10C880001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000E00005L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__2_in_rule__XClosure__Group__147898 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1__0_in_rule__XClosure__Group__1__Impl47925 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__2__Impl_in_rule__XClosure__Group__247956 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000400000000000L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__3_in_rule__XClosure__Group__247959 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__ExpressionAssignment_2_in_rule__XClosure__Group__2__Impl47986 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group__3__Impl_in_rule__XClosure__Group__348016 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_174_in_rule__XClosure__Group__3__Impl48044 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_0__0__Impl_in_rule__XClosure__Group_0__048083 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_0_0__0_in_rule__XClosure__Group_0__0__Impl48110 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_0_0__0__Impl_in_rule__XClosure__Group_0_0__048142 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_0_0__1_in_rule__XClosure__Group_0_0__048145 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_0_0__1__Impl_in_rule__XClosure__Group_0_0__148203 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_176_in_rule__XClosure__Group_0_0__1__Impl48231 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1__0__Impl_in_rule__XClosure__Group_1__048266 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0__0_in_rule__XClosure__Group_1__0__Impl48293 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0__0__Impl_in_rule__XClosure__Group_1_0__048325 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000200000L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0__1_in_rule__XClosure__Group_1_0__048328 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0__0_in_rule__XClosure__Group_1_0__0__Impl48355 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0__1__Impl_in_rule__XClosure__Group_1_0__148386 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__ExplicitSyntaxAssignment_1_0_1_in_rule__XClosure__Group_1_0__1__Impl48413 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0__0__Impl_in_rule__XClosure__Group_1_0_0__048447 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0__1_in_rule__XClosure__Group_1_0_0__048450 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_0_in_rule__XClosure__Group_1_0_0__0__Impl48477 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0__1__Impl_in_rule__XClosure__Group_1_0_0__148507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0_1__0_in_rule__XClosure__Group_1_0_0__1__Impl48534 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0_1__0__Impl_in_rule__XClosure__Group_1_0_0_1__048569 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0_1__1_in_rule__XClosure__Group_1_0_0_1__048572 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XClosure__Group_1_0_0_1__0__Impl48600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__Group_1_0_0_1__1__Impl_in_rule__XClosure__Group_1_0_0_1__148631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XClosure__DeclaredFormalParametersAssignment_1_0_0_1_1_in_rule__XClosure__Group_1_0_0_1__1__Impl48658 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group__0__Impl_in_rule__XExpressionInClosure__Group__048692 = new BitSet(new long[]{0x0007F10C880001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000E00005L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group__1_in_rule__XExpressionInClosure__Group__048695 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group__1__Impl_in_rule__XExpressionInClosure__Group__148753 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group_1__0_in_rule__XExpressionInClosure__Group__1__Impl48780 = new BitSet(new long[]{0x0007F10C080001F2L,0x0044000000000000L,0xFE51900000000800L,0x0000000000C00005L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group_1__0__Impl_in_rule__XExpressionInClosure__Group_1__048815 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group_1__1_in_rule__XExpressionInClosure__Group_1__048818 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__ExpressionsAssignment_1_0_in_rule__XExpressionInClosure__Group_1__0__Impl48845 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XExpressionInClosure__Group_1__1__Impl_in_rule__XExpressionInClosure__Group_1__148875 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_179_in_rule__XExpressionInClosure__Group_1__1__Impl48904 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group__0__Impl_in_rule__XShortClosure__Group__048941 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group__1_in_rule__XShortClosure__Group__048944 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0__0_in_rule__XShortClosure__Group__0__Impl48971 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group__1__Impl_in_rule__XShortClosure__Group__149001 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__ExpressionAssignment_1_in_rule__XShortClosure__Group__1__Impl49028 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets021 {
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0__0__Impl_in_rule__XShortClosure__Group_0__049062 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0__0_in_rule__XShortClosure__Group_0__0__Impl49089 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0__0__Impl_in_rule__XShortClosure__Group_0_0__049121 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000200000L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0__1_in_rule__XShortClosure__Group_0_0__049124 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0__1__Impl_in_rule__XShortClosure__Group_0_0__149182 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000200000L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0__2_in_rule__XShortClosure__Group_0_0__149185 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1__0_in_rule__XShortClosure__Group_0_0__1__Impl49212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0__2__Impl_in_rule__XShortClosure__Group_0_0__249243 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__ExplicitSyntaxAssignment_0_0_2_in_rule__XShortClosure__Group_0_0__2__Impl49270 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1__0__Impl_in_rule__XShortClosure__Group_0_0_1__049306 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1__1_in_rule__XShortClosure__Group_0_0_1__049309 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_0_in_rule__XShortClosure__Group_0_0_1__0__Impl49336 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1__1__Impl_in_rule__XShortClosure__Group_0_0_1__149366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1_1__0_in_rule__XShortClosure__Group_0_0_1__1__Impl49393 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1_1__0__Impl_in_rule__XShortClosure__Group_0_0_1_1__049428 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1_1__1_in_rule__XShortClosure__Group_0_0_1_1__049431 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XShortClosure__Group_0_0_1_1__0__Impl49459 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__Group_0_0_1_1__1__Impl_in_rule__XShortClosure__Group_0_0_1_1__149490 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XShortClosure__DeclaredFormalParametersAssignment_0_0_1_1_1_in_rule__XShortClosure__Group_0_0_1_1__1__Impl49517 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XParenthesizedExpression__Group__0__Impl_in_rule__XParenthesizedExpression__Group__049551 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XParenthesizedExpression__Group__1_in_rule__XParenthesizedExpression__Group__049554 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XParenthesizedExpression__Group__0__Impl49582 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XParenthesizedExpression__Group__1__Impl_in_rule__XParenthesizedExpression__Group__149613 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XParenthesizedExpression__Group__2_in_rule__XParenthesizedExpression__Group__149616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleXExpression_in_rule__XParenthesizedExpression__Group__1__Impl49643 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XParenthesizedExpression__Group__2__Impl_in_rule__XParenthesizedExpression__Group__249672 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XParenthesizedExpression__Group__2__Impl49700 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__0__Impl_in_rule__XIfExpression__Group__049737 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__1_in_rule__XIfExpression__Group__049740 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__1__Impl_in_rule__XIfExpression__Group__149798 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__2_in_rule__XIfExpression__Group__149801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_180_in_rule__XIfExpression__Group__1__Impl49829 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__2__Impl_in_rule__XIfExpression__Group__249860 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__3_in_rule__XIfExpression__Group__249863 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XIfExpression__Group__2__Impl49891 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__3__Impl_in_rule__XIfExpression__Group__349922 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__4_in_rule__XIfExpression__Group__349925 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__IfAssignment_3_in_rule__XIfExpression__Group__3__Impl49952 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__4__Impl_in_rule__XIfExpression__Group__449982 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__5_in_rule__XIfExpression__Group__449985 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XIfExpression__Group__4__Impl50013 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__5__Impl_in_rule__XIfExpression__Group__550044 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0020000000000000L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__6_in_rule__XIfExpression__Group__550047 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__ThenAssignment_5_in_rule__XIfExpression__Group__5__Impl50074 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group__6__Impl_in_rule__XIfExpression__Group__650104 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group_6__0_in_rule__XIfExpression__Group__6__Impl50131 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group_6__0__Impl_in_rule__XIfExpression__Group_6__050176 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group_6__1_in_rule__XIfExpression__Group_6__050179 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_181_in_rule__XIfExpression__Group_6__0__Impl50208 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__Group_6__1__Impl_in_rule__XIfExpression__Group_6__150240 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XIfExpression__ElseAssignment_6_1_in_rule__XIfExpression__Group_6__1__Impl50267 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__0__Impl_in_rule__XSwitchExpression__Group__050301 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0040000000000000L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__1_in_rule__XSwitchExpression__Group__050304 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__1__Impl_in_rule__XSwitchExpression__Group__150362 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__2_in_rule__XSwitchExpression__Group__150365 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_182_in_rule__XSwitchExpression__Group__1__Impl50393 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__2__Impl_in_rule__XSwitchExpression__Group__250424 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__3_in_rule__XSwitchExpression__Group__250427 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Alternatives_2_in_rule__XSwitchExpression__Group__2__Impl50454 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__3__Impl_in_rule__XSwitchExpression__Group__350484 = new BitSet(new long[]{0x0008000080000010L,0x0008000000000000L,0x0180200000000800L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__4_in_rule__XSwitchExpression__Group__350487 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__XSwitchExpression__Group__3__Impl50515 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__4__Impl_in_rule__XSwitchExpression__Group__450546 = new BitSet(new long[]{0x0008000080000010L,0x0008000000000000L,0x0180200000000800L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__5_in_rule__XSwitchExpression__Group__450549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__CasesAssignment_4_in_rule__XSwitchExpression__Group__4__Impl50576 = new BitSet(new long[]{0x0000000080000012L,0x0000000000000000L,0x0180200000000800L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__5__Impl_in_rule__XSwitchExpression__Group__550607 = new BitSet(new long[]{0x0008000080000010L,0x0008000000000000L,0x0180200000000800L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__6_in_rule__XSwitchExpression__Group__550610 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_5__0_in_rule__XSwitchExpression__Group__5__Impl50637 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group__6__Impl_in_rule__XSwitchExpression__Group__650668 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__XSwitchExpression__Group__6__Impl50696 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0__0__Impl_in_rule__XSwitchExpression__Group_2_0__050741 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0__1_in_rule__XSwitchExpression__Group_2_0__050744 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0__0_in_rule__XSwitchExpression__Group_2_0__0__Impl50771 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0__1__Impl_in_rule__XSwitchExpression__Group_2_0__150801 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0__2_in_rule__XSwitchExpression__Group_2_0__150804 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__SwitchAssignment_2_0_1_in_rule__XSwitchExpression__Group_2_0__1__Impl50831 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0__2__Impl_in_rule__XSwitchExpression__Group_2_0__250861 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XSwitchExpression__Group_2_0__2__Impl50889 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0__0__Impl_in_rule__XSwitchExpression__Group_2_0_0__050926 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0_0__0_in_rule__XSwitchExpression__Group_2_0_0__0__Impl50953 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0_0__0__Impl_in_rule__XSwitchExpression__Group_2_0_0_0__050985 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0_0__1_in_rule__XSwitchExpression__Group_2_0_0_0__050988 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XSwitchExpression__Group_2_0_0_0__0__Impl51016 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0_0__1__Impl_in_rule__XSwitchExpression__Group_2_0_0_0__151047 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0_0__2_in_rule__XSwitchExpression__Group_2_0_0_0__151050 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__DeclaredParamAssignment_2_0_0_0_1_in_rule__XSwitchExpression__Group_2_0_0_0__1__Impl51077 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_0_0_0__2__Impl_in_rule__XSwitchExpression__Group_2_0_0_0__251107 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_183_in_rule__XSwitchExpression__Group_2_0_0_0__2__Impl51135 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1__0__Impl_in_rule__XSwitchExpression__Group_2_1__051172 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1__1_in_rule__XSwitchExpression__Group_2_1__051175 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1_0__0_in_rule__XSwitchExpression__Group_2_1__0__Impl51202 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1__1__Impl_in_rule__XSwitchExpression__Group_2_1__151233 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__SwitchAssignment_2_1_1_in_rule__XSwitchExpression__Group_2_1__1__Impl51260 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1_0__0__Impl_in_rule__XSwitchExpression__Group_2_1_0__051294 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1_0_0__0_in_rule__XSwitchExpression__Group_2_1_0__0__Impl51321 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1_0_0__0__Impl_in_rule__XSwitchExpression__Group_2_1_0_0__051353 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1_0_0__1_in_rule__XSwitchExpression__Group_2_1_0_0__051356 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__DeclaredParamAssignment_2_1_0_0_0_in_rule__XSwitchExpression__Group_2_1_0_0__0__Impl51383 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_2_1_0_0__1__Impl_in_rule__XSwitchExpression__Group_2_1_0_0__151413 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_183_in_rule__XSwitchExpression__Group_2_1_0_0__1__Impl51441 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets022 {
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_5__0__Impl_in_rule__XSwitchExpression__Group_5__051476 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_5__1_in_rule__XSwitchExpression__Group_5__051479 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_51_in_rule__XSwitchExpression__Group_5__0__Impl51507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_5__1__Impl_in_rule__XSwitchExpression__Group_5__151538 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_5__2_in_rule__XSwitchExpression__Group_5__151541 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_183_in_rule__XSwitchExpression__Group_5__1__Impl51569 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__Group_5__2__Impl_in_rule__XSwitchExpression__Group_5__251600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSwitchExpression__DefaultAssignment_5_2_in_rule__XSwitchExpression__Group_5__2__Impl51627 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__0__Impl_in_rule__XCasePart__Group__051663 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0180200000000800L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__1_in_rule__XCasePart__Group__051666 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__1__Impl_in_rule__XCasePart__Group__151724 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0180200000000800L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__2_in_rule__XCasePart__Group__151727 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__TypeGuardAssignment_1_in_rule__XCasePart__Group__1__Impl51754 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__2__Impl_in_rule__XCasePart__Group__251785 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0180200000000800L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__3_in_rule__XCasePart__Group__251788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_2__0_in_rule__XCasePart__Group__2__Impl51815 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group__3__Impl_in_rule__XCasePart__Group__351846 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Alternatives_3_in_rule__XCasePart__Group__3__Impl51873 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_2__0__Impl_in_rule__XCasePart__Group_2__051911 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_2__1_in_rule__XCasePart__Group_2__051914 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_184_in_rule__XCasePart__Group_2__0__Impl51942 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_2__1__Impl_in_rule__XCasePart__Group_2__151973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__CaseAssignment_2_1_in_rule__XCasePart__Group_2__1__Impl52000 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_3_0__0__Impl_in_rule__XCasePart__Group_3_0__052034 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_3_0__1_in_rule__XCasePart__Group_3_0__052037 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_183_in_rule__XCasePart__Group_3_0__0__Impl52065 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__Group_3_0__1__Impl_in_rule__XCasePart__Group_3_0__152096 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCasePart__ThenAssignment_3_0_1_in_rule__XCasePart__Group_3_0__1__Impl52123 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__0__Impl_in_rule__XForLoopExpression__Group__052157 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__1_in_rule__XForLoopExpression__Group__052160 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0__0_in_rule__XForLoopExpression__Group__0__Impl52187 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__1__Impl_in_rule__XForLoopExpression__Group__152217 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__2_in_rule__XForLoopExpression__Group__152220 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__ForExpressionAssignment_1_in_rule__XForLoopExpression__Group__1__Impl52247 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__2__Impl_in_rule__XForLoopExpression__Group__252277 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__3_in_rule__XForLoopExpression__Group__252280 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XForLoopExpression__Group__2__Impl52308 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group__3__Impl_in_rule__XForLoopExpression__Group__352339 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__EachExpressionAssignment_3_in_rule__XForLoopExpression__Group__3__Impl52366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0__0__Impl_in_rule__XForLoopExpression__Group_0__052404 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__0_in_rule__XForLoopExpression__Group_0__0__Impl52431 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__0__Impl_in_rule__XForLoopExpression__Group_0_0__052463 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__1_in_rule__XForLoopExpression__Group_0_0__052466 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__1__Impl_in_rule__XForLoopExpression__Group_0_0__152524 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__2_in_rule__XForLoopExpression__Group_0_0__152527 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_118_in_rule__XForLoopExpression__Group_0_0__1__Impl52555 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__2__Impl_in_rule__XForLoopExpression__Group_0_0__252586 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__3_in_rule__XForLoopExpression__Group_0_0__252589 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XForLoopExpression__Group_0_0__2__Impl52617 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__3__Impl_in_rule__XForLoopExpression__Group_0_0__352648 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0080000000000000L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__4_in_rule__XForLoopExpression__Group_0_0__352651 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__DeclaredParamAssignment_0_0_3_in_rule__XForLoopExpression__Group_0_0__3__Impl52678 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XForLoopExpression__Group_0_0__4__Impl_in_rule__XForLoopExpression__Group_0_0__452708 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_183_in_rule__XForLoopExpression__Group_0_0__4__Impl52736 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__0__Impl_in_rule__XBasicForLoopExpression__Group__052777 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__1_in_rule__XBasicForLoopExpression__Group__052780 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__1__Impl_in_rule__XBasicForLoopExpression__Group__152838 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__2_in_rule__XBasicForLoopExpression__Group__152841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_118_in_rule__XBasicForLoopExpression__Group__1__Impl52869 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__2__Impl_in_rule__XBasicForLoopExpression__Group__252900 = new BitSet(new long[]{0x0007F10C080001F0L,0x0044000000000000L,0xFE59900000000800L,0x0000000000C00005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__3_in_rule__XBasicForLoopExpression__Group__252903 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XBasicForLoopExpression__Group__2__Impl52931 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__3__Impl_in_rule__XBasicForLoopExpression__Group__352962 = new BitSet(new long[]{0x0007F10C080001F0L,0x0044000000000000L,0xFE59900000000800L,0x0000000000C00005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__4_in_rule__XBasicForLoopExpression__Group__352965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3__0_in_rule__XBasicForLoopExpression__Group__3__Impl52992 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__4__Impl_in_rule__XBasicForLoopExpression__Group__453023 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE59900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__5_in_rule__XBasicForLoopExpression__Group__453026 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_179_in_rule__XBasicForLoopExpression__Group__4__Impl53054 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__5__Impl_in_rule__XBasicForLoopExpression__Group__553085 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE59900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__6_in_rule__XBasicForLoopExpression__Group__553088 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__ExpressionAssignment_5_in_rule__XBasicForLoopExpression__Group__5__Impl53115 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__6__Impl_in_rule__XBasicForLoopExpression__Group__653146 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__7_in_rule__XBasicForLoopExpression__Group__653149 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_179_in_rule__XBasicForLoopExpression__Group__6__Impl53177 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__7__Impl_in_rule__XBasicForLoopExpression__Group__753208 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__8_in_rule__XBasicForLoopExpression__Group__753211 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7__0_in_rule__XBasicForLoopExpression__Group__7__Impl53238 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__8__Impl_in_rule__XBasicForLoopExpression__Group__853269 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__9_in_rule__XBasicForLoopExpression__Group__853272 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XBasicForLoopExpression__Group__8__Impl53300 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group__9__Impl_in_rule__XBasicForLoopExpression__Group__953331 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__EachExpressionAssignment_9_in_rule__XBasicForLoopExpression__Group__9__Impl53358 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3__0__Impl_in_rule__XBasicForLoopExpression__Group_3__053408 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3__1_in_rule__XBasicForLoopExpression__Group_3__053411 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__InitExpressionsAssignment_3_0_in_rule__XBasicForLoopExpression__Group_3__0__Impl53438 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3__1__Impl_in_rule__XBasicForLoopExpression__Group_3__153468 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3_1__0_in_rule__XBasicForLoopExpression__Group_3__1__Impl53495 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3_1__0__Impl_in_rule__XBasicForLoopExpression__Group_3_1__053530 = new BitSet(new long[]{0x0007F10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000C00005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3_1__1_in_rule__XBasicForLoopExpression__Group_3_1__053533 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XBasicForLoopExpression__Group_3_1__0__Impl53561 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_3_1__1__Impl_in_rule__XBasicForLoopExpression__Group_3_1__153592 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__InitExpressionsAssignment_3_1_1_in_rule__XBasicForLoopExpression__Group_3_1__1__Impl53619 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7__0__Impl_in_rule__XBasicForLoopExpression__Group_7__053653 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7__1_in_rule__XBasicForLoopExpression__Group_7__053656 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_0_in_rule__XBasicForLoopExpression__Group_7__0__Impl53683 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7__1__Impl_in_rule__XBasicForLoopExpression__Group_7__153713 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7_1__0_in_rule__XBasicForLoopExpression__Group_7__1__Impl53740 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7_1__0__Impl_in_rule__XBasicForLoopExpression__Group_7_1__053775 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7_1__1_in_rule__XBasicForLoopExpression__Group_7_1__053778 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XBasicForLoopExpression__Group_7_1__0__Impl53806 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets023 {
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__Group_7_1__1__Impl_in_rule__XBasicForLoopExpression__Group_7_1__153837 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBasicForLoopExpression__UpdateExpressionsAssignment_7_1_1_in_rule__XBasicForLoopExpression__Group_7_1__1__Impl53864 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__0__Impl_in_rule__XWhileExpression__Group__053898 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0200000000000000L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__1_in_rule__XWhileExpression__Group__053901 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__1__Impl_in_rule__XWhileExpression__Group__153959 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__2_in_rule__XWhileExpression__Group__153962 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_185_in_rule__XWhileExpression__Group__1__Impl53990 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__2__Impl_in_rule__XWhileExpression__Group__254021 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__3_in_rule__XWhileExpression__Group__254024 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XWhileExpression__Group__2__Impl54052 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__3__Impl_in_rule__XWhileExpression__Group__354083 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__4_in_rule__XWhileExpression__Group__354086 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__PredicateAssignment_3_in_rule__XWhileExpression__Group__3__Impl54113 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__4__Impl_in_rule__XWhileExpression__Group__454143 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__5_in_rule__XWhileExpression__Group__454146 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XWhileExpression__Group__4__Impl54174 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__Group__5__Impl_in_rule__XWhileExpression__Group__554205 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XWhileExpression__BodyAssignment_5_in_rule__XWhileExpression__Group__5__Impl54232 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__0__Impl_in_rule__XDoWhileExpression__Group__054274 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__1_in_rule__XDoWhileExpression__Group__054277 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__1__Impl_in_rule__XDoWhileExpression__Group__154335 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__2_in_rule__XDoWhileExpression__Group__154338 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_186_in_rule__XDoWhileExpression__Group__1__Impl54366 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__2__Impl_in_rule__XDoWhileExpression__Group__254397 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0200000000000000L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__3_in_rule__XDoWhileExpression__Group__254400 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__BodyAssignment_2_in_rule__XDoWhileExpression__Group__2__Impl54427 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__3__Impl_in_rule__XDoWhileExpression__Group__354457 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__4_in_rule__XDoWhileExpression__Group__354460 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_185_in_rule__XDoWhileExpression__Group__3__Impl54488 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__4__Impl_in_rule__XDoWhileExpression__Group__454519 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__5_in_rule__XDoWhileExpression__Group__454522 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XDoWhileExpression__Group__4__Impl54550 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__5__Impl_in_rule__XDoWhileExpression__Group__554581 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__6_in_rule__XDoWhileExpression__Group__554584 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__PredicateAssignment_5_in_rule__XDoWhileExpression__Group__5__Impl54611 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XDoWhileExpression__Group__6__Impl_in_rule__XDoWhileExpression__Group__654641 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XDoWhileExpression__Group__6__Impl54669 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__0__Impl_in_rule__XBlockExpression__Group__054714 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__1_in_rule__XBlockExpression__Group__054717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__1__Impl_in_rule__XBlockExpression__Group__154775 = new BitSet(new long[]{0x0007F10C080001F0L,0x004C000000000000L,0xFE51900000000800L,0x0000000000C00005L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__2_in_rule__XBlockExpression__Group__154778 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_114_in_rule__XBlockExpression__Group__1__Impl54806 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__2__Impl_in_rule__XBlockExpression__Group__254837 = new BitSet(new long[]{0x0007F10C080001F0L,0x004C000000000000L,0xFE51900000000800L,0x0000000000C00005L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__3_in_rule__XBlockExpression__Group__254840 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group_2__0_in_rule__XBlockExpression__Group__2__Impl54867 = new BitSet(new long[]{0x0007F10C080001F2L,0x0044000000000000L,0xFE51900000000800L,0x0000000000C00005L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group__3__Impl_in_rule__XBlockExpression__Group__354898 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_115_in_rule__XBlockExpression__Group__3__Impl54926 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group_2__0__Impl_in_rule__XBlockExpression__Group_2__054965 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group_2__1_in_rule__XBlockExpression__Group_2__054968 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__ExpressionsAssignment_2_0_in_rule__XBlockExpression__Group_2__0__Impl54995 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBlockExpression__Group_2__1__Impl_in_rule__XBlockExpression__Group_2__155025 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_179_in_rule__XBlockExpression__Group_2__1__Impl55054 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__0__Impl_in_rule__XVariableDeclaration__Group__055091 = new BitSet(new long[]{0x0000100000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000400000L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__1_in_rule__XVariableDeclaration__Group__055094 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__1__Impl_in_rule__XVariableDeclaration__Group__155152 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__2_in_rule__XVariableDeclaration__Group__155155 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Alternatives_1_in_rule__XVariableDeclaration__Group__1__Impl55182 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__2__Impl_in_rule__XVariableDeclaration__Group__255212 = new BitSet(new long[]{0x0000000000002000L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__3_in_rule__XVariableDeclaration__Group__255215 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Alternatives_2_in_rule__XVariableDeclaration__Group__2__Impl55242 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group__3__Impl_in_rule__XVariableDeclaration__Group__355272 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_3__0_in_rule__XVariableDeclaration__Group__3__Impl55299 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_2_0__0__Impl_in_rule__XVariableDeclaration__Group_2_0__055338 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_2_0_0__0_in_rule__XVariableDeclaration__Group_2_0__0__Impl55365 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_2_0_0__0__Impl_in_rule__XVariableDeclaration__Group_2_0_0__055397 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_2_0_0__1_in_rule__XVariableDeclaration__Group_2_0_0__055400 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__TypeAssignment_2_0_0_0_in_rule__XVariableDeclaration__Group_2_0_0__0__Impl55427 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_2_0_0__1__Impl_in_rule__XVariableDeclaration__Group_2_0_0__155457 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__NameAssignment_2_0_0_1_in_rule__XVariableDeclaration__Group_2_0_0__1__Impl55484 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_3__0__Impl_in_rule__XVariableDeclaration__Group_3__055518 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_3__1_in_rule__XVariableDeclaration__Group_3__055521 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_13_in_rule__XVariableDeclaration__Group_3__0__Impl55549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__Group_3__1__Impl_in_rule__XVariableDeclaration__Group_3__155580 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XVariableDeclaration__RightAssignment_3_1_in_rule__XVariableDeclaration__Group_3__1__Impl55607 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmFormalParameter__Group__0__Impl_in_rule__JvmFormalParameter__Group__055641 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__JvmFormalParameter__Group__1_in_rule__JvmFormalParameter__Group__055644 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmFormalParameter__ParameterTypeAssignment_0_in_rule__JvmFormalParameter__Group__0__Impl55671 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmFormalParameter__Group__1__Impl_in_rule__JvmFormalParameter__Group__155702 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmFormalParameter__NameAssignment_1_in_rule__JvmFormalParameter__Group__1__Impl55729 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__FullJvmFormalParameter__Group__0__Impl_in_rule__FullJvmFormalParameter__Group__055763 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__FullJvmFormalParameter__Group__1_in_rule__FullJvmFormalParameter__Group__055766 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__FullJvmFormalParameter__ParameterTypeAssignment_0_in_rule__FullJvmFormalParameter__Group__0__Impl55793 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__FullJvmFormalParameter__Group__1__Impl_in_rule__FullJvmFormalParameter__Group__155823 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__FullJvmFormalParameter__NameAssignment_1_in_rule__FullJvmFormalParameter__Group__1__Impl55850 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__0__Impl_in_rule__XFeatureCall__Group__055884 = new BitSet(new long[]{0x0003E00008000010L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__1_in_rule__XFeatureCall__Group__055887 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__1__Impl_in_rule__XFeatureCall__Group__155945 = new BitSet(new long[]{0x0003E00008000010L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__2_in_rule__XFeatureCall__Group__155948 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__0_in_rule__XFeatureCall__Group__1__Impl55975 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__2__Impl_in_rule__XFeatureCall__Group__256006 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000800L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__3_in_rule__XFeatureCall__Group__256009 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__FeatureAssignment_2_in_rule__XFeatureCall__Group__2__Impl56036 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__3__Impl_in_rule__XFeatureCall__Group__356066 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000800L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__4_in_rule__XFeatureCall__Group__356069 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3__0_in_rule__XFeatureCall__Group__3__Impl56096 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group__4__Impl_in_rule__XFeatureCall__Group__456127 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__FeatureCallArgumentsAssignment_4_in_rule__XFeatureCall__Group__4__Impl56154 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__0__Impl_in_rule__XFeatureCall__Group_1__056195 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__1_in_rule__XFeatureCall__Group_1__056198 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__XFeatureCall__Group_1__0__Impl56226 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets024 {
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__1__Impl_in_rule__XFeatureCall__Group_1__156257 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__2_in_rule__XFeatureCall__Group_1__156260 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__TypeArgumentsAssignment_1_1_in_rule__XFeatureCall__Group_1__1__Impl56287 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__2__Impl_in_rule__XFeatureCall__Group_1__256317 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__3_in_rule__XFeatureCall__Group_1__256320 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1_2__0_in_rule__XFeatureCall__Group_1__2__Impl56347 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1__3__Impl_in_rule__XFeatureCall__Group_1__356378 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__XFeatureCall__Group_1__3__Impl56406 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1_2__0__Impl_in_rule__XFeatureCall__Group_1_2__056445 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1_2__1_in_rule__XFeatureCall__Group_1_2__056448 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XFeatureCall__Group_1_2__0__Impl56476 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_1_2__1__Impl_in_rule__XFeatureCall__Group_1_2__156507 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__TypeArgumentsAssignment_1_2_1_in_rule__XFeatureCall__Group_1_2__1__Impl56534 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3__0__Impl_in_rule__XFeatureCall__Group_3__056568 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000A00005L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3__1_in_rule__XFeatureCall__Group_3__056571 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__ExplicitOperationCallAssignment_3_0_in_rule__XFeatureCall__Group_3__0__Impl56598 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3__1__Impl_in_rule__XFeatureCall__Group_3__156628 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000A00005L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3__2_in_rule__XFeatureCall__Group_3__156631 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Alternatives_3_1_in_rule__XFeatureCall__Group_3__1__Impl56658 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3__2__Impl_in_rule__XFeatureCall__Group_3__256689 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XFeatureCall__Group_3__2__Impl56717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1__0__Impl_in_rule__XFeatureCall__Group_3_1_1__056754 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1__1_in_rule__XFeatureCall__Group_3_1_1__056757 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_0_in_rule__XFeatureCall__Group_3_1_1__0__Impl56784 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1__1__Impl_in_rule__XFeatureCall__Group_3_1_1__156814 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1_1__0_in_rule__XFeatureCall__Group_3_1_1__1__Impl56841 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1_1__0__Impl_in_rule__XFeatureCall__Group_3_1_1_1__056876 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1_1__1_in_rule__XFeatureCall__Group_3_1_1_1__056879 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XFeatureCall__Group_3_1_1_1__0__Impl56907 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__Group_3_1_1_1__1__Impl_in_rule__XFeatureCall__Group_3_1_1_1__156938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFeatureCall__FeatureCallArgumentsAssignment_3_1_1_1_1_in_rule__XFeatureCall__Group_3_1_1_1__1__Impl56965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__0__Impl_in_rule__XConstructorCall__Group__056999 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__1_in_rule__XConstructorCall__Group__057002 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__1__Impl_in_rule__XConstructorCall__Group__157060 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__2_in_rule__XConstructorCall__Group__157063 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_187_in_rule__XConstructorCall__Group__1__Impl57091 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__2__Impl_in_rule__XConstructorCall__Group__257122 = new BitSet(new long[]{0x0000000008000000L,0x0000000000000000L,0x0001000000000800L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__3_in_rule__XConstructorCall__Group__257125 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__ConstructorAssignment_2_in_rule__XConstructorCall__Group__2__Impl57152 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__3__Impl_in_rule__XConstructorCall__Group__357182 = new BitSet(new long[]{0x0000000008000000L,0x0000000000000000L,0x0001000000000800L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__4_in_rule__XConstructorCall__Group__357185 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__0_in_rule__XConstructorCall__Group__3__Impl57212 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__4__Impl_in_rule__XConstructorCall__Group__457243 = new BitSet(new long[]{0x0000000008000000L,0x0000000000000000L,0x0001000000000800L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__5_in_rule__XConstructorCall__Group__457246 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4__0_in_rule__XConstructorCall__Group__4__Impl57273 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group__5__Impl_in_rule__XConstructorCall__Group__557304 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__ArgumentsAssignment_5_in_rule__XConstructorCall__Group__5__Impl57331 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__0__Impl_in_rule__XConstructorCall__Group_3__057374 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__1_in_rule__XConstructorCall__Group_3__057377 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__XConstructorCall__Group_3__0__Impl57406 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__1__Impl_in_rule__XConstructorCall__Group_3__157438 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__2_in_rule__XConstructorCall__Group_3__157441 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__TypeArgumentsAssignment_3_1_in_rule__XConstructorCall__Group_3__1__Impl57468 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__2__Impl_in_rule__XConstructorCall__Group_3__257498 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__3_in_rule__XConstructorCall__Group_3__257501 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3_2__0_in_rule__XConstructorCall__Group_3__2__Impl57528 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3__3__Impl_in_rule__XConstructorCall__Group_3__357559 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__XConstructorCall__Group_3__3__Impl57587 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3_2__0__Impl_in_rule__XConstructorCall__Group_3_2__057626 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3_2__1_in_rule__XConstructorCall__Group_3_2__057629 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XConstructorCall__Group_3_2__0__Impl57657 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_3_2__1__Impl_in_rule__XConstructorCall__Group_3_2__157688 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__TypeArgumentsAssignment_3_2_1_in_rule__XConstructorCall__Group_3_2__1__Impl57715 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4__0__Impl_in_rule__XConstructorCall__Group_4__057749 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000A00005L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4__1_in_rule__XConstructorCall__Group_4__057752 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__ExplicitConstructorCallAssignment_4_0_in_rule__XConstructorCall__Group_4__0__Impl57779 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4__1__Impl_in_rule__XConstructorCall__Group_4__157809 = new BitSet(new long[]{0x0007E10C880001F0L,0x0044000000000000L,0xFE51900000001800L,0x0000000000A00005L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4__2_in_rule__XConstructorCall__Group_4__157812 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Alternatives_4_1_in_rule__XConstructorCall__Group_4__1__Impl57839 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4__2__Impl_in_rule__XConstructorCall__Group_4__257870 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XConstructorCall__Group_4__2__Impl57898 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1__0__Impl_in_rule__XConstructorCall__Group_4_1_1__057935 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1__1_in_rule__XConstructorCall__Group_4_1_1__057938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__ArgumentsAssignment_4_1_1_0_in_rule__XConstructorCall__Group_4_1_1__0__Impl57965 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1__1__Impl_in_rule__XConstructorCall__Group_4_1_1__157995 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1_1__0_in_rule__XConstructorCall__Group_4_1_1__1__Impl58022 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1_1__0__Impl_in_rule__XConstructorCall__Group_4_1_1_1__058057 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1_1__1_in_rule__XConstructorCall__Group_4_1_1_1__058060 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XConstructorCall__Group_4_1_1_1__0__Impl58088 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__Group_4_1_1_1__1__Impl_in_rule__XConstructorCall__Group_4_1_1_1__158119 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XConstructorCall__ArgumentsAssignment_4_1_1_1_1_in_rule__XConstructorCall__Group_4_1_1_1__1__Impl58146 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBooleanLiteral__Group__0__Impl_in_rule__XBooleanLiteral__Group__058180 = new BitSet(new long[]{0x0004000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000800000L});
-        public static final BitSet FOLLOW_rule__XBooleanLiteral__Group__1_in_rule__XBooleanLiteral__Group__058183 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBooleanLiteral__Group__1__Impl_in_rule__XBooleanLiteral__Group__158241 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XBooleanLiteral__Alternatives_1_in_rule__XBooleanLiteral__Group__1__Impl58268 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XNullLiteral__Group__0__Impl_in_rule__XNullLiteral__Group__058302 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x1000000000000000L});
-        public static final BitSet FOLLOW_rule__XNullLiteral__Group__1_in_rule__XNullLiteral__Group__058305 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XNullLiteral__Group__1__Impl_in_rule__XNullLiteral__Group__158363 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_188_in_rule__XNullLiteral__Group__1__Impl58391 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XNumberLiteral__Group__0__Impl_in_rule__XNumberLiteral__Group__058426 = new BitSet(new long[]{0x00000000000001C0L});
-        public static final BitSet FOLLOW_rule__XNumberLiteral__Group__1_in_rule__XNumberLiteral__Group__058429 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XNumberLiteral__Group__1__Impl_in_rule__XNumberLiteral__Group__158487 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XNumberLiteral__ValueAssignment_1_in_rule__XNumberLiteral__Group__1__Impl58514 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XStringLiteral__Group__0__Impl_in_rule__XStringLiteral__Group__058548 = new BitSet(new long[]{0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__XStringLiteral__Group__1_in_rule__XStringLiteral__Group__058551 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XStringLiteral__Group__1__Impl_in_rule__XStringLiteral__Group__158609 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XStringLiteral__ValueAssignment_1_in_rule__XStringLiteral__Group__1__Impl58636 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__0__Impl_in_rule__XTypeLiteral__Group__058670 = new BitSet(new long[]{0x00040000000001E0L,0x0000000000000000L,0x3001800000000000L,0x0000000000800000L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__1_in_rule__XTypeLiteral__Group__058673 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__1__Impl_in_rule__XTypeLiteral__Group__158731 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-    }
-
-    protected static class FollowSets025 {
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__2_in_rule__XTypeLiteral__Group__158734 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_189_in_rule__XTypeLiteral__Group__1__Impl58762 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__2__Impl_in_rule__XTypeLiteral__Group__258793 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__3_in_rule__XTypeLiteral__Group__258796 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XTypeLiteral__Group__2__Impl58824 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__3__Impl_in_rule__XTypeLiteral__Group__358855 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000001000L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__4_in_rule__XTypeLiteral__Group__358858 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__TypeAssignment_3_in_rule__XTypeLiteral__Group__3__Impl58885 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__4__Impl_in_rule__XTypeLiteral__Group__458915 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000001000L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__5_in_rule__XTypeLiteral__Group__458918 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__ArrayDimensionsAssignment_4_in_rule__XTypeLiteral__Group__4__Impl58945 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__XTypeLiteral__Group__5__Impl_in_rule__XTypeLiteral__Group__558976 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XTypeLiteral__Group__5__Impl59004 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XThrowExpression__Group__0__Impl_in_rule__XThrowExpression__Group__059047 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x4000000000000000L});
-        public static final BitSet FOLLOW_rule__XThrowExpression__Group__1_in_rule__XThrowExpression__Group__059050 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XThrowExpression__Group__1__Impl_in_rule__XThrowExpression__Group__159108 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XThrowExpression__Group__2_in_rule__XThrowExpression__Group__159111 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_190_in_rule__XThrowExpression__Group__1__Impl59139 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XThrowExpression__Group__2__Impl_in_rule__XThrowExpression__Group__259170 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XThrowExpression__ExpressionAssignment_2_in_rule__XThrowExpression__Group__2__Impl59197 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XReturnExpression__Group__0__Impl_in_rule__XReturnExpression__Group__059233 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L});
-        public static final BitSet FOLLOW_rule__XReturnExpression__Group__1_in_rule__XReturnExpression__Group__059236 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XReturnExpression__Group__1__Impl_in_rule__XReturnExpression__Group__159294 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XReturnExpression__Group__2_in_rule__XReturnExpression__Group__159297 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_191_in_rule__XReturnExpression__Group__1__Impl59325 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XReturnExpression__Group__2__Impl_in_rule__XReturnExpression__Group__259356 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XReturnExpression__ExpressionAssignment_2_in_rule__XReturnExpression__Group__2__Impl59383 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__0__Impl_in_rule__XTryCatchFinallyExpression__Group__059420 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__1_in_rule__XTryCatchFinallyExpression__Group__059423 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__1__Impl_in_rule__XTryCatchFinallyExpression__Group__159481 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__2_in_rule__XTryCatchFinallyExpression__Group__159484 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_192_in_rule__XTryCatchFinallyExpression__Group__1__Impl59512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__2__Impl_in_rule__XTryCatchFinallyExpression__Group__259543 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x000000000000000AL});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__3_in_rule__XTryCatchFinallyExpression__Group__259546 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__ExpressionAssignment_2_in_rule__XTryCatchFinallyExpression__Group__2__Impl59573 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group__3__Impl_in_rule__XTryCatchFinallyExpression__Group__359603 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Alternatives_3_in_rule__XTryCatchFinallyExpression__Group__3__Impl59630 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0__0__Impl_in_rule__XTryCatchFinallyExpression__Group_3_0__059668 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0__1_in_rule__XTryCatchFinallyExpression__Group_3_0__059671 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__CatchClausesAssignment_3_0_0_in_rule__XTryCatchFinallyExpression__Group_3_0__0__Impl59700 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__CatchClausesAssignment_3_0_0_in_rule__XTryCatchFinallyExpression__Group_3_0__0__Impl59712 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0__1__Impl_in_rule__XTryCatchFinallyExpression__Group_3_0__159745 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0_1__0_in_rule__XTryCatchFinallyExpression__Group_3_0__1__Impl59772 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0_1__0__Impl_in_rule__XTryCatchFinallyExpression__Group_3_0_1__059807 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0_1__1_in_rule__XTryCatchFinallyExpression__Group_3_0_1__059810 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_193_in_rule__XTryCatchFinallyExpression__Group_3_0_1__0__Impl59839 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_0_1__1__Impl_in_rule__XTryCatchFinallyExpression__Group_3_0_1__159871 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_0_1_1_in_rule__XTryCatchFinallyExpression__Group_3_0_1__1__Impl59898 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_1__0__Impl_in_rule__XTryCatchFinallyExpression__Group_3_1__059932 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_1__1_in_rule__XTryCatchFinallyExpression__Group_3_1__059935 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_193_in_rule__XTryCatchFinallyExpression__Group_3_1__0__Impl59963 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__Group_3_1__1__Impl_in_rule__XTryCatchFinallyExpression__Group_3_1__159994 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XTryCatchFinallyExpression__FinallyExpressionAssignment_3_1_1_in_rule__XTryCatchFinallyExpression__Group_3_1__1__Impl60021 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__0__Impl_in_rule__XSynchronizedExpression__Group__060055 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__1_in_rule__XSynchronizedExpression__Group__060058 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0__0_in_rule__XSynchronizedExpression__Group__0__Impl60085 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__1__Impl_in_rule__XSynchronizedExpression__Group__160115 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__2_in_rule__XSynchronizedExpression__Group__160118 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__ParamAssignment_1_in_rule__XSynchronizedExpression__Group__1__Impl60145 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__2__Impl_in_rule__XSynchronizedExpression__Group__260175 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__3_in_rule__XSynchronizedExpression__Group__260178 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XSynchronizedExpression__Group__2__Impl60206 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group__3__Impl_in_rule__XSynchronizedExpression__Group__360237 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__ExpressionAssignment_3_in_rule__XSynchronizedExpression__Group__3__Impl60264 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0__0__Impl_in_rule__XSynchronizedExpression__Group_0__060302 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0_0__0_in_rule__XSynchronizedExpression__Group_0__0__Impl60329 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0_0__0__Impl_in_rule__XSynchronizedExpression__Group_0_0__060361 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0_0__1_in_rule__XSynchronizedExpression__Group_0_0__060364 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0_0__1__Impl_in_rule__XSynchronizedExpression__Group_0_0__160422 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0_0__2_in_rule__XSynchronizedExpression__Group_0_0__160425 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_194_in_rule__XSynchronizedExpression__Group_0_0__1__Impl60453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XSynchronizedExpression__Group_0_0__2__Impl_in_rule__XSynchronizedExpression__Group_0_0__260484 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XSynchronizedExpression__Group_0_0__2__Impl60512 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__0__Impl_in_rule__XCatchClause__Group__060549 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__1_in_rule__XCatchClause__Group__060552 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_195_in_rule__XCatchClause__Group__0__Impl60581 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__1__Impl_in_rule__XCatchClause__Group__160613 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__2_in_rule__XCatchClause__Group__160616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XCatchClause__Group__1__Impl60644 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__2__Impl_in_rule__XCatchClause__Group__260675 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__3_in_rule__XCatchClause__Group__260678 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__DeclaredParamAssignment_2_in_rule__XCatchClause__Group__2__Impl60705 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__3__Impl_in_rule__XCatchClause__Group__360735 = new BitSet(new long[]{0x0007E10C080001F0L,0x0044000000000000L,0xFE51900000000800L,0x0000000000800005L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__4_in_rule__XCatchClause__Group__360738 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XCatchClause__Group__3__Impl60766 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__Group__4__Impl_in_rule__XCatchClause__Group__460797 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XCatchClause__ExpressionAssignment_4_in_rule__XCatchClause__Group__4__Impl60824 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Group_1__0__Impl_in_rule__Number__Group_1__060864 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__Number__Group_1__1_in_rule__Number__Group_1__060867 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Alternatives_1_0_in_rule__Number__Group_1__0__Impl60894 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Group_1__1__Impl_in_rule__Number__Group_1__160924 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Group_1_1__0_in_rule__Number__Group_1__1__Impl60951 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Group_1_1__0__Impl_in_rule__Number__Group_1_1__060986 = new BitSet(new long[]{0x0000000000000180L});
-        public static final BitSet FOLLOW_rule__Number__Group_1_1__1_in_rule__Number__Group_1_1__060989 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__Number__Group_1_1__0__Impl61017 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Group_1_1__1__Impl_in_rule__Number__Group_1_1__161048 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__Number__Alternatives_1_1_1_in_rule__Number__Group_1_1__1__Impl61075 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0__0__Impl_in_rule__JvmTypeReference__Group_0__061110 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0__1_in_rule__JvmTypeReference__Group_0__061113 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleJvmParameterizedTypeReference_in_rule__JvmTypeReference__Group_0__0__Impl61140 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets026 {
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0__1__Impl_in_rule__JvmTypeReference__Group_0__161169 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0_1__0_in_rule__JvmTypeReference__Group_0__1__Impl61196 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0_1__0__Impl_in_rule__JvmTypeReference__Group_0_1__061231 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0_1_0__0_in_rule__JvmTypeReference__Group_0_1__0__Impl61258 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0_1_0__0__Impl_in_rule__JvmTypeReference__Group_0_1_0__061290 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0001000000000000L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0_1_0__1_in_rule__JvmTypeReference__Group_0_1_0__061293 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmTypeReference__Group_0_1_0__1__Impl_in_rule__JvmTypeReference__Group_0_1_0__161351 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleArrayBrackets_in_rule__JvmTypeReference__Group_0_1_0__1__Impl61378 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ArrayBrackets__Group__0__Impl_in_rule__ArrayBrackets__Group__061411 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000400000000000L});
-        public static final BitSet FOLLOW_rule__ArrayBrackets__Group__1_in_rule__ArrayBrackets__Group__061414 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_176_in_rule__ArrayBrackets__Group__0__Impl61442 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__ArrayBrackets__Group__1__Impl_in_rule__ArrayBrackets__Group__161473 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_174_in_rule__ArrayBrackets__Group__1__Impl61501 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group__0__Impl_in_rule__XFunctionTypeRef__Group__061536 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group__1_in_rule__XFunctionTypeRef__Group__061539 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0__0_in_rule__XFunctionTypeRef__Group__0__Impl61566 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group__1__Impl_in_rule__XFunctionTypeRef__Group__161597 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group__2_in_rule__XFunctionTypeRef__Group__161600 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_31_in_rule__XFunctionTypeRef__Group__1__Impl61628 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group__2__Impl_in_rule__XFunctionTypeRef__Group__261659 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__ReturnTypeAssignment_2_in_rule__XFunctionTypeRef__Group__2__Impl61686 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0__0__Impl_in_rule__XFunctionTypeRef__Group_0__061722 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000001800L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0__1_in_rule__XFunctionTypeRef__Group_0__061725 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_139_in_rule__XFunctionTypeRef__Group_0__0__Impl61753 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0__1__Impl_in_rule__XFunctionTypeRef__Group_0__161784 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000001800L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0__2_in_rule__XFunctionTypeRef__Group_0__161787 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1__0_in_rule__XFunctionTypeRef__Group_0__1__Impl61814 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0__2__Impl_in_rule__XFunctionTypeRef__Group_0__261845 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_140_in_rule__XFunctionTypeRef__Group_0__2__Impl61873 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1__0__Impl_in_rule__XFunctionTypeRef__Group_0_1__061910 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1__1_in_rule__XFunctionTypeRef__Group_0_1__061913 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__ParamTypesAssignment_0_1_0_in_rule__XFunctionTypeRef__Group_0_1__0__Impl61940 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1__1__Impl_in_rule__XFunctionTypeRef__Group_0_1__161970 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1_1__0_in_rule__XFunctionTypeRef__Group_0_1__1__Impl61997 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1_1__0__Impl_in_rule__XFunctionTypeRef__Group_0_1_1__062032 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1_1__1_in_rule__XFunctionTypeRef__Group_0_1_1__062035 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__XFunctionTypeRef__Group_0_1_1__0__Impl62063 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__Group_0_1_1__1__Impl_in_rule__XFunctionTypeRef__Group_0_1_1__162094 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XFunctionTypeRef__ParamTypesAssignment_0_1_1_1_in_rule__XFunctionTypeRef__Group_0_1_1__1__Impl62121 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group__0__Impl_in_rule__JvmParameterizedTypeReference__Group__062155 = new BitSet(new long[]{0x0000000008000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group__1_in_rule__JvmParameterizedTypeReference__Group__062158 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__TypeAssignment_0_in_rule__JvmParameterizedTypeReference__Group__0__Impl62185 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group__1__Impl_in_rule__JvmParameterizedTypeReference__Group__162215 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__0_in_rule__JvmParameterizedTypeReference__Group__1__Impl62242 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__0__Impl_in_rule__JvmParameterizedTypeReference__Group_1__062277 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__1_in_rule__JvmParameterizedTypeReference__Group_1__062280 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__JvmParameterizedTypeReference__Group_1__0__Impl62309 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__1__Impl_in_rule__JvmParameterizedTypeReference__Group_1__162341 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__2_in_rule__JvmParameterizedTypeReference__Group_1__162344 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_1_in_rule__JvmParameterizedTypeReference__Group_1__1__Impl62371 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__2__Impl_in_rule__JvmParameterizedTypeReference__Group_1__262401 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__3_in_rule__JvmParameterizedTypeReference__Group_1__262404 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_2__0_in_rule__JvmParameterizedTypeReference__Group_1__2__Impl62431 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__3__Impl_in_rule__JvmParameterizedTypeReference__Group_1__362462 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__4_in_rule__JvmParameterizedTypeReference__Group_1__362465 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__JvmParameterizedTypeReference__Group_1__3__Impl62493 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1__4__Impl_in_rule__JvmParameterizedTypeReference__Group_1__462524 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4__0_in_rule__JvmParameterizedTypeReference__Group_1__4__Impl62551 = new BitSet(new long[]{0x0000080000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_2__0__Impl_in_rule__JvmParameterizedTypeReference__Group_1_2__062592 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_2__1_in_rule__JvmParameterizedTypeReference__Group_1_2__062595 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__JvmParameterizedTypeReference__Group_1_2__0__Impl62623 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_2__1__Impl_in_rule__JvmParameterizedTypeReference__Group_1_2__162654 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_2_1_in_rule__JvmParameterizedTypeReference__Group_1_2__1__Impl62681 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4__0__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4__062715 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4__1_in_rule__JvmParameterizedTypeReference__Group_1_4__062718 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_0__0_in_rule__JvmParameterizedTypeReference__Group_1_4__0__Impl62745 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4__1__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4__162775 = new BitSet(new long[]{0x0000000008000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4__2_in_rule__JvmParameterizedTypeReference__Group_1_4__162778 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__TypeAssignment_1_4_1_in_rule__JvmParameterizedTypeReference__Group_1_4__1__Impl62805 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4__2__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4__262835 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__0_in_rule__JvmParameterizedTypeReference__Group_1_4__2__Impl62862 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_0__0__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_0__062899 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_0_0__0_in_rule__JvmParameterizedTypeReference__Group_1_4_0__0__Impl62926 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_0_0__0__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_0_0__062958 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_0_0__1_in_rule__JvmParameterizedTypeReference__Group_1_4_0_0__062961 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_0_0__1__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_0_0__163019 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__JvmParameterizedTypeReference__Group_1_4_0_0__1__Impl63047 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__0__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_2__063082 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__1_in_rule__JvmParameterizedTypeReference__Group_1_4_2__063085 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_27_in_rule__JvmParameterizedTypeReference__Group_1_4_2__0__Impl63114 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__1__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_2__163146 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__2_in_rule__JvmParameterizedTypeReference__Group_1_4_2__163149 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_1_in_rule__JvmParameterizedTypeReference__Group_1_4_2__1__Impl63176 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__2__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_2__263206 = new BitSet(new long[]{0x0000000004000000L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__3_in_rule__JvmParameterizedTypeReference__Group_1_4_2__263209 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2_2__0_in_rule__JvmParameterizedTypeReference__Group_1_4_2__2__Impl63236 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2__3__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_2__363267 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_26_in_rule__JvmParameterizedTypeReference__Group_1_4_2__3__Impl63295 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2_2__0__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_2_2__063334 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2_2__1_in_rule__JvmParameterizedTypeReference__Group_1_4_2_2__063337 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_173_in_rule__JvmParameterizedTypeReference__Group_1_4_2_2__0__Impl63365 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__Group_1_4_2_2__1__Impl_in_rule__JvmParameterizedTypeReference__Group_1_4_2_2__163396 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_2_1_in_rule__JvmParameterizedTypeReference__Group_1_4_2_2__1__Impl63423 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group__0__Impl_in_rule__JvmWildcardTypeReference__Group__063457 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L,0x0000000000000010L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group__1_in_rule__JvmWildcardTypeReference__Group__063460 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group__1__Impl_in_rule__JvmWildcardTypeReference__Group__163518 = new BitSet(new long[]{0x0002200000000000L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group__2_in_rule__JvmWildcardTypeReference__Group__163521 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_196_in_rule__JvmWildcardTypeReference__Group__1__Impl63549 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group__2__Impl_in_rule__JvmWildcardTypeReference__Group__263580 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Alternatives_2_in_rule__JvmWildcardTypeReference__Group__2__Impl63607 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets027 {
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_0__0__Impl_in_rule__JvmWildcardTypeReference__Group_2_0__063644 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_0__1_in_rule__JvmWildcardTypeReference__Group_2_0__063647 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_0_in_rule__JvmWildcardTypeReference__Group_2_0__0__Impl63674 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_0__1__Impl_in_rule__JvmWildcardTypeReference__Group_2_0__163704 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_1_in_rule__JvmWildcardTypeReference__Group_2_0__1__Impl63731 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_1__0__Impl_in_rule__JvmWildcardTypeReference__Group_2_1__063766 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_1__1_in_rule__JvmWildcardTypeReference__Group_2_1__063769 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_0_in_rule__JvmWildcardTypeReference__Group_2_1__0__Impl63796 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__Group_2_1__1__Impl_in_rule__JvmWildcardTypeReference__Group_2_1__163826 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_1_in_rule__JvmWildcardTypeReference__Group_2_1__1__Impl63853 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
-        public static final BitSet FOLLOW_rule__JvmUpperBound__Group__0__Impl_in_rule__JvmUpperBound__Group__063888 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__JvmUpperBound__Group__1_in_rule__JvmUpperBound__Group__063891 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_45_in_rule__JvmUpperBound__Group__0__Impl63919 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmUpperBound__Group__1__Impl_in_rule__JvmUpperBound__Group__163950 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmUpperBound__TypeReferenceAssignment_1_in_rule__JvmUpperBound__Group__1__Impl63977 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmUpperBoundAnded__Group__0__Impl_in_rule__JvmUpperBoundAnded__Group__064011 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__JvmUpperBoundAnded__Group__1_in_rule__JvmUpperBoundAnded__Group__064014 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_197_in_rule__JvmUpperBoundAnded__Group__0__Impl64042 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmUpperBoundAnded__Group__1__Impl_in_rule__JvmUpperBoundAnded__Group__164073 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmUpperBoundAnded__TypeReferenceAssignment_1_in_rule__JvmUpperBoundAnded__Group__1__Impl64100 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBound__Group__0__Impl_in_rule__JvmLowerBound__Group__064134 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__JvmLowerBound__Group__1_in_rule__JvmLowerBound__Group__064137 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_49_in_rule__JvmLowerBound__Group__0__Impl64165 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBound__Group__1__Impl_in_rule__JvmLowerBound__Group__164196 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBound__TypeReferenceAssignment_1_in_rule__JvmLowerBound__Group__1__Impl64223 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBoundAnded__Group__0__Impl_in_rule__JvmLowerBoundAnded__Group__064257 = new BitSet(new long[]{0x0000000080000010L,0x0000000000000000L,0x0000000000000800L});
-        public static final BitSet FOLLOW_rule__JvmLowerBoundAnded__Group__1_in_rule__JvmLowerBoundAnded__Group__064260 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_197_in_rule__JvmLowerBoundAnded__Group__0__Impl64288 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBoundAnded__Group__1__Impl_in_rule__JvmLowerBoundAnded__Group__164319 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__JvmLowerBoundAnded__TypeReferenceAssignment_1_in_rule__JvmLowerBoundAnded__Group__1__Impl64346 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedNameWithWildcard__Group__0__Impl_in_rule__QualifiedNameWithWildcard__Group__064382 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__QualifiedNameWithWildcard__Group__1_in_rule__QualifiedNameWithWildcard__Group__064385 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleQualifiedName_in_rule__QualifiedNameWithWildcard__Group__0__Impl64412 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedNameWithWildcard__Group__1__Impl_in_rule__QualifiedNameWithWildcard__Group__164441 = new BitSet(new long[]{0x0000001000000000L});
-        public static final BitSet FOLLOW_rule__QualifiedNameWithWildcard__Group__2_in_rule__QualifiedNameWithWildcard__Group__164444 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__QualifiedNameWithWildcard__Group__1__Impl64472 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedNameWithWildcard__Group__2__Impl_in_rule__QualifiedNameWithWildcard__Group__264503 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_36_in_rule__QualifiedNameWithWildcard__Group__2__Impl64531 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group__0__Impl_in_rule__XImportDeclaration__Group__064568 = new BitSet(new long[]{0x0000400000000010L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group__1_in_rule__XImportDeclaration__Group__064571 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_47_in_rule__XImportDeclaration__Group__0__Impl64599 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group__1__Impl_in_rule__XImportDeclaration__Group__164630 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group__2_in_rule__XImportDeclaration__Group__164633 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Alternatives_1_in_rule__XImportDeclaration__Group__1__Impl64660 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group__2__Impl_in_rule__XImportDeclaration__Group__264690 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_179_in_rule__XImportDeclaration__Group__2__Impl64719 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__0__Impl_in_rule__XImportDeclaration__Group_1_0__064758 = new BitSet(new long[]{0x0001000000000010L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__1_in_rule__XImportDeclaration__Group_1_0__064761 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__StaticAssignment_1_0_0_in_rule__XImportDeclaration__Group_1_0__0__Impl64788 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__1__Impl_in_rule__XImportDeclaration__Group_1_0__164818 = new BitSet(new long[]{0x0001000000000010L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__2_in_rule__XImportDeclaration__Group_1_0__164821 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__ExtensionAssignment_1_0_1_in_rule__XImportDeclaration__Group_1_0__1__Impl64848 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__2__Impl_in_rule__XImportDeclaration__Group_1_0__264879 = new BitSet(new long[]{0x0000001000000010L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__3_in_rule__XImportDeclaration__Group_1_0__264882 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__ImportedTypeAssignment_1_0_2_in_rule__XImportDeclaration__Group_1_0__2__Impl64909 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Group_1_0__3__Impl_in_rule__XImportDeclaration__Group_1_0__364939 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__XImportDeclaration__Alternatives_1_0_3_in_rule__XImportDeclaration__Group_1_0__3__Impl64966 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedNameInStaticImport__Group__0__Impl_in_rule__QualifiedNameInStaticImport__Group__065004 = new BitSet(new long[]{0x0000080000000000L});
-        public static final BitSet FOLLOW_rule__QualifiedNameInStaticImport__Group__1_in_rule__QualifiedNameInStaticImport__Group__065007 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValidID_in_rule__QualifiedNameInStaticImport__Group__0__Impl65034 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__QualifiedNameInStaticImport__Group__1__Impl_in_rule__QualifiedNameInStaticImport__Group__165063 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_43_in_rule__QualifiedNameInStaticImport__Group__1__Impl65091 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__UnorderedGroup_2__0_in_rule__DatamartProperty__UnorderedGroup_265127 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_0__0_in_rule__DatamartProperty__UnorderedGroup_2__Impl65214 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_1__0_in_rule__DatamartProperty__UnorderedGroup_2__Impl65305 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__Group_2_2__0_in_rule__DatamartProperty__UnorderedGroup_2__Impl65396 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__UnorderedGroup_2__Impl_in_rule__DatamartProperty__UnorderedGroup_2__065455 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L,0x0000000000000000L,0x0000000000000600L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__UnorderedGroup_2__1_in_rule__DatamartProperty__UnorderedGroup_2__065458 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__UnorderedGroup_2__Impl_in_rule__DatamartProperty__UnorderedGroup_2__165483 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L,0x0000000000000000L,0x0000000000000600L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__UnorderedGroup_2__2_in_rule__DatamartProperty__UnorderedGroup_2__165486 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartProperty__UnorderedGroup_2__Impl_in_rule__DatamartProperty__UnorderedGroup_2__265511 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartPackage_in_rule__DatamartModel__PackagesAssignment65545 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleQualifiedName_in_rule__DatamartPackage__NameAssignment_265576 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartImport_in_rule__DatamartPackage__ImportsAssignment_3_165607 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDefinition_in_rule__DatamartPackage__DefinitionsAssignment_3_265638 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartDefinition__NameAssignment_165669 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_198_in_rule__DatamartDefinition__DescriptionAssignment_2_065705 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTRANSLATABLESTRING_in_rule__DatamartDefinition__DescriptionValueAssignment_2_165744 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartRole_in_rule__DatamartDefinition__RolesAssignment_3_265775 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSource_in_rule__DatamartDefinition__SourceAssignment_565806 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartRole__AssignedRoleAssignment_165841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTaskQueryTopicEnum_in_rule__DatamartTask__TaskQueryAssignment_165876 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartColumn_in_rule__DatamartTask__ColumnsAssignment_2_265907 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartCondition_in_rule__DatamartTask__ConditionsAssignment_3_265938 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTaskQueryColumnEnum_in_rule__DatamartColumn__ColumnRefAssignment_165969 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTaskFilterEnum_in_rule__DatamartTaskFilter__FilterRefAssignment_166000 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartCube__CubeRefAssignment_166035 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_199_in_rule__DatamartCube__NonEmptyAssignment_266075 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartCubeElement_in_rule__DatamartCube__AxisslicerAssignment_466114 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartReference__RefAssignment_166149 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartEntity__EntityRefAssignment_166188 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_200_in_rule__DatamartEntity__TrackingAssignment_266228 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartNavigation_in_rule__DatamartEntity__NavigationsAssignment_4_266267 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartProperty_in_rule__DatamartEntity__PropertiesAssignment_5_266298 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartCondition_in_rule__DatamartEntity__ConditionsAssignment_6_266329 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartOrder_in_rule__DatamartEntity__OrderingAssignment_7_266360 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__DatamartEntity__FillerMinCountRowsAssignment_8_166391 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__DatamartEntity__FillerMaxCountRowsAssignment_8_366422 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerData_in_rule__DatamartEntity__FillerDatasAssignment_8_566453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartReference_in_rule__DatamartOwner__JoinRefAssignment_166484 = new BitSet(new long[]{0x0000000000000002L});
-    }
-
-    protected static class FollowSets028 {
-        public static final BitSet FOLLOW_ruleDatamartEntity_in_rule__DatamartOwner__DatamartEntityAssignment_366515 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartReference_in_rule__DatamartMember__JoinRefAssignment_166546 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartEntity_in_rule__DatamartMember__DatamartEntityAssignment_366577 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartProperty__PropertyRefAssignment_166612 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_75_in_rule__DatamartProperty__AggregatedAssignment_2_0_066652 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSqlAggregationEnum_in_rule__DatamartProperty__AggregateAssignment_2_0_166691 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_201_in_rule__DatamartProperty__PlacedAssignment_2_1_066727 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAxisEnum_in_rule__DatamartProperty__AxisAssignment_2_1_166766 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_202_in_rule__DatamartProperty__ScaledAssignment_2_2_066802 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValueScaleEnum_in_rule__DatamartProperty__ScaleAssignment_2_2_166841 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartDisjunction_in_rule__DatamartCondition__ConditionAssignment_166872 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartOrder__OrderByAssignment_166907 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOrderEnum_in_rule__DatamartOrder__OrderHowAssignment_266942 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartConjunction_in_rule__DatamartDisjunction__RightAssignment_1_166973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartConditionalExpression_in_rule__DatamartConjunction__RightAssignment_1_167004 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleOperatorEnum_in_rule__DatamartConditionalExpression__OperatorAssignment_1_0_167035 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartOperand_in_rule__DatamartConditionalExpression__RightAssignment_1_167066 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNumber_in_rule__DatamartValue__NumberValueAssignment_067097 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_STRING_in_rule__DatamartValue__StringValueAssignment_167128 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_203_in_rule__DatamartValue__FilteredAssignment_2_0_067164 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_204_in_rule__DatamartValue__OptionalAssignment_2_0_167208 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_205_in_rule__DatamartValue__SelectedAssignment_2_167252 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleTRANSLATABLEID_in_rule__DatamartDefineDerivedMeasure__NameAssignment_167291 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAddition_in_rule__DatamartDefineDerivedMeasure__DerivedElementAssignment_367322 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMultiplication_in_rule__DatamartAddition__RightAssignment_1_167353 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartPrimary_in_rule__DatamartMultiplication__RightAssignment_1_167384 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleNumber_in_rule__DatamartNumberOrElement__ValueAssignment_067415 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartFunction_in_rule__DatamartMemberTuple__FunctionAssignment_0_0_067446 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartParameterFunction_in_rule__DatamartMemberTuple__FunctionAssignment_0_0_167477 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartHierarchy_in_rule__DatamartMemberTuple__HierarchyAssignment_167508 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMeasure_in_rule__DatamartMemberTuple__RightAssignment_2_267539 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleFunctionEnum_in_rule__DatamartFunction__FunctionAssignment67570 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleParameterFunctionEnum_in_rule__DatamartParameterFunction__FunctionAssignment_067601 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartFunctionIntParameter_in_rule__DatamartParameterFunction__ParameterAssignment_267632 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__DatamartFunctionIntParameter__ValueAssignment67663 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSetFunctionEnum_in_rule__DatamartSetFunction__SetFunctionAssignment67694 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSetParameterFunctionEnum_in_rule__DatamartSetParameterFunction__SetFunctionAssignment_067725 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartFunctionIntParameter_in_rule__DatamartSetParameterFunction__ParameterAssignment_267756 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSetAggregationEnum_in_rule__DatamartSetAggregationFunction__AggregationAssignment_067787 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartFunctionIntParameter_in_rule__DatamartSetAggregationFunction__ParameterAssignment_267818 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetFunction_in_rule__DatamartSetTuple__SetFunctionAssignment_0_067849 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetParameterFunction_in_rule__DatamartSetTuple__SetFunctionAssignment_0_167880 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartHierarchy_in_rule__DatamartSetTuple__RightAssignment_1_267911 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAggregationEnum_in_rule__DatamartAggregationFunction__AggregationAssignment67942 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartAggregationFunction_in_rule__DatamartAggregation__AggregationAssignment_067973 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetTuple_in_rule__DatamartAggregation__SetAssignment_2_068004 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartHierarchy_in_rule__DatamartAggregation__SetAssignment_2_168035 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMeasure_in_rule__DatamartAggregation__RightAssignment_3_268066 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetAggregationFunction_in_rule__DatamartSetAggregation__AggregationAssignment_068097 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartSetTuple_in_rule__DatamartSetAggregation__SetAssignment_2_068128 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartHierarchy_in_rule__DatamartSetAggregation__SetAssignment_2_168159 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartMeasure_in_rule__DatamartSetAggregation__RightAssignment_3_268190 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartElement_in_rule__DatamartSlicer__ElementAssignment_168221 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleAxisEnum_in_rule__DatamartAxis__NameAssignment_168252 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartElement_in_rule__DatamartAxis__ElementsAssignment_368283 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartDerivedMeasure__DerivedRefAssignment_168318 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_202_in_rule__DatamartDerivedMeasure__ScaledAssignment_2_068358 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValueScaleEnum_in_rule__DatamartDerivedMeasure__ScaleAssignment_2_168397 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartMeasure__MeasureRefAssignment_168432 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_202_in_rule__DatamartMeasure__ScaledAssignment_2_068472 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleValueScaleEnum_in_rule__DatamartMeasure__ScaleAssignment_2_168511 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartHierarchy__HierarchyRefAssignment_168546 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_51_in_rule__DatamartHierarchy__DefaultMemberAssignment_268586 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_206_in_rule__DatamartHierarchy__AllMemberAssignment_368630 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_207_in_rule__DatamartHierarchy__AllLevelsAssignment_468674 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartHierarchy__LevelRefAssignment_5_168717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_203_in_rule__DatamartHierarchy__FilteredAssignment_5_2_068757 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_205_in_rule__DatamartHierarchy__SelectedAssignment_5_2_168801 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_208_in_rule__DatamartHierarchy__AllAssignment_6_068845 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_209_in_rule__DatamartHierarchy__ExceptAssignment_6_1_068889 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__DatamartHierarchy__ExceptRefAssignment_6_1_168932 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_210_in_rule__DatamartHierarchy__OrderedAssignment_6_2_068972 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rule__DatamartHierarchy__OrderRefAlternatives_6_2_1_0_in_rule__DatamartHierarchy__OrderRefAssignment_6_2_169011 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_112_in_rule__DatamartHierarchy__DescendingAssignment_6_2_269049 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleDatamartQualifiedNameWithWildCard_in_rule__DatamartImport__ImportedNamespaceAssignment_169088 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__PropertyFillerData__PropertyRefAssignment_169123 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_rulePropertyFillerType_in_rule__PropertyFillerData__FillerTypeAssignment_369158 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__PropertyFillerDateFuture__DateFutureYearsAssignment_169189 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__PropertyFillerDatePast__DatePastYearsAssignment_169220 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSINT_in_rule__PropertyFillerDateRange__DateBeginYearsAssignment_169251 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSINT_in_rule__PropertyFillerDateRange__DateEndYearsAssignment_369282 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSignedNumber_in_rule__PropertyFillerSignedDoubleRange__BeginRangeAssignment_1_0_069313 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__PropertyFillerSignedDoubleRange__BeginRangeRefAssignment_1_0_169348 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSignedNumber_in_rule__PropertyFillerSignedDoubleRange__EndRangeAssignment_1_2_069383 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__PropertyFillerSignedDoubleRange__EndRangeRefAssignment_1_2_169418 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__PropertyFillerSignedDoubleRange__DecimalsAssignment_369453 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleUnsignedNumber_in_rule__PropertyFillerSignedDoubleRange__RoundedAssignment_5_169484 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSignedNumber_in_rule__PropertyFillerSignedDoubleRandom__ItemsAssignment_269515 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSINT_in_rule__PropertyFillerSignedIntegerRange__BeginRangeAssignment_2_0_069546 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__PropertyFillerSignedIntegerRange__BeginRangeRefAssignment_2_0_169581 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSINT_in_rule__PropertyFillerSignedIntegerRange__EndRangeAssignment_2_2_069616 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_ID_in_rule__PropertyFillerSignedIntegerRange__EndRangeRefAssignment_2_2_169651 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__PropertyFillerSignedIntegerRange__RoundedAssignment_3_169686 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_ruleSINT_in_rule__PropertyFillerSignedIntegerRandom__ItemsAssignment_269717 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_STRING_in_rule__PropertyFillerTextRandom__ItemsAssignment_269748 = new BitSet(new long[]{0x0000000000000002L});
-        public static final BitSet FOLLOW_RULE_INT_in_rule__PropertyFillerTextParagraphs__CountAssignment_269779 = new BitSet(new long[]{0x0000000000000002L});
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/src/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.xtend b/org.eclipse.osbp.xtext.datamartdsl.ui/src/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.xtend
index d01b84a..45ebf99 100644
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/src/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.xtend
+++ b/org.eclipse.osbp.xtext.datamartdsl.ui/src/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.xtend
@@ -148,7 +148,7 @@
 					return false;
 				}
 		}
-		if (proposal.equals("filtered") || proposal.equals("optional") || proposal.equals("selected")) {
+		if (proposal.equals("filtered") || proposal.equals("optional") || proposal.equals("selected") || proposal.equals("ranged")) {
 			return false
 		}
 		return true
diff --git a/org.eclipse.osbp.xtext.datamartdsl.ui/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.java b/org.eclipse.osbp.xtext.datamartdsl.ui/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.java
index c494d74..149ec08 100644
--- a/org.eclipse.osbp.xtext.datamartdsl.ui/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.java
+++ b/org.eclipse.osbp.xtext.datamartdsl.ui/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/ui/contentassist/DatamartDSLProposalProvider.java
@@ -208,7 +208,7 @@
         }
       }
     }
-    if (((proposal.equals("filtered") || proposal.equals("optional")) || proposal.equals("selected"))) {
+    if ((((proposal.equals("filtered") || proposal.equals("optional")) || proposal.equals("selected")) || proposal.equals("ranged"))) {
       return false;
     }
     return true;
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/DatamartProperty.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/DatamartProperty.java
deleted file mode 100644
index 3808578..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/DatamartProperty.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Datamart Property</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#isAggregated <em>Aggregated</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#isScaled <em>Scaled</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#isPlaced <em>Placed</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getAxis <em>Axis</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getAggregate <em>Aggregate</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getScale <em>Scale</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getPropertyRef <em>Property Ref</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty()
- * @model
- * @generated
- */
-public interface DatamartProperty extends DatamartLazyResolver, Expression {
-	/**
-	 * Returns the value of the '<em><b>Aggregated</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Aggregated</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Aggregated</em>' attribute.
-	 * @see #setAggregated(boolean)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty_Aggregated()
-	 * @model unique="false"
-	 * @generated
-	 */
-	boolean isAggregated();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#isAggregated <em>Aggregated</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Aggregated</em>' attribute.
-	 * @see #isAggregated()
-	 * @generated
-	 */
-	void setAggregated(boolean value);
-
-	/**
-	 * Returns the value of the '<em><b>Scaled</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Scaled</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Scaled</em>' attribute.
-	 * @see #setScaled(boolean)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty_Scaled()
-	 * @model unique="false"
-	 * @generated
-	 */
-	boolean isScaled();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#isScaled <em>Scaled</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scaled</em>' attribute.
-	 * @see #isScaled()
-	 * @generated
-	 */
-	void setScaled(boolean value);
-
-	/**
-	 * Returns the value of the '<em><b>Placed</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Placed</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Placed</em>' attribute.
-	 * @see #setPlaced(boolean)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty_Placed()
-	 * @model unique="false"
-	 * @generated
-	 */
-	boolean isPlaced();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#isPlaced <em>Placed</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Placed</em>' attribute.
-	 * @see #isPlaced()
-	 * @generated
-	 */
-	void setPlaced(boolean value);
-
-	/**
-	 * Returns the value of the '<em><b>Axis</b></em>' attribute.
-	 * The literals are from the enumeration {@link org.eclipse.osbp.xtext.datamartdsl.AxisEnum}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Axis</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Axis</em>' attribute.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.AxisEnum
-	 * @see #setAxis(AxisEnum)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty_Axis()
-	 * @model unique="false"
-	 * @generated
-	 */
-	AxisEnum getAxis();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getAxis <em>Axis</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Axis</em>' attribute.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.AxisEnum
-	 * @see #getAxis()
-	 * @generated
-	 */
-	void setAxis(AxisEnum value);
-
-	/**
-	 * Returns the value of the '<em><b>Aggregate</b></em>' attribute.
-	 * The literals are from the enumeration {@link org.eclipse.osbp.xtext.datamartdsl.SqlAggregationEnum}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Aggregate</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Aggregate</em>' attribute.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.SqlAggregationEnum
-	 * @see #setAggregate(SqlAggregationEnum)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty_Aggregate()
-	 * @model unique="false"
-	 * @generated
-	 */
-	SqlAggregationEnum getAggregate();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getAggregate <em>Aggregate</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Aggregate</em>' attribute.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.SqlAggregationEnum
-	 * @see #getAggregate()
-	 * @generated
-	 */
-	void setAggregate(SqlAggregationEnum value);
-
-	/**
-	 * Returns the value of the '<em><b>Scale</b></em>' attribute.
-	 * The literals are from the enumeration {@link org.eclipse.osbp.xtext.datamartdsl.ValueScaleEnum}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Scale</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Scale</em>' attribute.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.ValueScaleEnum
-	 * @see #setScale(ValueScaleEnum)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty_Scale()
-	 * @model unique="false"
-	 * @generated
-	 */
-	ValueScaleEnum getScale();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getScale <em>Scale</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Scale</em>' attribute.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.ValueScaleEnum
-	 * @see #getScale()
-	 * @generated
-	 */
-	void setScale(ValueScaleEnum value);
-
-	/**
-	 * Returns the value of the '<em><b>Property Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Property Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Property Ref</em>' reference.
-	 * @see #setPropertyRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getDatamartProperty_PropertyRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getPropertyRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.DatamartProperty#getPropertyRef <em>Property Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Property Ref</em>' reference.
-	 * @see #getPropertyRef()
-	 * @generated
-	 */
-	void setPropertyRef(LEntityAttribute value);
-
-} // DatamartProperty
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/EventBrokerDataMart.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/EventBrokerDataMart.java
deleted file mode 100644
index 247bd85..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/EventBrokerDataMart.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Event Broker Data Mart</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.EventBrokerDataMart#getFilter <em>Filter</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.EventBrokerDataMart#getDatamartDef <em>Datamart Def</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getEventBrokerDataMart()
- * @model
- * @generated
- */
-public interface EventBrokerDataMart extends DatamartLazyResolver {
-	/**
-	 * Returns the value of the '<em><b>Filter</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Filter</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Filter</em>' attribute.
-	 * @see #setFilter(String)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getEventBrokerDataMart_Filter()
-	 * @model unique="false"
-	 * @generated
-	 */
-	String getFilter();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.EventBrokerDataMart#getFilter <em>Filter</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Filter</em>' attribute.
-	 * @see #getFilter()
-	 * @generated
-	 */
-	void setFilter(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Datamart Def</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Datamart Def</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Datamart Def</em>' reference.
-	 * @see #setDatamartDef(DatamartDefinition)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getEventBrokerDataMart_DatamartDef()
-	 * @model
-	 * @generated
-	 */
-	DatamartDefinition getDatamartDef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.EventBrokerDataMart#getDatamartDef <em>Datamart Def</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Datamart Def</em>' reference.
-	 * @see #getDatamartDef()
-	 * @generated
-	 */
-	void setDatamartDef(DatamartDefinition value);
-
-} // EventBrokerDataMart
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerData.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerData.java
deleted file mode 100644
index 30e6d7e..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerData.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Data</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerData#getPropertyRef <em>Property Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerData#getFillerType <em>Filler Type</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerData()
- * @model
- * @generated
- */
-public interface PropertyFillerData extends DatamartLazyResolver {
-	/**
-	 * Returns the value of the '<em><b>Property Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Property Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Property Ref</em>' reference.
-	 * @see #setPropertyRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerData_PropertyRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getPropertyRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerData#getPropertyRef <em>Property Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Property Ref</em>' reference.
-	 * @see #getPropertyRef()
-	 * @generated
-	 */
-	void setPropertyRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>Filler Type</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Filler Type</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Filler Type</em>' containment reference.
-	 * @see #setFillerType(PropertyFillerType)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerData_FillerType()
-	 * @model containment="true"
-	 * @generated
-	 */
-	PropertyFillerType getFillerType();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerData#getFillerType <em>Filler Type</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Filler Type</em>' containment reference.
-	 * @see #getFillerType()
-	 * @generated
-	 */
-	void setFillerType(PropertyFillerType value);
-
-} // PropertyFillerData
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateFuture.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateFuture.java
deleted file mode 100644
index 5a3d621..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateFuture.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Date Future</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateFuture#getDateFutureYears <em>Date Future Years</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDateFuture()
- * @model
- * @generated
- */
-public interface PropertyFillerDateFuture extends PropertyFillerDateType {
-	/**
-	 * Returns the value of the '<em><b>Date Future Years</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Date Future Years</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Date Future Years</em>' attribute.
-	 * @see #setDateFutureYears(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDateFuture_DateFutureYears()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getDateFutureYears();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateFuture#getDateFutureYears <em>Date Future Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Date Future Years</em>' attribute.
-	 * @see #getDateFutureYears()
-	 * @generated
-	 */
-	void setDateFutureYears(int value);
-
-} // PropertyFillerDateFuture
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDatePast.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDatePast.java
deleted file mode 100644
index 3b1591d..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDatePast.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Date Past</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDatePast#getDatePastYears <em>Date Past Years</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDatePast()
- * @model
- * @generated
- */
-public interface PropertyFillerDatePast extends PropertyFillerDateType {
-	/**
-	 * Returns the value of the '<em><b>Date Past Years</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Date Past Years</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Date Past Years</em>' attribute.
-	 * @see #setDatePastYears(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDatePast_DatePastYears()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getDatePastYears();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDatePast#getDatePastYears <em>Date Past Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Date Past Years</em>' attribute.
-	 * @see #getDatePastYears()
-	 * @generated
-	 */
-	void setDatePastYears(int value);
-
-} // PropertyFillerDatePast
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateRange.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateRange.java
deleted file mode 100644
index 0d8acd8..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateRange.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Date Range</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateRange#getDateBeginYears <em>Date Begin Years</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateRange#getDateEndYears <em>Date End Years</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDateRange()
- * @model
- * @generated
- */
-public interface PropertyFillerDateRange extends PropertyFillerDateType {
-	/**
-	 * Returns the value of the '<em><b>Date Begin Years</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Date Begin Years</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Date Begin Years</em>' attribute.
-	 * @see #setDateBeginYears(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDateRange_DateBeginYears()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getDateBeginYears();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateRange#getDateBeginYears <em>Date Begin Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Date Begin Years</em>' attribute.
-	 * @see #getDateBeginYears()
-	 * @generated
-	 */
-	void setDateBeginYears(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Date End Years</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Date End Years</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Date End Years</em>' attribute.
-	 * @see #setDateEndYears(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDateRange_DateEndYears()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getDateEndYears();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateRange#getDateEndYears <em>Date End Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Date End Years</em>' attribute.
-	 * @see #getDateEndYears()
-	 * @generated
-	 */
-	void setDateEndYears(int value);
-
-} // PropertyFillerDateRange
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateType.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateType.java
deleted file mode 100644
index 95efed7..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDateType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Date Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDateType()
- * @model
- * @generated
- */
-public interface PropertyFillerDateType extends PropertyFillerType {
-} // PropertyFillerDateType
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDoubleType.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDoubleType.java
deleted file mode 100644
index 47bd9a9..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerDoubleType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Double Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerDoubleType()
- * @model
- * @generated
- */
-public interface PropertyFillerDoubleType extends PropertyFillerType {
-} // PropertyFillerDoubleType
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerIntegerType.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerIntegerType.java
deleted file mode 100644
index 673d04d..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerIntegerType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Integer Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerIntegerType()
- * @model
- * @generated
- */
-public interface PropertyFillerIntegerType extends PropertyFillerType {
-} // PropertyFillerIntegerType
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedDoubleRandom.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedDoubleRandom.java
deleted file mode 100644
index 30c84b6..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedDoubleRandom.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.emf.common.util.EList;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Signed Double Random</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRandom#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRandom()
- * @model
- * @generated
- */
-public interface PropertyFillerSignedDoubleRandom extends PropertyFillerDoubleType {
-	/**
-	 * Returns the value of the '<em><b>Items</b></em>' attribute list.
-	 * The list contents are of type {@link java.lang.Double}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Items</em>' attribute list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Items</em>' attribute list.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRandom_Items()
-	 * @model unique="false"
-	 * @generated
-	 */
-	EList<Double> getItems();
-
-} // PropertyFillerSignedDoubleRandom
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedDoubleRange.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedDoubleRange.java
deleted file mode 100644
index 5803fb3..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedDoubleRange.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Signed Double Range</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getDecimals <em>Decimals</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRange()
- * @model
- * @generated
- */
-public interface PropertyFillerSignedDoubleRange extends PropertyFillerDoubleType {
-	/**
-	 * Returns the value of the '<em><b>Decimals</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Decimals</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Decimals</em>' attribute.
-	 * @see #setDecimals(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRange_Decimals()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getDecimals();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getDecimals <em>Decimals</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Decimals</em>' attribute.
-	 * @see #getDecimals()
-	 * @generated
-	 */
-	void setDecimals(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Begin Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range</em>' attribute.
-	 * @see #setBeginRange(double)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRange_BeginRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	double getBeginRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getBeginRange <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range</em>' attribute.
-	 * @see #getBeginRange()
-	 * @generated
-	 */
-	void setBeginRange(double value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range</em>' attribute.
-	 * @see #setEndRange(double)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRange_EndRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	double getEndRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getEndRange <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range</em>' attribute.
-	 * @see #getEndRange()
-	 * @generated
-	 */
-	void setEndRange(double value);
-
-	/**
-	 * Returns the value of the '<em><b>Begin Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #setBeginRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRange_BeginRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getBeginRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getBeginRangeRef <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 */
-	void setBeginRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range Ref</em>' reference.
-	 * @see #setEndRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRange_EndRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getEndRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getEndRangeRef <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range Ref</em>' reference.
-	 * @see #getEndRangeRef()
-	 * @generated
-	 */
-	void setEndRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>Rounded</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Rounded</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Rounded</em>' attribute.
-	 * @see #setRounded(double)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedDoubleRange_Rounded()
-	 * @model unique="false"
-	 * @generated
-	 */
-	double getRounded();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange#getRounded <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Rounded</em>' attribute.
-	 * @see #getRounded()
-	 * @generated
-	 */
-	void setRounded(double value);
-
-} // PropertyFillerSignedDoubleRange
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedIntegerRandom.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedIntegerRandom.java
deleted file mode 100644
index a69b395..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedIntegerRandom.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.emf.common.util.EList;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Signed Integer Random</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRandom#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRandom()
- * @model
- * @generated
- */
-public interface PropertyFillerSignedIntegerRandom extends PropertyFillerIntegerType {
-	/**
-	 * Returns the value of the '<em><b>Items</b></em>' attribute list.
-	 * The list contents are of type {@link java.lang.Integer}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Items</em>' attribute list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Items</em>' attribute list.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRandom_Items()
-	 * @model unique="false"
-	 * @generated
-	 */
-	EList<Integer> getItems();
-
-} // PropertyFillerSignedIntegerRandom
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedIntegerRange.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedIntegerRange.java
deleted file mode 100644
index 2ca9221..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerSignedIntegerRange.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Signed Integer Range</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRange()
- * @model
- * @generated
- */
-public interface PropertyFillerSignedIntegerRange extends PropertyFillerIntegerType {
-	/**
-	 * Returns the value of the '<em><b>Begin Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range</em>' attribute.
-	 * @see #setBeginRange(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRange_BeginRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getBeginRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getBeginRange <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range</em>' attribute.
-	 * @see #getBeginRange()
-	 * @generated
-	 */
-	void setBeginRange(int value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range</em>' attribute.
-	 * @see #setEndRange(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRange_EndRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getEndRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getEndRange <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range</em>' attribute.
-	 * @see #getEndRange()
-	 * @generated
-	 */
-	void setEndRange(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Begin Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #setBeginRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRange_BeginRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getBeginRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getBeginRangeRef <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 */
-	void setBeginRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range Ref</em>' reference.
-	 * @see #setEndRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRange_EndRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getEndRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getEndRangeRef <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range Ref</em>' reference.
-	 * @see #getEndRangeRef()
-	 * @generated
-	 */
-	void setEndRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>Rounded</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Rounded</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Rounded</em>' attribute.
-	 * @see #setRounded(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerSignedIntegerRange_Rounded()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getRounded();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange#getRounded <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Rounded</em>' attribute.
-	 * @see #getRounded()
-	 * @generated
-	 */
-	void setRounded(int value);
-
-} // PropertyFillerSignedIntegerRange
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextParagraphs.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextParagraphs.java
deleted file mode 100644
index 1b27364..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextParagraphs.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Text Paragraphs</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextParagraphs#getCount <em>Count</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextParagraphs()
- * @model
- * @generated
- */
-public interface PropertyFillerTextParagraphs extends PropertyFillerTextType {
-	/**
-	 * Returns the value of the '<em><b>Count</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Count</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Count</em>' attribute.
-	 * @see #setCount(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextParagraphs_Count()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getCount();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextParagraphs#getCount <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Count</em>' attribute.
-	 * @see #getCount()
-	 * @generated
-	 */
-	void setCount(int value);
-
-} // PropertyFillerTextParagraphs
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextRandom.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextRandom.java
deleted file mode 100644
index b0ffb02..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextRandom.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.emf.common.util.EList;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Text Random</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextRandom#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextRandom()
- * @model
- * @generated
- */
-public interface PropertyFillerTextRandom extends PropertyFillerTextType {
-	/**
-	 * Returns the value of the '<em><b>Items</b></em>' attribute list.
-	 * The list contents are of type {@link java.lang.String}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Items</em>' attribute list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Items</em>' attribute list.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextRandom_Items()
-	 * @model unique="false"
-	 * @generated
-	 */
-	EList<String> getItems();
-
-} // PropertyFillerTextRandom
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextSentences.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextSentences.java
deleted file mode 100644
index d400488..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextSentences.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Text Sentences</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextSentences#getCount <em>Count</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextSentences()
- * @model
- * @generated
- */
-public interface PropertyFillerTextSentences extends PropertyFillerTextType {
-	/**
-	 * Returns the value of the '<em><b>Count</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Count</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Count</em>' attribute.
-	 * @see #setCount(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextSentences_Count()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getCount();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextSentences#getCount <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Count</em>' attribute.
-	 * @see #getCount()
-	 * @generated
-	 */
-	void setCount(int value);
-
-} // PropertyFillerTextSentences
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextType.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextType.java
deleted file mode 100644
index 6e6457d..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Text Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextType()
- * @model
- * @generated
- */
-public interface PropertyFillerTextType extends PropertyFillerType {
-} // PropertyFillerTextType
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextWords.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextWords.java
deleted file mode 100644
index 36a90ed..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerTextWords.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Text Words</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextWords#getCount <em>Count</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextWords()
- * @model
- * @generated
- */
-public interface PropertyFillerTextWords extends PropertyFillerTextType {
-	/**
-	 * Returns the value of the '<em><b>Count</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Count</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Count</em>' attribute.
-	 * @see #setCount(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerTextWords_Count()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getCount();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextWords#getCount <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Count</em>' attribute.
-	 * @see #getCount()
-	 * @generated
-	 */
-	void setCount(int value);
-
-} // PropertyFillerTextWords
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerType.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerType.java
deleted file mode 100644
index 8fb55a8..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Type</b></em>'.
- * <!-- end-user-doc -->
- *
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerType()
- * @model
- * @generated
- */
-public interface PropertyFillerType extends DatamartLazyResolver {
-} // PropertyFillerType
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedDoubleRandom.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedDoubleRandom.java
deleted file mode 100644
index aec9d8f..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedDoubleRandom.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.emf.common.util.EList;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Unsigned Double Random</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRandom#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRandom()
- * @model
- * @generated
- */
-public interface PropertyFillerUnsignedDoubleRandom extends PropertyFillerDoubleType {
-	/**
-	 * Returns the value of the '<em><b>Items</b></em>' attribute list.
-	 * The list contents are of type {@link java.lang.Double}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Items</em>' attribute list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Items</em>' attribute list.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRandom_Items()
-	 * @model unique="false"
-	 * @generated
-	 */
-	EList<Double> getItems();
-
-} // PropertyFillerUnsignedDoubleRandom
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedDoubleRange.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedDoubleRange.java
deleted file mode 100644
index 42ccef8..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedDoubleRange.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Unsigned Double Range</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getDecimals <em>Decimals</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRange()
- * @model
- * @generated
- */
-public interface PropertyFillerUnsignedDoubleRange extends PropertyFillerDoubleType {
-	/**
-	 * Returns the value of the '<em><b>Decimals</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Decimals</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Decimals</em>' attribute.
-	 * @see #setDecimals(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRange_Decimals()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getDecimals();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getDecimals <em>Decimals</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Decimals</em>' attribute.
-	 * @see #getDecimals()
-	 * @generated
-	 */
-	void setDecimals(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Begin Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range</em>' attribute.
-	 * @see #setBeginRange(double)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRange_BeginRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	double getBeginRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getBeginRange <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range</em>' attribute.
-	 * @see #getBeginRange()
-	 * @generated
-	 */
-	void setBeginRange(double value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range</em>' attribute.
-	 * @see #setEndRange(double)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRange_EndRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	double getEndRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getEndRange <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range</em>' attribute.
-	 * @see #getEndRange()
-	 * @generated
-	 */
-	void setEndRange(double value);
-
-	/**
-	 * Returns the value of the '<em><b>Begin Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #setBeginRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRange_BeginRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getBeginRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getBeginRangeRef <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 */
-	void setBeginRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range Ref</em>' reference.
-	 * @see #setEndRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRange_EndRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getEndRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getEndRangeRef <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range Ref</em>' reference.
-	 * @see #getEndRangeRef()
-	 * @generated
-	 */
-	void setEndRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>Rounded</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Rounded</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Rounded</em>' attribute.
-	 * @see #setRounded(double)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedDoubleRange_Rounded()
-	 * @model unique="false"
-	 * @generated
-	 */
-	double getRounded();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange#getRounded <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Rounded</em>' attribute.
-	 * @see #getRounded()
-	 * @generated
-	 */
-	void setRounded(double value);
-
-} // PropertyFillerUnsignedDoubleRange
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedIntegerRandom.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedIntegerRandom.java
deleted file mode 100644
index a5e7494..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedIntegerRandom.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.emf.common.util.EList;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Unsigned Integer Random</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRandom#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRandom()
- * @model
- * @generated
- */
-public interface PropertyFillerUnsignedIntegerRandom extends PropertyFillerIntegerType {
-	/**
-	 * Returns the value of the '<em><b>Items</b></em>' attribute list.
-	 * The list contents are of type {@link java.lang.Integer}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Items</em>' attribute list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Items</em>' attribute list.
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRandom_Items()
-	 * @model unique="false"
-	 * @generated
-	 */
-	EList<Integer> getItems();
-
-} // PropertyFillerUnsignedIntegerRandom
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedIntegerRange.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedIntegerRange.java
deleted file mode 100644
index 382fe2a..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/PropertyFillerUnsignedIntegerRange.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property Filler Unsigned Integer Range</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRange()
- * @model
- * @generated
- */
-public interface PropertyFillerUnsignedIntegerRange extends PropertyFillerIntegerType {
-	/**
-	 * Returns the value of the '<em><b>Begin Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range</em>' attribute.
-	 * @see #setBeginRange(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRange_BeginRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getBeginRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getBeginRange <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range</em>' attribute.
-	 * @see #getBeginRange()
-	 * @generated
-	 */
-	void setBeginRange(int value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range</em>' attribute.
-	 * @see #setEndRange(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRange_EndRange()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getEndRange();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getEndRange <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range</em>' attribute.
-	 * @see #getEndRange()
-	 * @generated
-	 */
-	void setEndRange(int value);
-
-	/**
-	 * Returns the value of the '<em><b>Begin Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Begin Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #setBeginRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRange_BeginRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getBeginRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getBeginRangeRef <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Begin Range Ref</em>' reference.
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 */
-	void setBeginRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>End Range Ref</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>End Range Ref</em>' reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>End Range Ref</em>' reference.
-	 * @see #setEndRangeRef(LEntityAttribute)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRange_EndRangeRef()
-	 * @model
-	 * @generated
-	 */
-	LEntityAttribute getEndRangeRef();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getEndRangeRef <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>End Range Ref</em>' reference.
-	 * @see #getEndRangeRef()
-	 * @generated
-	 */
-	void setEndRangeRef(LEntityAttribute value);
-
-	/**
-	 * Returns the value of the '<em><b>Rounded</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Rounded</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Rounded</em>' attribute.
-	 * @see #setRounded(int)
-	 * @see org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage#getPropertyFillerUnsignedIntegerRange_Rounded()
-	 * @model unique="false"
-	 * @generated
-	 */
-	int getRounded();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange#getRounded <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Rounded</em>' attribute.
-	 * @see #getRounded()
-	 * @generated
-	 */
-	void setRounded(int value);
-
-} // PropertyFillerUnsignedIntegerRange
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/DatamartPropertyImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/DatamartPropertyImpl.java
deleted file mode 100644
index 35ad15a..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/DatamartPropertyImpl.java
+++ /dev/null
@@ -1,1244 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-import org.eclipse.osbp.xtext.datamartdsl.AxisEnum;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartAggregationFunctionInterface;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartElement;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartFunctionInterface;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartHierarchy;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartProperty;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartSetFunctionInterface;
-import org.eclipse.osbp.xtext.datamartdsl.Expression;
-import org.eclipse.osbp.xtext.datamartdsl.SqlAggregationEnum;
-import org.eclipse.osbp.xtext.datamartdsl.ValueScaleEnum;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Datamart Property</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#isFiltered <em>Filtered</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#isSelected <em>Selected</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#isOptional <em>Optional</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getNumberValue <em>Number Value</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getStringValue <em>String Value</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getValue <em>Value</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getHierarchy <em>Hierarchy</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getAggregation <em>Aggregation</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getFunction <em>Function</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getSet <em>Set</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getSetFunction <em>Set Function</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#isAggregated <em>Aggregated</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#isScaled <em>Scaled</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#isPlaced <em>Placed</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getAxis <em>Axis</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getAggregate <em>Aggregate</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getScale <em>Scale</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.DatamartPropertyImpl#getPropertyRef <em>Property Ref</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class DatamartPropertyImpl extends DatamartLazyResolverImpl implements DatamartProperty {
-	/**
-	 * The default value of the '{@link #isFiltered() <em>Filtered</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isFiltered()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean FILTERED_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isFiltered() <em>Filtered</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isFiltered()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean filtered = FILTERED_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #isSelected() <em>Selected</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isSelected()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean SELECTED_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isSelected() <em>Selected</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isSelected()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean selected = SELECTED_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #isOptional() <em>Optional</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isOptional()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean OPTIONAL_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isOptional() <em>Optional</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isOptional()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean optional = OPTIONAL_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getNumberValue() <em>Number Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getNumberValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String NUMBER_VALUE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getNumberValue() <em>Number Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getNumberValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected String numberValue = NUMBER_VALUE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getStringValue() <em>String Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getStringValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String STRING_VALUE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getStringValue() <em>String Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getStringValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected String stringValue = STRING_VALUE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String VALUE_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getValue()
-	 * @generated
-	 * @ordered
-	 */
-	protected String value = VALUE_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getHierarchy() <em>Hierarchy</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getHierarchy()
-	 * @generated
-	 * @ordered
-	 */
-	protected DatamartHierarchy hierarchy;
-
-	/**
-	 * The cached value of the '{@link #getAggregation() <em>Aggregation</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getAggregation()
-	 * @generated
-	 * @ordered
-	 */
-	protected DatamartAggregationFunctionInterface aggregation;
-
-	/**
-	 * The cached value of the '{@link #getFunction() <em>Function</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFunction()
-	 * @generated
-	 * @ordered
-	 */
-	protected DatamartFunctionInterface function;
-
-	/**
-	 * The cached value of the '{@link #getSet() <em>Set</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getSet()
-	 * @generated
-	 * @ordered
-	 */
-	protected Expression set;
-
-	/**
-	 * The cached value of the '{@link #getSetFunction() <em>Set Function</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getSetFunction()
-	 * @generated
-	 * @ordered
-	 */
-	protected DatamartSetFunctionInterface setFunction;
-
-	/**
-	 * The default value of the '{@link #isAggregated() <em>Aggregated</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isAggregated()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean AGGREGATED_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isAggregated() <em>Aggregated</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isAggregated()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean aggregated = AGGREGATED_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #isScaled() <em>Scaled</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isScaled()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean SCALED_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isScaled() <em>Scaled</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isScaled()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean scaled = SCALED_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #isPlaced() <em>Placed</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isPlaced()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final boolean PLACED_EDEFAULT = false;
-
-	/**
-	 * The cached value of the '{@link #isPlaced() <em>Placed</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #isPlaced()
-	 * @generated
-	 * @ordered
-	 */
-	protected boolean placed = PLACED_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getAxis() <em>Axis</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getAxis()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final AxisEnum AXIS_EDEFAULT = AxisEnum.DEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getAxis() <em>Axis</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getAxis()
-	 * @generated
-	 * @ordered
-	 */
-	protected AxisEnum axis = AXIS_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getAggregate() <em>Aggregate</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getAggregate()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final SqlAggregationEnum AGGREGATE_EDEFAULT = SqlAggregationEnum.AVG;
-
-	/**
-	 * The cached value of the '{@link #getAggregate() <em>Aggregate</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getAggregate()
-	 * @generated
-	 * @ordered
-	 */
-	protected SqlAggregationEnum aggregate = AGGREGATE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getScale() <em>Scale</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getScale()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final ValueScaleEnum SCALE_EDEFAULT = ValueScaleEnum.AXIS;
-
-	/**
-	 * The cached value of the '{@link #getScale() <em>Scale</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getScale()
-	 * @generated
-	 * @ordered
-	 */
-	protected ValueScaleEnum scale = SCALE_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getPropertyRef() <em>Property Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getPropertyRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute propertyRef;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected DatamartPropertyImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.DATAMART_PROPERTY;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public boolean isFiltered() {
-		return filtered;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setFiltered(boolean newFiltered) {
-		boolean oldFiltered = filtered;
-		filtered = newFiltered;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__FILTERED, oldFiltered, filtered));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public boolean isSelected() {
-		return selected;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setSelected(boolean newSelected) {
-		boolean oldSelected = selected;
-		selected = newSelected;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__SELECTED, oldSelected, selected));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public boolean isOptional() {
-		return optional;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setOptional(boolean newOptional) {
-		boolean oldOptional = optional;
-		optional = newOptional;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__OPTIONAL, oldOptional, optional));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getNumberValue() {
-		return numberValue;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setNumberValue(String newNumberValue) {
-		String oldNumberValue = numberValue;
-		numberValue = newNumberValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__NUMBER_VALUE, oldNumberValue, numberValue));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getStringValue() {
-		return stringValue;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setStringValue(String newStringValue) {
-		String oldStringValue = stringValue;
-		stringValue = newStringValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__STRING_VALUE, oldStringValue, stringValue));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getValue() {
-		return value;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setValue(String newValue) {
-		String oldValue = value;
-		value = newValue;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__VALUE, oldValue, value));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public DatamartHierarchy getHierarchy() {
-		return hierarchy;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetHierarchy(DatamartHierarchy newHierarchy, NotificationChain msgs) {
-		DatamartHierarchy oldHierarchy = hierarchy;
-		hierarchy = newHierarchy;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY, oldHierarchy, newHierarchy);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setHierarchy(DatamartHierarchy newHierarchy) {
-		if (newHierarchy != hierarchy) {
-			NotificationChain msgs = null;
-			if (hierarchy != null)
-				msgs = ((InternalEObject)hierarchy).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY, null, msgs);
-			if (newHierarchy != null)
-				msgs = ((InternalEObject)newHierarchy).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY, null, msgs);
-			msgs = basicSetHierarchy(newHierarchy, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY, newHierarchy, newHierarchy));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public DatamartAggregationFunctionInterface getAggregation() {
-		return aggregation;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetAggregation(DatamartAggregationFunctionInterface newAggregation, NotificationChain msgs) {
-		DatamartAggregationFunctionInterface oldAggregation = aggregation;
-		aggregation = newAggregation;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION, oldAggregation, newAggregation);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setAggregation(DatamartAggregationFunctionInterface newAggregation) {
-		if (newAggregation != aggregation) {
-			NotificationChain msgs = null;
-			if (aggregation != null)
-				msgs = ((InternalEObject)aggregation).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION, null, msgs);
-			if (newAggregation != null)
-				msgs = ((InternalEObject)newAggregation).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION, null, msgs);
-			msgs = basicSetAggregation(newAggregation, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION, newAggregation, newAggregation));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public DatamartFunctionInterface getFunction() {
-		return function;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetFunction(DatamartFunctionInterface newFunction, NotificationChain msgs) {
-		DatamartFunctionInterface oldFunction = function;
-		function = newFunction;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION, oldFunction, newFunction);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setFunction(DatamartFunctionInterface newFunction) {
-		if (newFunction != function) {
-			NotificationChain msgs = null;
-			if (function != null)
-				msgs = ((InternalEObject)function).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION, null, msgs);
-			if (newFunction != null)
-				msgs = ((InternalEObject)newFunction).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION, null, msgs);
-			msgs = basicSetFunction(newFunction, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION, newFunction, newFunction));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public Expression getSet() {
-		return set;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetSet(Expression newSet, NotificationChain msgs) {
-		Expression oldSet = set;
-		set = newSet;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__SET, oldSet, newSet);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setSet(Expression newSet) {
-		if (newSet != set) {
-			NotificationChain msgs = null;
-			if (set != null)
-				msgs = ((InternalEObject)set).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__SET, null, msgs);
-			if (newSet != null)
-				msgs = ((InternalEObject)newSet).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__SET, null, msgs);
-			msgs = basicSetSet(newSet, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__SET, newSet, newSet));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public DatamartSetFunctionInterface getSetFunction() {
-		return setFunction;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetSetFunction(DatamartSetFunctionInterface newSetFunction, NotificationChain msgs) {
-		DatamartSetFunctionInterface oldSetFunction = setFunction;
-		setFunction = newSetFunction;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION, oldSetFunction, newSetFunction);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setSetFunction(DatamartSetFunctionInterface newSetFunction) {
-		if (newSetFunction != setFunction) {
-			NotificationChain msgs = null;
-			if (setFunction != null)
-				msgs = ((InternalEObject)setFunction).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION, null, msgs);
-			if (newSetFunction != null)
-				msgs = ((InternalEObject)newSetFunction).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION, null, msgs);
-			msgs = basicSetSetFunction(newSetFunction, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION, newSetFunction, newSetFunction));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public boolean isAggregated() {
-		return aggregated;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setAggregated(boolean newAggregated) {
-		boolean oldAggregated = aggregated;
-		aggregated = newAggregated;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATED, oldAggregated, aggregated));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public boolean isScaled() {
-		return scaled;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setScaled(boolean newScaled) {
-		boolean oldScaled = scaled;
-		scaled = newScaled;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__SCALED, oldScaled, scaled));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public boolean isPlaced() {
-		return placed;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setPlaced(boolean newPlaced) {
-		boolean oldPlaced = placed;
-		placed = newPlaced;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__PLACED, oldPlaced, placed));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public AxisEnum getAxis() {
-		return axis;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setAxis(AxisEnum newAxis) {
-		AxisEnum oldAxis = axis;
-		axis = newAxis == null ? AXIS_EDEFAULT : newAxis;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__AXIS, oldAxis, axis));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public SqlAggregationEnum getAggregate() {
-		return aggregate;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setAggregate(SqlAggregationEnum newAggregate) {
-		SqlAggregationEnum oldAggregate = aggregate;
-		aggregate = newAggregate == null ? AGGREGATE_EDEFAULT : newAggregate;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATE, oldAggregate, aggregate));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public ValueScaleEnum getScale() {
-		return scale;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setScale(ValueScaleEnum newScale) {
-		ValueScaleEnum oldScale = scale;
-		scale = newScale == null ? SCALE_EDEFAULT : newScale;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__SCALE, oldScale, scale));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getPropertyRef() {
-		if (propertyRef != null && propertyRef.eIsProxy()) {
-			InternalEObject oldPropertyRef = (InternalEObject)propertyRef;
-			propertyRef = (LEntityAttribute)eResolveProxy(oldPropertyRef);
-			if (propertyRef != oldPropertyRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.DATAMART_PROPERTY__PROPERTY_REF, oldPropertyRef, propertyRef));
-			}
-		}
-		return propertyRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetPropertyRef() {
-		return propertyRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setPropertyRef(LEntityAttribute newPropertyRef) {
-		LEntityAttribute oldPropertyRef = propertyRef;
-		propertyRef = newPropertyRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.DATAMART_PROPERTY__PROPERTY_REF, oldPropertyRef, propertyRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY:
-				return basicSetHierarchy(null, msgs);
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION:
-				return basicSetAggregation(null, msgs);
-			case DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION:
-				return basicSetFunction(null, msgs);
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET:
-				return basicSetSet(null, msgs);
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION:
-				return basicSetSetFunction(null, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.DATAMART_PROPERTY__FILTERED:
-				return isFiltered();
-			case DatamartDSLPackage.DATAMART_PROPERTY__SELECTED:
-				return isSelected();
-			case DatamartDSLPackage.DATAMART_PROPERTY__OPTIONAL:
-				return isOptional();
-			case DatamartDSLPackage.DATAMART_PROPERTY__NUMBER_VALUE:
-				return getNumberValue();
-			case DatamartDSLPackage.DATAMART_PROPERTY__STRING_VALUE:
-				return getStringValue();
-			case DatamartDSLPackage.DATAMART_PROPERTY__VALUE:
-				return getValue();
-			case DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY:
-				return getHierarchy();
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION:
-				return getAggregation();
-			case DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION:
-				return getFunction();
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET:
-				return getSet();
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION:
-				return getSetFunction();
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATED:
-				return isAggregated();
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALED:
-				return isScaled();
-			case DatamartDSLPackage.DATAMART_PROPERTY__PLACED:
-				return isPlaced();
-			case DatamartDSLPackage.DATAMART_PROPERTY__AXIS:
-				return getAxis();
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATE:
-				return getAggregate();
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALE:
-				return getScale();
-			case DatamartDSLPackage.DATAMART_PROPERTY__PROPERTY_REF:
-				if (resolve) return getPropertyRef();
-				return basicGetPropertyRef();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.DATAMART_PROPERTY__FILTERED:
-				setFiltered((Boolean)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SELECTED:
-				setSelected((Boolean)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__OPTIONAL:
-				setOptional((Boolean)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__NUMBER_VALUE:
-				setNumberValue((String)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__STRING_VALUE:
-				setStringValue((String)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__VALUE:
-				setValue((String)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY:
-				setHierarchy((DatamartHierarchy)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION:
-				setAggregation((DatamartAggregationFunctionInterface)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION:
-				setFunction((DatamartFunctionInterface)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET:
-				setSet((Expression)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION:
-				setSetFunction((DatamartSetFunctionInterface)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATED:
-				setAggregated((Boolean)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALED:
-				setScaled((Boolean)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__PLACED:
-				setPlaced((Boolean)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AXIS:
-				setAxis((AxisEnum)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATE:
-				setAggregate((SqlAggregationEnum)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALE:
-				setScale((ValueScaleEnum)newValue);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__PROPERTY_REF:
-				setPropertyRef((LEntityAttribute)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.DATAMART_PROPERTY__FILTERED:
-				setFiltered(FILTERED_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SELECTED:
-				setSelected(SELECTED_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__OPTIONAL:
-				setOptional(OPTIONAL_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__NUMBER_VALUE:
-				setNumberValue(NUMBER_VALUE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__STRING_VALUE:
-				setStringValue(STRING_VALUE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__VALUE:
-				setValue(VALUE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY:
-				setHierarchy((DatamartHierarchy)null);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION:
-				setAggregation((DatamartAggregationFunctionInterface)null);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION:
-				setFunction((DatamartFunctionInterface)null);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET:
-				setSet((Expression)null);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION:
-				setSetFunction((DatamartSetFunctionInterface)null);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATED:
-				setAggregated(AGGREGATED_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALED:
-				setScaled(SCALED_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__PLACED:
-				setPlaced(PLACED_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AXIS:
-				setAxis(AXIS_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATE:
-				setAggregate(AGGREGATE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALE:
-				setScale(SCALE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.DATAMART_PROPERTY__PROPERTY_REF:
-				setPropertyRef((LEntityAttribute)null);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.DATAMART_PROPERTY__FILTERED:
-				return filtered != FILTERED_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SELECTED:
-				return selected != SELECTED_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__OPTIONAL:
-				return optional != OPTIONAL_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__NUMBER_VALUE:
-				return NUMBER_VALUE_EDEFAULT == null ? numberValue != null : !NUMBER_VALUE_EDEFAULT.equals(numberValue);
-			case DatamartDSLPackage.DATAMART_PROPERTY__STRING_VALUE:
-				return STRING_VALUE_EDEFAULT == null ? stringValue != null : !STRING_VALUE_EDEFAULT.equals(stringValue);
-			case DatamartDSLPackage.DATAMART_PROPERTY__VALUE:
-				return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
-			case DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY:
-				return hierarchy != null;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION:
-				return aggregation != null;
-			case DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION:
-				return function != null;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET:
-				return set != null;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION:
-				return setFunction != null;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATED:
-				return aggregated != AGGREGATED_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALED:
-				return scaled != SCALED_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__PLACED:
-				return placed != PLACED_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AXIS:
-				return axis != AXIS_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATE:
-				return aggregate != AGGREGATE_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__SCALE:
-				return scale != SCALE_EDEFAULT;
-			case DatamartDSLPackage.DATAMART_PROPERTY__PROPERTY_REF:
-				return propertyRef != null;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
-		if (baseClass == DatamartElement.class) {
-			switch (derivedFeatureID) {
-				default: return -1;
-			}
-		}
-		if (baseClass == Expression.class) {
-			switch (derivedFeatureID) {
-				case DatamartDSLPackage.DATAMART_PROPERTY__FILTERED: return DatamartDSLPackage.EXPRESSION__FILTERED;
-				case DatamartDSLPackage.DATAMART_PROPERTY__SELECTED: return DatamartDSLPackage.EXPRESSION__SELECTED;
-				case DatamartDSLPackage.DATAMART_PROPERTY__OPTIONAL: return DatamartDSLPackage.EXPRESSION__OPTIONAL;
-				case DatamartDSLPackage.DATAMART_PROPERTY__NUMBER_VALUE: return DatamartDSLPackage.EXPRESSION__NUMBER_VALUE;
-				case DatamartDSLPackage.DATAMART_PROPERTY__STRING_VALUE: return DatamartDSLPackage.EXPRESSION__STRING_VALUE;
-				case DatamartDSLPackage.DATAMART_PROPERTY__VALUE: return DatamartDSLPackage.EXPRESSION__VALUE;
-				case DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY: return DatamartDSLPackage.EXPRESSION__HIERARCHY;
-				case DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION: return DatamartDSLPackage.EXPRESSION__AGGREGATION;
-				case DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION: return DatamartDSLPackage.EXPRESSION__FUNCTION;
-				case DatamartDSLPackage.DATAMART_PROPERTY__SET: return DatamartDSLPackage.EXPRESSION__SET;
-				case DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION: return DatamartDSLPackage.EXPRESSION__SET_FUNCTION;
-				default: return -1;
-			}
-		}
-		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
-		if (baseClass == DatamartElement.class) {
-			switch (baseFeatureID) {
-				default: return -1;
-			}
-		}
-		if (baseClass == Expression.class) {
-			switch (baseFeatureID) {
-				case DatamartDSLPackage.EXPRESSION__FILTERED: return DatamartDSLPackage.DATAMART_PROPERTY__FILTERED;
-				case DatamartDSLPackage.EXPRESSION__SELECTED: return DatamartDSLPackage.DATAMART_PROPERTY__SELECTED;
-				case DatamartDSLPackage.EXPRESSION__OPTIONAL: return DatamartDSLPackage.DATAMART_PROPERTY__OPTIONAL;
-				case DatamartDSLPackage.EXPRESSION__NUMBER_VALUE: return DatamartDSLPackage.DATAMART_PROPERTY__NUMBER_VALUE;
-				case DatamartDSLPackage.EXPRESSION__STRING_VALUE: return DatamartDSLPackage.DATAMART_PROPERTY__STRING_VALUE;
-				case DatamartDSLPackage.EXPRESSION__VALUE: return DatamartDSLPackage.DATAMART_PROPERTY__VALUE;
-				case DatamartDSLPackage.EXPRESSION__HIERARCHY: return DatamartDSLPackage.DATAMART_PROPERTY__HIERARCHY;
-				case DatamartDSLPackage.EXPRESSION__AGGREGATION: return DatamartDSLPackage.DATAMART_PROPERTY__AGGREGATION;
-				case DatamartDSLPackage.EXPRESSION__FUNCTION: return DatamartDSLPackage.DATAMART_PROPERTY__FUNCTION;
-				case DatamartDSLPackage.EXPRESSION__SET: return DatamartDSLPackage.DATAMART_PROPERTY__SET;
-				case DatamartDSLPackage.EXPRESSION__SET_FUNCTION: return DatamartDSLPackage.DATAMART_PROPERTY__SET_FUNCTION;
-				default: return -1;
-			}
-		}
-		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (filtered: ");
-		result.append(filtered);
-		result.append(", selected: ");
-		result.append(selected);
-		result.append(", optional: ");
-		result.append(optional);
-		result.append(", numberValue: ");
-		result.append(numberValue);
-		result.append(", stringValue: ");
-		result.append(stringValue);
-		result.append(", value: ");
-		result.append(value);
-		result.append(", aggregated: ");
-		result.append(aggregated);
-		result.append(", scaled: ");
-		result.append(scaled);
-		result.append(", placed: ");
-		result.append(placed);
-		result.append(", axis: ");
-		result.append(axis);
-		result.append(", aggregate: ");
-		result.append(aggregate);
-		result.append(", scale: ");
-		result.append(scale);
-		result.append(')');
-		return result.toString();
-	}
-
-} //DatamartPropertyImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/EventBrokerDataMartImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/EventBrokerDataMartImpl.java
deleted file mode 100644
index e2c0df0..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/EventBrokerDataMartImpl.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDefinition;
-import org.eclipse.osbp.xtext.datamartdsl.EventBrokerDataMart;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Event Broker Data Mart</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.EventBrokerDataMartImpl#getFilter <em>Filter</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.EventBrokerDataMartImpl#getDatamartDef <em>Datamart Def</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class EventBrokerDataMartImpl extends DatamartLazyResolverImpl implements EventBrokerDataMart {
-	/**
-	 * The default value of the '{@link #getFilter() <em>Filter</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFilter()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String FILTER_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getFilter() <em>Filter</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFilter()
-	 * @generated
-	 * @ordered
-	 */
-	protected String filter = FILTER_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getDatamartDef() <em>Datamart Def</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDatamartDef()
-	 * @generated
-	 * @ordered
-	 */
-	protected DatamartDefinition datamartDef;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected EventBrokerDataMartImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.EVENT_BROKER_DATA_MART;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getFilter() {
-		return filter;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setFilter(String newFilter) {
-		String oldFilter = filter;
-		filter = newFilter;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.EVENT_BROKER_DATA_MART__FILTER, oldFilter, filter));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public DatamartDefinition getDatamartDef() {
-		if (datamartDef != null && datamartDef.eIsProxy()) {
-			InternalEObject oldDatamartDef = (InternalEObject)datamartDef;
-			datamartDef = (DatamartDefinition)eResolveProxy(oldDatamartDef);
-			if (datamartDef != oldDatamartDef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.EVENT_BROKER_DATA_MART__DATAMART_DEF, oldDatamartDef, datamartDef));
-			}
-		}
-		return datamartDef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public DatamartDefinition basicGetDatamartDef() {
-		return datamartDef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setDatamartDef(DatamartDefinition newDatamartDef) {
-		DatamartDefinition oldDatamartDef = datamartDef;
-		datamartDef = newDatamartDef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.EVENT_BROKER_DATA_MART__DATAMART_DEF, oldDatamartDef, datamartDef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__FILTER:
-				return getFilter();
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__DATAMART_DEF:
-				if (resolve) return getDatamartDef();
-				return basicGetDatamartDef();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__FILTER:
-				setFilter((String)newValue);
-				return;
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__DATAMART_DEF:
-				setDatamartDef((DatamartDefinition)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__FILTER:
-				setFilter(FILTER_EDEFAULT);
-				return;
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__DATAMART_DEF:
-				setDatamartDef((DatamartDefinition)null);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__FILTER:
-				return FILTER_EDEFAULT == null ? filter != null : !FILTER_EDEFAULT.equals(filter);
-			case DatamartDSLPackage.EVENT_BROKER_DATA_MART__DATAMART_DEF:
-				return datamartDef != null;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (filter: ");
-		result.append(filter);
-		result.append(')');
-		return result.toString();
-	}
-
-} //EventBrokerDataMartImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDataImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDataImpl.java
deleted file mode 100644
index c21abdd..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDataImpl.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerData;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Data</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerDataImpl#getPropertyRef <em>Property Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerDataImpl#getFillerType <em>Filler Type</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerDataImpl extends DatamartLazyResolverImpl implements PropertyFillerData {
-	/**
-	 * The cached value of the '{@link #getPropertyRef() <em>Property Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getPropertyRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute propertyRef;
-
-	/**
-	 * The cached value of the '{@link #getFillerType() <em>Filler Type</em>}' containment reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getFillerType()
-	 * @generated
-	 * @ordered
-	 */
-	protected PropertyFillerType fillerType;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerDataImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_DATA;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getPropertyRef() {
-		if (propertyRef != null && propertyRef.eIsProxy()) {
-			InternalEObject oldPropertyRef = (InternalEObject)propertyRef;
-			propertyRef = (LEntityAttribute)eResolveProxy(oldPropertyRef);
-			if (propertyRef != oldPropertyRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_DATA__PROPERTY_REF, oldPropertyRef, propertyRef));
-			}
-		}
-		return propertyRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetPropertyRef() {
-		return propertyRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setPropertyRef(LEntityAttribute newPropertyRef) {
-		LEntityAttribute oldPropertyRef = propertyRef;
-		propertyRef = newPropertyRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_DATA__PROPERTY_REF, oldPropertyRef, propertyRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public PropertyFillerType getFillerType() {
-		return fillerType;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public NotificationChain basicSetFillerType(PropertyFillerType newFillerType, NotificationChain msgs) {
-		PropertyFillerType oldFillerType = fillerType;
-		fillerType = newFillerType;
-		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE, oldFillerType, newFillerType);
-			if (msgs == null) msgs = notification; else msgs.add(notification);
-		}
-		return msgs;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setFillerType(PropertyFillerType newFillerType) {
-		if (newFillerType != fillerType) {
-			NotificationChain msgs = null;
-			if (fillerType != null)
-				msgs = ((InternalEObject)fillerType).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE, null, msgs);
-			if (newFillerType != null)
-				msgs = ((InternalEObject)newFillerType).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE, null, msgs);
-			msgs = basicSetFillerType(newFillerType, msgs);
-			if (msgs != null) msgs.dispatch();
-		}
-		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE, newFillerType, newFillerType));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE:
-				return basicSetFillerType(null, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__PROPERTY_REF:
-				if (resolve) return getPropertyRef();
-				return basicGetPropertyRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE:
-				return getFillerType();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__PROPERTY_REF:
-				setPropertyRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE:
-				setFillerType((PropertyFillerType)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__PROPERTY_REF:
-				setPropertyRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE:
-				setFillerType((PropertyFillerType)null);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__PROPERTY_REF:
-				return propertyRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_DATA__FILLER_TYPE:
-				return fillerType != null;
-		}
-		return super.eIsSet(featureID);
-	}
-
-} //PropertyFillerDataImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateFutureImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateFutureImpl.java
deleted file mode 100644
index d76a18f..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateFutureImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateFuture;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Date Future</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerDateFutureImpl#getDateFutureYears <em>Date Future Years</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerDateFutureImpl extends PropertyFillerDateTypeImpl implements PropertyFillerDateFuture {
-	/**
-	 * The default value of the '{@link #getDateFutureYears() <em>Date Future Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDateFutureYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int DATE_FUTURE_YEARS_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getDateFutureYears() <em>Date Future Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDateFutureYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected int dateFutureYears = DATE_FUTURE_YEARS_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerDateFutureImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_DATE_FUTURE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getDateFutureYears() {
-		return dateFutureYears;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setDateFutureYears(int newDateFutureYears) {
-		int oldDateFutureYears = dateFutureYears;
-		dateFutureYears = newDateFutureYears;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_DATE_FUTURE__DATE_FUTURE_YEARS, oldDateFutureYears, dateFutureYears));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_FUTURE__DATE_FUTURE_YEARS:
-				return getDateFutureYears();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_FUTURE__DATE_FUTURE_YEARS:
-				setDateFutureYears((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_FUTURE__DATE_FUTURE_YEARS:
-				setDateFutureYears(DATE_FUTURE_YEARS_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_FUTURE__DATE_FUTURE_YEARS:
-				return dateFutureYears != DATE_FUTURE_YEARS_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (dateFutureYears: ");
-		result.append(dateFutureYears);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerDateFutureImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDatePastImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDatePastImpl.java
deleted file mode 100644
index 03f6de4..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDatePastImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDatePast;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Date Past</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerDatePastImpl#getDatePastYears <em>Date Past Years</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerDatePastImpl extends PropertyFillerDateTypeImpl implements PropertyFillerDatePast {
-	/**
-	 * The default value of the '{@link #getDatePastYears() <em>Date Past Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDatePastYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int DATE_PAST_YEARS_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getDatePastYears() <em>Date Past Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDatePastYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected int datePastYears = DATE_PAST_YEARS_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerDatePastImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_DATE_PAST;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getDatePastYears() {
-		return datePastYears;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setDatePastYears(int newDatePastYears) {
-		int oldDatePastYears = datePastYears;
-		datePastYears = newDatePastYears;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_DATE_PAST__DATE_PAST_YEARS, oldDatePastYears, datePastYears));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_PAST__DATE_PAST_YEARS:
-				return getDatePastYears();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_PAST__DATE_PAST_YEARS:
-				setDatePastYears((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_PAST__DATE_PAST_YEARS:
-				setDatePastYears(DATE_PAST_YEARS_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_PAST__DATE_PAST_YEARS:
-				return datePastYears != DATE_PAST_YEARS_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (datePastYears: ");
-		result.append(datePastYears);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerDatePastImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateRangeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateRangeImpl.java
deleted file mode 100644
index 954d3b2..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateRangeImpl.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateRange;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Date Range</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerDateRangeImpl#getDateBeginYears <em>Date Begin Years</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerDateRangeImpl#getDateEndYears <em>Date End Years</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerDateRangeImpl extends PropertyFillerDateTypeImpl implements PropertyFillerDateRange {
-	/**
-	 * The default value of the '{@link #getDateBeginYears() <em>Date Begin Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDateBeginYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int DATE_BEGIN_YEARS_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getDateBeginYears() <em>Date Begin Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDateBeginYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected int dateBeginYears = DATE_BEGIN_YEARS_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getDateEndYears() <em>Date End Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDateEndYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int DATE_END_YEARS_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getDateEndYears() <em>Date End Years</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDateEndYears()
-	 * @generated
-	 * @ordered
-	 */
-	protected int dateEndYears = DATE_END_YEARS_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerDateRangeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_DATE_RANGE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getDateBeginYears() {
-		return dateBeginYears;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setDateBeginYears(int newDateBeginYears) {
-		int oldDateBeginYears = dateBeginYears;
-		dateBeginYears = newDateBeginYears;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_BEGIN_YEARS, oldDateBeginYears, dateBeginYears));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getDateEndYears() {
-		return dateEndYears;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setDateEndYears(int newDateEndYears) {
-		int oldDateEndYears = dateEndYears;
-		dateEndYears = newDateEndYears;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_END_YEARS, oldDateEndYears, dateEndYears));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_BEGIN_YEARS:
-				return getDateBeginYears();
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_END_YEARS:
-				return getDateEndYears();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_BEGIN_YEARS:
-				setDateBeginYears((Integer)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_END_YEARS:
-				setDateEndYears((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_BEGIN_YEARS:
-				setDateBeginYears(DATE_BEGIN_YEARS_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_END_YEARS:
-				setDateEndYears(DATE_END_YEARS_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_BEGIN_YEARS:
-				return dateBeginYears != DATE_BEGIN_YEARS_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_DATE_RANGE__DATE_END_YEARS:
-				return dateEndYears != DATE_END_YEARS_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (dateBeginYears: ");
-		result.append(dateBeginYears);
-		result.append(", dateEndYears: ");
-		result.append(dateEndYears);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerDateRangeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateTypeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateTypeImpl.java
deleted file mode 100644
index e11e8ae..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDateTypeImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDateType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Date Type</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerDateTypeImpl extends PropertyFillerTypeImpl implements PropertyFillerDateType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerDateTypeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_DATE_TYPE;
-	}
-
-} //PropertyFillerDateTypeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDoubleTypeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDoubleTypeImpl.java
deleted file mode 100644
index 159706a..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerDoubleTypeImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerDoubleType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Double Type</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerDoubleTypeImpl extends PropertyFillerTypeImpl implements PropertyFillerDoubleType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerDoubleTypeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_DOUBLE_TYPE;
-	}
-
-} //PropertyFillerDoubleTypeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerIntegerTypeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerIntegerTypeImpl.java
deleted file mode 100644
index 4d317a9..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerIntegerTypeImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerIntegerType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Integer Type</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerIntegerTypeImpl extends PropertyFillerTypeImpl implements PropertyFillerIntegerType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerIntegerTypeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_INTEGER_TYPE;
-	}
-
-} //PropertyFillerIntegerTypeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedDoubleRandomImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedDoubleRandomImpl.java
deleted file mode 100644
index 0f08b13..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedDoubleRandomImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import java.util.Collection;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.util.EDataTypeEList;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRandom;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Signed Double Random</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedDoubleRandomImpl#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerSignedDoubleRandomImpl extends PropertyFillerDoubleTypeImpl implements PropertyFillerSignedDoubleRandom {
-	/**
-	 * The cached value of the '{@link #getItems() <em>Items</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getItems()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Double> items;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerSignedDoubleRandomImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_SIGNED_DOUBLE_RANDOM;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Double> getItems() {
-		if (items == null) {
-			items = new EDataTypeEList<Double>(Double.class, this, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANDOM__ITEMS);
-		}
-		return items;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANDOM__ITEMS:
-				return getItems();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANDOM__ITEMS:
-				getItems().clear();
-				getItems().addAll((Collection<? extends Double>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANDOM__ITEMS:
-				getItems().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANDOM__ITEMS:
-				return items != null && !items.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (items: ");
-		result.append(items);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerSignedDoubleRandomImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedDoubleRangeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedDoubleRangeImpl.java
deleted file mode 100644
index aa0c103..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedDoubleRangeImpl.java
+++ /dev/null
@@ -1,458 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedDoubleRange;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Signed Double Range</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedDoubleRangeImpl#getDecimals <em>Decimals</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedDoubleRangeImpl#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedDoubleRangeImpl#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedDoubleRangeImpl#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedDoubleRangeImpl#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedDoubleRangeImpl#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerSignedDoubleRangeImpl extends PropertyFillerDoubleTypeImpl implements PropertyFillerSignedDoubleRange {
-	/**
-	 * The default value of the '{@link #getDecimals() <em>Decimals</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDecimals()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int DECIMALS_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getDecimals() <em>Decimals</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDecimals()
-	 * @generated
-	 * @ordered
-	 */
-	protected int decimals = DECIMALS_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final double BEGIN_RANGE_EDEFAULT = 0.0;
-
-	/**
-	 * The cached value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected double beginRange = BEGIN_RANGE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final double END_RANGE_EDEFAULT = 0.0;
-
-	/**
-	 * The cached value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected double endRange = END_RANGE_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getBeginRangeRef() <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute beginRangeRef;
-
-	/**
-	 * The cached value of the '{@link #getEndRangeRef() <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute endRangeRef;
-
-	/**
-	 * The default value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final double ROUNDED_EDEFAULT = 0.0;
-
-	/**
-	 * The cached value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected double rounded = ROUNDED_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerSignedDoubleRangeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getDecimals() {
-		return decimals;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setDecimals(int newDecimals) {
-		int oldDecimals = decimals;
-		decimals = newDecimals;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__DECIMALS, oldDecimals, decimals));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public double getBeginRange() {
-		return beginRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRange(double newBeginRange) {
-		double oldBeginRange = beginRange;
-		beginRange = newBeginRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE, oldBeginRange, beginRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public double getEndRange() {
-		return endRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRange(double newEndRange) {
-		double oldEndRange = endRange;
-		endRange = newEndRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE, oldEndRange, endRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getBeginRangeRef() {
-		if (beginRangeRef != null && beginRangeRef.eIsProxy()) {
-			InternalEObject oldBeginRangeRef = (InternalEObject)beginRangeRef;
-			beginRangeRef = (LEntityAttribute)eResolveProxy(oldBeginRangeRef);
-			if (beginRangeRef != oldBeginRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-			}
-		}
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetBeginRangeRef() {
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRangeRef(LEntityAttribute newBeginRangeRef) {
-		LEntityAttribute oldBeginRangeRef = beginRangeRef;
-		beginRangeRef = newBeginRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getEndRangeRef() {
-		if (endRangeRef != null && endRangeRef.eIsProxy()) {
-			InternalEObject oldEndRangeRef = (InternalEObject)endRangeRef;
-			endRangeRef = (LEntityAttribute)eResolveProxy(oldEndRangeRef);
-			if (endRangeRef != oldEndRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-			}
-		}
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetEndRangeRef() {
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRangeRef(LEntityAttribute newEndRangeRef) {
-		LEntityAttribute oldEndRangeRef = endRangeRef;
-		endRangeRef = newEndRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public double getRounded() {
-		return rounded;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setRounded(double newRounded) {
-		double oldRounded = rounded;
-		rounded = newRounded;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__ROUNDED, oldRounded, rounded));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__DECIMALS:
-				return getDecimals();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				return getBeginRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE:
-				return getEndRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				if (resolve) return getBeginRangeRef();
-				return basicGetBeginRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				if (resolve) return getEndRangeRef();
-				return basicGetEndRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__ROUNDED:
-				return getRounded();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__DECIMALS:
-				setDecimals((Integer)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				setBeginRange((Double)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE:
-				setEndRange((Double)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__ROUNDED:
-				setRounded((Double)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__DECIMALS:
-				setDecimals(DECIMALS_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				setBeginRange(BEGIN_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE:
-				setEndRange(END_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__ROUNDED:
-				setRounded(ROUNDED_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__DECIMALS:
-				return decimals != DECIMALS_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				return beginRange != BEGIN_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE:
-				return endRange != END_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				return beginRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				return endRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_DOUBLE_RANGE__ROUNDED:
-				return rounded != ROUNDED_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (decimals: ");
-		result.append(decimals);
-		result.append(", beginRange: ");
-		result.append(beginRange);
-		result.append(", endRange: ");
-		result.append(endRange);
-		result.append(", rounded: ");
-		result.append(rounded);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerSignedDoubleRangeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedIntegerRandomImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedIntegerRandomImpl.java
deleted file mode 100644
index dcf88ee..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedIntegerRandomImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import java.util.Collection;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.util.EDataTypeEList;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRandom;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Signed Integer Random</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedIntegerRandomImpl#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerSignedIntegerRandomImpl extends PropertyFillerIntegerTypeImpl implements PropertyFillerSignedIntegerRandom {
-	/**
-	 * The cached value of the '{@link #getItems() <em>Items</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getItems()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Integer> items;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerSignedIntegerRandomImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_SIGNED_INTEGER_RANDOM;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Integer> getItems() {
-		if (items == null) {
-			items = new EDataTypeEList<Integer>(Integer.class, this, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANDOM__ITEMS);
-		}
-		return items;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANDOM__ITEMS:
-				return getItems();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANDOM__ITEMS:
-				getItems().clear();
-				getItems().addAll((Collection<? extends Integer>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANDOM__ITEMS:
-				getItems().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANDOM__ITEMS:
-				return items != null && !items.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (items: ");
-		result.append(items);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerSignedIntegerRandomImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedIntegerRangeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedIntegerRangeImpl.java
deleted file mode 100644
index 6256484..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerSignedIntegerRangeImpl.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerSignedIntegerRange;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Signed Integer Range</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedIntegerRangeImpl#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedIntegerRangeImpl#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedIntegerRangeImpl#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedIntegerRangeImpl#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerSignedIntegerRangeImpl#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerSignedIntegerRangeImpl extends PropertyFillerIntegerTypeImpl implements PropertyFillerSignedIntegerRange {
-	/**
-	 * The default value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int BEGIN_RANGE_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected int beginRange = BEGIN_RANGE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int END_RANGE_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected int endRange = END_RANGE_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getBeginRangeRef() <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute beginRangeRef;
-
-	/**
-	 * The cached value of the '{@link #getEndRangeRef() <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute endRangeRef;
-
-	/**
-	 * The default value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int ROUNDED_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected int rounded = ROUNDED_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerSignedIntegerRangeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_SIGNED_INTEGER_RANGE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getBeginRange() {
-		return beginRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRange(int newBeginRange) {
-		int oldBeginRange = beginRange;
-		beginRange = newBeginRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE, oldBeginRange, beginRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getEndRange() {
-		return endRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRange(int newEndRange) {
-		int oldEndRange = endRange;
-		endRange = newEndRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE, oldEndRange, endRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getBeginRangeRef() {
-		if (beginRangeRef != null && beginRangeRef.eIsProxy()) {
-			InternalEObject oldBeginRangeRef = (InternalEObject)beginRangeRef;
-			beginRangeRef = (LEntityAttribute)eResolveProxy(oldBeginRangeRef);
-			if (beginRangeRef != oldBeginRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-			}
-		}
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetBeginRangeRef() {
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRangeRef(LEntityAttribute newBeginRangeRef) {
-		LEntityAttribute oldBeginRangeRef = beginRangeRef;
-		beginRangeRef = newBeginRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getEndRangeRef() {
-		if (endRangeRef != null && endRangeRef.eIsProxy()) {
-			InternalEObject oldEndRangeRef = (InternalEObject)endRangeRef;
-			endRangeRef = (LEntityAttribute)eResolveProxy(oldEndRangeRef);
-			if (endRangeRef != oldEndRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-			}
-		}
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetEndRangeRef() {
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRangeRef(LEntityAttribute newEndRangeRef) {
-		LEntityAttribute oldEndRangeRef = endRangeRef;
-		endRangeRef = newEndRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getRounded() {
-		return rounded;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setRounded(int newRounded) {
-		int oldRounded = rounded;
-		rounded = newRounded;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__ROUNDED, oldRounded, rounded));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				return getBeginRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE:
-				return getEndRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				if (resolve) return getBeginRangeRef();
-				return basicGetBeginRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE_REF:
-				if (resolve) return getEndRangeRef();
-				return basicGetEndRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__ROUNDED:
-				return getRounded();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				setBeginRange((Integer)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE:
-				setEndRange((Integer)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__ROUNDED:
-				setRounded((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				setBeginRange(BEGIN_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE:
-				setEndRange(END_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__ROUNDED:
-				setRounded(ROUNDED_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				return beginRange != BEGIN_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE:
-				return endRange != END_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				return beginRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__END_RANGE_REF:
-				return endRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_SIGNED_INTEGER_RANGE__ROUNDED:
-				return rounded != ROUNDED_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (beginRange: ");
-		result.append(beginRange);
-		result.append(", endRange: ");
-		result.append(endRange);
-		result.append(", rounded: ");
-		result.append(rounded);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerSignedIntegerRangeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextParagraphsImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextParagraphsImpl.java
deleted file mode 100644
index 2dd6a5e..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextParagraphsImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextParagraphs;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Text Paragraphs</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerTextParagraphsImpl#getCount <em>Count</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerTextParagraphsImpl extends PropertyFillerTextTypeImpl implements PropertyFillerTextParagraphs {
-	/**
-	 * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getCount()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int COUNT_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getCount()
-	 * @generated
-	 * @ordered
-	 */
-	protected int count = COUNT_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerTextParagraphsImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_TEXT_PARAGRAPHS;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getCount() {
-		return count;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setCount(int newCount) {
-		int oldCount = count;
-		count = newCount;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_TEXT_PARAGRAPHS__COUNT, oldCount, count));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_PARAGRAPHS__COUNT:
-				return getCount();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_PARAGRAPHS__COUNT:
-				setCount((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_PARAGRAPHS__COUNT:
-				setCount(COUNT_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_PARAGRAPHS__COUNT:
-				return count != COUNT_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (count: ");
-		result.append(count);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerTextParagraphsImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextRandomImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextRandomImpl.java
deleted file mode 100644
index e9021c0..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextRandomImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import java.util.Collection;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.util.EDataTypeEList;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextRandom;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Text Random</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerTextRandomImpl#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerTextRandomImpl extends PropertyFillerTextTypeImpl implements PropertyFillerTextRandom {
-	/**
-	 * The cached value of the '{@link #getItems() <em>Items</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getItems()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<String> items;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerTextRandomImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_TEXT_RANDOM;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<String> getItems() {
-		if (items == null) {
-			items = new EDataTypeEList<String>(String.class, this, DatamartDSLPackage.PROPERTY_FILLER_TEXT_RANDOM__ITEMS);
-		}
-		return items;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_RANDOM__ITEMS:
-				return getItems();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_RANDOM__ITEMS:
-				getItems().clear();
-				getItems().addAll((Collection<? extends String>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_RANDOM__ITEMS:
-				getItems().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_RANDOM__ITEMS:
-				return items != null && !items.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (items: ");
-		result.append(items);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerTextRandomImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextSentencesImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextSentencesImpl.java
deleted file mode 100644
index 0d96ed2..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextSentencesImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextSentences;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Text Sentences</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerTextSentencesImpl#getCount <em>Count</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerTextSentencesImpl extends PropertyFillerTextTypeImpl implements PropertyFillerTextSentences {
-	/**
-	 * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getCount()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int COUNT_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getCount()
-	 * @generated
-	 * @ordered
-	 */
-	protected int count = COUNT_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerTextSentencesImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_TEXT_SENTENCES;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getCount() {
-		return count;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setCount(int newCount) {
-		int oldCount = count;
-		count = newCount;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_TEXT_SENTENCES__COUNT, oldCount, count));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_SENTENCES__COUNT:
-				return getCount();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_SENTENCES__COUNT:
-				setCount((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_SENTENCES__COUNT:
-				setCount(COUNT_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_SENTENCES__COUNT:
-				return count != COUNT_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (count: ");
-		result.append(count);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerTextSentencesImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextTypeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextTypeImpl.java
deleted file mode 100644
index 35f9aa2..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextTypeImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Text Type</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerTextTypeImpl extends PropertyFillerTypeImpl implements PropertyFillerTextType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerTextTypeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_TEXT_TYPE;
-	}
-
-} //PropertyFillerTextTypeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextWordsImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextWordsImpl.java
deleted file mode 100644
index f148602..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTextWordsImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerTextWords;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Text Words</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerTextWordsImpl#getCount <em>Count</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerTextWordsImpl extends PropertyFillerTextTypeImpl implements PropertyFillerTextWords {
-	/**
-	 * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getCount()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int COUNT_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getCount()
-	 * @generated
-	 * @ordered
-	 */
-	protected int count = COUNT_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerTextWordsImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_TEXT_WORDS;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getCount() {
-		return count;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setCount(int newCount) {
-		int oldCount = count;
-		count = newCount;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_TEXT_WORDS__COUNT, oldCount, count));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_WORDS__COUNT:
-				return getCount();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_WORDS__COUNT:
-				setCount((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_WORDS__COUNT:
-				setCount(COUNT_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_TEXT_WORDS__COUNT:
-				return count != COUNT_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (count: ");
-		result.append(count);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerTextWordsImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTypeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTypeImpl.java
deleted file mode 100644
index a9301a7..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerTypeImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Type</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerTypeImpl extends DatamartLazyResolverImpl implements PropertyFillerType {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerTypeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_TYPE;
-	}
-
-} //PropertyFillerTypeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedDoubleRandomImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedDoubleRandomImpl.java
deleted file mode 100644
index 90cf4b2..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedDoubleRandomImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import java.util.Collection;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.util.EDataTypeEList;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRandom;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Unsigned Double Random</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedDoubleRandomImpl#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerUnsignedDoubleRandomImpl extends PropertyFillerDoubleTypeImpl implements PropertyFillerUnsignedDoubleRandom {
-	/**
-	 * The cached value of the '{@link #getItems() <em>Items</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getItems()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Double> items;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerUnsignedDoubleRandomImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANDOM;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Double> getItems() {
-		if (items == null) {
-			items = new EDataTypeEList<Double>(Double.class, this, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANDOM__ITEMS);
-		}
-		return items;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANDOM__ITEMS:
-				return getItems();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANDOM__ITEMS:
-				getItems().clear();
-				getItems().addAll((Collection<? extends Double>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANDOM__ITEMS:
-				getItems().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANDOM__ITEMS:
-				return items != null && !items.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (items: ");
-		result.append(items);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerUnsignedDoubleRandomImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedDoubleRangeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedDoubleRangeImpl.java
deleted file mode 100644
index 93f999d..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedDoubleRangeImpl.java
+++ /dev/null
@@ -1,458 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedDoubleRange;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Unsigned Double Range</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedDoubleRangeImpl#getDecimals <em>Decimals</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedDoubleRangeImpl#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedDoubleRangeImpl#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedDoubleRangeImpl#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedDoubleRangeImpl#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedDoubleRangeImpl#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerUnsignedDoubleRangeImpl extends PropertyFillerDoubleTypeImpl implements PropertyFillerUnsignedDoubleRange {
-	/**
-	 * The default value of the '{@link #getDecimals() <em>Decimals</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDecimals()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int DECIMALS_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getDecimals() <em>Decimals</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getDecimals()
-	 * @generated
-	 * @ordered
-	 */
-	protected int decimals = DECIMALS_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final double BEGIN_RANGE_EDEFAULT = 0.0;
-
-	/**
-	 * The cached value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected double beginRange = BEGIN_RANGE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final double END_RANGE_EDEFAULT = 0.0;
-
-	/**
-	 * The cached value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected double endRange = END_RANGE_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getBeginRangeRef() <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute beginRangeRef;
-
-	/**
-	 * The cached value of the '{@link #getEndRangeRef() <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute endRangeRef;
-
-	/**
-	 * The default value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final double ROUNDED_EDEFAULT = 0.0;
-
-	/**
-	 * The cached value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected double rounded = ROUNDED_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerUnsignedDoubleRangeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getDecimals() {
-		return decimals;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setDecimals(int newDecimals) {
-		int oldDecimals = decimals;
-		decimals = newDecimals;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__DECIMALS, oldDecimals, decimals));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public double getBeginRange() {
-		return beginRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRange(double newBeginRange) {
-		double oldBeginRange = beginRange;
-		beginRange = newBeginRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE, oldBeginRange, beginRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public double getEndRange() {
-		return endRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRange(double newEndRange) {
-		double oldEndRange = endRange;
-		endRange = newEndRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE, oldEndRange, endRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getBeginRangeRef() {
-		if (beginRangeRef != null && beginRangeRef.eIsProxy()) {
-			InternalEObject oldBeginRangeRef = (InternalEObject)beginRangeRef;
-			beginRangeRef = (LEntityAttribute)eResolveProxy(oldBeginRangeRef);
-			if (beginRangeRef != oldBeginRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-			}
-		}
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetBeginRangeRef() {
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRangeRef(LEntityAttribute newBeginRangeRef) {
-		LEntityAttribute oldBeginRangeRef = beginRangeRef;
-		beginRangeRef = newBeginRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getEndRangeRef() {
-		if (endRangeRef != null && endRangeRef.eIsProxy()) {
-			InternalEObject oldEndRangeRef = (InternalEObject)endRangeRef;
-			endRangeRef = (LEntityAttribute)eResolveProxy(oldEndRangeRef);
-			if (endRangeRef != oldEndRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-			}
-		}
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetEndRangeRef() {
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRangeRef(LEntityAttribute newEndRangeRef) {
-		LEntityAttribute oldEndRangeRef = endRangeRef;
-		endRangeRef = newEndRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public double getRounded() {
-		return rounded;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setRounded(double newRounded) {
-		double oldRounded = rounded;
-		rounded = newRounded;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__ROUNDED, oldRounded, rounded));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__DECIMALS:
-				return getDecimals();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				return getBeginRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE:
-				return getEndRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				if (resolve) return getBeginRangeRef();
-				return basicGetBeginRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				if (resolve) return getEndRangeRef();
-				return basicGetEndRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__ROUNDED:
-				return getRounded();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__DECIMALS:
-				setDecimals((Integer)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				setBeginRange((Double)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE:
-				setEndRange((Double)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__ROUNDED:
-				setRounded((Double)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__DECIMALS:
-				setDecimals(DECIMALS_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				setBeginRange(BEGIN_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE:
-				setEndRange(END_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__ROUNDED:
-				setRounded(ROUNDED_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__DECIMALS:
-				return decimals != DECIMALS_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE:
-				return beginRange != BEGIN_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE:
-				return endRange != END_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__BEGIN_RANGE_REF:
-				return beginRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__END_RANGE_REF:
-				return endRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_DOUBLE_RANGE__ROUNDED:
-				return rounded != ROUNDED_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (decimals: ");
-		result.append(decimals);
-		result.append(", beginRange: ");
-		result.append(beginRange);
-		result.append(", endRange: ");
-		result.append(endRange);
-		result.append(", rounded: ");
-		result.append(rounded);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerUnsignedDoubleRangeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedIntegerRandomImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedIntegerRandomImpl.java
deleted file mode 100644
index d16dec3..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedIntegerRandomImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import java.util.Collection;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.util.EDataTypeEList;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRandom;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Unsigned Integer Random</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedIntegerRandomImpl#getItems <em>Items</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerUnsignedIntegerRandomImpl extends PropertyFillerIntegerTypeImpl implements PropertyFillerUnsignedIntegerRandom {
-	/**
-	 * The cached value of the '{@link #getItems() <em>Items</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getItems()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<Integer> items;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerUnsignedIntegerRandomImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_UNSIGNED_INTEGER_RANDOM;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<Integer> getItems() {
-		if (items == null) {
-			items = new EDataTypeEList<Integer>(Integer.class, this, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANDOM__ITEMS);
-		}
-		return items;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANDOM__ITEMS:
-				return getItems();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANDOM__ITEMS:
-				getItems().clear();
-				getItems().addAll((Collection<? extends Integer>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANDOM__ITEMS:
-				getItems().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANDOM__ITEMS:
-				return items != null && !items.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (items: ");
-		result.append(items);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerUnsignedIntegerRandomImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedIntegerRangeImpl.java b/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedIntegerRangeImpl.java
deleted file mode 100644
index df3f6dc..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/emf-gen/org/eclipse/osbp/xtext/datamartdsl/impl/PropertyFillerUnsignedIntegerRangeImpl.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/**
- * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
- *  All rights reserved. This program and the accompanying materials 
- *  are made available under the terms of the Eclipse Public License v1.0 
- *  which accompanies this distribution, and is available at 
- *  http://www.eclipse.org/legal/epl-v10.html 
- * 
- *  Based on ideas from Xtext, Xtend, Xcore
- *   
- *  Contributors:  
- *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
- *  
- */
-package org.eclipse.osbp.xtext.datamartdsl.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
-
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLPackage;
-import org.eclipse.osbp.xtext.datamartdsl.PropertyFillerUnsignedIntegerRange;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property Filler Unsigned Integer Range</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedIntegerRangeImpl#getBeginRange <em>Begin Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedIntegerRangeImpl#getEndRange <em>End Range</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedIntegerRangeImpl#getBeginRangeRef <em>Begin Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedIntegerRangeImpl#getEndRangeRef <em>End Range Ref</em>}</li>
- *   <li>{@link org.eclipse.osbp.xtext.datamartdsl.impl.PropertyFillerUnsignedIntegerRangeImpl#getRounded <em>Rounded</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyFillerUnsignedIntegerRangeImpl extends PropertyFillerIntegerTypeImpl implements PropertyFillerUnsignedIntegerRange {
-	/**
-	 * The default value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int BEGIN_RANGE_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getBeginRange() <em>Begin Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected int beginRange = BEGIN_RANGE_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int END_RANGE_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getEndRange() <em>End Range</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRange()
-	 * @generated
-	 * @ordered
-	 */
-	protected int endRange = END_RANGE_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getBeginRangeRef() <em>Begin Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getBeginRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute beginRangeRef;
-
-	/**
-	 * The cached value of the '{@link #getEndRangeRef() <em>End Range Ref</em>}' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getEndRangeRef()
-	 * @generated
-	 * @ordered
-	 */
-	protected LEntityAttribute endRangeRef;
-
-	/**
-	 * The default value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final int ROUNDED_EDEFAULT = 0;
-
-	/**
-	 * The cached value of the '{@link #getRounded() <em>Rounded</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getRounded()
-	 * @generated
-	 * @ordered
-	 */
-	protected int rounded = ROUNDED_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected PropertyFillerUnsignedIntegerRangeImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return DatamartDSLPackage.Literals.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getBeginRange() {
-		return beginRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRange(int newBeginRange) {
-		int oldBeginRange = beginRange;
-		beginRange = newBeginRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE, oldBeginRange, beginRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getEndRange() {
-		return endRange;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRange(int newEndRange) {
-		int oldEndRange = endRange;
-		endRange = newEndRange;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE, oldEndRange, endRange));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getBeginRangeRef() {
-		if (beginRangeRef != null && beginRangeRef.eIsProxy()) {
-			InternalEObject oldBeginRangeRef = (InternalEObject)beginRangeRef;
-			beginRangeRef = (LEntityAttribute)eResolveProxy(oldBeginRangeRef);
-			if (beginRangeRef != oldBeginRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-			}
-		}
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetBeginRangeRef() {
-		return beginRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setBeginRangeRef(LEntityAttribute newBeginRangeRef) {
-		LEntityAttribute oldBeginRangeRef = beginRangeRef;
-		beginRangeRef = newBeginRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE_REF, oldBeginRangeRef, beginRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute getEndRangeRef() {
-		if (endRangeRef != null && endRangeRef.eIsProxy()) {
-			InternalEObject oldEndRangeRef = (InternalEObject)endRangeRef;
-			endRangeRef = (LEntityAttribute)eResolveProxy(oldEndRangeRef);
-			if (endRangeRef != oldEndRangeRef) {
-				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-			}
-		}
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public LEntityAttribute basicGetEndRangeRef() {
-		return endRangeRef;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setEndRangeRef(LEntityAttribute newEndRangeRef) {
-		LEntityAttribute oldEndRangeRef = endRangeRef;
-		endRangeRef = newEndRangeRef;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE_REF, oldEndRangeRef, endRangeRef));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public int getRounded() {
-		return rounded;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setRounded(int newRounded) {
-		int oldRounded = rounded;
-		rounded = newRounded;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__ROUNDED, oldRounded, rounded));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				return getBeginRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE:
-				return getEndRange();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				if (resolve) return getBeginRangeRef();
-				return basicGetBeginRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE_REF:
-				if (resolve) return getEndRangeRef();
-				return basicGetEndRangeRef();
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__ROUNDED:
-				return getRounded();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				setBeginRange((Integer)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE:
-				setEndRange((Integer)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)newValue);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__ROUNDED:
-				setRounded((Integer)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				setBeginRange(BEGIN_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE:
-				setEndRange(END_RANGE_EDEFAULT);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				setBeginRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE_REF:
-				setEndRangeRef((LEntityAttribute)null);
-				return;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__ROUNDED:
-				setRounded(ROUNDED_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE:
-				return beginRange != BEGIN_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE:
-				return endRange != END_RANGE_EDEFAULT;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__BEGIN_RANGE_REF:
-				return beginRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__END_RANGE_REF:
-				return endRangeRef != null;
-			case DatamartDSLPackage.PROPERTY_FILLER_UNSIGNED_INTEGER_RANGE__ROUNDED:
-				return rounded != ROUNDED_EDEFAULT;
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (beginRange: ");
-		result.append(beginRange);
-		result.append(", endRange: ");
-		result.append(endRange);
-		result.append(", rounded: ");
-		result.append(rounded);
-		result.append(')');
-		return result.toString();
-	}
-
-} //PropertyFillerUnsignedIntegerRangeImpl
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src-gen/README.txt b/org.eclipse.osbp.xtext.datamartdsl/src-gen/README.txt
deleted file mode 100644
index bbbe557..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/src-gen/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-dummy file needed for git for necessary but empty directories!
\ No newline at end of file
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src-gen/org/eclipse/osbp/xtext/datamartdsl/parser/antlr/internal/InternalDatamartDSLLexer.java b/org.eclipse.osbp.xtext.datamartdsl/src-gen/org/eclipse/osbp/xtext/datamartdsl/parser/antlr/internal/InternalDatamartDSLLexer.java
index 8be5940..3ab3355 100644
--- a/org.eclipse.osbp.xtext.datamartdsl/src-gen/org/eclipse/osbp/xtext/datamartdsl/parser/antlr/internal/InternalDatamartDSLLexer.java
+++ b/org.eclipse.osbp.xtext.datamartdsl/src-gen/org/eclipse/osbp/xtext/datamartdsl/parser/antlr/internal/InternalDatamartDSLLexer.java
@@ -1,16 +1,3 @@
-/**
- *                                                                            
- *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
 package org.eclipse.osbp.xtext.datamartdsl.parser.antlr.internal;
 
 // Hack: Use our own Lexer superclass by means of import. 
@@ -8173,4 +8160,4 @@
     }
  
 
-}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend
index c87fb67..35e32a1 100644
--- a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend
+++ b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.xtend
@@ -192,10 +192,10 @@
 
 	var sqlAliasCounter = <String, Integer>newHashMap
 	var sqlFilterMap = <String, DatamartAttributeBase>newHashMap
-	var sqlGrouping = <String>newArrayList
+	var sqlGrouping = <String, List<String>>newHashMap()
 	var idMap = <String, LEntity>newHashMap
 	var datamartDtoMapper = null as String
-	var entityGrouping = new HashMap<String, LEntity>()
+	var entityGrouping = <String, Map<String, LEntity>>newHashMap()
 	var ignoreEntityGrouping = false
 	var sqlHasAggregate = false
 	var sqlHasOrder = false
@@ -352,18 +352,18 @@
 		attributes.forEach [
 			type.members +=
 				definition.toField(DatamartAttributeUtil.getAliasedAttributeName(it),
-					it.attributeRef.type.toTypeReference)
+					it.attributeRef?.type?.toTypeReference)
 		]
 		attributes.forEach [
 			val attributeName = DatamartAttributeUtil.getAliasedAttributeName(it)
 			type.members += definition.toMethod(
 				'''get«attributeName.toFirstUpper»''',
-				it.attributeRef.type.toTypeReference,
+				it.attributeRef?.type?.toTypeReference,
 				[
 					body = [append('''return «attributeName»;''')]
 				]
 			)
-			val attributeType = it.attributeRef.type.toTypeReference
+			val attributeType = it.attributeRef?.type?.toTypeReference
 			type.members += definition.toMethod(
 				'''set«attributeName.toFirstUpper»''',
 				_typeReferenceBuilder.typeRef(Void::TYPE),
@@ -627,7 +627,7 @@
 	 * 
 	 */
 	def void toFields(JvmDeclaredType type, DatamartDefinition definition) {
-		val typesMap = <String, LEntityAttribute>newHashMap
+		val typesMap = <String, LAttribute>newHashMap
 		var JvmField field = null
 		// create logger
 		field = definition.toField("log", _typeReferenceBuilder.typeRef(Logger)) [
@@ -726,6 +726,15 @@
 		]
 		type.members += field
 
+		field = definition.toField("typesProp",
+			_typeReferenceBuilder.typeRef(HashMap, _typeReferenceBuilder.typeRef(String),
+				_typeReferenceBuilder.typeRef(String))) [
+			setInitializer([
+				append('''new HashMap<String, String>() «definition.createTypesProps(typesMap)»''')
+			])
+		]
+		type.members += field
+
 		field = definition.toField("resultAttributes",
 			_typeReferenceBuilder.typeRef(HashMap, _typeReferenceBuilder.typeRef(String),
 				_typeReferenceBuilder.typeRef(String)))[setInitializer([append('''new HashMap<String,String>()''')])]
@@ -755,6 +764,11 @@
 			operation.visibility = JvmVisibility::PUBLIC
 			type.members += operation
 		}
+		operation = definition.toGetter("typesProp",
+			_typeReferenceBuilder.typeRef(HashMap, _typeReferenceBuilder.typeRef(String),
+				_typeReferenceBuilder.typeRef(String)))
+		operation.visibility = JvmVisibility::PUBLIC
+		type.members += operation
 		operation = definition.toGetter("user", _typeReferenceBuilder.typeRef(IUser))
 		operation.visibility = JvmVisibility::PUBLIC
 		type.members += operation
@@ -1406,7 +1420,8 @@
 					var attribute = (condition.condition as ConditionalExpression).left as DatamartAttributeBase
 					if (element.ranged) {
 						if (attribute.attributeRef.datatype.isDate) {
-							if (attribute.attributeRef.properties !== null && !attribute.attributeRef.properties.empty) {
+							if (attribute.attributeRef.properties !== null &&
+								!attribute.attributeRef.properties.empty) {
 								text = '''
 								{{
 									put("«attribute.getAttributeName(entity)»", new HashMap<String, String>() {{'''
@@ -1424,7 +1439,7 @@
 					}
 				}
 			}
-		}		
+		}
 		for (navigation : entity.navigations) {
 			if (navigation instanceof DatamartMember) {
 				text = '''
@@ -1668,7 +1683,7 @@
 	 */
 	def String createTypesMaps(
 		DatamartDefinition definition,
-		HashMap<String, LEntityAttribute> typesMap
+		HashMap<String, LAttribute> typesMap
 	) {
 
 		var listTxt = '''
@@ -1686,11 +1701,36 @@
 	}
 
 	/**
+	 * <p>build the types map as lookup for datatypes.</p> 
+	 * 
+	 */
+	def String createTypesProps(
+		DatamartDefinition definition,
+		HashMap<String, LAttribute> typesMap
+	) {
+
+		var listTxt = ""
+		for (attribute : typesMap.keySet) {
+			if (!typesMap.get(attribute).properties.empty) {
+				var attributeName = attribute.split("\\.").get(1)
+				listTxt = '''
+				«listTxt»
+				put("«attributeName»", "«typesMap.get(attribute).properties.get(0).value»");'''
+			}
+		}
+		listTxt = '''
+		{{
+			«listTxt»
+		}}'''
+		return listTxt
+	}
+
+	/**
 	 * <p>build the types map as lookup for datatypes according to authorization roles.</p> 
 	 * 
 	 */
 	def String createTypesMap(DatamartDefinition definition, DatamartRole role,
-		HashMap<String, LEntityAttribute> typesMap) {
+		HashMap<String, LAttribute> typesMap) {
 		var listTxt = ""
 		if (role === null) { // grant all
 			for (attribute : typesMap.keySet) {
@@ -1721,6 +1761,9 @@
 	 * 
 	 */
 	def String createAxisMap(DatamartDefinition definition) {
+		// The axis map requires all the id columns.
+		// So 'Administrator' as role name is used.   
+		var roleName = IUserAccessService.ADMINISTRATOR
 		var text = ""
 		var map = <Integer, Map<String, Integer>>newHashMap
 		if (definition.source !== null) {
@@ -1734,7 +1777,7 @@
 		for (axisNumber : map.keySet()) {
 			if (definition.source instanceof DatamartEntity && axisNumber == AxisEnum.COLUMNS_VALUE) {
 				if (!ignoreEntityGrouping) {
-					for (LEntity entityRef : entityGrouping.values) {
+					for (LEntity entityRef : entityGrouping.get(roleName).values) {
 						var idColumn = DatamartDefinitionUtil.getEntityIdAliasName(entityRef)
 						if (idColumn !== null) {
 							map.get(axisNumber).put(idColumn, 0)
@@ -2010,10 +2053,12 @@
 		if (entity.hasSuperType) {
 			tableName = entity.entityRef.superType.toTableName
 		}
-		var type = attribute.attributeRef.type as LDataType
+		var type = attribute.attributeRef.type
 		var filter = ""
-		if (element.optional && !type.date) {
-			filter = '''select «IDataMart.SQLFILTERNOTHING» from «EnumDatabaseVendor.ONE_ROW_ONE_COLUMN_TABLE» union '''
+		if (type instanceof LDataType) {
+			if (element.optional && !type.date) {
+				filter = '''select «IDataMart.SQLFILTERNOTHING» from «EnumDatabaseVendor.ONE_ROW_ONE_COLUMN_TABLE» union '''
+			}
 		}
 		filter = '''«filter»select distinct «attribute.attributeRef.toColumnName» as \"«DatamartAttributeUtil.getAliasedAttributeName(attribute)»\" from «entity.entityRef.persistenceInfo.schemaName.provideSchemaName»«tableName» order by 1'''
 		return filter
@@ -2568,10 +2613,11 @@
 			evaluation = '''«(element as ConditionalExpression).left.evaluateExpression(entity)»'''
 			var optionalAllowed = true
 			if ((element as ConditionalExpression).left instanceof DatamartAttributeBase) {
+				var type = ((element as ConditionalExpression).left as DatamartAttributeBase).attributeRef.type
 				// we cannot allow optional with date as we cannot mix * with date types
-				var type = ((element as ConditionalExpression).left as DatamartAttributeBase).attributeRef.
-					type as LDataType
-				optionalAllowed = !type.date
+				if (type instanceof LDataType) {
+					optionalAllowed = !type.date
+				}
 			}
 
 			if ((element as ConditionalExpression).right.selected) {
@@ -2821,7 +2867,7 @@
 	 * 
 	 */
 	def createSQLStatements(DatamartDefinition definition, DatamartEntity entity,
-		HashMap<String, LEntityAttribute> typesMap) {
+		HashMap<String, LAttribute> typesMap) {
 		var listTxt = '''
 		put("«IUserAccessService.ADMINISTRATOR»", "«definition.createSQLStatement(null, typesMap)»");'''
 		for (role : definition.roles) {
@@ -2846,7 +2892,7 @@
 	 * 
 	 */
 	def createSQLStatement(DatamartDefinition definition, DatamartRole role,
-		HashMap<String, LEntityAttribute> typesMap) {
+		HashMap<String, LAttribute> typesMap) {
 		this.sqlAliasCounter.clear()
 		this.sqlFilterMap.clear()
 		this.sqlGrouping.clear()
@@ -2862,10 +2908,10 @@
 		var orderings = <String, Integer>newLinkedHashMap
 		var entity = (definition.source as DatamartEntity)
 		var used = entity.createEntity(null, null, attributes, conditions, orderings, role, typesMap)
-		var select = attributes.createSelect(definition)
+		var select = attributes.createSelect(definition, role)
 		var condition = conditions.createCondition
 		var ordering = orderings.createOrdering
-		var grouping = this.sqlGrouping.createGrouping
+		var grouping = this.sqlGrouping.createGrouping(role)
 		if (select.empty) {
 			return ""
 		}
@@ -2877,9 +2923,9 @@
 	 * <p>sql syntax part for group by.</p> 
 	 * 
 	 */
-	def createGrouping(ArrayList<String> grouping) {
+	def createGrouping(Map<String, List<String>> grouping, DatamartRole role) {
 		var groupingString = ""
-		for (String groupBy : grouping) {
+		for (String groupBy : grouping.get(role.roleName)) {
 			groupingString = '''«IF !groupingString.empty»«groupingString»,«ENDIF»«groupBy»'''
 		}
 		return groupingString
@@ -2911,7 +2957,7 @@
 	 * <p>sql syntax part for select.</p> 
 	 * 
 	 */
-	def createSelect(Map<String, Pair<String, Integer>> attributes, DatamartDefinition definition) {
+	def createSelect(Map<String, Pair<String, Integer>> attributes, DatamartDefinition definition, DatamartRole role) {
 		var selectString = ""
 		selectString = attributes.entrySet.sortWith[e1, e2|return (e2.value.value - e1.value.value)].map [
 			it.key + " as \\\"" + it.value.key + "\\\""
@@ -2919,7 +2965,7 @@
 		datamartDtoMapper = "new DatamartDtoMapper()"
 		if (definition !== null) {
 			if (!ignoreEntityGrouping) {
-				for (LEntity entityRef : entityGrouping.values) {
+				for (LEntity entityRef : entityGrouping.get(role.roleName).values) {
 					var entityName = ""
 					if (entityRef.hasSuperType) {
 						entityName = entityRef.superType.getName()
@@ -2937,7 +2983,7 @@
 						}
 						datamartDtoMapper = '''
 						«datamartDtoMapper»
-						.add("«dtoFqn»", "«entityRef.primaryKeyAttribute.name»", EType.«dtType.getBasicType(idMap.get(idColumn).primaryKeyAttribute as LEntityAttribute)», "«idColumn»")'''
+						.add("«dtoFqn»", "«entityRef.primaryKeyAttribute.name»", EType.«dtType.getBasicType(idMap.get(idColumn).primaryKeyAttribute)», "«idColumn»")'''
 					}
 				}
 			}
@@ -2960,7 +3006,7 @@
 	 */
 	def String createEntity(DatamartEntity entity, DatamartEntity parent, DatamartNavigation parentNavigation,
 		Map<String, Pair<String, Integer>> attributes, List<String> conditions,
-		LinkedHashMap<String, Integer> orderings, DatamartRole role, HashMap<String, LEntityAttribute> typesMap) {
+		LinkedHashMap<String, Integer> orderings, DatamartRole role, HashMap<String, LAttribute> typesMap) {
 		var body = ""
 		var tableName = entity.entityRef.toTableName
 		if (entity.hasSuperType) {
@@ -2993,7 +3039,7 @@
 			}
 			if (entity.attributes.empty) {
 				for (attr : entity.entityRef.allAttributes) {
-					if (!attr.isId && !attr.isUuid && !attr.isVersion) {
+					if (!attr.isId && !attr.isUuid && !attr.isVersion && !attr.isTransient) {
 						var datamartAttr = DatamartDSLFactory.eINSTANCE.createDatamartAttribute
 						datamartAttr.attributeRef = attr
 						entity.recurAttribute(datamartAttr, false, "", defaultColumnWeight, attributes, role, typesMap)
@@ -3028,17 +3074,17 @@
 
 	def void recurAttribute(DatamartEntity entity, DatamartAttribute datamartAttr, boolean aggregated,
 		String aggregateName, Integer columnWeight, Map<String, Pair<String, Integer>> attributes, DatamartRole role,
-		HashMap<String, LEntityAttribute> typesMap) {
+		HashMap<String, LAttribute> typesMap) {
 		var attr = datamartAttr.attributeRef
 		var LScalarType type = attr.type
 		if (type instanceof LBean) {
 			var bean = type as LBean
 			for (battr : bean.allAttributes) {
 				if (battr.type instanceof LBean) {
-					entity.recurAttribute(datamartAttr, aggregated, aggregateName, columnWeight, attributes, role,
+					entity.recurAttribute(battr, aggregated, aggregateName, columnWeight, attributes, role,
 						typesMap)
 				} else {
-					entity.addAttribute(datamartAttr, aggregated, aggregateName, columnWeight, attributes, role,
+					entity.addAttribute(battr, aggregated, aggregateName, columnWeight, attributes, role,
 						typesMap)
 				}
 			}
@@ -3047,6 +3093,26 @@
 		}
 	}
 
+	private def void recurAttribute(DatamartEntity entity, LAttribute attr, boolean aggregated,
+		String aggregateName, Integer columnWeight, Map<String, Pair<String, Integer>> attributes, DatamartRole role,
+		HashMap<String, LAttribute> typesMap) {
+		var LScalarType type = attr.type
+		if (type instanceof LBean) {
+			var bean = type as LBean
+			for (battr : bean.allAttributes) {
+				if (battr.type instanceof LBean) {
+					entity.recurAttribute(battr, aggregated, aggregateName, columnWeight, attributes, role,
+						typesMap)
+				} else {
+					entity.addAttribute(battr, aggregated, aggregateName, columnWeight, attributes, role,
+						typesMap)
+				}
+			}
+		} else {
+			entity.addAttribute(attr, aggregated, aggregateName, columnWeight, attributes, role, typesMap)
+		}
+	}
+
 	def aliasedColumnName(LEntity entityRef, LAttribute attr) {
 		var name = ""
 		if (entityRef.hasSuperType) {
@@ -3068,46 +3134,76 @@
 
 	def void addAttribute(DatamartEntity datamartEntity, DatamartAttribute datamartAttr, boolean aggregated,
 		String aggregateName, Integer columnWeight, Map<String, Pair<String, Integer>> attributes, DatamartRole role,
-		HashMap<String, LEntityAttribute> typesMap) {
-		var entity = datamartEntity.entityRef
+		HashMap<String, LAttribute> typesMap) {
 		var attr = datamartAttr.attributeRef
+		datamartEntity.addAttribute(attr, DatamartAttributeUtil.getAliasedAttributeName(datamartAttr), aggregated, aggregateName, columnWeight, attributes, role, typesMap)
+	}
+
+	def void addAttribute(DatamartEntity datamartEntity, LAttribute attr, boolean aggregated,
+		String aggregateName, Integer columnWeight, Map<String, Pair<String, Integer>> attributes, DatamartRole role,
+		HashMap<String, LAttribute> typesMap) {
+		var attributeName = '''«attr?.name?.replace("^", "")»'''
+		datamartEntity.addAttribute(attr, attributeName, aggregated, aggregateName, columnWeight, attributes, role, typesMap)
+	}
+
+	private def void addAttribute(DatamartEntity datamartEntity, LAttribute attr, String attributeName, boolean aggregated,
+		String aggregateName, Integer columnWeight, Map<String, Pair<String, Integer>> attributes, DatamartRole role,
+		HashMap<String, LAttribute> typesMap) {
+		var entity = datamartEntity.entityRef
 		var key = entity.aliasedColumnName(attr)
-		var attrName = "" // TODO (JCD): Already required??? Is not used!!
+		var attrName = "" 
 		var typesAttr = ""
 		if (entity.hasSuperType) {
 			if (entity.superType.allAttributes.contains(attr)) {
 //				attrName = entity.superType.name+"."+attr.toColumnName.toLowerCase
-				attrName = entity.superType.name + "." + DatamartAttributeUtil.getAliasedAttributeName(datamartAttr)
-				typesAttr = entity.superType.name + "." + DatamartAttributeUtil.getAliasedAttributeName(datamartAttr)
+				attrName = entity.superType.name + "." + attributeName
+				typesAttr = entity.superType.name + "." + attributeName
 			} else {
 //				attrName = entity.name+"."+attr.toColumnName.toLowerCase
-				attrName = entity.name + "." + DatamartAttributeUtil.getAliasedAttributeName(datamartAttr)
-				typesAttr = entity.name + "." + DatamartAttributeUtil.getAliasedAttributeName(datamartAttr)
+				attrName = entity.name + "." + attributeName
+				typesAttr = entity.name + "." + attributeName
 			}
 		} else {
 //			attrName = entity.name+"."+attr.toColumnName.toLowerCase
-			attrName = entity.name + "." + DatamartAttributeUtil.getAliasedAttributeName(datamartAttr)
-			typesAttr = entity.name + "." + DatamartAttributeUtil.getAliasedAttributeName(datamartAttr)
+			attrName = entity.name + "." + attributeName
+			typesAttr = entity.name + "." + attributeName
 		}
-		typesMap.put(typesAttr, attr as LEntityAttribute);
+		typesMap.put(typesAttr, attr);
 		if (role.isAuthorized(entity, attr.name)) {
 			if (aggregated) {
 				key = '''«aggregateName»(«key»)'''
 				this.sqlHasAggregate = true;
 //				attributes.put(key.toString, new Pair(attr.name, columnWeight))
 				attributes.put(key.toString,
-					new Pair(DatamartAttributeUtil.getAliasedAttributeName(datamartAttr), columnWeight))
+					new Pair(attributeName, columnWeight))
 				this.ignoreEntityGrouping = true
 			} else {
-				this.entityGrouping.put(entity.entityAlias, entity)
-				this.sqlGrouping.add(key.toString)
+				var roleName = role.roleName
+				if (this.entityGrouping.get(roleName) === null) {
+					var entityMap = <String, LEntity>newHashMap()
+					entityGrouping.put(roleName, entityMap)
+				}
+				this.entityGrouping.get(roleName).put(entity.entityAlias, entity)
+				if (this.sqlGrouping.get(roleName) === null) {
+					var entityColumnsList = <String>newArrayList()
+					sqlGrouping.put(roleName, entityColumnsList)
+				}
+				this.sqlGrouping.get(role.roleName).add(key.toString)
 //				attributes.put(key.toString, new Pair(attr.name, columnWeight))
 				attributes.put(key.toString,
-					new Pair(DatamartAttributeUtil.getAliasedAttributeName(datamartAttr), columnWeight))
+					new Pair(attributeName, columnWeight))
 			}
 		}
 	}
 
+	def String getRoleName(DatamartRole role) {
+		var roleName = IUserAccessService.ADMINISTRATOR
+		if (role !== null) {
+			roleName = role.assignedRole.name
+		}
+		return roleName
+	}
+
 	def boolean isAuthorized(DatamartRole role, DatamartEntity entity) {
 		// no role - all granted
 		if (role === null) {
@@ -3309,7 +3405,7 @@
 		var attribute = DatamartDSLFactory.eINSTANCE.createDatamartAttribute
 		attribute.attributeRef = primary
 		attribute.aliased = true
-		attribute.aliasName = '''«refPrefix»«IF refPrefix.empty»«primary.name.toFirstLower»«ELSE»«primary.name.toFirstUpper»«ENDIF»'''
+		attribute.aliasName = '''«refPrefix»«IF primary!==null»«IF refPrefix.empty»«primary.name.toFirstLower»«ELSE»«primary.name.toFirstUpper»«ENDIF»«ENDIF»'''
 		attributes.add(attribute);
 	}
 }
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.xtend b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.xtend
index 64a6dbc..049aa59 100644
--- a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.xtend
+++ b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.xtend
@@ -2,6 +2,11 @@
 
 import org.eclipse.osbp.xtext.datamartdsl.DatamartAttribute
 import org.eclipse.osbp.xtext.datamartdsl.DatamartAttributeBase
+import org.eclipse.osbp.xtext.datamartdsl.DatamartEntity
+import org.eclipse.xtext.EcoreUtil2
+import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLFactory
+import org.eclipse.osbp.xtext.datamartdsl.AxisEnum
+import org.eclipse.osbp.dsl.semantic.entity.LEntity
 
 class DatamartAttributeUtil {
 	
@@ -15,4 +20,19 @@
 		return '''«attributeBase?.attributeRef?.name?.replace("^", "")»'''
 	}
 	
+	def static fillEmptyAttributes(DatamartEntity datamartEntity){
+		var entity = datamartEntity?.entityRef
+		if (entity.eIsProxy) {
+			entity = EcoreUtil2.resolve(entity, datamartEntity.eResource) as LEntity
+		}
+		for (attribute : entity.attributes) {
+			var datamartAttribute = DatamartDSLFactory.eINSTANCE.createDatamartAttribute
+			datamartAttribute.attributeRef = attribute
+			var axis = DatamartDSLFactory.eINSTANCE.createDatamartAxis
+			axis.name = AxisEnum.COLUMNS
+			datamartAttribute.axis = axis
+			datamartEntity?.attributes?.add(datamartAttribute)
+		}
+	}
+	
 }
\ No newline at end of file
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/util/EventBrokerDatamartUtils.xtend b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/util/EventBrokerDatamartUtils.xtend
deleted file mode 100644
index 2380259..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/util/EventBrokerDatamartUtils.xtend
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- *                                                                            
- *  Copyright (c) 2013, 2016 - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-
-package org.eclipse.osbp.xtext.datamartdsl.util
-
-import java.util.HashMap
-import org.eclipse.osbp.xtext.datamartdsl.EventBrokerDataMart
-import javax.inject.Inject
-import org.eclipse.osbp.xtext.datamartdsl.jvmmodel.DatamartDSLJvmModelInferrer
-import org.eclipse.emf.common.util.EList
-import java.util.ArrayList
-import org.eclipse.emf.ecore.EObject
-
-class EventBrokerDatamartUtils {
-	
-		@Inject extension DatamartDSLJvmModelInferrer datamartInferrer
-		
-		def HashMap<String, String> getUsedFilterInDatamart(EventBrokerDataMart datamart, HashMap<String, String> filterIdMap){
-		var usedFilterIdMap = <String, String>newHashMap()
-        for (filter : filterIdMap.entrySet){
-        	if (datamart.filter.equals(filter.value)){
-				usedFilterIdMap.put(filter.key, filter.value);
-			}
-		}
-        return usedFilterIdMap
-	}
-	
-		def HashMap<String,String> getFilterMap(EventBrokerDataMart datamart){
-		var filterIdMap = new HashMap<String, String>
-        datamartInferrer.createFilterMap(datamart.getDatamartDef, filterIdMap)
-        return filterIdMap
-	}
-	
-		def void removeAlreadyUsedFilter(EList<EventBrokerDataMart> datamarts, HashMap<String, HashMap<String, String>> datamartsFilterMap){
-		for (EventBrokerDataMart dat : datamarts) {
-			if (dat.filter!=null){
-				// remove the already default used filter of the root organization	
-				var filterIdMap = (datamartsFilterMap.get(dat.datamartDef.name) as HashMap<String,String>)	
-				// if key is already removed 
-				if (filterIdMap!=null){		
-					var filterIdMapTemp = (filterIdMap.clone as HashMap<String,String>)			
-			        for (filter : filterIdMapTemp.entrySet){
-			        	if (dat.filter.equals(filter.value)){
-							filterIdMap.remove(filter.key);
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	def HashMap<String, String> getFilterMap(EList<EventBrokerDataMart> datamarts){
-		var filterMap = <String, String>newHashMap
-		return datamarts.getFilterMap(filterMap)
-	}
-	
-	def HashMap<String, String> getFilterMap(EList<EventBrokerDataMart> datamarts, HashMap<String, String> filterMap){
-		if (filterMap!=null){
-			for (datamart : datamarts){
-				filterMap.putAll(datamart.getUsedFilterInDatamart(datamart.filterMap))
-			}
-		}
-		return filterMap
-	}
-	
-	def HashMap<String, HashMap<String,String>> getUsedFilterMap(EList<EventBrokerDataMart> datamarts){
-		var usedFilterMap = <String, HashMap<String,String>>newHashMap()
-		for (EventBrokerDataMart dat : datamarts) {
-			if (dat!=null && dat.datamartDef!=null){
-				usedFilterMap.put(dat.datamartDef.name, dat.filterMap)
-			}
-		}
-		return usedFilterMap;
-	}
-	
-	def void fillResultWithFilter(EList<EventBrokerDataMart> datamarts, HashMap<String, HashMap<String,String>> usedDatamartsFilterMap, ArrayList<EObject> result){
-		for (EventBrokerDataMart dat : datamarts) {
-			// If datamart filter list has more than 1 filter. Because otherwise that filter is the
-			// default filter for all positions and no other filter is possible to use for a multiple position
-			if (dat!=null && dat.datamartDef!=null && usedDatamartsFilterMap.containsKey(dat.datamartDef.name) && !usedDatamartsFilterMap.get(dat.datamartDef.name).empty){
-				result.add(dat.datamartDef)
-			}
-		}
-
-	}
-	
-	def getEventBrokerMsgs(EList<EventBrokerDataMart> datamarts)'''
-	«FOR datamart : datamarts»
-eventBroker.send("«datamart.filter»/clear", selectedItem);
-eventBroker.send("«datamart.filter»", selectedItem);
-    «ENDFOR»
-	'''
-	
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/validation/DatamartDSLJavaValidator.java b/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/validation/DatamartDSLJavaValidator.java
deleted file mode 100644
index d23f12b..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/src/org/eclipse/osbp/xtext/datamartdsl/validation/DatamartDSLJavaValidator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- *                                                                            
- *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
- *                                                                            
- *  All rights reserved. This program and the accompanying materials           
- *  are made available under the terms of the Eclipse Public License v1.0       
- *  which accompanies this distribution, and is available at                  
- *  http://www.eclipse.org/legal/epl-v10.html                                 
- *                                                                            
- *  Contributors:                                                      
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- * 
- */
-package org.eclipse.osbp.xtext.datamartdsl.validation;
- 
-
-/**
- * The Class DatamartDSLJavaValidator.
- */
-public class DatamartDSLJavaValidator extends AbstractDatamartDSLValidator {
-
-//	@Check
-//	public void checkGreetingStartsWithCapital(Greeting greeting) {
-//		if (!Character.isUpperCase(greeting.getName().charAt(0))) {
-//			warning("Name should start with a capital", MyDslPackage.Literals.GREETING__NAME);
-//		}
-//	}
-
-}
diff --git a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.java b/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.java
index c3360a6..d3dd49c 100644
--- a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.java
+++ b/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/jvmmodel/DatamartDSLJvmModelInferrer.java
@@ -233,13 +233,13 @@
   
   private HashMap<String, DatamartAttributeBase> sqlFilterMap = CollectionLiterals.<String, DatamartAttributeBase>newHashMap();
   
-  private ArrayList<String> sqlGrouping = CollectionLiterals.<String>newArrayList();
+  private HashMap<String, List<String>> sqlGrouping = CollectionLiterals.<String, List<String>>newHashMap();
   
   private HashMap<String, LEntity> idMap = CollectionLiterals.<String, LEntity>newHashMap();
   
   private String datamartDtoMapper = ((String) null);
   
-  private HashMap<String, LEntity> entityGrouping = new HashMap<String, LEntity>();
+  private HashMap<String, Map<String, LEntity>> entityGrouping = CollectionLiterals.<String, Map<String, LEntity>>newHashMap();
   
   private boolean ignoreEntityGrouping = false;
   
@@ -494,8 +494,17 @@
     List<DatamartAttribute> attributes = this.allEntityAttributes(definition);
     final Consumer<DatamartAttribute> _function = (DatamartAttribute it) -> {
       EList<JvmMember> _members = type.getMembers();
-      JvmField _field = this._jvmTypesBuilder.toField(definition, DatamartAttributeUtil.getAliasedAttributeName(it), 
-        this._modelExtensions.toTypeReference(it.getAttributeRef().getType()));
+      String _aliasedAttributeName = DatamartAttributeUtil.getAliasedAttributeName(it);
+      LEntityAttribute _attributeRef = it.getAttributeRef();
+      LScalarType _type = null;
+      if (_attributeRef!=null) {
+        _type=_attributeRef.getType();
+      }
+      JvmTypeReference _typeReference = null;
+      if (_type!=null) {
+        _typeReference=this._modelExtensions.toTypeReference(_type);
+      }
+      JvmField _field = this._jvmTypesBuilder.toField(definition, _aliasedAttributeName, _typeReference);
       this._jvmTypesBuilder.<JvmField>operator_add(_members, _field);
     };
     attributes.forEach(_function);
@@ -506,6 +515,15 @@
       _builder.append("get");
       String _firstUpper = StringExtensions.toFirstUpper(attributeName);
       _builder.append(_firstUpper);
+      LEntityAttribute _attributeRef = it.getAttributeRef();
+      LScalarType _type = null;
+      if (_attributeRef!=null) {
+        _type=_attributeRef.getType();
+      }
+      JvmTypeReference _typeReference = null;
+      if (_type!=null) {
+        _typeReference=this._modelExtensions.toTypeReference(_type);
+      }
       final Procedure1<JvmOperation> _function_2 = (JvmOperation it_1) -> {
         final Procedure1<ITreeAppendable> _function_3 = (ITreeAppendable it_2) -> {
           StringConcatenation _builder_1 = new StringConcatenation();
@@ -516,10 +534,18 @@
         };
         this._jvmTypesBuilder.setBody(it_1, _function_3);
       };
-      JvmOperation _method = this._jvmTypesBuilder.toMethod(definition, _builder.toString(), 
-        this._modelExtensions.toTypeReference(it.getAttributeRef().getType()), _function_2);
+      JvmOperation _method = this._jvmTypesBuilder.toMethod(definition, _builder.toString(), _typeReference, _function_2);
       this._jvmTypesBuilder.<JvmOperation>operator_add(_members, _method);
-      final JvmTypeReference attributeType = this._modelExtensions.toTypeReference(it.getAttributeRef().getType());
+      LEntityAttribute _attributeRef_1 = it.getAttributeRef();
+      LScalarType _type_1 = null;
+      if (_attributeRef_1!=null) {
+        _type_1=_attributeRef_1.getType();
+      }
+      JvmTypeReference _typeReference_1 = null;
+      if (_type_1!=null) {
+        _typeReference_1=this._modelExtensions.toTypeReference(_type_1);
+      }
+      final JvmTypeReference attributeType = _typeReference_1;
       EList<JvmMember> _members_1 = type.getMembers();
       StringConcatenation _builder_1 = new StringConcatenation();
       _builder_1.append("set");
@@ -975,7 +1001,7 @@
    * <p>build the class variables for each datamart definition.</p>
    */
   public void toFields(final JvmDeclaredType type, final DatamartDefinition definition) {
-    final HashMap<String, LEntityAttribute> typesMap = CollectionLiterals.<String, LEntityAttribute>newHashMap();
+    final HashMap<String, LAttribute> typesMap = CollectionLiterals.<String, LAttribute>newHashMap();
     JvmField field = null;
     final Procedure1<JvmField> _function = (JvmField it) -> {
       final Procedure1<ITreeAppendable> _function_1 = (ITreeAppendable it_1) -> {
@@ -1185,16 +1211,31 @@
     final Procedure1<JvmField> _function_14 = (JvmField it) -> {
       final Procedure1<ITreeAppendable> _function_15 = (ITreeAppendable it_1) -> {
         StringConcatenation _builder = new StringConcatenation();
-        _builder.append("new HashMap<String,String>()");
+        _builder.append("new HashMap<String, String>() ");
+        String _createTypesProps = this.createTypesProps(definition, typesMap);
+        _builder.append(_createTypesProps);
         it_1.append(_builder);
       };
       this._jvmTypesBuilder.setInitializer(it, _function_15);
     };
-    field = this._jvmTypesBuilder.toField(definition, "resultAttributes", 
+    field = this._jvmTypesBuilder.toField(definition, "typesProp", 
       this._typeReferenceBuilder.typeRef(HashMap.class, this._typeReferenceBuilder.typeRef(String.class), 
         this._typeReferenceBuilder.typeRef(String.class)), _function_14);
     EList<JvmMember> _members_15 = type.getMembers();
     this._jvmTypesBuilder.<JvmField>operator_add(_members_15, field);
+    final Procedure1<JvmField> _function_15 = (JvmField it) -> {
+      final Procedure1<ITreeAppendable> _function_16 = (ITreeAppendable it_1) -> {
+        StringConcatenation _builder = new StringConcatenation();
+        _builder.append("new HashMap<String,String>()");
+        it_1.append(_builder);
+      };
+      this._jvmTypesBuilder.setInitializer(it, _function_16);
+    };
+    field = this._jvmTypesBuilder.toField(definition, "resultAttributes", 
+      this._typeReferenceBuilder.typeRef(HashMap.class, this._typeReferenceBuilder.typeRef(String.class), 
+        this._typeReferenceBuilder.typeRef(String.class)), _function_15);
+    EList<JvmMember> _members_16 = type.getMembers();
+    this._jvmTypesBuilder.<JvmField>operator_add(_members_16, field);
   }
   
   /**
@@ -1222,14 +1263,20 @@
       EList<JvmMember> _members_2 = type.getMembers();
       this._jvmTypesBuilder.<JvmOperation>operator_add(_members_2, operation);
     }
-    operation = this._jvmTypesBuilder.toGetter(definition, "user", this._typeReferenceBuilder.typeRef(IUser.class));
+    operation = this._jvmTypesBuilder.toGetter(definition, "typesProp", 
+      this._typeReferenceBuilder.typeRef(HashMap.class, this._typeReferenceBuilder.typeRef(String.class), 
+        this._typeReferenceBuilder.typeRef(String.class)));
     operation.setVisibility(JvmVisibility.PUBLIC);
     EList<JvmMember> _members_3 = type.getMembers();
     this._jvmTypesBuilder.<JvmOperation>operator_add(_members_3, operation);
-    operation = this._jvmTypesBuilder.toSetter(definition, "user", this._typeReferenceBuilder.typeRef(IUser.class));
+    operation = this._jvmTypesBuilder.toGetter(definition, "user", this._typeReferenceBuilder.typeRef(IUser.class));
     operation.setVisibility(JvmVisibility.PUBLIC);
     EList<JvmMember> _members_4 = type.getMembers();
     this._jvmTypesBuilder.<JvmOperation>operator_add(_members_4, operation);
+    operation = this._jvmTypesBuilder.toSetter(definition, "user", this._typeReferenceBuilder.typeRef(IUser.class));
+    operation.setVisibility(JvmVisibility.PUBLIC);
+    EList<JvmMember> _members_5 = type.getMembers();
+    this._jvmTypesBuilder.<JvmOperation>operator_add(_members_5, operation);
   }
   
   /**
@@ -2659,7 +2706,8 @@
           if (_isRanged) {
             boolean _isDate = this._modelExtensions.getDatatype(attribute.getAttributeRef()).isDate();
             if (_isDate) {
-              if (((attribute.getAttributeRef().getProperties() != null) && (!attribute.getAttributeRef().getProperties().isEmpty()))) {
+              if (((attribute.getAttributeRef().getProperties() != null) && 
+                (!attribute.getAttributeRef().getProperties().isEmpty()))) {
                 StringConcatenation _builder = new StringConcatenation();
                 _builder.append("{{");
                 _builder.newLine();
@@ -3341,7 +3389,7 @@
   /**
    * <p>build the types map as lookup for datatypes.</p>
    */
-  public String createTypesMaps(final DatamartDefinition definition, final HashMap<String, LEntityAttribute> typesMap) {
+  public String createTypesMaps(final DatamartDefinition definition, final HashMap<String, LAttribute> typesMap) {
     StringConcatenation _builder = new StringConcatenation();
     _builder.append("put(\"");
     _builder.append(IUserAccessService.ADMINISTRATOR);
@@ -3376,9 +3424,43 @@
   }
   
   /**
+   * <p>build the types map as lookup for datatypes.</p>
+   */
+  public String createTypesProps(final DatamartDefinition definition, final HashMap<String, LAttribute> typesMap) {
+    String listTxt = "";
+    Set<String> _keySet = typesMap.keySet();
+    for (final String attribute : _keySet) {
+      boolean _isEmpty = typesMap.get(attribute).getProperties().isEmpty();
+      boolean _not = (!_isEmpty);
+      if (_not) {
+        String attributeName = attribute.split("\\.")[1];
+        StringConcatenation _builder = new StringConcatenation();
+        _builder.append(listTxt);
+        _builder.newLineIfNotEmpty();
+        _builder.append("put(\"");
+        _builder.append(attributeName);
+        _builder.append("\", \"");
+        String _value = typesMap.get(attribute).getProperties().get(0).getValue();
+        _builder.append(_value);
+        _builder.append("\");");
+        listTxt = _builder.toString();
+      }
+    }
+    StringConcatenation _builder_1 = new StringConcatenation();
+    _builder_1.append("{{");
+    _builder_1.newLine();
+    _builder_1.append("\t");
+    _builder_1.append(listTxt, "\t");
+    _builder_1.newLineIfNotEmpty();
+    _builder_1.append("}}");
+    listTxt = _builder_1.toString();
+    return listTxt;
+  }
+  
+  /**
    * <p>build the types map as lookup for datatypes according to authorization roles.</p>
    */
-  public String createTypesMap(final DatamartDefinition definition, final DatamartRole role, final HashMap<String, LEntityAttribute> typesMap) {
+  public String createTypesMap(final DatamartDefinition definition, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
     String listTxt = "";
     if ((role == null)) {
       Set<String> _keySet = typesMap.keySet();
@@ -3431,6 +3513,7 @@
    * <p>build the axis map.</p>
    */
   public String createAxisMap(final DatamartDefinition definition) {
+    String roleName = IUserAccessService.ADMINISTRATOR;
     String text = "";
     HashMap<Integer, Map<String, Integer>> map = CollectionLiterals.<Integer, Map<String, Integer>>newHashMap();
     DatamartSource _source = definition.getSource();
@@ -3452,7 +3535,7 @@
       {
         if (((definition.getSource() instanceof DatamartEntity) && ((axisNumber).intValue() == AxisEnum.COLUMNS_VALUE))) {
           if ((!this.ignoreEntityGrouping)) {
-            Collection<LEntity> _values = this.entityGrouping.values();
+            Collection<LEntity> _values = this.entityGrouping.get(roleName).values();
             for (final LEntity entityRef : _values) {
               {
                 String idColumn = DatamartDefinitionUtil.getEntityIdAliasName(entityRef);
@@ -3927,17 +4010,18 @@
     if (_hasSuperType) {
       tableName = this._namingExtensions.toTableName(entity.getEntityRef().getSuperType());
     }
-    LScalarType _type = attribute.getAttributeRef().getType();
-    LDataType type = ((LDataType) _type);
+    LScalarType type = attribute.getAttributeRef().getType();
     String filter = "";
-    if ((element.isOptional() && (!type.isDate()))) {
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append("select ");
-      _builder.append(IDataMart.SQLFILTERNOTHING);
-      _builder.append(" from ");
-      _builder.append(EnumDatabaseVendor.ONE_ROW_ONE_COLUMN_TABLE);
-      _builder.append(" union ");
-      filter = _builder.toString();
+    if ((type instanceof LDataType)) {
+      if ((element.isOptional() && (!((LDataType)type).isDate()))) {
+        StringConcatenation _builder = new StringConcatenation();
+        _builder.append("select ");
+        _builder.append(IDataMart.SQLFILTERNOTHING);
+        _builder.append(" from ");
+        _builder.append(EnumDatabaseVendor.ONE_ROW_ONE_COLUMN_TABLE);
+        _builder.append(" union ");
+        filter = _builder.toString();
+      }
     }
     StringConcatenation _builder_1 = new StringConcatenation();
     _builder_1.append(filter);
@@ -5022,11 +5106,12 @@
       Expression _left_1 = ((ConditionalExpression) element).getLeft();
       if ((_left_1 instanceof DatamartAttributeBase)) {
         Expression _left_2 = ((ConditionalExpression) element).getLeft();
-        LScalarType _type = ((DatamartAttributeBase) _left_2).getAttributeRef().getType();
-        LDataType type = ((LDataType) _type);
-        boolean _isDate = type.isDate();
-        boolean _not = (!_isDate);
-        optionalAllowed = _not;
+        LScalarType type = ((DatamartAttributeBase) _left_2).getAttributeRef().getType();
+        if ((type instanceof LDataType)) {
+          boolean _isDate = ((LDataType)type).isDate();
+          boolean _not = (!_isDate);
+          optionalAllowed = _not;
+        }
       }
       boolean _isSelected = ((ConditionalExpression) element).getRight().isSelected();
       if (_isSelected) {
@@ -5570,7 +5655,7 @@
   /**
    * <p>main method to build sql statements bases on entities and roles.</p>
    */
-  public String createSQLStatements(final DatamartDefinition definition, final DatamartEntity entity, final HashMap<String, LEntityAttribute> typesMap) {
+  public String createSQLStatements(final DatamartDefinition definition, final DatamartEntity entity, final HashMap<String, LAttribute> typesMap) {
     StringConcatenation _builder = new StringConcatenation();
     _builder.append("put(\"");
     _builder.append(IUserAccessService.ADMINISTRATOR);
@@ -5614,7 +5699,7 @@
   /**
    * <p>main method to build sql statements bases on entities and a role.</p>
    */
-  public String createSQLStatement(final DatamartDefinition definition, final DatamartRole role, final HashMap<String, LEntityAttribute> typesMap) {
+  public String createSQLStatement(final DatamartDefinition definition, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
     this.sqlAliasCounter.clear();
     this.sqlFilterMap.clear();
     this.sqlGrouping.clear();
@@ -5631,10 +5716,10 @@
     DatamartSource _source = definition.getSource();
     DatamartEntity entity = ((DatamartEntity) _source);
     String used = this.createEntity(entity, null, null, attributes, conditions, orderings, role, typesMap);
-    String select = this.createSelect(attributes, definition);
+    String select = this.createSelect(attributes, definition, role);
     String condition = this.createCondition(conditions);
     String ordering = this.createOrdering(orderings);
-    String grouping = this.createGrouping(this.sqlGrouping);
+    String grouping = this.createGrouping(this.sqlGrouping, role);
     boolean _isEmpty = select.isEmpty();
     if (_isEmpty) {
       return "";
@@ -5670,9 +5755,10 @@
   /**
    * <p>sql syntax part for group by.</p>
    */
-  public String createGrouping(final ArrayList<String> grouping) {
+  public String createGrouping(final Map<String, List<String>> grouping, final DatamartRole role) {
     String groupingString = "";
-    for (final String groupBy : grouping) {
+    List<String> _get = grouping.get(this.getRoleName(role));
+    for (final String groupBy : _get) {
       StringConcatenation _builder = new StringConcatenation();
       {
         boolean _isEmpty = groupingString.isEmpty();
@@ -5728,7 +5814,7 @@
   /**
    * <p>sql syntax part for select.</p>
    */
-  public String createSelect(final Map<String, Pair<String, Integer>> attributes, final DatamartDefinition definition) {
+  public String createSelect(final Map<String, Pair<String, Integer>> attributes, final DatamartDefinition definition, final DatamartRole role) {
     String selectString = "";
     final Comparator<Map.Entry<String, Pair<String, Integer>>> _function = (Map.Entry<String, Pair<String, Integer>> e1, Map.Entry<String, Pair<String, Integer>> e2) -> {
       Integer _value = e2.getValue().getValue();
@@ -5746,7 +5832,7 @@
     this.datamartDtoMapper = "new DatamartDtoMapper()";
     if ((definition != null)) {
       if ((!this.ignoreEntityGrouping)) {
-        Collection<LEntity> _values = this.entityGrouping.values();
+        Collection<LEntity> _values = this.entityGrouping.get(this.getRoleName(role)).values();
         for (final LEntity entityRef : _values) {
           {
             String entityName = "";
@@ -5787,8 +5873,7 @@
               String _name_1 = entityRef.getPrimaryKeyAttribute().getName();
               _builder_1.append(_name_1);
               _builder_1.append("\", EType.");
-              LEntityAttribute _primaryKeyAttribute_1 = this.idMap.get(idColumn).getPrimaryKeyAttribute();
-              IDataMart.EType _basicType = this.dtType.getBasicType(((LEntityAttribute) _primaryKeyAttribute_1));
+              IDataMart.EType _basicType = this.dtType.getBasicType(this.idMap.get(idColumn).getPrimaryKeyAttribute());
               _builder_1.append(_basicType);
               _builder_1.append(", \"");
               _builder_1.append(idColumn);
@@ -5814,7 +5899,7 @@
   /**
    * <p>recursive entity relation builder.</p>
    */
-  public String createEntity(final DatamartEntity entity, final DatamartEntity parent, final DatamartNavigation parentNavigation, final Map<String, Pair<String, Integer>> attributes, final List<String> conditions, final LinkedHashMap<String, Integer> orderings, final DatamartRole role, final HashMap<String, LEntityAttribute> typesMap) {
+  public String createEntity(final DatamartEntity entity, final DatamartEntity parent, final DatamartNavigation parentNavigation, final Map<String, Pair<String, Integer>> attributes, final List<String> conditions, final LinkedHashMap<String, Integer> orderings, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
     String body = "";
     String tableName = this._namingExtensions.toTableName(entity.getEntityRef());
     boolean _hasSuperType = this.hasSuperType(entity);
@@ -5891,7 +5976,7 @@
       if (_isEmpty) {
         List<LEntityAttribute> _allAttributes = entity.getEntityRef().getAllAttributes();
         for (final LEntityAttribute attr : _allAttributes) {
-          if ((((!attr.isId()) && (!attr.isUuid())) && (!attr.isVersion()))) {
+          if (((((!attr.isId()) && (!attr.isUuid())) && (!attr.isVersion())) && (!attr.isTransient()))) {
             DatamartAttribute datamartAttr = DatamartDSLFactory.eINSTANCE.createDatamartAttribute();
             datamartAttr.setAttributeRef(attr);
             this.recurAttribute(entity, datamartAttr, false, "", Integer.valueOf(this.defaultColumnWeight), attributes, role, typesMap);
@@ -5938,7 +6023,7 @@
     return body;
   }
   
-  public void recurAttribute(final DatamartEntity entity, final DatamartAttribute datamartAttr, final boolean aggregated, final String aggregateName, final Integer columnWeight, final Map<String, Pair<String, Integer>> attributes, final DatamartRole role, final HashMap<String, LEntityAttribute> typesMap) {
+  public void recurAttribute(final DatamartEntity entity, final DatamartAttribute datamartAttr, final boolean aggregated, final String aggregateName, final Integer columnWeight, final Map<String, Pair<String, Integer>> attributes, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
     LEntityAttribute attr = datamartAttr.getAttributeRef();
     LScalarType type = attr.getType();
     if ((type instanceof LBean)) {
@@ -5947,9 +6032,9 @@
       for (final LBeanAttribute battr : _allAttributes) {
         LScalarType _type = battr.getType();
         if ((_type instanceof LBean)) {
-          this.recurAttribute(entity, datamartAttr, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
+          this.recurAttribute(entity, battr, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
         } else {
-          this.addAttribute(entity, datamartAttr, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
+          this.addAttribute(entity, battr, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
         }
       }
     } else {
@@ -5957,6 +6042,24 @@
     }
   }
   
+  private void recurAttribute(final DatamartEntity entity, final LAttribute attr, final boolean aggregated, final String aggregateName, final Integer columnWeight, final Map<String, Pair<String, Integer>> attributes, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
+    LScalarType type = attr.getType();
+    if ((type instanceof LBean)) {
+      LBean bean = ((LBean) type);
+      List<LBeanAttribute> _allAttributes = bean.getAllAttributes();
+      for (final LBeanAttribute battr : _allAttributes) {
+        LScalarType _type = battr.getType();
+        if ((_type instanceof LBean)) {
+          this.recurAttribute(entity, battr, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
+        } else {
+          this.addAttribute(entity, battr, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
+        }
+      }
+    } else {
+      this.addAttribute(entity, attr, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
+    }
+  }
+  
   public String aliasedColumnName(final LEntity entityRef, final LAttribute attr) {
     String name = "";
     boolean _hasSuperType = this.hasSuperType(entityRef);
@@ -5987,9 +6090,28 @@
     return ((alias + ".") + _columnName);
   }
   
-  public void addAttribute(final DatamartEntity datamartEntity, final DatamartAttribute datamartAttr, final boolean aggregated, final String aggregateName, final Integer columnWeight, final Map<String, Pair<String, Integer>> attributes, final DatamartRole role, final HashMap<String, LEntityAttribute> typesMap) {
-    LEntity entity = datamartEntity.getEntityRef();
+  public void addAttribute(final DatamartEntity datamartEntity, final DatamartAttribute datamartAttr, final boolean aggregated, final String aggregateName, final Integer columnWeight, final Map<String, Pair<String, Integer>> attributes, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
     LEntityAttribute attr = datamartAttr.getAttributeRef();
+    this.addAttribute(datamartEntity, attr, DatamartAttributeUtil.getAliasedAttributeName(datamartAttr), aggregated, aggregateName, columnWeight, attributes, role, typesMap);
+  }
+  
+  public void addAttribute(final DatamartEntity datamartEntity, final LAttribute attr, final boolean aggregated, final String aggregateName, final Integer columnWeight, final Map<String, Pair<String, Integer>> attributes, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
+    StringConcatenation _builder = new StringConcatenation();
+    String _name = null;
+    if (attr!=null) {
+      _name=attr.getName();
+    }
+    String _replace = null;
+    if (_name!=null) {
+      _replace=_name.replace("^", "");
+    }
+    _builder.append(_replace);
+    String attributeName = _builder.toString();
+    this.addAttribute(datamartEntity, attr, attributeName, aggregated, aggregateName, columnWeight, attributes, role, typesMap);
+  }
+  
+  private void addAttribute(final DatamartEntity datamartEntity, final LAttribute attr, final String attributeName, final boolean aggregated, final String aggregateName, final Integer columnWeight, final Map<String, Pair<String, Integer>> attributes, final DatamartRole role, final HashMap<String, LAttribute> typesMap) {
+    LEntity entity = datamartEntity.getEntityRef();
     String key = this.aliasedColumnName(entity, attr);
     String attrName = "";
     String typesAttr = "";
@@ -5999,39 +6121,33 @@
       if (_contains) {
         String _name = entity.getSuperType().getName();
         String _plus = (_name + ".");
-        String _aliasedAttributeName = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-        String _plus_1 = (_plus + _aliasedAttributeName);
+        String _plus_1 = (_plus + attributeName);
         attrName = _plus_1;
         String _name_1 = entity.getSuperType().getName();
         String _plus_2 = (_name_1 + ".");
-        String _aliasedAttributeName_1 = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-        String _plus_3 = (_plus_2 + _aliasedAttributeName_1);
+        String _plus_3 = (_plus_2 + attributeName);
         typesAttr = _plus_3;
       } else {
         String _name_2 = entity.getName();
         String _plus_4 = (_name_2 + ".");
-        String _aliasedAttributeName_2 = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-        String _plus_5 = (_plus_4 + _aliasedAttributeName_2);
+        String _plus_5 = (_plus_4 + attributeName);
         attrName = _plus_5;
         String _name_3 = entity.getName();
         String _plus_6 = (_name_3 + ".");
-        String _aliasedAttributeName_3 = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-        String _plus_7 = (_plus_6 + _aliasedAttributeName_3);
+        String _plus_7 = (_plus_6 + attributeName);
         typesAttr = _plus_7;
       }
     } else {
       String _name_4 = entity.getName();
       String _plus_8 = (_name_4 + ".");
-      String _aliasedAttributeName_4 = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-      String _plus_9 = (_plus_8 + _aliasedAttributeName_4);
+      String _plus_9 = (_plus_8 + attributeName);
       attrName = _plus_9;
       String _name_5 = entity.getName();
       String _plus_10 = (_name_5 + ".");
-      String _aliasedAttributeName_5 = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-      String _plus_11 = (_plus_10 + _aliasedAttributeName_5);
+      String _plus_11 = (_plus_10 + attributeName);
       typesAttr = _plus_11;
     }
-    typesMap.put(typesAttr, ((LEntityAttribute) attr));
+    typesMap.put(typesAttr, attr);
     boolean _isAuthorized = this.isAuthorized(role, entity, attr.getName());
     if (_isAuthorized) {
       if (aggregated) {
@@ -6043,21 +6159,40 @@
         key = _builder.toString();
         this.sqlHasAggregate = true;
         String _string = key.toString();
-        String _aliasedAttributeName_6 = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-        Pair<String, Integer> _pair = new Pair<String, Integer>(_aliasedAttributeName_6, columnWeight);
+        Pair<String, Integer> _pair = new Pair<String, Integer>(attributeName, columnWeight);
         attributes.put(_string, _pair);
         this.ignoreEntityGrouping = true;
       } else {
-        this.entityGrouping.put(this.getEntityAlias(entity), entity);
-        this.sqlGrouping.add(key.toString());
+        String roleName = this.getRoleName(role);
+        Map<String, LEntity> _get = this.entityGrouping.get(roleName);
+        boolean _tripleEquals = (_get == null);
+        if (_tripleEquals) {
+          HashMap<String, LEntity> entityMap = CollectionLiterals.<String, LEntity>newHashMap();
+          this.entityGrouping.put(roleName, entityMap);
+        }
+        this.entityGrouping.get(roleName).put(this.getEntityAlias(entity), entity);
+        List<String> _get_1 = this.sqlGrouping.get(roleName);
+        boolean _tripleEquals_1 = (_get_1 == null);
+        if (_tripleEquals_1) {
+          ArrayList<String> entityColumnsList = CollectionLiterals.<String>newArrayList();
+          this.sqlGrouping.put(roleName, entityColumnsList);
+        }
+        this.sqlGrouping.get(this.getRoleName(role)).add(key.toString());
         String _string_1 = key.toString();
-        String _aliasedAttributeName_7 = DatamartAttributeUtil.getAliasedAttributeName(datamartAttr);
-        Pair<String, Integer> _pair_1 = new Pair<String, Integer>(_aliasedAttributeName_7, columnWeight);
+        Pair<String, Integer> _pair_1 = new Pair<String, Integer>(attributeName, columnWeight);
         attributes.put(_string_1, _pair_1);
       }
     }
   }
   
+  public String getRoleName(final DatamartRole role) {
+    String roleName = IUserAccessService.ADMINISTRATOR;
+    if ((role != null)) {
+      roleName = role.getAssignedRole().getName();
+    }
+    return roleName;
+  }
+  
   public boolean isAuthorized(final DatamartRole role, final DatamartEntity entity) {
     if ((role == null)) {
       return true;
@@ -6371,13 +6506,17 @@
     StringConcatenation _builder = new StringConcatenation();
     _builder.append(refPrefix);
     {
-      boolean _isEmpty = refPrefix.isEmpty();
-      if (_isEmpty) {
-        String _firstLower = StringExtensions.toFirstLower(primary.getName());
-        _builder.append(_firstLower);
-      } else {
-        String _firstUpper = StringExtensions.toFirstUpper(primary.getName());
-        _builder.append(_firstUpper);
+      if ((primary != null)) {
+        {
+          boolean _isEmpty = refPrefix.isEmpty();
+          if (_isEmpty) {
+            String _firstLower = StringExtensions.toFirstLower(primary.getName());
+            _builder.append(_firstLower);
+          } else {
+            String _firstUpper = StringExtensions.toFirstUpper(primary.getName());
+            _builder.append(_firstUpper);
+          }
+        }
       }
     }
     attribute_2.setAliasName(_builder.toString());
diff --git a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.java b/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.java
index dc6daff..1fe967e 100644
--- a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.java
+++ b/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/util/DatamartAttributeUtil.java
@@ -1,9 +1,18 @@
 package org.eclipse.osbp.xtext.datamartdsl.util;
 
+import java.util.List;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.osbp.dsl.semantic.entity.LEntity;
 import org.eclipse.osbp.dsl.semantic.entity.LEntityAttribute;
+import org.eclipse.osbp.xtext.datamartdsl.AxisEnum;
 import org.eclipse.osbp.xtext.datamartdsl.DatamartAttribute;
 import org.eclipse.osbp.xtext.datamartdsl.DatamartAttributeBase;
+import org.eclipse.osbp.xtext.datamartdsl.DatamartAxis;
+import org.eclipse.osbp.xtext.datamartdsl.DatamartDSLFactory;
+import org.eclipse.osbp.xtext.datamartdsl.DatamartEntity;
 import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.EcoreUtil2;
 
 @SuppressWarnings("all")
 public class DatamartAttributeUtil {
@@ -41,4 +50,34 @@
     _builder_1.append(_replace_1);
     return _builder_1.toString();
   }
+  
+  public static void fillEmptyAttributes(final DatamartEntity datamartEntity) {
+    LEntity _entityRef = null;
+    if (datamartEntity!=null) {
+      _entityRef=datamartEntity.getEntityRef();
+    }
+    LEntity entity = _entityRef;
+    boolean _eIsProxy = entity.eIsProxy();
+    if (_eIsProxy) {
+      EObject _resolve = EcoreUtil2.resolve(entity, datamartEntity.eResource());
+      entity = ((LEntity) _resolve);
+    }
+    List<LEntityAttribute> _attributes = entity.getAttributes();
+    for (final LEntityAttribute attribute : _attributes) {
+      {
+        DatamartAttribute datamartAttribute = DatamartDSLFactory.eINSTANCE.createDatamartAttribute();
+        datamartAttribute.setAttributeRef(attribute);
+        DatamartAxis axis = DatamartDSLFactory.eINSTANCE.createDatamartAxis();
+        axis.setName(AxisEnum.COLUMNS);
+        datamartAttribute.setAxis(axis);
+        EList<DatamartAttribute> _attributes_1 = null;
+        if (datamartEntity!=null) {
+          _attributes_1=datamartEntity.getAttributes();
+        }
+        if (_attributes_1!=null) {
+          _attributes_1.add(datamartAttribute);
+        }
+      }
+    }
+  }
 }
diff --git a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/util/EventBrokerDatamartUtils.java b/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/util/EventBrokerDatamartUtils.java
deleted file mode 100644
index d9b35b6..0000000
--- a/org.eclipse.osbp.xtext.datamartdsl/xtend-gen/org/eclipse/osbp/xtext/datamartdsl/util/EventBrokerDatamartUtils.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * Copyright (c) 2013, 2016 - Loetz GmbH&Co.KG, 69115 Heidelberg, Germany
- * 
- *  All rights reserved. This program and the accompanying materials
- *  are made available under the terms of the Eclipse Public License v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- * 
- *  Contributors:
- * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
- */
-package org.eclipse.osbp.xtext.datamartdsl.util;
-
-import com.google.common.base.Objects;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import javax.inject.Inject;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.osbp.xtext.datamartdsl.DatamartDefinition;
-import org.eclipse.osbp.xtext.datamartdsl.EventBrokerDataMart;
-import org.eclipse.osbp.xtext.datamartdsl.jvmmodel.DatamartDSLJvmModelInferrer;
-import org.eclipse.xtend2.lib.StringConcatenation;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
-import org.eclipse.xtext.xbase.lib.Extension;
-
-@SuppressWarnings("all")
-public class EventBrokerDatamartUtils {
-  @Inject
-  @Extension
-  private DatamartDSLJvmModelInferrer datamartInferrer;
-  
-  public HashMap<String, String> getUsedFilterInDatamart(final EventBrokerDataMart datamart, final HashMap<String, String> filterIdMap) {
-    HashMap<String, String> usedFilterIdMap = CollectionLiterals.<String, String>newHashMap();
-    Set<Map.Entry<String, String>> _entrySet = filterIdMap.entrySet();
-    for (final Map.Entry<String, String> filter : _entrySet) {
-      String _filter = datamart.getFilter();
-      String _value = filter.getValue();
-      boolean _equals = _filter.equals(_value);
-      if (_equals) {
-        String _key = filter.getKey();
-        String _value_1 = filter.getValue();
-        usedFilterIdMap.put(_key, _value_1);
-      }
-    }
-    return usedFilterIdMap;
-  }
-  
-  public HashMap<String, String> getFilterMap(final EventBrokerDataMart datamart) {
-    HashMap<String, String> filterIdMap = new HashMap<String, String>();
-    DatamartDefinition _datamartDef = datamart.getDatamartDef();
-    this.datamartInferrer.createFilterMap(_datamartDef, filterIdMap);
-    return filterIdMap;
-  }
-  
-  public void removeAlreadyUsedFilter(final EList<EventBrokerDataMart> datamarts, final HashMap<String, HashMap<String, String>> datamartsFilterMap) {
-    for (final EventBrokerDataMart dat : datamarts) {
-      String _filter = dat.getFilter();
-      boolean _notEquals = (!Objects.equal(_filter, null));
-      if (_notEquals) {
-        DatamartDefinition _datamartDef = dat.getDatamartDef();
-        String _name = _datamartDef.getName();
-        HashMap<String, String> _get = datamartsFilterMap.get(_name);
-        HashMap<String, String> filterIdMap = ((HashMap<String, String>) _get);
-        boolean _notEquals_1 = (!Objects.equal(filterIdMap, null));
-        if (_notEquals_1) {
-          Object _clone = filterIdMap.clone();
-          HashMap<String, String> filterIdMapTemp = ((HashMap<String, String>) _clone);
-          Set<Map.Entry<String, String>> _entrySet = filterIdMapTemp.entrySet();
-          for (final Map.Entry<String, String> filter : _entrySet) {
-            String _filter_1 = dat.getFilter();
-            String _value = filter.getValue();
-            boolean _equals = _filter_1.equals(_value);
-            if (_equals) {
-              String _key = filter.getKey();
-              filterIdMap.remove(_key);
-            }
-          }
-        }
-      }
-    }
-  }
-  
-  public HashMap<String, String> getFilterMap(final EList<EventBrokerDataMart> datamarts) {
-    HashMap<String, String> filterMap = CollectionLiterals.<String, String>newHashMap();
-    return this.getFilterMap(datamarts, filterMap);
-  }
-  
-  public HashMap<String, String> getFilterMap(final EList<EventBrokerDataMart> datamarts, final HashMap<String, String> filterMap) {
-    boolean _notEquals = (!Objects.equal(filterMap, null));
-    if (_notEquals) {
-      for (final EventBrokerDataMart datamart : datamarts) {
-        HashMap<String, String> _filterMap = this.getFilterMap(datamart);
-        HashMap<String, String> _usedFilterInDatamart = this.getUsedFilterInDatamart(datamart, _filterMap);
-        filterMap.putAll(_usedFilterInDatamart);
-      }
-    }
-    return filterMap;
-  }
-  
-  public HashMap<String, HashMap<String, String>> getUsedFilterMap(final EList<EventBrokerDataMart> datamarts) {
-    HashMap<String, HashMap<String, String>> usedFilterMap = CollectionLiterals.<String, HashMap<String, String>>newHashMap();
-    for (final EventBrokerDataMart dat : datamarts) {
-      boolean _and = false;
-      boolean _notEquals = (!Objects.equal(dat, null));
-      if (!_notEquals) {
-        _and = false;
-      } else {
-        DatamartDefinition _datamartDef = dat.getDatamartDef();
-        boolean _notEquals_1 = (!Objects.equal(_datamartDef, null));
-        _and = _notEquals_1;
-      }
-      if (_and) {
-        DatamartDefinition _datamartDef_1 = dat.getDatamartDef();
-        String _name = _datamartDef_1.getName();
-        HashMap<String, String> _filterMap = this.getFilterMap(dat);
-        usedFilterMap.put(_name, _filterMap);
-      }
-    }
-    return usedFilterMap;
-  }
-  
-  public void fillResultWithFilter(final EList<EventBrokerDataMart> datamarts, final HashMap<String, HashMap<String, String>> usedDatamartsFilterMap, final ArrayList<EObject> result) {
-    for (final EventBrokerDataMart dat : datamarts) {
-      boolean _and = false;
-      boolean _and_1 = false;
-      boolean _and_2 = false;
-      boolean _notEquals = (!Objects.equal(dat, null));
-      if (!_notEquals) {
-        _and_2 = false;
-      } else {
-        DatamartDefinition _datamartDef = dat.getDatamartDef();
-        boolean _notEquals_1 = (!Objects.equal(_datamartDef, null));
-        _and_2 = _notEquals_1;
-      }
-      if (!_and_2) {
-        _and_1 = false;
-      } else {
-        DatamartDefinition _datamartDef_1 = dat.getDatamartDef();
-        String _name = _datamartDef_1.getName();
-        boolean _containsKey = usedDatamartsFilterMap.containsKey(_name);
-        _and_1 = _containsKey;
-      }
-      if (!_and_1) {
-        _and = false;
-      } else {
-        DatamartDefinition _datamartDef_2 = dat.getDatamartDef();
-        String _name_1 = _datamartDef_2.getName();
-        HashMap<String, String> _get = usedDatamartsFilterMap.get(_name_1);
-        boolean _isEmpty = _get.isEmpty();
-        boolean _not = (!_isEmpty);
-        _and = _not;
-      }
-      if (_and) {
-        DatamartDefinition _datamartDef_3 = dat.getDatamartDef();
-        result.add(_datamartDef_3);
-      }
-    }
-  }
-  
-  public CharSequence getEventBrokerMsgs(final EList<EventBrokerDataMart> datamarts) {
-    StringConcatenation _builder = new StringConcatenation();
-    {
-      for(final EventBrokerDataMart datamart : datamarts) {
-        _builder.append("eventBroker.send(\"");
-        String _filter = datamart.getFilter();
-        _builder.append(_filter, "");
-        _builder.append("/clear\", selectedItem);");
-        _builder.newLineIfNotEmpty();
-        _builder.append("eventBroker.send(\"");
-        String _filter_1 = datamart.getFilter();
-        _builder.append(_filter_1, "");
-        _builder.append("\", selectedItem);");
-        _builder.newLineIfNotEmpty();
-      }
-    }
-    return _builder;
-  }
-}
