EmpParseRuleTermArgMapping

UINT8 __stdcall EmpParseRuleTermArgMapping(
        PSTR ArgString,
        UINT64 *MappingBuffer,
        UINT64 ExpectedNumberOfStrings,
        UINT64 ExpectedNumberOfNumerics,
        UINT64 ExpectedNumberOfEntries){
  UINT64 *v5; 
  unsigned int v6; 
  int v7; 
  CHAR *v9; 
  char v10; 
  char v11; 
  __int64 v12; 
  int v13; 
  unsigned int v14; 
  bool v15; 
  bool v16; 
  int v18; 
  __int64 v19; 
  int v20; 
  bool v21; 
  bool v22; 
  bool v23; 
  __int64 v24; 
  int v25; 
  char *EndPtr[11]; 
  int v27; 
  int v29; 
  int v30; 
  v30 = ExpectedNumberOfNumerics;
  v29 = ExpectedNumberOfStrings;
  v5 = MappingBuffer;
  v6 = ExpectedNumberOfEntries + ExpectedNumberOfStrings + ExpectedNumberOfNumerics;
  v7 = 0;
  v27 = 0;
  v9 = 0i64;
  v10 = 0;
  v11 = 0;
  EndPtr[0] = 0i64;
  v12 = 0i64;
  v13 = 0;
  v14 = 0;
  if( v5 )
  {
    while( 1 )
    {
      v15 = v11 == 0;
      if( v11 )
        return v15;
      if( v14 == 5 )
        break;
      if( v14 <= 5 )
      {
        switch( v14 )
        {
          case 0u:
            v16 = *ArgString == 40;
LABEL_10:
            if( !v16 )
              goto LABEL_64;
            v14 = 1;
            goto LABEL_12;
          case 1u:
            if( *ArgString == 41 )
            {
              v14 = 3;
            }
            else
            {
              if( (unsigned int)v12 >= v6 )
                goto LABEL_63;
              v18 = strtoul(ArgString, EndPtr, 10i64);
              v9 = EndPtr[0];
              LODWORD(ExpectedNumberOfNumerics) = v30;
              LODWORD(ExpectedNumberOfStrings) = v29;
              v7 = v27;
              *((_DWORD *)v5 + v12) = v18;
              if( ArgString == v9 )
                goto LABEL_60;
              v14 = 2;
              v12 = (unsigned int)(v12 + 1);
            }
            goto LABEL_20;
          case 2u:
            if( *ArgString == 41 )
            {
              v14 = 3;
              goto LABEL_12;
            }
            v16 = *ArgString == 46;
            goto LABEL_10;
        }
        if( v14 != 3 )
        {
          if( *ArgString == 41 )
          {
            v14 = 6;
          }
          else
          {
            v19 = (unsigned int)(v13 + v12);
            if( (unsigned int)v19 >= v6 )
              goto LABEL_63;
            v20 = strtoul(ArgString, EndPtr, 10i64);
            v9 = EndPtr[0];
            LODWORD(ExpectedNumberOfNumerics) = v30;
            LODWORD(ExpectedNumberOfStrings) = v29;
            *((_DWORD *)MappingBuffer + v19) = v20;
            v7 = v27;
            if( ArgString == v9 )
              goto LABEL_60;
            v14 = 5;
            ++v13;
          }
          goto LABEL_20;
        }
        if( !*ArgString )
        {
          if( (_DWORD)v12 != (_DWORD)ExpectedNumberOfStrings || (_DWORD)ExpectedNumberOfNumerics )
            goto LABEL_64;
          v22 = (_DWORD)ExpectedNumberOfEntries == 0;
LABEL_38:
          if( !v22 )
            goto LABEL_64;
LABEL_39:
          v10 = 1;
          goto LABEL_12;
        }
        v21 = *ArgString == 40;
        goto LABEL_29;
      }
      switch( v14 )
      {
        case 6u:
          if( !*ArgString )
          {
            if( (_DWORD)v12 == (_DWORD)ExpectedNumberOfStrings
              && v13 == (_DWORD)ExpectedNumberOfNumerics
              && !(_DWORD)ExpectedNumberOfEntries )
            {
              goto LABEL_39;
            }
LABEL_60:
            v11 = 1;
LABEL_20:
            if( v9 )
            {
              ArgString = v9;
              v9 = 0i64;
              EndPtr[0] = 0i64;
              goto LABEL_13;
            }
            goto LABEL_12;
          }
          v23 = *ArgString == 40;
          break;
        case 7u:
          if( *ArgString == 41 )
          {
            v14 = 9;
          }
          else
          {
            v24 = (unsigned int)(v12 + v13 + v7);
            if( (unsigned int)v24 >= v6 )
            {
LABEL_63:
              v11 = 1;
              v10 = 1;
              goto LABEL_12;
            }
            v25 = strtoul(ArgString, EndPtr, 10i64);
            v9 = EndPtr[0];
            LODWORD(ExpectedNumberOfNumerics) = v30;
            LODWORD(ExpectedNumberOfStrings) = v29;
            *((_DWORD *)MappingBuffer + v24) = v25;
            v7 = v27;
            if( ArgString == v9 )
              goto LABEL_60;
            v7 = v27 + 1;
            v14 = 8;
            ++v27;
          }
          goto LABEL_20;
        case 8u:
          if( *ArgString == 41 )
          {
            v14 = 9;
            goto LABEL_12;
          }
          v23 = *ArgString == 46;
          break;
        default:
          if( *ArgString || (_DWORD)v12 != (_DWORD)ExpectedNumberOfStrings || v13 != (_DWORD)ExpectedNumberOfNumerics )
          {
LABEL_64:
            v11 = 1;
            goto LABEL_12;
          }
          v22 = v7 == (_DWORD)ExpectedNumberOfEntries;
          goto LABEL_38;
      }
      if( !v23 )
        goto LABEL_64;
      v14 = 7;
LABEL_12:
      ++ArgString;
LABEL_13:
      v5 = MappingBuffer;
      if( v10 )
        return v11 == 0;
    }
    if( *ArgString == 41 )
    {
      v14 = 6;
      goto LABEL_12;
    }
    v21 = *ArgString == 46;
LABEL_29:
    if( !v21 )
      goto LABEL_64;
    v14 = 4;
    goto LABEL_12;
  }
  return 0;
}

Referenced by:

EmpParseRuleTerm