docs: public final EObject ruleCapacityMember() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_6=null;
          Token otherlv_8=null;
          Token otherlv_10=null;
          Token otherlv_12=null;
          Token otherlv_14=null;
          Token otherlv_16=null;
          Token otherlv_17=null;
          Token otherlv_21=null;
          Token otherlv_23=null;
          Token otherlv_25=null;
          Token otherlv_27=null;
          Token otherlv_29=null;
          Token otherlv_31=null;
          Token otherlv_34=null;
          EObject lv_annotations_1_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_3_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_4_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_5_0 = null;
  
          EObject lv_typeParameters_7_0 = null;
  
          EObject lv_typeParameters_9_0 = null;
  
          AntlrDatatypeRuleToken lv_name_11_0 = null;
  
          EObject lv_parameters_13_0 = null;
  
          EObject lv_parameters_15_0 = null;
  
          EObject lv_returnType_18_0 = null;
  
          EObject lv_returnType_19_0 = null;
  
          EObject lv_exceptions_22_0 = null;
  
          EObject lv_exceptions_24_0 = null;
  
          EObject lv_firedEvents_26_0 = null;
  
          EObject lv_firedEvents_28_0 = null;
  
          EObject lv_typeParameters_30_0 = null;
  
          EObject lv_typeParameters_32_0 = null;
  
          EObject lv_expression_33_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:2250:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( (lv_modifiers_4_0= ruleMethodModifier ) ) ( (lv_modifiers_5_0= ruleCommonModifier ) )* (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleJvmTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) ) )* otherlv_10= '>' )? ( (lv_name_11_0= ruleFunctionID ) ) (otherlv_12= '(' ( ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? otherlv_16= ')' )? (otherlv_17= ':' ( ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_33_0= ruleXBlockExpression ) ) | otherlv_34= ';' )? ) )
              // InternalSARL.g:2251:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( (lv_modifiers_4_0= ruleMethodModifier ) ) ( (lv_modifiers_5_0= ruleCommonModifier ) )* (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleJvmTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) ) )* otherlv_10= '>' )? ( (lv_name_11_0= ruleFunctionID ) ) (otherlv_12= '(' ( ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? otherlv_16= ')' )? (otherlv_17= ':' ( ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_33_0= ruleXBlockExpression ) ) | otherlv_34= ';' )? )
              {
              // InternalSARL.g:2251:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( (lv_modifiers_4_0= ruleMethodModifier ) ) ( (lv_modifiers_5_0= ruleCommonModifier ) )* (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleJvmTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) ) )* otherlv_10= '>' )? ( (lv_name_11_0= ruleFunctionID ) ) (otherlv_12= '(' ( ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? otherlv_16= ')' )? (otherlv_17= ':' ( ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_33_0= ruleXBlockExpression ) ) | otherlv_34= ';' )? )
              // InternalSARL.g:2252:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( (lv_modifiers_4_0= ruleMethodModifier ) ) ( (lv_modifiers_5_0= ruleCommonModifier ) )* (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleJvmTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) ) )* otherlv_10= '>' )? ( (lv_name_11_0= ruleFunctionID ) ) (otherlv_12= '(' ( ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? otherlv_16= ')' )? (otherlv_17= ':' ( ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_33_0= ruleXBlockExpression ) ) | otherlv_34= ';' )?
              {
              // InternalSARL.g:2252:3: ()
              // InternalSARL.g:2253:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getCapacityMemberAccess().getXtendMemberAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:2259:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
              loop64:
              do {
                  int alt64=2;
                  int LA64_0 = input.LA(1);
  
                  if ( (LA64_0==105) ) {
                      alt64=1;
                  }
  
  
                  switch (alt64) {
              	case 1 :
              	    // InternalSARL.g:2260:4: (lv_annotations_1_0= ruleXAnnotation )
              	    {
              	    // InternalSARL.g:2260:4: (lv_annotations_1_0= ruleXAnnotation )
              	    // InternalSARL.g:2261:5: lv_annotations_1_0= ruleXAnnotation
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      					newCompositeNode(grammarAccess.getCapacityMemberAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
              	      				
              	    }
              	    pushFollow(FOLLOW_55);
              	    lv_annotations_1_0=ruleXAnnotation();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      					if (current==null) {
              	      						current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	      					}
              	      					add(
              	      						current,
              	      						"annotations",
              	      						lv_annotations_1_0,
              	      						"org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations.XAnnotation");
              	      					afterParserOrEnumRuleCall();
              	      				
              	    }
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop64;
                  }
              } while (true);
  
              // InternalSARL.g:2278:3: ()
              // InternalSARL.g:2279:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElementAndSet(
                					grammarAccess.getCapacityMemberAccess().getSarlActionAnnotationInfoAction_2(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:2285:3: ( (lv_modifiers_3_0= ruleCommonModifier ) )*
              loop65:
              do {
                  int alt65=2;
                  int LA65_0 = input.LA(1);
  
                  if ( (LA65_0==25||(LA65_0>=78 && LA65_0<=89)) ) {
                      alt65=1;
                  }
  
  
                  switch (alt65) {
              	case 1 :
              	    // InternalSARL.g:2286:4: (lv_modifiers_3_0= ruleCommonModifier )
              	    {
              	    // InternalSARL.g:2286:4: (lv_modifiers_3_0= ruleCommonModifier )
              	    // InternalSARL.g:2287:5: lv_modifiers_3_0= ruleCommonModifier
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      					newCompositeNode(grammarAccess.getCapacityMemberAccess().getModifiersCommonModifierParserRuleCall_3_0());
              	      				
              	    }
              	    pushFollow(FOLLOW_55);
              	    lv_modifiers_3_0=ruleCommonModifier();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      					if (current==null) {
              	      						current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	      					}
              	      					add(
              	      						current,
              	      						"modifiers",
              	      						lv_modifiers_3_0,
              	      						"org.eclipse.xtend.core.Xtend.CommonModifier");
              	      					afterParserOrEnumRuleCall();
              	      				
              	    }
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop65;
                  }
              } while (true);
  
              // InternalSARL.g:2304:3: ( (lv_modifiers_4_0= ruleMethodModifier ) )
              // InternalSARL.g:2305:4: (lv_modifiers_4_0= ruleMethodModifier )
              {
              // InternalSARL.g:2305:4: (lv_modifiers_4_0= ruleMethodModifier )
              // InternalSARL.g:2306:5: lv_modifiers_4_0= ruleMethodModifier
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getCapacityMemberAccess().getModifiersMethodModifierParserRuleCall_4_0());
                				
              }
              pushFollow(FOLLOW_56);
              lv_modifiers_4_0=ruleMethodModifier();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                					}
                					add(
                						current,
                						"modifiers",
                						lv_modifiers_4_0,
                						"org.eclipse.xtend.core.Xtend.MethodModifier");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:2323:3: ( (lv_modifiers_5_0= ruleCommonModifier ) )*
              loop66:
              do {
                  int alt66=2;
                  int LA66_0 = input.LA(1);
  
                  if ( (LA66_0==25||(LA66_0>=78 && LA66_0<=89)) ) {
                      alt66=1;
                  }
  
  
                  switch (alt66) {
              	case 1 :
              	    // InternalSARL.g:2324:4: (lv_modifiers_5_0= ruleCommonModifier )
              	    {
              	    // InternalSARL.g:2324:4: (lv_modifiers_5_0= ruleCommonModifier )
              	    // InternalSARL.g:2325:5: lv_modifiers_5_0= ruleCommonModifier
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      					newCompositeNode(grammarAccess.getCapacityMemberAccess().getModifiersCommonModifierParserRuleCall_5_0());
              	      				
              	    }
              	    pushFollow(FOLLOW_56);
              	    lv_modifiers_5_0=ruleCommonModifier();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      					if (current==null) {
              	      						current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	      					}
              	      					add(
              	      						current,
              	      						"modifiers",
              	      						lv_modifiers_5_0,
              	      						"org.eclipse.xtend.core.Xtend.CommonModifier");
              	      					afterParserOrEnumRuleCall();
              	      				
              	    }
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop66;
                  }
              } while (true);
  
              // InternalSARL.g:2342:3: (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleJvmTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) ) )* otherlv_10= '>' )?
              int alt68=2;
              int LA68_0 = input.LA(1);
  
              if ( (LA68_0==40) ) {
                  int LA68_1 = input.LA(2);
  
                  if ( (LA68_1==RULE_ID||LA68_1==44||(LA68_1>=92 && LA68_1<=95)) ) {
                      alt68=1;
                  }
              }
              switch (alt68) {
                  case 1 :
                      // InternalSARL.g:2343:4: otherlv_6= '<' ( (lv_typeParameters_7_0= ruleJvmTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) ) )* otherlv_10= '>'
                      {
                      otherlv_6=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_6, grammarAccess.getCapacityMemberAccess().getLessThanSignKeyword_6_0());
                        			
                      }
                      // InternalSARL.g:2347:4: ( (lv_typeParameters_7_0= ruleJvmTypeParameter ) )
                      // InternalSARL.g:2348:5: (lv_typeParameters_7_0= ruleJvmTypeParameter )
                      {
                      // InternalSARL.g:2348:5: (lv_typeParameters_7_0= ruleJvmTypeParameter )
                      // InternalSARL.g:2349:6: lv_typeParameters_7_0= ruleJvmTypeParameter
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getCapacityMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_6_1_0());
                        					
                      }
                      pushFollow(FOLLOW_28);
                      lv_typeParameters_7_0=ruleJvmTypeParameter();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                        						}
                        						add(
                        							current,
                        							"typeParameters",
                        							lv_typeParameters_7_0,
                        							"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:2366:4: (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) ) )*
                      loop67:
                      do {
                          int alt67=2;
                          int LA67_0 = input.LA(1);
  
                          if ( (LA67_0==32) ) {
                              alt67=1;
                          }
  
  
                          switch (alt67) {
                      	case 1 :
                      	    // InternalSARL.g:2367:5: otherlv_8= ',' ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) )
                      	    {
                      	    otherlv_8=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      					newLeafNode(otherlv_8, grammarAccess.getCapacityMemberAccess().getCommaKeyword_6_2_0());
                      	      				
                      	    }
                      	    // InternalSARL.g:2371:5: ( (lv_typeParameters_9_0= ruleJvmTypeParameter ) )
                      	    // InternalSARL.g:2372:6: (lv_typeParameters_9_0= ruleJvmTypeParameter )
                      	    {
                      	    // InternalSARL.g:2372:6: (lv_typeParameters_9_0= ruleJvmTypeParameter )
                      	    // InternalSARL.g:2373:7: lv_typeParameters_9_0= ruleJvmTypeParameter
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getCapacityMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_6_2_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_28);
                      	    lv_typeParameters_9_0=ruleJvmTypeParameter();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"typeParameters",
                      	      								lv_typeParameters_9_0,
                      	      								"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop67;
                          }
                      } while (true);
  
                      otherlv_10=(Token)match(input,41,FOLLOW_56); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_10, grammarAccess.getCapacityMemberAccess().getGreaterThanSignKeyword_6_3());
                        			
                      }
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:2396:3: ( (lv_name_11_0= ruleFunctionID ) )
              // InternalSARL.g:2397:4: (lv_name_11_0= ruleFunctionID )
              {
              // InternalSARL.g:2397:4: (lv_name_11_0= ruleFunctionID )
              // InternalSARL.g:2398:5: lv_name_11_0= ruleFunctionID
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getCapacityMemberAccess().getNameFunctionIDParserRuleCall_7_0());
                				
              }
              pushFollow(FOLLOW_57);
              lv_name_11_0=ruleFunctionID();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                					}
                					set(
                						current,
                						"name",
                						lv_name_11_0,
                						"org.eclipse.xtend.core.Xtend.FunctionID");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:2415:3: (otherlv_12= '(' ( ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? otherlv_16= ')' )?
              int alt71=2;
              int LA71_0 = input.LA(1);
  
              if ( (LA71_0==49) ) {
                  alt71=1;
              }
              switch (alt71) {
                  case 1 :
                      // InternalSARL.g:2416:4: otherlv_12= '(' ( ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )? otherlv_16= ')'
                      {
                      otherlv_12=(Token)match(input,49,FOLLOW_50); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_12, grammarAccess.getCapacityMemberAccess().getLeftParenthesisKeyword_8_0());
                        			
                      }
                      // InternalSARL.g:2420:4: ( ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )* )?
                      int alt70=2;
                      int LA70_0 = input.LA(1);
  
                      if ( (LA70_0==RULE_ID||(LA70_0>=44 && LA70_0<=45)||(LA70_0>=92 && LA70_0<=95)||LA70_0==105) ) {
                          alt70=1;
                      }
                      switch (alt70) {
                          case 1 :
                              // InternalSARL.g:2421:5: ( (lv_parameters_13_0= ruleParameter ) ) (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )*
                              {
                              // InternalSARL.g:2421:5: ( (lv_parameters_13_0= ruleParameter ) )
                              // InternalSARL.g:2422:6: (lv_parameters_13_0= ruleParameter )
                              {
                              // InternalSARL.g:2422:6: (lv_parameters_13_0= ruleParameter )
                              // InternalSARL.g:2423:7: lv_parameters_13_0= ruleParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                							newCompositeNode(grammarAccess.getCapacityMemberAccess().getParametersParameterParserRuleCall_8_1_0_0());
                                						
                              }
                              pushFollow(FOLLOW_51);
                              lv_parameters_13_0=ruleParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                							if (current==null) {
                                								current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                                							}
                                							add(
                                								current,
                                								"parameters",
                                								lv_parameters_13_0,
                                								"io.sarl.lang.SARL.Parameter");
                                							afterParserOrEnumRuleCall();
                                						
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:2440:5: (otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) ) )*
                              loop69:
                              do {
                                  int alt69=2;
                                  int LA69_0 = input.LA(1);
  
                                  if ( (LA69_0==32) ) {
                                      alt69=1;
                                  }
  
  
                                  switch (alt69) {
                              	case 1 :
                              	    // InternalSARL.g:2441:6: otherlv_14= ',' ( (lv_parameters_15_0= ruleParameter ) )
                              	    {
                              	    otherlv_14=(Token)match(input,32,FOLLOW_52); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      						newLeafNode(otherlv_14, grammarAccess.getCapacityMemberAccess().getCommaKeyword_8_1_1_0());
                              	      					
                              	    }
                              	    // InternalSARL.g:2445:6: ( (lv_parameters_15_0= ruleParameter ) )
                              	    // InternalSARL.g:2446:7: (lv_parameters_15_0= ruleParameter )
                              	    {
                              	    // InternalSARL.g:2446:7: (lv_parameters_15_0= ruleParameter )
                              	    // InternalSARL.g:2447:8: lv_parameters_15_0= ruleParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      								newCompositeNode(grammarAccess.getCapacityMemberAccess().getParametersParameterParserRuleCall_8_1_1_1_0());
                              	      							
                              	    }
                              	    pushFollow(FOLLOW_51);
                              	    lv_parameters_15_0=ruleParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      								if (current==null) {
                              	      									current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                              	      								}
                              	      								add(
                              	      									current,
                              	      									"parameters",
                              	      									lv_parameters_15_0,
                              	      									"io.sarl.lang.SARL.Parameter");
                              	      								afterParserOrEnumRuleCall();
                              	      							
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop69;
                                  }
                              } while (true);
  
  
                              }
                              break;
  
                      }
  
                      otherlv_16=(Token)match(input,50,FOLLOW_58); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_16, grammarAccess.getCapacityMemberAccess().getRightParenthesisKeyword_8_2());
                        			
                      }
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:2471:3: (otherlv_17= ':' ( ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) ) ) )?
              int alt73=2;
              int LA73_0 = input.LA(1);
  
              if ( (LA73_0==46) ) {
                  alt73=1;
              }
              switch (alt73) {
                  case 1 :
                      // InternalSARL.g:2472:4: otherlv_17= ':' ( ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) ) )
                      {
                      otherlv_17=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_17, grammarAccess.getCapacityMemberAccess().getColonKeyword_9_0());
                        			
                      }
                      // InternalSARL.g:2476:4: ( ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) ) )
                      int alt72=2;
                      alt72 = dfa72.predict(input);
                      switch (alt72) {
                          case 1 :
                              // InternalSARL.g:2477:5: ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) )
                              {
                              // InternalSARL.g:2477:5: ( (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs ) )
                              // InternalSARL.g:2478:6: (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs )
                              {
                              // InternalSARL.g:2478:6: (lv_returnType_18_0= ruleTypeReferenceWithTypeArgs )
                              // InternalSARL.g:2479:7: lv_returnType_18_0= ruleTypeReferenceWithTypeArgs
                              {
                              if ( state.backtracking==0 ) {
  
                                							newCompositeNode(grammarAccess.getCapacityMemberAccess().getReturnTypeTypeReferenceWithTypeArgsParserRuleCall_9_1_0_0());
                                						
                              }
                              pushFollow(FOLLOW_59);
                              lv_returnType_18_0=ruleTypeReferenceWithTypeArgs();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                							if (current==null) {
                                								current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                                							}
                                							set(
                                								current,
                                								"returnType",
                                								lv_returnType_18_0,
                                								"org.eclipse.xtend.core.Xtend.TypeReferenceWithTypeArgs");
                                							afterParserOrEnumRuleCall();
                                						
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:2497:5: ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) )
                              {
                              // InternalSARL.g:2497:5: ( (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs ) )
                              // InternalSARL.g:2498:6: (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs )
                              {
                              // InternalSARL.g:2498:6: (lv_returnType_19_0= ruleTypeReferenceNoTypeArgs )
                              // InternalSARL.g:2499:7: lv_returnType_19_0= ruleTypeReferenceNoTypeArgs
                              {
                              if ( state.backtracking==0 ) {
  
                                							newCompositeNode(grammarAccess.getCapacityMemberAccess().getReturnTypeTypeReferenceNoTypeArgsParserRuleCall_9_1_1_0());
                                						
                              }
                              pushFollow(FOLLOW_59);
                              lv_returnType_19_0=ruleTypeReferenceNoTypeArgs();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                							if (current==null) {
                                								current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                                							}
                                							set(
                                								current,
                                								"returnType",
                                								lv_returnType_19_0,
                                								"org.eclipse.xtend.core.Xtend.TypeReferenceNoTypeArgs");
                                							afterParserOrEnumRuleCall();
                                						
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
  
                      }
  
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:2518:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) )
              // InternalSARL.g:2519:4: ( ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
              {
              // InternalSARL.g:2519:4: ( ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
              // InternalSARL.g:2520:5: ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
              {
              getUnorderedGroupHelper().enter(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10());
              // InternalSARL.g:2523:5: ( ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
              // InternalSARL.g:2524:6: ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
              {
              // InternalSARL.g:2524:6: ( ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
              loop77:
              do {
                  int alt77=4;
                  int LA77_0 = input.LA(1);
  
                  if ( LA77_0 == 51 && getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 0) ) {
                      alt77=1;
                  }
                  else if ( LA77_0 == 53 && getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 1) ) {
                      alt77=2;
                  }
                  else if ( LA77_0 == 52 && getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 2) ) {
                      alt77=3;
                  }
  
  
                  switch (alt77) {
              	case 1 :
              	    // InternalSARL.g:2525:4: ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) )
              	    {
              	    // InternalSARL.g:2525:4: ({...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) ) )
              	    // InternalSARL.g:2526:5: {...}? => ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) )
              	    {
              	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 0) ) {
              	        if (state.backtracking>0) {state.failed=true; return current;}
              	        throw new FailedPredicateException(input, "ruleCapacityMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 0)");
              	    }
              	    // InternalSARL.g:2526:112: ( ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) ) )
              	    // InternalSARL.g:2527:6: ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) )
              	    {
              	    getUnorderedGroupHelper().select(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 0);
              	    // InternalSARL.g:2530:9: ({...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* ) )
              	    // InternalSARL.g:2530:10: {...}? => (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* )
              	    {
              	    if ( !((true)) ) {
              	        if (state.backtracking>0) {state.failed=true; return current;}
              	        throw new FailedPredicateException(input, "ruleCapacityMember", "true");
              	    }
              	    // InternalSARL.g:2530:19: (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )* )
              	    // InternalSARL.g:2530:20: otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleJvmTypeReference ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )*
              	    {
              	    otherlv_21=(Token)match(input,51,FOLLOW_41); if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      									newLeafNode(otherlv_21, grammarAccess.getCapacityMemberAccess().getThrowsKeyword_10_0_0());
              	      								
              	    }
              	    // InternalSARL.g:2534:9: ( (lv_exceptions_22_0= ruleJvmTypeReference ) )
              	    // InternalSARL.g:2535:10: (lv_exceptions_22_0= ruleJvmTypeReference )
              	    {
              	    // InternalSARL.g:2535:10: (lv_exceptions_22_0= ruleJvmTypeReference )
              	    // InternalSARL.g:2536:11: lv_exceptions_22_0= ruleJvmTypeReference
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      											newCompositeNode(grammarAccess.getCapacityMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_10_0_1_0());
              	      										
              	    }
              	    pushFollow(FOLLOW_60);
              	    lv_exceptions_22_0=ruleJvmTypeReference();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      											if (current==null) {
              	      												current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	      											}
              	      											add(
              	      												current,
              	      												"exceptions",
              	      												lv_exceptions_22_0,
              	      												"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              	      											afterParserOrEnumRuleCall();
              	      										
              	    }
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:2553:9: (otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) ) )*
              	    loop74:
              	    do {
              	        int alt74=2;
              	        int LA74_0 = input.LA(1);
  
              	        if ( (LA74_0==32) ) {
              	            alt74=1;
              	        }
  
  
              	        switch (alt74) {
              	    	case 1 :
              	    	    // InternalSARL.g:2554:10: otherlv_23= ',' ( (lv_exceptions_24_0= ruleJvmTypeReference ) )
              	    	    {
              	    	    otherlv_23=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
              	    	    if ( state.backtracking==0 ) {
  
              	    	      										newLeafNode(otherlv_23, grammarAccess.getCapacityMemberAccess().getCommaKeyword_10_0_2_0());
              	    	      									
              	    	    }
              	    	    // InternalSARL.g:2558:10: ( (lv_exceptions_24_0= ruleJvmTypeReference ) )
              	    	    // InternalSARL.g:2559:11: (lv_exceptions_24_0= ruleJvmTypeReference )
              	    	    {
              	    	    // InternalSARL.g:2559:11: (lv_exceptions_24_0= ruleJvmTypeReference )
              	    	    // InternalSARL.g:2560:12: lv_exceptions_24_0= ruleJvmTypeReference
              	    	    {
              	    	    if ( state.backtracking==0 ) {
  
              	    	      												newCompositeNode(grammarAccess.getCapacityMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_10_0_2_1_0());
              	    	      											
              	    	    }
              	    	    pushFollow(FOLLOW_60);
              	    	    lv_exceptions_24_0=ruleJvmTypeReference();
  
              	    	    state._fsp--;
              	    	    if (state.failed) return current;
              	    	    if ( state.backtracking==0 ) {
  
              	    	      												if (current==null) {
              	    	      													current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	    	      												}
              	    	      												add(
              	    	      													current,
              	    	      													"exceptions",
              	    	      													lv_exceptions_24_0,
              	    	      													"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              	    	      												afterParserOrEnumRuleCall();
              	    	      											
              	    	    }
  
              	    	    }
  
  
              	    	    }
  
  
              	    	    }
              	    	    break;
  
              	    	default :
              	    	    break loop74;
              	        }
              	    } while (true);
  
  
              	    }
  
  
              	    }
  
              	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10());
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
              	case 2 :
              	    // InternalSARL.g:2584:4: ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) )
              	    {
              	    // InternalSARL.g:2584:4: ({...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) ) )
              	    // InternalSARL.g:2585:5: {...}? => ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) )
              	    {
              	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 1) ) {
              	        if (state.backtracking>0) {state.failed=true; return current;}
              	        throw new FailedPredicateException(input, "ruleCapacityMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 1)");
              	    }
              	    // InternalSARL.g:2585:112: ( ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) ) )
              	    // InternalSARL.g:2586:6: ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) )
              	    {
              	    getUnorderedGroupHelper().select(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 1);
              	    // InternalSARL.g:2589:9: ({...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* ) )
              	    // InternalSARL.g:2589:10: {...}? => (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* )
              	    {
              	    if ( !((true)) ) {
              	        if (state.backtracking>0) {state.failed=true; return current;}
              	        throw new FailedPredicateException(input, "ruleCapacityMember", "true");
              	    }
              	    // InternalSARL.g:2589:19: (otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )* )
              	    // InternalSARL.g:2589:20: otherlv_25= 'fires' ( (lv_firedEvents_26_0= ruleJvmTypeReference ) ) (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )*
              	    {
              	    otherlv_25=(Token)match(input,53,FOLLOW_41); if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      									newLeafNode(otherlv_25, grammarAccess.getCapacityMemberAccess().getFiresKeyword_10_1_0());
              	      								
              	    }
              	    // InternalSARL.g:2593:9: ( (lv_firedEvents_26_0= ruleJvmTypeReference ) )
              	    // InternalSARL.g:2594:10: (lv_firedEvents_26_0= ruleJvmTypeReference )
              	    {
              	    // InternalSARL.g:2594:10: (lv_firedEvents_26_0= ruleJvmTypeReference )
              	    // InternalSARL.g:2595:11: lv_firedEvents_26_0= ruleJvmTypeReference
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      											newCompositeNode(grammarAccess.getCapacityMemberAccess().getFiredEventsJvmTypeReferenceParserRuleCall_10_1_1_0());
              	      										
              	    }
              	    pushFollow(FOLLOW_60);
              	    lv_firedEvents_26_0=ruleJvmTypeReference();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      											if (current==null) {
              	      												current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	      											}
              	      											add(
              	      												current,
              	      												"firedEvents",
              	      												lv_firedEvents_26_0,
              	      												"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              	      											afterParserOrEnumRuleCall();
              	      										
              	    }
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:2612:9: (otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) ) )*
              	    loop75:
              	    do {
              	        int alt75=2;
              	        int LA75_0 = input.LA(1);
  
              	        if ( (LA75_0==32) ) {
              	            alt75=1;
              	        }
  
  
              	        switch (alt75) {
              	    	case 1 :
              	    	    // InternalSARL.g:2613:10: otherlv_27= ',' ( (lv_firedEvents_28_0= ruleJvmTypeReference ) )
              	    	    {
              	    	    otherlv_27=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
              	    	    if ( state.backtracking==0 ) {
  
              	    	      										newLeafNode(otherlv_27, grammarAccess.getCapacityMemberAccess().getCommaKeyword_10_1_2_0());
              	    	      									
              	    	    }
              	    	    // InternalSARL.g:2617:10: ( (lv_firedEvents_28_0= ruleJvmTypeReference ) )
              	    	    // InternalSARL.g:2618:11: (lv_firedEvents_28_0= ruleJvmTypeReference )
              	    	    {
              	    	    // InternalSARL.g:2618:11: (lv_firedEvents_28_0= ruleJvmTypeReference )
              	    	    // InternalSARL.g:2619:12: lv_firedEvents_28_0= ruleJvmTypeReference
              	    	    {
              	    	    if ( state.backtracking==0 ) {
  
              	    	      												newCompositeNode(grammarAccess.getCapacityMemberAccess().getFiredEventsJvmTypeReferenceParserRuleCall_10_1_2_1_0());
              	    	      											
              	    	    }
              	    	    pushFollow(FOLLOW_60);
              	    	    lv_firedEvents_28_0=ruleJvmTypeReference();
  
              	    	    state._fsp--;
              	    	    if (state.failed) return current;
              	    	    if ( state.backtracking==0 ) {
  
              	    	      												if (current==null) {
              	    	      													current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	    	      												}
              	    	      												add(
              	    	      													current,
              	    	      													"firedEvents",
              	    	      													lv_firedEvents_28_0,
              	    	      													"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              	    	      												afterParserOrEnumRuleCall();
              	    	      											
              	    	    }
  
              	    	    }
  
  
              	    	    }
  
  
              	    	    }
              	    	    break;
  
              	    	default :
              	    	    break loop75;
              	        }
              	    } while (true);
  
  
              	    }
  
  
              	    }
  
              	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10());
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
              	case 3 :
              	    // InternalSARL.g:2643:4: ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) )
              	    {
              	    // InternalSARL.g:2643:4: ({...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) ) )
              	    // InternalSARL.g:2644:5: {...}? => ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) )
              	    {
              	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 2) ) {
              	        if (state.backtracking>0) {state.failed=true; return current;}
              	        throw new FailedPredicateException(input, "ruleCapacityMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 2)");
              	    }
              	    // InternalSARL.g:2644:112: ( ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) ) )
              	    // InternalSARL.g:2645:6: ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) )
              	    {
              	    getUnorderedGroupHelper().select(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10(), 2);
              	    // InternalSARL.g:2648:9: ({...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* ) )
              	    // InternalSARL.g:2648:10: {...}? => (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* )
              	    {
              	    if ( !((true)) ) {
              	        if (state.backtracking>0) {state.failed=true; return current;}
              	        throw new FailedPredicateException(input, "ruleCapacityMember", "true");
              	    }
              	    // InternalSARL.g:2648:19: (otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )* )
              	    // InternalSARL.g:2648:20: otherlv_29= 'with' ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) ) (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )*
              	    {
              	    otherlv_29=(Token)match(input,52,FOLLOW_3); if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      									newLeafNode(otherlv_29, grammarAccess.getCapacityMemberAccess().getWithKeyword_10_2_0());
              	      								
              	    }
              	    // InternalSARL.g:2652:9: ( (lv_typeParameters_30_0= ruleJvmTypeParameter ) )
              	    // InternalSARL.g:2653:10: (lv_typeParameters_30_0= ruleJvmTypeParameter )
              	    {
              	    // InternalSARL.g:2653:10: (lv_typeParameters_30_0= ruleJvmTypeParameter )
              	    // InternalSARL.g:2654:11: lv_typeParameters_30_0= ruleJvmTypeParameter
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      											newCompositeNode(grammarAccess.getCapacityMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_10_2_1_0());
              	      										
              	    }
              	    pushFollow(FOLLOW_60);
              	    lv_typeParameters_30_0=ruleJvmTypeParameter();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      											if (current==null) {
              	      												current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	      											}
              	      											add(
              	      												current,
              	      												"typeParameters",
              	      												lv_typeParameters_30_0,
              	      												"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
              	      											afterParserOrEnumRuleCall();
              	      										
              	    }
  
              	    }
  
  
              	    }
  
              	    // InternalSARL.g:2671:9: (otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) ) )*
              	    loop76:
              	    do {
              	        int alt76=2;
              	        int LA76_0 = input.LA(1);
  
              	        if ( (LA76_0==32) ) {
              	            alt76=1;
              	        }
  
  
              	        switch (alt76) {
              	    	case 1 :
              	    	    // InternalSARL.g:2672:10: otherlv_31= ',' ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) )
              	    	    {
              	    	    otherlv_31=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
              	    	    if ( state.backtracking==0 ) {
  
              	    	      										newLeafNode(otherlv_31, grammarAccess.getCapacityMemberAccess().getCommaKeyword_10_2_2_0());
              	    	      									
              	    	    }
              	    	    // InternalSARL.g:2676:10: ( (lv_typeParameters_32_0= ruleJvmTypeParameter ) )
              	    	    // InternalSARL.g:2677:11: (lv_typeParameters_32_0= ruleJvmTypeParameter )
              	    	    {
              	    	    // InternalSARL.g:2677:11: (lv_typeParameters_32_0= ruleJvmTypeParameter )
              	    	    // InternalSARL.g:2678:12: lv_typeParameters_32_0= ruleJvmTypeParameter
              	    	    {
              	    	    if ( state.backtracking==0 ) {
  
              	    	      												newCompositeNode(grammarAccess.getCapacityMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_10_2_2_1_0());
              	    	      											
              	    	    }
              	    	    pushFollow(FOLLOW_60);
              	    	    lv_typeParameters_32_0=ruleJvmTypeParameter();
  
              	    	    state._fsp--;
              	    	    if (state.failed) return current;
              	    	    if ( state.backtracking==0 ) {
  
              	    	      												if (current==null) {
              	    	      													current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
              	    	      												}
              	    	      												add(
              	    	      													current,
              	    	      													"typeParameters",
              	    	      													lv_typeParameters_32_0,
              	    	      													"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
              	    	      												afterParserOrEnumRuleCall();
              	    	      											
              	    	    }
  
              	    	    }
  
  
              	    	    }
  
  
              	    	    }
              	    	    break;
  
              	    	default :
              	    	    break loop76;
              	        }
              	    } while (true);
  
  
              	    }
  
  
              	    }
  
              	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10());
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop77;
                  }
              } while (true);
  
  
              }
  
  
              }
  
              getUnorderedGroupHelper().leave(grammarAccess.getCapacityMemberAccess().getUnorderedGroup_10());
  
              }
  
              // InternalSARL.g:2709:3: ( ( (lv_expression_33_0= ruleXBlockExpression ) ) | otherlv_34= ';' )?
              int alt78=3;
              int LA78_0 = input.LA(1);
  
              if ( (LA78_0==29) ) {
                  alt78=1;
              }
              else if ( (LA78_0==26) ) {
                  alt78=2;
              }
              switch (alt78) {
                  case 1 :
                      // InternalSARL.g:2710:4: ( (lv_expression_33_0= ruleXBlockExpression ) )
                      {
                      // InternalSARL.g:2710:4: ( (lv_expression_33_0= ruleXBlockExpression ) )
                      // InternalSARL.g:2711:5: (lv_expression_33_0= ruleXBlockExpression )
                      {
                      // InternalSARL.g:2711:5: (lv_expression_33_0= ruleXBlockExpression )
                      // InternalSARL.g:2712:6: lv_expression_33_0= ruleXBlockExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getCapacityMemberAccess().getExpressionXBlockExpressionParserRuleCall_11_0_0());
                        					
                      }
                      pushFollow(FOLLOW_2);
                      lv_expression_33_0=ruleXBlockExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getCapacityMemberRule());
                        						}
                        						set(
                        							current,
                        							"expression",
                        							lv_expression_33_0,
                        							"org.eclipse.xtext.xbase.Xbase.XBlockExpression");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:2730:4: otherlv_34= ';'
                      {
                      otherlv_34=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_34, grammarAccess.getCapacityMemberAccess().getSemicolonKeyword_11_1());
                        			
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }