L L4D2node

CBaseClientState::ProcessConnectionlessPacket

0x00103450 · 9048 bytes · __thiscall

_ZN16CBaseClientState27ProcessConnectionlessPacketEP11netpacket_s

Decompiled

undefined (2 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CBaseClientState::ProcessConnectionlessPacket(netpacket_s*) */

undefined4 __thiscall
CBaseClientState::ProcessConnectionlessPacket(CBaseClientState *this,netpacket_s *param_1)

{
  netpacket_s *pnVar1;
  uint *puVar2;
  undefined4 *puVar3;
  uint uVar4;
  code *pcVar5;
  short sVar6;
  netpacket_s nVar7;
  char cVar8;
  ushort uVar9;
  int iVar10;
  uint uVar11;
  undefined4 uVar12;
  int iVar13;
  undefined *puVar14;
  uint uVar15;
  char *pcVar16;
  CBaseClientState *pCVar17;
  char *pcVar18;
  CBitRead *pCVar19;
  int in_GS_OFFSET;
  CBaseClientState CVar20;
  byte bVar21;
  undefined8 uVar22;
  netadr_s *pnVar23;
  uint local_8f4;
  undefined4 local_8e4;
  undefined4 local_8e0;
  undefined4 local_8dc;
  undefined4 local_8d8;
  int local_8d4;
  char local_8d0 [1024];
  CBaseClientState local_4d0 [1200];
  int local_20;
  
  bVar21 = 0;
  local_8e4 = 0;
  local_8e0 = 0;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if (_exit == 0) {
    local_8d4 = 0;
  }
  else {
    (**(code **)(_exit + 0x50))
              (_exit,&local_8e4,0,0,0,0,"/data/src/engine/./baseclientstate.cpp",0x3e9,
               &ProcessConnectionlessPacket(netpacket_s*)::tm_fmt,"(%s)%s","Unaccounted",
               "ProcessConnectionlessPacket");
    local_8d4 = _exit;
  }
  iVar13 = _DAT_0040b9d4;
  local_8dc = local_8e4;
  local_8d8 = local_8e0;
                    /* try { // try from 00103531 to 00103535 has its CatchHandler @ 001058b8 */
  if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
     (iVar10 = ThreadGetCurrentId(), iVar13 == iVar10)) {
    if ((char *)*_DAT_0040b030 != "ProcessConnectionlessPacket") {
                    /* try { // try from 00103be8 to 00103bf9 has its CatchHandler @ 001058b8 */
      _DAT_0040b030 =
           (int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2a6f5c,&DAT_00000001,0x2a054b);
    }
    CVProfNode::EnterScope();
    DAT_0040b02c = '\0';
  }
  iVar13 = *(int *)(param_1 + 0x30);
  if (iVar13 < 8) {
    puVar2 = *(uint **)(param_1 + 0x34);
    uVar11 = *(uint *)(param_1 + 0x2c);
    if (puVar2 == *(uint **)(param_1 + 0x38)) {
      *(undefined4 *)(param_1 + 0x30) = 1;
      *(undefined4 *)(param_1 + 0x2c) = 0;
      *(uint **)(param_1 + 0x34) = puVar2 + 1;
      param_1[0x20] = (netpacket_s)0x1;
    }
    else if (*(uint **)(param_1 + 0x38) < puVar2) {
      param_1[0x20] = (netpacket_s)0x1;
      *(undefined4 *)(param_1 + 0x2c) = 0;
    }
    else {
      *(uint **)(param_1 + 0x34) = puVar2 + 1;
      uVar15 = *puVar2;
      *(uint *)(param_1 + 0x2c) = uVar15;
      if (param_1[0x20] == (netpacket_s)0x0) {
        uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
        *(int *)(param_1 + 0x30) = iVar13 + 0x18;
        uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
        *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
        goto LAB_00103560;
      }
    }
    uVar11 = 0;
switchD_0010356a_caseD_3a:
                    /* try { // try from 001035a5 to 00103adc has its CatchHandler @ 00105894 */
    uVar12 = netadr_s::ToString((netadr_s *)param_1,false);
    ConDMsg("Bad connectionless packet ( CL \'%c\') from %s.\n",uVar11,uVar12);
LAB_001035be:
    uVar12 = 0;
  }
  else {
    *(int *)(param_1 + 0x30) = iVar13 + -8;
    uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
    if (iVar13 + -8 == 0) {
      puVar3 = *(undefined4 **)(param_1 + 0x34);
      *(undefined4 *)(param_1 + 0x30) = 0x20;
      if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
        *(undefined4 *)(param_1 + 0x30) = 1;
        *(undefined4 *)(param_1 + 0x2c) = 0;
        *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
      }
      else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
        param_1[0x20] = (netpacket_s)0x1;
        *(undefined4 *)(param_1 + 0x2c) = 0;
      }
      else {
        *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
        *(undefined4 *)(param_1 + 0x2c) = *puVar3;
      }
    }
    else {
      *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
    }
LAB_00103560:
    switch(uVar11) {
    case 0x39:
      if ((*(int *)(this + 0x60) == 1) &&
         (cVar8 = netadr_s::CompareAdr((netadr_s *)param_1,(netadr_s *)(this + 0x1b8),true),
         cVar8 != '\0')) {
        CBitRead::ReadString((CBitRead *)(param_1 + 0x1c),(char *)local_4d0,0x4b0,false,(int *)0x0);
        COM_ExplainDisconnection(true,(char *)local_4d0);
        (**(code **)(*(int *)this + 0x94))(this,1);
      }
      break;
    default:
      goto switchD_0010356a_caseD_3a;
    case 0x41:
      cVar8 = netadr_s::IsLocalhost((netadr_s *)param_1);
                    /* try { // try from 001043a3 to 0010588e has its CatchHandler @ 00105894 */
      if (((cVar8 == '\0') && (cVar8 = netadr_s::IsLoopback((netadr_s *)param_1), cVar8 == '\0')) &&
         (((cVar8 = CAddressList::IsAddressInList((CAddressList *)(this + 0x2c),(netadr_s *)param_1)
           , cVar8 == '\0' &&
           (cVar8 = CAddressList::IsAddressInList
                              ((CAddressList *)(this + 0x174),(netadr_s *)param_1), cVar8 == '\0'))
          || (*(int *)(cl_failremoteconnections._28_4_ + 0x30) != 0)))) break;
      this[0x18c] = (CBaseClientState)0x0;
      *(undefined4 *)(this + 0x1b8) = *(undefined4 *)param_1;
      *(undefined4 *)(this + 0x1bc) = *(undefined4 *)(param_1 + 4);
      *(undefined2 *)(this + 0x1c0) = *(undefined2 *)(param_1 + 8);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 0x20) {
        puVar2 = *(uint **)(param_1 + 0x34);
        uVar11 = *(uint *)(param_1 + 0x2c);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar11 = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar15 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar15;
            if (param_1[0x20] == (netpacket_s)0x0) {
              *(int *)(param_1 + 0x30) = iVar13;
              uVar11 = ((&CBitBuffer::s_nMaskTable)[0x20 - iVar13] & uVar15) <<
                       ((byte)iVar13 & 0x1f) | uVar11;
              *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x20 - iVar13) & 0x1f);
              goto LAB_00103e2b;
            }
          }
          uVar11 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -0x20;
        uVar11 = *(uint *)(param_1 + 0x2c);
        if (iVar13 + -0x20 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else {
            if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
              param_1[0x20] = (netpacket_s)0x1;
              goto LAB_00103e24;
            }
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
LAB_00103e24:
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
      }
LAB_00103e2b:
      *(uint *)(this + 0x1a0) = uVar11;
      iVar13 = *(int *)(param_1 + 0x30);
      if (0x1f < iVar13) {
        *(int *)(param_1 + 0x30) = iVar13 + -0x20;
        uVar11 = *(uint *)(param_1 + 0x2c);
        if (iVar13 + -0x20 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else {
            if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
              param_1[0x20] = (netpacket_s)0x1;
              goto LAB_00103e72;
            }
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
LAB_00103e72:
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
LAB_00103e79:
        *(uint *)(this + 0x1a4) = uVar11;
        *(undefined4 *)(this + 0x1a8) = 0;
        *(undefined4 *)(this + 0x1ac) = 0;
        this[0x18d] = (CBaseClientState)0x0;
        if (uVar11 != 3) goto LAB_00103ea9;
        iVar13 = *(int *)(param_1 + 0x30);
        if (iVar13 < 0x10) {
          puVar2 = *(uint **)(param_1 + 0x34);
          uVar12 = *(undefined4 *)(param_1 + 0x2c);
          if (puVar2 == *(uint **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            param_1[0x20] = (netpacket_s)0x1;
          }
          else if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar11 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar11;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar15 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
              *(int *)(param_1 + 0x30) = iVar13 + 0x10;
              uVar9 = (ushort)((uVar15 & uVar11) << ((byte)iVar13 & 0x1f)) | (ushort)uVar12;
              *(uint *)(param_1 + 0x2c) = uVar11 >> ((byte)(0x10 - iVar13) & 0x1f);
              goto LAB_00104941;
            }
          }
LAB_00104d09:
          uVar22 = CBitRead::ReadLongLong((CBitRead *)(param_1 + 0x1c));
          *(undefined8 *)(this + 0x1a8) = uVar22;
          iVar13 = *(int *)(param_1 + 0x30);
          uVar11 = *(uint *)(param_1 + 0x2c);
          if (iVar13 < 8) {
            puVar2 = *(uint **)(param_1 + 0x34);
            if (puVar2 == *(uint **)(param_1 + 0x38)) {
              *(undefined4 *)(param_1 + 0x30) = 1;
              *(uint **)(param_1 + 0x34) = puVar2 + 1;
              CVar20 = (CBaseClientState)0x0;
              *(undefined4 *)(param_1 + 0x2c) = 0;
              param_1[0x20] = (netpacket_s)0x1;
            }
            else {
              if (*(uint **)(param_1 + 0x38) < puVar2) {
                param_1[0x20] = (netpacket_s)0x1;
                *(undefined4 *)(param_1 + 0x2c) = 0;
              }
              else {
                *(uint **)(param_1 + 0x34) = puVar2 + 1;
                uVar15 = *puVar2;
                *(uint *)(param_1 + 0x2c) = uVar15;
                if (param_1[0x20] == (netpacket_s)0x0) {
                  uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
                  *(int *)(param_1 + 0x30) = iVar13 + 0x18;
                  *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
                  CVar20 = (CBaseClientState)
                           (uVar11 != 0 || (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) != 0);
                  goto LAB_00104d56;
                }
              }
              CVar20 = (CBaseClientState)0x0;
            }
          }
          else {
            *(int *)(param_1 + 0x30) = iVar13 + -8;
            uVar15 = uVar11 & 0xff;
            if (iVar13 + -8 == 0) {
              puVar3 = *(undefined4 **)(param_1 + 0x34);
              *(undefined4 *)(param_1 + 0x30) = 0x20;
              if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
                CVar20 = (CBaseClientState)(uVar15 != 0);
                *(undefined4 *)(param_1 + 0x30) = 1;
                *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
                *(undefined4 *)(param_1 + 0x2c) = 0;
              }
              else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
                CVar20 = (CBaseClientState)(uVar15 != 0);
                param_1[0x20] = (netpacket_s)0x1;
                *(undefined4 *)(param_1 + 0x2c) = 0;
              }
              else {
                CVar20 = (CBaseClientState)(uVar15 != 0);
                *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
                *(undefined4 *)(param_1 + 0x2c) = *puVar3;
              }
            }
            else {
              CVar20 = (CBaseClientState)(uVar15 != 0);
              *(uint *)(param_1 + 0x2c) = uVar11 >> 8;
            }
          }
LAB_00104d56:
          this[0x18d] = CVar20;
          nVar7 = param_1[0x20];
          goto LAB_00103efe;
        }
        *(int *)(param_1 + 0x30) = iVar13 + -0x10;
        uVar9 = (ushort)*(uint *)(param_1 + 0x2c);
        if (iVar13 + -0x10 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
        }
LAB_00104941:
        if (uVar9 == 0) goto LAB_00104d09;
        Msg("Invalid Steam key size.\n");
        goto LAB_00104956;
      }
      puVar2 = *(uint **)(param_1 + 0x34);
      uVar11 = *(uint *)(param_1 + 0x2c);
      if (puVar2 == *(uint **)(param_1 + 0x38)) {
        *(undefined4 *)(param_1 + 0x30) = 1;
        *(undefined4 *)(param_1 + 0x2c) = 0;
        *(uint **)(param_1 + 0x34) = puVar2 + 1;
        param_1[0x20] = (netpacket_s)0x1;
      }
      else if (*(uint **)(param_1 + 0x38) < puVar2) {
        param_1[0x20] = (netpacket_s)0x1;
        *(undefined4 *)(param_1 + 0x2c) = 0;
      }
      else {
        *(uint **)(param_1 + 0x34) = puVar2 + 1;
        uVar15 = *puVar2;
        *(uint *)(param_1 + 0x2c) = uVar15;
        if (param_1[0x20] == (netpacket_s)0x0) {
          *(int *)(param_1 + 0x30) = iVar13;
          uVar11 = ((&CBitBuffer::s_nMaskTable)[0x20 - iVar13] & uVar15) << ((byte)iVar13 & 0x1f) |
                   uVar11;
          *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x20 - iVar13) & 0x1f);
          goto LAB_00103e79;
        }
      }
      *(undefined4 *)(this + 0x1a4) = 0;
      *(undefined4 *)(this + 0x1a8) = 0;
      *(undefined4 *)(this + 0x1ac) = 0;
      this[0x18d] = (CBaseClientState)0x0;
LAB_00103ea9:
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 0x10) {
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else if (puVar2 < *(uint **)(param_1 + 0x38)) {
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar11 = *puVar2;
          *(uint *)(param_1 + 0x2c) = uVar11;
          if (param_1[0x20] == (netpacket_s)0x0) {
            *(int *)(param_1 + 0x30) = iVar13 + 0x10;
            *(uint *)(param_1 + 0x2c) = uVar11 >> (0x10U - (char)iVar13 & 0x1f);
          }
        }
        else {
LAB_001049f5:
          param_1[0x20] = (netpacket_s)0x1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -0x10;
        if (iVar13 + -0x10 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else {
            if (*(undefined4 **)(param_1 + 0x38) <= puVar3) goto LAB_001049f5;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
        }
      }
      CBitRead::ReadLongLong((CBitRead *)(param_1 + 0x1c));
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else if (puVar2 < *(uint **)(param_1 + 0x38)) {
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar11 = *puVar2;
          *(uint *)(param_1 + 0x2c) = uVar11;
          if (param_1[0x20] == (netpacket_s)0x0) {
            *(int *)(param_1 + 0x30) = iVar13 + 0x18;
            *(uint *)(param_1 + 0x2c) = uVar11 >> (8U - (char)iVar13 & 0x1f);
            goto LAB_00103f06;
          }
        }
        else {
LAB_00104a05:
          param_1[0x20] = (netpacket_s)0x1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
LAB_001049dd:
        Msg("Invalid challenge packet.\n");
LAB_00104956:
        (**(code **)(*(int *)this + 0x94))(this,1);
        uVar12 = 0;
        goto LAB_00103ae5;
      }
      *(int *)(param_1 + 0x30) = iVar13 + -8;
      if (iVar13 + -8 == 0) {
        puVar3 = *(undefined4 **)(param_1 + 0x34);
        *(undefined4 *)(param_1 + 0x30) = 0x20;
        if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          nVar7 = param_1[0x20];
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x38) <= puVar3) goto LAB_00104a05;
          *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          nVar7 = param_1[0x20];
        }
      }
      else {
        nVar7 = param_1[0x20];
        *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
      }
LAB_00103efe:
      if (nVar7 != (netpacket_s)0x0) goto LAB_001049dd;
LAB_00103f06:
      pCVar19 = (CBitRead *)(param_1 + 0x1c);
      if ((this[0x18d] != (CBaseClientState)0x0) &&
         (cVar8 = Host_IsSecureServerAllowed(), cVar8 == '\0')) {
        CUtlVector<Remote_t,CUtlMemory<Remote_t,int>>::RemoveAll
                  ((CUtlVector<Remote_t,CUtlMemory<Remote_t,int>> *)(this + 0x174));
        *(undefined4 *)(this + 0x15c) = 0;
        *(undefined4 *)(this + 0x160) = 0;
        *(undefined4 *)(this + 0x158) = 0;
        (**(code **)(*(int *)this + 0x94))(this,1);
        uVar12 = 0;
        goto LAB_00103ae5;
      }
      pCVar17 = local_4d0;
      for (iVar13 = 0x40; iVar13 != 0; iVar13 = iVar13 + -1) {
        *(undefined4 *)pCVar17 = 0;
        pCVar17 = pCVar17 + ((uint)bVar21 * -2 + 1) * 4;
      }
      pcVar18 = (char *)local_4d0;
      CBitRead::ReadString(pCVar19,pcVar18,0x100,false,(int *)0x0);
      iVar13 = _V_strlen("reserve");
      iVar13 = V_strnicmp(pcVar18,"reserve",iVar13);
      if (iVar13 == 0) {
        (**(code **)(*(int *)this + 0xcc))(this,*(undefined4 *)(this + 0x1a0));
        break;
      }
      iVar13 = _V_strlen("connect");
      iVar13 = V_strnicmp(pcVar18,"connect",iVar13);
      if (iVar13 != 0) break;
      if (*(int *)(this + 0x60) == 1) {
        this[0x18c] = (CBaseClientState)0x1;
        iVar13 = *(int *)(param_1 + 0x30);
        if (iVar13 < 0x20) {
          uVar11 = *(uint *)(param_1 + 0x2c);
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            param_1[0x20] = (netpacket_s)0x1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
          local_8f4 = 0;
          if (param_1[0x20] == (netpacket_s)0x0) {
            uVar15 = *(uint *)(param_1 + 0x2c);
            uVar4 = (&CBitBuffer::s_nMaskTable)[0x20 - iVar13];
            uVar12 = *(undefined4 *)(param_1 + 0x30);
            *(int *)(param_1 + 0x30) = iVar13;
            *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> ((byte)(0x20 - iVar13) & 0x1f);
            local_8f4 = (uVar15 & uVar4) << ((byte)uVar12 & 0x1f) | uVar11;
          }
        }
        else {
          *(int *)(param_1 + 0x30) = iVar13 + -0x20;
          local_8f4 = *(uint *)(param_1 + 0x2c);
          if (iVar13 + -0x20 == 0) {
            puVar3 = *(undefined4 **)(param_1 + 0x34);
            *(undefined4 *)(param_1 + 0x30) = 0x20;
            if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
              *(undefined4 *)(param_1 + 0x30) = 1;
              *(undefined4 *)(param_1 + 0x2c) = 0;
              *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            }
            else {
              if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
                param_1[0x20] = (netpacket_s)0x1;
                goto LAB_00104c7b;
              }
              *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
              *(undefined4 *)(param_1 + 0x2c) = *puVar3;
            }
          }
          else {
LAB_00104c7b:
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
        }
        uVar11 = GetHostVersion();
        if (uVar11 == local_8f4) {
          CBitRead::ReadString(pCVar19,(char *)(this + 399),0xf,false,(int *)0x0);
          iVar13 = *(int *)(param_1 + 0x30);
          if (iVar13 < 8) {
            uVar11 = *(uint *)(param_1 + 0x2c);
            puVar3 = *(undefined4 **)(param_1 + 0x34);
            if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
              *(undefined4 *)(param_1 + 0x30) = 1;
              *(undefined4 *)(param_1 + 0x2c) = 0;
              *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
              param_1[0x20] = (netpacket_s)0x1;
            }
            else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
              param_1[0x20] = (netpacket_s)0x1;
              *(undefined4 *)(param_1 + 0x2c) = 0;
            }
            else {
              *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
              *(undefined4 *)(param_1 + 0x2c) = *puVar3;
            }
            uVar15 = 0;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar15 = (*(uint *)(param_1 + 0x2c) & (&CBitBuffer::s_nMaskTable)[8 - iVar13]) <<
                       ((byte)*(undefined4 *)(param_1 + 0x30) & 0x1f) | uVar11;
              *(int *)(param_1 + 0x30) = iVar13 + 0x18;
              local_8f4._0_1_ = (byte)(8 - iVar13);
              *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> ((byte)local_8f4 & 0x1f);
            }
          }
          else {
            *(int *)(param_1 + 0x30) = iVar13 + -8;
            uVar15 = *(uint *)(param_1 + 0x2c) & 0xff;
            if (iVar13 + -8 == 0) {
              puVar3 = *(undefined4 **)(param_1 + 0x34);
              *(undefined4 *)(param_1 + 0x30) = 0x20;
              if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
                *(undefined4 *)(param_1 + 0x30) = 1;
                *(undefined4 *)(param_1 + 0x2c) = 0;
                *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
              }
              else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
                param_1[0x20] = (netpacket_s)0x1;
                *(undefined4 *)(param_1 + 0x2c) = 0;
              }
              else {
                *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
                *(undefined4 *)(param_1 + 0x2c) = *puVar3;
              }
            }
            else {
              *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
            }
          }
          this[0x18e] = (CBaseClientState)(uVar15 == 1);
          uVar22 = CBitRead::ReadLongLong(pCVar19);
          *(undefined8 *)(this + 0x1b0) = uVar22;
          puVar14 = &DAT_002b6517;
          if (this[0x18e] == (CBaseClientState)0x0) {
            puVar14 = &DAT_0029fe20;
          }
          pCVar17 = (CBaseClientState *)"<none>";
          if (this[399] != (CBaseClientState)0x0) {
            pCVar17 = this + 399;
          }
          Msg("Server using \'%s\' lobbies, requiring pw %s, lobby id %llx\n",pCVar17,puVar14,uVar22
             );
          pCVar17 = this + 0x1b8;
          uVar12 = *(undefined4 *)(this + 0x1b0);
          pnVar23 = *(netadr_s **)(this + 0x1b4);
          RememberIPAddressForLobby(CONCAT44(uVar12,this),pnVar23);
          if (this[399] == (CBaseClientState)0x0) {
            if ((*(int *)(this + 0x1b4) == 0 && *(int *)(this + 0x1b0) == 0) &&
               (this[0x18e] != (CBaseClientState)0x0)) {
              if (this[0x188] != (CBaseClientState)0x0) {
                pcVar16 = "FCVAR_NEVER_AS_STRING";
                if ((password[0x15] & 0x10) == 0) {
                  pcVar16 = "";
                  if (*(char **)(password._28_4_ + 0x24) != (char *)0x0) {
                    pcVar16 = *(char **)(password._28_4_ + 0x24);
                  }
                }
                if (*pcVar16 != '\0') goto LAB_00105523;
              }
              this[0x189] = (CBaseClientState)0x1;
              break;
            }
          }
          else if (((DAT_003b7f64 < 2) &&
                   (*(int *)(this + 0x1b4) == 0 && *(int *)(this + 0x1b0) == 0)) &&
                  (*(int *)(this + 0x160) != 0 || *(int *)(this + 0x15c) != 0)) {
            Warning("Server error - failed to handle reservation request.\n",uVar12,pnVar23,pCVar17)
            ;
            goto LAB_00104956;
          }
LAB_00105523:
          iVar13 = _V_strlen("connect-retry");
          iVar13 = V_strnicmp(pcVar18,"connect-retry",iVar13);
          if (((iVar13 == 0) && (this[399] != (CBaseClientState)0x0)) &&
             ((DAT_003b7f64 < 2 && (*(int *)(this + 0x1b4) == 0 && *(int *)(this + 0x1b0) == 0)))) {
            Msg("Grace request retry for unreserved server...\n");
LAB_001057f9:
            (**(code **)(*(int *)this + 0xa4))(this,1);
          }
          else {
            iVar13 = _V_strlen("connect-granted");
            iVar13 = V_strnicmp(pcVar18,"connect-granted",iVar13);
            if (iVar13 == 0) {
              if ((this[399] != (CBaseClientState)0x0) && (DAT_003b7f64 < 2)) {
                iVar10 = *(int *)(this + 0x1b0);
                iVar13 = *(int *)(this + 0x1b4);
LAB_00105783:
                if (iVar13 == 0 && iVar10 == 0) {
                  pcVar18 = "Server approved grace request...\n";
                  Msg();
                }
              }
            }
            else if ((this[399] != (CBaseClientState)0x0) && (DAT_003b7f64 < 2)) {
              iVar13 = *(int *)(this + 0x1b4);
              iVar10 = *(int *)(this + 0x1b0);
              if (iVar13 != 0 || iVar10 != 0) goto LAB_00105783;
              Msg("Server did not approve grace request, retrying...\n");
              goto LAB_001057f9;
            }
            if (this[0x18c] != (CBaseClientState)0x0) {
              HandleDeferredConnection((CBaseClientState *)pcVar18);
            }
          }
          break;
        }
        uVar12 = GetHostVersion();
        Msg("Invalid host version, expecting %d, got %d\n",uVar12,local_8f4);
        goto LAB_00104956;
      }
      goto LAB_001035be;
    case 0x42:
      if ((*(int *)(this + 0x60) == 1) &&
         (cVar8 = netadr_s::CompareAdr((netadr_s *)param_1,(netadr_s *)(this + 0x1b8),true),
         cVar8 != '\0')) {
        (**(code **)(*(int *)this + 0x84))(this,param_1);
      }
      break;
    case 0x49:
      uVar12 = netadr_s::ToString((netadr_s *)param_1,false);
      Msg("Responder   : %s\n",uVar12);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        puVar2 = *(uint **)(param_1 + 0x34);
        uVar11 = *(uint *)(param_1 + 0x2c);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar11 = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar15 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar15;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
              *(int *)(param_1 + 0x30) = iVar13 + 0x18;
              uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
              *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
              goto LAB_00103660;
            }
          }
          uVar11 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
      }
LAB_00103660:
      Msg("Protocol    : %d\n",uVar11);
      pCVar19 = (CBitRead *)(param_1 + 0x1c);
      CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
      Msg("Hostname    : %s\n",local_8d0);
      CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
      Msg("Map         : %s\n",local_8d0);
      CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
      Msg("Game        : %s\n",local_8d0);
      CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
      Msg("Description : %s\n",local_8d0);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 0x10) {
        uVar12 = *(undefined4 *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          iVar13 = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar11 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar11;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar15 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
              *(int *)(param_1 + 0x30) = iVar13 + 0x10;
              *(uint *)(param_1 + 0x2c) = uVar11 >> ((byte)(0x10 - iVar13) & 0x1f);
              iVar13 = (int)(short)((ushort)((uVar15 & uVar11) << ((byte)iVar13 & 0x1f)) |
                                   (ushort)uVar12);
              goto LAB_0010377c;
            }
          }
          iVar13 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -0x10;
        sVar6 = (short)*(uint *)(param_1 + 0x2c);
        if (iVar13 + -0x10 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            iVar13 = (int)sVar6;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            iVar13 = (int)sVar6;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            iVar13 = (int)sVar6;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          iVar13 = (int)sVar6;
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
        }
      }
LAB_0010377c:
      Msg("AppID       : %u\n",iVar13);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar11 = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar15 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar15;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
              *(int *)(param_1 + 0x30) = iVar13 + 0x18;
              uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
              *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
              goto LAB_001037b6;
            }
          }
          uVar11 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
      }
LAB_001037b6:
      Msg("Players     : %u\n",uVar11);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar11 = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar15 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar15;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
              *(int *)(param_1 + 0x30) = iVar13 + 0x18;
              uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
              *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
              goto LAB_001037f0;
            }
          }
          uVar11 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
      }
LAB_001037f0:
      Msg("MaxPlayers  : %u\n",uVar11);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar11 = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar15 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar15;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
              *(int *)(param_1 + 0x30) = iVar13 + 0x18;
              uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
              *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
              goto LAB_0010382a;
            }
          }
          uVar11 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
      }
LAB_0010382a:
      Msg("Bots        : %u\n",uVar11);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else if (*(uint **)(param_1 + 0x38) < puVar2) {
          param_1[0x20] = (netpacket_s)0x1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
        else {
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar15 = *puVar2;
          *(uint *)(param_1 + 0x2c) = uVar15;
          if (param_1[0x20] == (netpacket_s)0x0) {
            uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
            *(int *)(param_1 + 0x30) = iVar13 + 0x18;
            uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
            *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
            goto LAB_00103864;
          }
        }
LAB_001041fe:
        puVar14 = &DAT_002b558c;
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
LAB_00103864:
        if (0xc < uVar11 - 100) goto LAB_001041fe;
        puVar14 = *(undefined **)(CSWTCH_873 + (uVar11 - 100) * 4);
      }
      Msg("Server Type : %s\n",puVar14);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else if (*(uint **)(param_1 + 0x38) < puVar2) {
          param_1[0x20] = (netpacket_s)0x1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
        else {
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar15 = *puVar2;
          *(uint *)(param_1 + 0x2c) = uVar15;
          if (param_1[0x20] == (netpacket_s)0x0) {
            uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
            *(int *)(param_1 + 0x30) = iVar13 + 0x18;
            uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
            *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
            goto LAB_001038b1;
          }
        }
        pcVar18 = "???";
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
LAB_001038b1:
        pcVar18 = "Linux";
        if ((uVar11 != 0x6c) && (pcVar18 = "???", uVar11 == 0x77)) {
          pcVar18 = "Windows";
        }
      }
      Msg("OS    Type  : %s\n",pcVar18);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else if (*(uint **)(param_1 + 0x38) < puVar2) {
          param_1[0x20] = (netpacket_s)0x1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
        else {
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar15 = *puVar2;
          *(uint *)(param_1 + 0x2c) = uVar15;
          if (param_1[0x20] == (netpacket_s)0x0) {
            uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
            *(int *)(param_1 + 0x30) = iVar13 + 0x18;
            uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
            *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
            goto LAB_00103905;
          }
        }
LAB_001042c6:
        puVar14 = &DAT_0029fe20;
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
LAB_00103905:
        if ((int)uVar11 < 1) goto LAB_001042c6;
        puVar14 = &DAT_002b6517;
      }
      Msg("Password    : %s\n",puVar14);
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 8) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        puVar2 = *(uint **)(param_1 + 0x34);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else if (*(uint **)(param_1 + 0x38) < puVar2) {
          param_1[0x20] = (netpacket_s)0x1;
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
        else {
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          uVar15 = *puVar2;
          *(uint *)(param_1 + 0x2c) = uVar15;
          if (param_1[0x20] == (netpacket_s)0x0) {
            uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
            *(int *)(param_1 + 0x30) = iVar13 + 0x18;
            uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
            *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
            goto LAB_0010394c;
          }
        }
LAB_00104296:
        puVar14 = &DAT_0029fe20;
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -8;
        uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
        if (iVar13 + -8 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
        }
LAB_0010394c:
        if ((int)uVar11 < 1) goto LAB_00104296;
        puVar14 = &DAT_002b6517;
      }
      Msg("Secure      : %s\n",puVar14);
      CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
      Msg("Version     : %s\n",local_8d0);
      iVar13 = *(int *)(param_1 + 0x24);
      if (*(int *)(param_1 + 0x3c) == 0) {
        iVar10 = 0;
      }
      else {
        iVar10 = (((uint)(*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x3c)) >> 2) * 0x20 -
                 *(int *)(param_1 + 0x30)) + (*(uint *)(param_1 + 0x28) & 3) * 8;
        if (iVar13 < iVar10) {
          iVar10 = iVar13;
        }
      }
      if (7 < iVar13 - iVar10) {
        iVar13 = *(int *)(param_1 + 0x30);
        uVar11 = *(uint *)(param_1 + 0x2c);
        if (iVar13 < 8) {
          puVar2 = *(uint **)(param_1 + 0x34);
          if (puVar2 == *(uint **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            param_1[0x20] = (netpacket_s)0x1;
          }
          else if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar15 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar15;
            if (param_1[0x20] == (netpacket_s)0x0) {
              uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
              *(int *)(param_1 + 0x30) = iVar13 + 0x18;
              *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
              local_8f4 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
              goto LAB_00103a09;
            }
          }
        }
        else {
          *(int *)(param_1 + 0x30) = iVar13 + -8;
          local_8f4 = uVar11 & 0xff;
          if (iVar13 + -8 == 0) {
            puVar3 = *(undefined4 **)(param_1 + 0x34);
            *(undefined4 *)(param_1 + 0x30) = 0x20;
            if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
              *(undefined4 *)(param_1 + 0x30) = 1;
              *(undefined4 *)(param_1 + 0x2c) = 0;
              *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            }
            else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
              param_1[0x20] = (netpacket_s)0x1;
              *(undefined4 *)(param_1 + 0x2c) = 0;
            }
            else {
              *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
              *(undefined4 *)(param_1 + 0x2c) = *puVar3;
            }
          }
          else {
            *(uint *)(param_1 + 0x2c) = uVar11 >> 8;
          }
LAB_00103a09:
          if ((char)(byte)local_8f4 < '\0') {
            iVar13 = *(int *)(param_1 + 0x30);
            if (iVar13 < 0x10) {
              uVar11 = *(uint *)(param_1 + 0x2c);
              puVar2 = *(uint **)(param_1 + 0x34);
              if (puVar2 == *(uint **)(param_1 + 0x38)) {
                *(undefined4 *)(param_1 + 0x30) = 1;
                *(uint **)(param_1 + 0x34) = puVar2 + 1;
                uVar11 = 0;
                *(undefined4 *)(param_1 + 0x2c) = 0;
                param_1[0x20] = (netpacket_s)0x1;
              }
              else {
                if (*(uint **)(param_1 + 0x38) < puVar2) {
                  param_1[0x20] = (netpacket_s)0x1;
                  *(undefined4 *)(param_1 + 0x2c) = 0;
                }
                else {
                  *(uint **)(param_1 + 0x34) = puVar2 + 1;
                  uVar15 = *puVar2;
                  *(uint *)(param_1 + 0x2c) = uVar15;
                  if (param_1[0x20] == (netpacket_s)0x0) {
                    uVar4 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
                    *(int *)(param_1 + 0x30) = iVar13 + 0x10;
                    *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x10 - iVar13) & 0x1f);
                    uVar11 = ((uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11) & 0xffff;
                    goto LAB_0010489c;
                  }
                }
                uVar11 = 0;
              }
            }
            else {
              *(int *)(param_1 + 0x30) = iVar13 + -0x10;
              uVar11 = *(uint *)(param_1 + 0x2c) & 0xffff;
              if (iVar13 + -0x10 == 0) {
                puVar3 = *(undefined4 **)(param_1 + 0x34);
                *(undefined4 *)(param_1 + 0x30) = 0x20;
                if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
                  *(undefined4 *)(param_1 + 0x30) = 1;
                  *(undefined4 *)(param_1 + 0x2c) = 0;
                  *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
                }
                else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
                  param_1[0x20] = (netpacket_s)0x1;
                  *(undefined4 *)(param_1 + 0x2c) = 0;
                }
                else {
                  *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
                  *(undefined4 *)(param_1 + 0x2c) = *puVar3;
                }
              }
              else {
                *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
              }
            }
LAB_0010489c:
            Msg("Game Port   : %u\n",uVar11);
          }
          if ((local_8f4 & 0x40) != 0) {
            iVar13 = *(int *)(param_1 + 0x30);
            if (iVar13 < 0x10) {
              uVar11 = *(uint *)(param_1 + 0x2c);
              puVar2 = *(uint **)(param_1 + 0x34);
              if (puVar2 == *(uint **)(param_1 + 0x38)) {
                *(undefined4 *)(param_1 + 0x30) = 1;
                *(uint **)(param_1 + 0x34) = puVar2 + 1;
                uVar11 = 0;
                *(undefined4 *)(param_1 + 0x2c) = 0;
                param_1[0x20] = (netpacket_s)0x1;
              }
              else {
                if (*(uint **)(param_1 + 0x38) < puVar2) {
                  param_1[0x20] = (netpacket_s)0x1;
                  *(undefined4 *)(param_1 + 0x2c) = 0;
                }
                else {
                  *(uint **)(param_1 + 0x34) = puVar2 + 1;
                  uVar15 = *puVar2;
                  *(uint *)(param_1 + 0x2c) = uVar15;
                  if (param_1[0x20] == (netpacket_s)0x0) {
                    uVar4 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
                    *(int *)(param_1 + 0x30) = iVar13 + 0x10;
                    *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x10 - iVar13) & 0x1f);
                    uVar11 = ((uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11) & 0xffff;
                    goto LAB_00103a4c;
                  }
                }
                uVar11 = 0;
              }
            }
            else {
              *(int *)(param_1 + 0x30) = iVar13 + -0x10;
              uVar11 = *(uint *)(param_1 + 0x2c) & 0xffff;
              if (iVar13 + -0x10 == 0) {
                puVar3 = *(undefined4 **)(param_1 + 0x34);
                *(undefined4 *)(param_1 + 0x30) = 0x20;
                if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
                  *(undefined4 *)(param_1 + 0x30) = 1;
                  *(undefined4 *)(param_1 + 0x2c) = 0;
                  *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
                }
                else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
                  param_1[0x20] = (netpacket_s)0x1;
                  *(undefined4 *)(param_1 + 0x2c) = 0;
                }
                else {
                  *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
                  *(undefined4 *)(param_1 + 0x2c) = *puVar3;
                }
              }
              else {
                *(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
              }
            }
LAB_00103a4c:
            Msg("Spec Port   : %u\n",uVar11);
            CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
            Msg("Spec Name   : %s\n",local_8d0);
          }
          if ((local_8f4 & 0x20) != 0) {
            CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
            Msg("Public Tags : %s\n",local_8d0);
          }
        }
      }
      break;
    case 0x69:
      NET_OutOfBandPrintf(*(int *)(this + 0xc),(netadr_s *)param_1,"%c00000000000000",0x6a);
      break;
    case 0x6a:
      uVar12 = netadr_s::ToString((netadr_s *)param_1,false);
      ConMsg("A2A_ACK from %s\n",uVar12);
      break;
    case 0x6c:
      cVar8 = CBitRead::ReadString
                        ((CBitRead *)(param_1 + 0x1c),(char *)local_4d0,0x4b0,false,(int *)0x0);
      if (cVar8 != '\0') {
        ConMsg("%s\n",local_4d0);
      }
      break;
    case 0x70:
      iVar13 = *(int *)(param_1 + 0x30);
      if (iVar13 < 0x20) {
        puVar2 = *(uint **)(param_1 + 0x34);
        uVar11 = *(uint *)(param_1 + 0x2c);
        if (puVar2 == *(uint **)(param_1 + 0x38)) {
          *(undefined4 *)(param_1 + 0x30) = 1;
          uVar11 = 0;
          *(undefined4 *)(param_1 + 0x2c) = 0;
          *(uint **)(param_1 + 0x34) = puVar2 + 1;
          param_1[0x20] = (netpacket_s)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x38) < puVar2) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(uint **)(param_1 + 0x34) = puVar2 + 1;
            uVar15 = *puVar2;
            *(uint *)(param_1 + 0x2c) = uVar15;
            if (param_1[0x20] == (netpacket_s)0x0) {
              *(int *)(param_1 + 0x30) = iVar13;
              uVar11 = ((&CBitBuffer::s_nMaskTable)[0x20 - iVar13] & uVar15) <<
                       ((byte)iVar13 & 0x1f) | uVar11;
              *(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x20 - iVar13) & 0x1f);
              goto LAB_00103c4a;
            }
          }
          uVar11 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x30) = iVar13 + -0x20;
        uVar11 = *(uint *)(param_1 + 0x2c);
        if (iVar13 + -0x20 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else {
            if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
              param_1[0x20] = (netpacket_s)0x1;
              goto LAB_00103c43;
            }
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
LAB_00103c43:
          *(undefined4 *)(param_1 + 0x2c) = 0;
        }
      }
LAB_00103c4a:
                    /* try { // try from 00103c4a to 00104026 has its CatchHandler @ 00105894 */
      uVar15 = GetHostVersion();
      if (uVar15 == uVar11) {
        uVar11 = *(uint *)(param_1 + 0x2c);
        pcVar5 = *(code **)(*(int *)this + 200);
        pnVar1 = param_1 + 0x30;
        *(int *)pnVar1 = *(int *)pnVar1 + -1;
        if (*(int *)pnVar1 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x34);
          *(undefined4 *)(param_1 + 0x30) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
            *(undefined4 *)(param_1 + 0x30) = 1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
            param_1[0x20] = (netpacket_s)0x1;
            *(undefined4 *)(param_1 + 0x2c) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x2c) = *puVar3;
          }
        }
        else {
          *(uint *)(param_1 + 0x2c) = uVar11 >> 1;
        }
        (*pcVar5)(this,param_1,uVar11 & 1);
      }
      break;
    case 0x74:
      break;
    }
    uVar12 = 1;
  }
LAB_00103ae5:
  iVar13 = _DAT_0040b9d4;
  if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
     (iVar10 = ThreadGetCurrentId(), iVar13 == iVar10)) {
    cVar8 = CVProfNode::ExitScope();
    if (cVar8 != '\0') {
      _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
    }
    DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
  }
  if (local_8d4 != 0) {
    (**(code **)(local_8d4 + 0x54))(local_8d4,local_8dc,local_8d8,0,0,0);
  }
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return uVar12;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)