void ConstructEapolMsg(int param_1,char param_2,byte param_3,uint param_4,void *param_5,
                      void *param_6,void *param_7,undefined4 param_8,byte param_9,
                      undefined1 *param_10)

{
  byte bVar1;
  bool bVar2;
  bool bVar3;
  undefined1 uVar4;
  byte bVar5;
  uint uVar6;
  undefined *puVar7;
  char *pcVar8;
  void *__s;
  size_t __n;
  void *pvVar9;
  int iVar10;
  int local_48;
  size_t local_44;
  size_t local_40 [2];
  int local_38;
  uint local_34;
  uint local_30;
  
  bVar2 = *(int *)(param_1 + 0x1e4) - 6U < 2;
  *param_10 = 1;
  param_10[1] = 3;
  local_34 = param_4 & 0xff;
  param_10[3] = 0x5f;
  param_10[2] = 0;
  local_30 = (uint)param_9;
  uVar4 = 2;
  if (!bVar2) {
    uVar4 = 0xfe;
  }
  param_10[4] = uVar4;
  if ((*(int *)(param_1 + 0x1e8) == 6) || (local_38 = 1, param_2 == '\x06')) {
    local_38 = 2;
  }
  bVar1 = param_10[6];
  bVar5 = (byte)local_38;
  param_10[6] = bVar1 & 0xf8 | bVar5;
  if (param_3 < 5) {
    bVar5 = bVar1 & 0xf0 | bVar5 | 8;
  }
  else {
    bVar5 = bVar1 & 0xf0 | bVar5;
  }
  param_10[6] = bVar5;
  if ((!bVar2) && (4 < param_3)) {
    param_10[6] = param_10[6] & 0xcf | (byte)((param_4 & 3) << 4);
  }
  if (param_3 == 3) {
    param_10[6] = param_10[6] & 0xbf | 0x40;
LAB_00041d70:
    param_10[6] = param_10[6] & 0x7f | 0x80;
    if (param_3 != 1) {
      bVar1 = param_10[5];
      goto LAB_00041d88;
    }
  }
  else {
    if ((param_3 == 1) || (param_3 == 5)) goto LAB_00041d70;
    bVar1 = param_10[5];
LAB_00041d88:
    param_10[5] = bVar1 & 0xfe | 1;
  }
  if (bVar2) {
    if (2 < param_3) {
      bVar1 = param_10[5];
LAB_00041dbc:
      param_10[5] = bVar1 & 0xfd | 2;
      if (!bVar2) goto LAB_00041e14;
    }
    if ((param_3 == 3) || (param_3 == 5)) {
      param_10[5] = param_10[5] & 0xef | 0x10;
    }
    if (!bVar2) goto LAB_00041e14;
    if (param_3 == 1) {
      iVar10 = *(int *)(param_1 + 0x1e8);
      goto LAB_00041e38;
    }
    if (param_3 == 3) {
      iVar10 = *(int *)(param_1 + 0x1e8);
      goto LAB_00041e38;
    }
  }
  else {
    if (4 < param_3) {
      bVar1 = param_10[5];
      goto LAB_00041dbc;
    }
LAB_00041e14:
    if (param_3 < 5) {
      iVar10 = *(int *)(param_1 + 0x1e8);
LAB_00041e38:
      uVar4 = 0x10;
      if (iVar10 == 4) {
        uVar4 = 0x20;
      }
      param_10[8] = uVar4;
    }
    else {
      uVar4 = 0x10;
      if (param_2 == '\x04') {
        uVar4 = 0x20;
      }
      param_10[8] = uVar4;
    }
  }
  memmove(param_10 + 9,(void *)(param_1 + 0x172),8)   //possible issue identified - semgrep
  if (param_3 < 4) {
LAB_00041e84:
    memmove(param_10 + 0x11,param_5,0x20)   //possible issue identified - semgrep
    if ((bVar2) || (param_3 != 5)) {
      if (param_3 != 3) goto LAB_00041ee8;
      if (!bVar2) goto LAB_00041f08;
    }
    else {
      memmove(param_10 + 0x31,(void *)((int)param_5 + 0x10),0x10)   //possible issue identified - semgrep
      param_10[0x40] = param_10[0x40] + '\x02';
LAB_00041ee8:
      if (param_3 != 5) goto LAB_00041f08;
    }
    memmove(param_10 + 0x41,param_6,6)   //possible issue identified - semgrep
  }
  else {
    if (bVar2) goto LAB_00041ee8;
    if (param_3 == 5) goto LAB_00041e84;
  }
LAB_00041f08:
  memset(param_10 + 0x51,0,0x10)   //possible issue identified - semgrep
  iVar10 = *(int *)(param_1 + 0x1e4);
  if (param_3 == 1) goto LAB_000421b0;
  if (((param_3 != 4) && (param_3 != 6)) && (os_alloc_mem(0,&local_48,0x5dc), local_48 != 0)) {
    pvVar9 = (void *)(local_48 + 3U & 0xfffffffc);
    __s = (void *)((int)pvVar9 + 0x200);
    memset(__s,0,0x200)   //possible issue identified - semgrep
    param_10[0x61] = 0;
    param_10[0x62] = 0;
    local_44 = 0;
    if ((local_30 != 0) && ((byte)(param_3 - 2) < 2)) {
      RTMPInsertRSNIE(__s,&local_44,param_8,local_30,0,0);
    }
    bVar3 = iVar10 - 6U < 2;
    if (param_3 == 3) {
      if (bVar3) {
LAB_00041ff8:
        __n = 0x20   //possible issue identified - semgrep
        if (param_2 == '\x06') {
          __n = 0x10   //possible issue identified - semgrep
        }
        if (bVar3) {
          WPA_ConstructKdeHdr(1,__n + 2,(int)__s + local_44);
          *(byte *)((int)__s + local_44 + 6) = (byte)local_34 & 3;
          *(undefined1 *)((int)__s + local_44 + 7) = 0;
          local_44 = local_44 + 8   //possible issue identified - semgrep
        }
        memmove((void *)((int)__s + local_44),param_7,__n)   //possible issue identified - semgrep
        local_44 = __n + local_44   //possible issue identified - semgrep
        if (local_38 == 2) {
          local_40[0] = 0;
          if ((local_44 & 7) != 0) {
            *(undefined1 *)((int)__s + local_44) = 0xdd;
            uVar6 = 8 - (local_44 & 7) & 0xff;
            iVar10 = 1;
            while( true ) {
              if ((int)uVar6 <= iVar10) break;
              *(undefined1 *)((int)__s + local_44 + iVar10) = 0;
              iVar10 = iVar10 + 1;
            }
            local_44 = local_44 + uVar6;
          }
          AES_Key_Wrap(__s,local_44,param_1 + 0x18a,0x10,pvVar9,local_40);
          local_44 = local_40[0]   //possible issue identified - semgrep
          __s = pvVar9;
        }
        else {
          TKIP_GTK_KEY_WRAP(param_1 + 0x18a,param_10 + 0x31,__s,local_44,pvVar9);
          __s = pvVar9;
        }
      }
    }
    else if (param_3 == 5) goto LAB_00041ff8;
    memmove(param_10 + 99,__s,local_44)   //possible issue identified - semgrep
    uVar6 = CONCAT11(param_10[2],param_10[3]) + local_44 & 0xffff;
    param_10[3] = (char)uVar6;
    param_10[0x61] = (char)(local_44 >> 8);
    param_10[2] = (char)(uVar6 >> 8);
    param_10[0x62] = (char)local_44;
    os_free_mem(0,local_48);
  }
  CalculateMIC(local_38,param_1 + 0x17a,param_10);
LAB_000421b0:
  if (2 < RTDebugLevel) {
    if (bVar2) {
      puVar7 = &_LC40;
    }
    else {
      puVar7 = &_LC39;
    }
    if (param_3 == 1) {
      pcVar8 = "Pairwise Message 1";
    }
    else if (param_3 == 2) {
      pcVar8 = "Pairwise Message 2";
    }
    else if (param_3 == 3) {
      pcVar8 = "Pairwise Message 3";
    }
    else if (param_3 == 4) {
      pcVar8 = "Pairwise Message 4";
    }
    else if (param_3 == 5) {
      pcVar8 = "Group Message 1";
    }
    else if (param_3 == 6) {
      pcVar8 = "Group Message 2";
    }
    else {
      pcVar8 = "Invalid Message";
    }
    printk("===> ConstructEapolMsg for %s %s\n",puVar7,pcVar8);
  }
  if (2 < RTDebugLevel) {
    printk("\t     Body length = %d \n",CONCAT11(param_10[2],param_10[3]));
  }
  if (2 < RTDebugLevel) {
    printk("\t     Key length  = %d \n",CONCAT11(param_10[7],param_10[8]));
  }
  return;
}