SdbpMatchList

__int64 __fastcall SdbpMatchList(int *a1, __int64 a2, __int64 a3, unsigned int a4, __int64 a5, int a6, int a7){
  unsigned int FirstChild; 
  __int64(__fastcall *Matcher)(int *, __int64, __int64, _QWORD, unsigned int, __int64, _QWORD); 
  int v13; 
  __int64 result; 
  _QWORD a1a[2]; 
  a1a[0] = 0i64;
  a7 = 1;
  FirstChild = SdbGetFirstChild(a3, a4);
  if( FirstChild )
  {
    while( 1 )
    {
      Matcher = (__int64(__fastcall *)(int *, __int64, __int64, _QWORD, unsigned int, __int64, _QWORD))SdbpFindMatcher(a1a, a2, a3, FirstChild);
      if( Matcher )
      {
        result = Matcher(&a7, a2, a3, a4, FirstChild, a5, a1a[0]);
        if( !(_DWORD)result )
          return result;
        if( (unsigned int)SdbFindFirstTag(a3, FirstChild, 4099) )
        {
          v13 = a7 == 0;
          a7 = v13;
        }
        else
        {
          v13 = a7;
        }
        if( v13 == a6 )
          break;
      }
      FirstChild = SdbGetNextChild(a3, a4, FirstChild);
      if( !FirstChild )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v13 = a7;
  }
  *a1 = v13;
  return 1i64;
}

Referenced by:

SdbpCheckForMatch
SdbpMatchOne