
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void __gmpz_mfac_uiui(mpz_ptr x,ulong n,ulong m)

{
  int iVar1;
  undefined *puVar2;
  ulonglong uVar3;
  ulonglong uVar4;
  uint *puVar5;
  uint *puVar6;
  int iVar7;
  undefined1 *puVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  int in_GS_OFFSET;
  undefined1 auStack_7c [12];
  uint *local_70;
  uint local_6c;
  mpz_ptr local_68;
  uint local_64;
  int local_60;
  uint *local_5c;
  undefined **local_58;
  uint *local_54;
  uint local_50;
  mp_limb_t sn;
  tmp_reentrant_t *__tmp_marker;
  mpz_t t;
  mpz_t p;
  
  local_58 = &_GLOBAL_OFFSET_TABLE_;
  puVar8 = auStack_7c;
  local_68 = x;
  iVar1 = *(int *)(in_GS_OFFSET + 0x14);
  if ((n - 3 < m - 1) || (n < 3)) {
    *x->_mp_d = (n == 0) + n;
    x->_mp_size = 1;
    goto LAB_00027a58;
  }
  sn = n;
  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&sn,1,m);
  puVar8 = auStack_7c;
  if (local_6c < 2) {
    if (m < 3) {
      if (m == 1) {
        __gmpz_fac_ui(local_68,n);
        puVar8 = auStack_7c;
      }
      else {
        __gmpz_2fac_ui(local_68,n);
        puVar8 = auStack_7c;
      }
      goto LAB_00027a58;
    }
    __tmp_marker = (tmp_reentrant_t *)0x0;
    local_64 = n - m;
    local_50 = n / m + 1;
    sn = local_50;
    puVar2 = local_58[-0x68];
    uVar10 = 8;
    do {
      uVar9 = uVar10;
      uVar10 = uVar9 - 1;
    } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);
    uVar10 = 8;
    if ((local_50 / uVar9) * 4 + 8 < 0x7f01) {
      do {
        uVar9 = uVar10;
        uVar10 = uVar9 - 1;
      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);
      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);
      puVar8 = auStack_7c + iVar7;
      local_70 = (uint *)((int)&local_70 + iVar7);
    }
    else {
      do {
        uVar9 = uVar10;
        uVar10 = uVar9 - 1;
      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);
      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);
      puVar8 = auStack_7c;
    }
LAB_00027988:
    iVar7 = 0;
    uVar10 = local_64;
    if (m < local_64) {
      do {
        while( true ) {
          uVar9 = uVar10;
          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);
          local_5c = local_70 + iVar7;
          iVar11 = iVar7 + 1;
          local_60 = iVar11;
          local_54 = local_70 + iVar7 + 1;
          if (local_50 != 0) break;
          n = n * uVar9;
          uVar10 = uVar9 - m;
          puVar5 = local_54;
          iVar11 = iVar7;
          uVar9 = n;
          if (uVar10 <= m) goto LAB_000279f9;
        }
        puVar5 = local_70 + iVar7 + 2;
        local_70[iVar7] = n;
        local_5c = local_54;
        uVar10 = uVar9 - m;
        iVar7 = iVar11;
        n = uVar9;
      } while (m < uVar10);
LAB_000279f9:
      iVar11 = iVar11 + 2;
      puVar6 = local_5c;
      n = uVar9;
    }
    else {
      iVar11 = 2;
      puVar5 = local_70 + 1;
      puVar6 = local_70;
    }
    *puVar6 = uVar10;
    *puVar5 = n;
    if (local_6c < 2) {
      *(int *)(puVar8 + -8) = iVar11;
      *(uint **)(puVar8 + -0xc) = local_70;
      *(mpz_ptr *)(puVar8 + -0x10) = local_68;
      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;
      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),
                       *(mp_size_t *)(puVar8 + -8));
      if (__tmp_marker != (tmp_reentrant_t *)0x0) {
        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;
        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;
        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));
      }
      goto LAB_00027a58;
    }
    *(__mpz_struct **)(puVar8 + -0x10) = t;
    *(undefined4 *)(puVar8 + -0x14) = 0x27a1e;
    __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));
    *(int *)(puVar8 + -8) = iVar11;
    *(uint **)(puVar8 + -0xc) = local_70;
    *(__mpz_struct **)(puVar8 + -0x10) = t;
    *(undefined4 *)(puVar8 + -0x14) = 0x27a2e;
    __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),
                     *(mp_size_t *)(puVar8 + -8));
  }
  else {
    uVar3 = (ulonglong)n;
    n = (ulong)(uVar3 / local_6c);
    uVar4 = (ulonglong)m;
    m = (ulong)(uVar4 / local_6c);
    if (2 < m) {
      local_64 = n - m;
      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;
      sn = local_50;
      uVar10 = 8;
      do {
        uVar9 = uVar10;
        uVar10 = uVar9 - 1;
      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);
      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {
        uVar10 = 8;
        do {
          uVar9 = uVar10;
          uVar10 = uVar9 - 1;
        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);
        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);
        puVar8 = auStack_7c;
      }
      else {
        local_70 = local_68->_mp_d;
      }
      goto LAB_00027988;
    }
    if (m == 1) {
      if (local_6c == 2) {
        __gmpz_2fac_ui(local_68,n * 2);
        puVar8 = auStack_7c;
        goto LAB_00027a58;
      }
      local_50 = n;
      __gmpz_init(t);
      __gmpz_fac_ui(t,local_50);
      puVar8 = auStack_7c;
      sn = local_50;
    }
    else {
      local_50 = n;
      __gmpz_init(t);
      __gmpz_2fac_ui(t,local_50);
      puVar8 = auStack_7c;
      sn = (local_50 >> 1) + 1;
    }
  }
  *(__mpz_struct **)(puVar8 + -0x10) = p;
  *(undefined4 *)(puVar8 + -0x14) = 0x27ae8;
  __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));
  *(mp_limb_t *)(puVar8 + -8) = sn;
  *(uint *)(puVar8 + -0xc) = local_6c;
  *(__mpz_struct **)(puVar8 + -0x10) = p;
  *(undefined4 *)(puVar8 + -0x14) = 0x27afa;
  __gmpz_ui_pow_ui(*(mpz_ptr *)(puVar8 + -0x10),*(ulong *)(puVar8 + -0xc),*(ulong *)(puVar8 + -8));
  *(__mpz_struct **)(puVar8 + -8) = t;
  *(__mpz_struct **)(puVar8 + -0xc) = p;
  *(mpz_ptr *)(puVar8 + -0x10) = local_68;
  *(undefined4 *)(puVar8 + -0x14) = 0x27b0a;
  __gmpz_mul(*(mpz_ptr *)(puVar8 + -0x10),*(mpz_srcptr *)(puVar8 + -0xc),
             *(mpz_srcptr *)(puVar8 + -8));
  *(__mpz_struct **)(puVar8 + -0x10) = p;
  *(undefined4 *)(puVar8 + -0x14) = 0x27b17;
  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));
  *(__mpz_struct **)(puVar8 + -0x10) = t;
  *(undefined4 *)(puVar8 + -0x14) = 0x27b1f;
  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));
LAB_00027a58:
  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined4 *)(puVar8 + -4) = 0x27cf3;
    __stack_chk_fail_local();
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void __gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)

{
  undefined *puVar1;
  ulonglong uVar2;
  ulonglong uVar3;
  uint *puVar4;
  uint *puVar5;
  int iVar6;
  undefined1 *puVar7;
  uint uVar8;
  uint uVar9;
  int in_GS_OFFSET;
  undefined1 auStack_7c [12];
  uint *local_70;
  uint local_6c;
  uint *local_68;
  uint local_64;
  int local_60;
  uint *local_5c;
  undefined **local_58;
  uint *local_54;
  uint local_50;
  uint local_40;
  int local_3c;
  undefined1 local_38 [12];
  undefined1 local_2c [12];
  int local_20;
  
  local_58 = &__DT_PLTGOT;
  puVar7 = auStack_7c;
  local_68 = param_1;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {
    *(uint *)param_1[2] = (param_2 == 0) + param_2;
    param_1[1] = 1;
    goto LAB_00027a58;
  }
  local_40 = param_2;
  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);
  puVar7 = auStack_7c;
  if (local_6c < 2) {
    if (param_3 < 3) {
      if (param_3 == 1) {
        __gmpz_fac_ui(local_68,param_2);
        puVar7 = auStack_7c;
      }
      else {
        __gmpz_2fac_ui(local_68,param_2);
        puVar7 = auStack_7c;
      }
      goto LAB_00027a58;
    }
    local_3c = 0;
    local_64 = param_2 - param_3;
    local_50 = param_2 / param_3 + 1;
    puVar1 = local_58[-0x68];
    uVar9 = 8;
    do {
      uVar8 = uVar9;
      uVar9 = uVar8 - 1;
    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);
    uVar9 = 8;
    local_40 = local_50;
    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {
      do {
        uVar8 = uVar9;
        uVar9 = uVar8 - 1;
      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);
      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);
      puVar7 = auStack_7c + iVar6;
      local_70 = (uint *)((int)&local_70 + iVar6);
    }
    else {
      do {
        uVar8 = uVar9;
        uVar9 = uVar8 - 1;
      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);
      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);
      puVar7 = auStack_7c;
    }
LAB_00027988:
    iVar6 = 0;
    uVar9 = local_64;
    if (param_3 < local_64) {
      do {
        while( true ) {
          uVar8 = uVar9;
          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);
          local_60 = iVar6 + 1;
          local_54 = local_70 + iVar6 + 1;
          if (local_50 != 0) break;
          param_2 = param_2 * uVar8;
          uVar9 = uVar8 - param_3;
          puVar4 = local_54;
          uVar8 = param_2;
          local_5c = local_70 + iVar6;
          if (uVar9 <= param_3) goto LAB_000279f9;
        }
        puVar4 = local_70 + iVar6 + 2;
        local_70[iVar6] = param_2;
        uVar9 = uVar8 - param_3;
        iVar6 = local_60;
        param_2 = uVar8;
        local_5c = local_54;
      } while (param_3 < uVar9);
LAB_000279f9:
      iVar6 = iVar6 + 2;
      puVar5 = local_5c;
      param_2 = uVar8;
    }
    else {
      iVar6 = 2;
      puVar4 = local_70 + 1;
      puVar5 = local_70;
    }
    *puVar5 = uVar9;
    *puVar4 = param_2;
    if (local_6c < 2) {
      *(int *)(puVar7 + -8) = iVar6;
      *(uint **)(puVar7 + -0xc) = local_70;
      *(uint **)(puVar7 + -0x10) = local_68;
      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;
      __gmpz_prodlimbs();
      if (local_3c != 0) {
        *(int *)(puVar7 + -0x10) = local_3c;
        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;
        __gmp_tmp_reentrant_free();
      }
      goto LAB_00027a58;
    }
    *(undefined1 **)(puVar7 + -0x10) = local_38;
    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;
    __gmpz_init();
    *(int *)(puVar7 + -8) = iVar6;
    *(uint **)(puVar7 + -0xc) = local_70;
    *(undefined1 **)(puVar7 + -0x10) = local_38;
    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;
    __gmpz_prodlimbs();
  }
  else {
    uVar2 = (ulonglong)param_2;
    param_2 = (uint)(uVar2 / local_6c);
    uVar3 = (ulonglong)param_3;
    param_3 = (uint)(uVar3 / local_6c);
    if (2 < param_3) {
      local_64 = param_2 - param_3;
      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;
      uVar9 = 8;
      do {
        uVar8 = uVar9;
        uVar9 = uVar8 - 1;
      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);
      local_40 = local_50;
      if (*local_68 < local_50 / uVar8 + 2) {
        uVar9 = 8;
        do {
          uVar8 = uVar9;
          uVar9 = uVar8 - 1;
        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);
        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);
        puVar7 = auStack_7c;
      }
      else {
        local_70 = (uint *)local_68[2];
      }
      goto LAB_00027988;
    }
    if (param_3 == 1) {
      if (local_6c == 2) {
        __gmpz_2fac_ui(local_68,param_2 * 2);
        puVar7 = auStack_7c;
        goto LAB_00027a58;
      }
      local_50 = param_2;
      __gmpz_init(local_38);
      __gmpz_fac_ui(local_38,local_50);
      puVar7 = auStack_7c;
      local_40 = local_50;
    }
    else {
      local_50 = param_2;
      __gmpz_init(local_38);
      __gmpz_2fac_ui(local_38,local_50);
      puVar7 = auStack_7c;
      local_40 = (local_50 >> 1) + 1;
    }
  }
  *(undefined1 **)(puVar7 + -0x10) = local_2c;
  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;
  __gmpz_init();
  *(uint *)(puVar7 + -8) = local_40;
  *(uint *)(puVar7 + -0xc) = local_6c;
  *(undefined1 **)(puVar7 + -0x10) = local_2c;
  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;
  __gmpz_ui_pow_ui();
  *(undefined1 **)(puVar7 + -8) = local_38;
  *(undefined1 **)(puVar7 + -0xc) = local_2c;
  *(uint **)(puVar7 + -0x10) = local_68;
  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;
  __gmpz_mul();
  *(undefined1 **)(puVar7 + -0x10) = local_2c;
  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;
  __gmpz_clear();
  *(undefined1 **)(puVar7 + -0x10) = local_38;
  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;
  __gmpz_clear();
LAB_00027a58:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined4 *)(puVar7 + -4) = 0x27cf3;
    FUN_00079d30();
  }
  return;
}


CALL 0x0001c5b1
ADD EAX,0x7174b
PUSH EBP
MOV EBP,ESP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x6c
MOV ESI,dword ptr [EBP + 0xc]
MOV EDI,dword ptr [EBP + 0x10]
MOV dword ptr [EBP + -0x54],EAX
MOV EAX,dword ptr [EBP + 0x8]
LEA EDX,[ESI + -0x3]
MOV dword ptr [EBP + -0x64],EAX
MOV EAX,GS:[0x14]
MOV dword ptr [EBP + -0x1c],EAX
XOR EAX,EAX
LEA EAX,[EDI + -0x1]
CMP EDX,EAX
JC 0x00027a40
CMP ESI,0x2
JBE 0x00027a40
SUB ESP,0x4
LEA EAX,[EBP + -0x3c]
MOV dword ptr [EBP + -0x3c],ESI
PUSH EDI
PUSH 0x1
PUSH EAX
MOV EAX,dword ptr [EBP + -0x54]
MOV EAX,dword ptr [EAX + 0xfffffd94]
CALL dword ptr [EAX + 0x34]
ADD ESP,0x10
MOV EBX,EAX
MOV dword ptr [EBP + -0x68],EAX
CMP EAX,0x1
JBE 0x00027a70
MOV EAX,ESI
XOR EDX,EDX
DIV EBX
XOR EDX,EDX
MOV ECX,EAX
MOV ESI,EAX
MOV EAX,EDI
DIV EBX
MOV EDI,EAX
CMP EAX,0x2
JBE 0x00027aa0
MOV EAX,ECX
XOR EDX,EDX
MOV EBX,0x8
DIV EDI
MOV EDX,ECX
SUB EDX,EDI
MOV dword ptr [EBP + -0x60],EDX
ADD EAX,0x1
MOV dword ptr [EBP + -0x4c],EAX
MOV dword ptr [EBP + -0x3c],EAX
MOV EAX,dword ptr [EBP + -0x54]
MOV ECX,dword ptr [EAX + 0xfffffe60]
JMP 0x00027962
MOV EBX,EAX
LEA EAX,[EBX + -0x1]
CMP dword ptr [ECX + EAX*0x4],EDX
JC 0x00027960
MOV EAX,dword ptr [EBP + -0x4c]
XOR EDX,EDX
DIV EBX
MOV EBX,dword ptr [EBP + -0x64]
ADD EAX,0x2
CMP EAX,dword ptr [EBX]
JA 0x00027cb0
MOV EAX,dword ptr [EBP + -0x64]
MOV EAX,dword ptr [EAX + 0x8]
MOV dword ptr [EBP + -0x6c],EAX
MOV ECX,dword ptr [EBP + -0x60]
XOR EBX,EBX
CMP EDI,ECX
JNC 0x00027ca0
MOV dword ptr [EBP + 0x10],EDI
MOV EDI,ECX
MOV ECX,dword ptr [EBP + -0x6c]
JMP 0x000279bc
LEA EDX,[ECX + EAX*0x1]
MOV EBX,dword ptr [EBP + -0x5c]
LEA EAX,[ECX + EAX*0x1 + 0x8]
MOV dword ptr [EDX],ESI
MOV ESI,dword ptr [EBP + -0x50]
MOV dword ptr [EBP + -0x58],ESI
MOV ESI,EDI
SUB EDI,dword ptr [EBP + 0x10]
CMP EDI,dword ptr [EBP + 0x10]
JBE 0x000279f9
MOV EAX,dword ptr [EBP + -0x60]
MUL ESI
SETO AL
MOVZX EAX,AL
MOV dword ptr [EBP + -0x4c],EAX
LEA EAX,[EBX*0x4 + 0x0]
LEA EDX,[ECX + EAX*0x1]
MOV dword ptr [EBP + -0x58],EDX
LEA EDX,[EBX + 0x1]
MOV dword ptr [EBP + -0x5c],EDX
LEA EDX,[ECX + EAX*0x1 + 0x4]
MOV dword ptr [EBP + -0x50],EDX
MOV EDX,dword ptr [EBP + -0x4c]
TEST EDX,EDX
JNZ 0x000279a0
IMUL ESI,EDI
MOV EAX,dword ptr [EBP + -0x50]
SUB EDI,dword ptr [EBP + 0x10]
CMP EDI,dword ptr [EBP + 0x10]
JA 0x000279bc
MOV EDX,dword ptr [EBP + -0x58]
MOV ECX,EDI
LEA EDI,[EBX + 0x2]
CMP dword ptr [EBP + -0x68],0x1
MOV dword ptr [EDX],ECX
MOV dword ptr [EAX],ESI
JBE 0x00027bf8
SUB ESP,0xc
LEA ESI,[EBP + -0x34]
MOV EBX,dword ptr [EBP + -0x54]
PUSH ESI
CALL 0x0001c0e0
ADD ESP,0xc
MOV EBX,dword ptr [EBP + -0x54]
PUSH EDI
PUSH dword ptr [EBP + -0x6c]
PUSH ESI
CALL 0x0001bc60
ADD ESP,0x10
JMP 0x00027ad9
MOV ECX,dword ptr [EBP + -0x64]
XOR EDX,EDX
TEST ESI,ESI
SETZ DL
MOV EAX,dword ptr [ECX + 0x8]
ADD EDX,ESI
MOV dword ptr [EAX],EDX
MOV dword ptr [ECX + 0x4],0x1
MOV EAX,dword ptr [EBP + -0x1c]
XOR EAX,dword ptr GS:[0x14]
JNZ 0x00027cee
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP EDI,0x2
JA 0x00027b30
CMP EDI,0x1
JZ 0x00027c80
SUB ESP,0x8
MOV EBX,dword ptr [EBP + -0x54]
PUSH ESI
PUSH dword ptr [EBP + -0x64]
CALL 0x0001b660
ADD ESP,0x10
JMP 0x00027a58
CMP EAX,0x1
JZ 0x00027c30
SUB ESP,0xc
LEA ESI,[EBP + -0x34]
MOV EDI,dword ptr [EBP + -0x54]
MOV dword ptr [EBP + -0x4c],ECX
PUSH ESI
MOV EBX,EDI
CALL 0x0001c0e0
POP ECX
MOV ECX,dword ptr [EBP + -0x4c]
POP EDI
PUSH ECX
PUSH ESI
CALL 0x0001b660
MOV ECX,dword ptr [EBP + -0x4c]
ADD ESP,0x10
SHR ECX,0x1
MOV EDI,ECX
ADD EDI,0x1
MOV dword ptr [EBP + -0x3c],EDI
LEA EDI,[EBP + -0x28]
SUB ESP,0xc
MOV EBX,dword ptr [EBP + -0x54]
PUSH EDI
CALL 0x0001c0e0
ADD ESP,0xc
PUSH dword ptr [EBP + -0x3c]
MOV EBX,dword ptr [EBP + -0x54]
PUSH dword ptr [EBP + -0x68]
PUSH EDI
CALL 0x0001b9e0
ADD ESP,0xc
MOV EBX,dword ptr [EBP + -0x54]
PUSH ESI
PUSH EDI
PUSH dword ptr [EBP + -0x64]
CALL 0x0001b550
MOV dword ptr [ESP],EDI
MOV EDI,dword ptr [EBP + -0x54]
MOV EBX,EDI
CALL 0x0001bab0
MOV dword ptr [ESP],ESI
CALL 0x0001bab0
ADD ESP,0x10
JMP 0x00027a58
MOV EAX,ESI
XOR EDX,EDX
MOV dword ptr [EBP + -0x38],0x0
MOV EBX,0x8
DIV EDI
MOV EDX,ESI
SUB EDX,EDI
MOV dword ptr [EBP + -0x60],EDX
ADD EAX,0x1
MOV dword ptr [EBP + -0x4c],EAX
MOV dword ptr [EBP + -0x3c],EAX
MOV EAX,dword ptr [EBP + -0x54]
MOV ECX,dword ptr [EAX + 0xfffffe60]
JMP 0x00027b62
MOV EBX,EAX
LEA EAX,[EBX + -0x1]
CMP dword ptr [ECX + EAX*0x4],EDX
JC 0x00027b60
MOV EAX,dword ptr [EBP + -0x4c]
XOR EDX,EDX
DIV EBX
MOV EDX,dword ptr [EBP + -0x60]
MOV EBX,0x8
LEA EAX,[EAX*0x4 + 0x8]
CMP EAX,0x7f00
JBE 0x00027b92
JMP 0x00027bc2
MOV EBX,EAX
LEA EAX,[EBX + -0x1]
CMP dword ptr [ECX + EAX*0x4],EDX
JC 0x00027b90
MOV EAX,dword ptr [EBP + -0x4c]
XOR EDX,EDX
DIV EBX
LEA EAX,[EAX*0x4 + 0x23]
AND EAX,0xfffffff0
SUB ESP,EAX
LEA EAX,[ESP + 0xf]
AND EAX,0xfffffff0
MOV dword ptr [EBP + -0x6c],EAX
JMP 0x00027988
MOV EBX,EAX
LEA EAX,[EBX + -0x1]
CMP dword ptr [ECX + EAX*0x4],EDX
JC 0x00027bc0
MOV EAX,dword ptr [EBP + -0x4c]
XOR EDX,EDX
SUB ESP,0x8
DIV EBX
MOV EBX,dword ptr [EBP + -0x54]
LEA EAX,[EAX*0x4 + 0x8]
PUSH EAX
LEA EAX,[EBP + -0x38]
PUSH EAX
CALL 0x0001baf0
ADD ESP,0x10
MOV dword ptr [EBP + -0x6c],EAX
JMP 0x00027988
SUB ESP,0x4
MOV EBX,dword ptr [EBP + -0x54]
PUSH EDI
PUSH dword ptr [EBP + -0x6c]
PUSH dword ptr [EBP + -0x64]
CALL 0x0001bc60
MOV EAX,dword ptr [EBP + -0x38]
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00027a58
SUB ESP,0xc
MOV EBX,dword ptr [EBP + -0x54]
PUSH EAX
CALL 0x0001b050
ADD ESP,0x10
JMP 0x00027a58
CMP dword ptr [EBP + -0x68],0x2
JZ 0x00027c64
SUB ESP,0xc
LEA ESI,[EBP + -0x34]
MOV EDI,dword ptr [EBP + -0x54]
MOV dword ptr [EBP + -0x4c],ECX
PUSH ESI
MOV EBX,EDI
CALL 0x0001c0e0
MOV ECX,dword ptr [EBP + -0x4c]
POP EAX
POP EDX
PUSH ECX
PUSH ESI
CALL 0x0001b4f0
MOV ECX,dword ptr [EBP + -0x4c]
ADD ESP,0x10
MOV dword ptr [EBP + -0x3c],ECX
JMP 0x00027ad9
SUB ESP,0x8
LEA EDI,[ECX + ECX*0x1]
MOV EBX,dword ptr [EBP + -0x54]
PUSH EDI
PUSH dword ptr [EBP + -0x64]
CALL 0x0001b660
ADD ESP,0x10
JMP 0x00027a58
SUB ESP,0x8
MOV EBX,dword ptr [EBP + -0x54]
PUSH ESI
PUSH dword ptr [EBP + -0x64]
CALL 0x0001b4f0
ADD ESP,0x10
JMP 0x00027a58
MOV EDX,dword ptr [EBP + -0x6c]
MOV EDI,0x2
LEA EAX,[EDX + 0x4]
JMP 0x00027a01
MOV EBX,0x8
MOV EDX,dword ptr [EBP + -0x60]
JMP 0x00027cc2
MOV EBX,EAX
LEA EAX,[EBX + -0x1]
CMP dword ptr [ECX + EAX*0x4],EDX
JC 0x00027cc0
MOV EAX,dword ptr [EBP + -0x4c]
XOR EDX,EDX
SUB ESP,0x8
DIV EBX
MOV EBX,dword ptr [EBP + -0x54]
ADD EAX,0x2
PUSH EAX
PUSH dword ptr [EBP + -0x64]
CALL 0x0001b190
ADD ESP,0x10
MOV dword ptr [EBP + -0x6c],EAX
JMP 0x00027988
CALL 0x00079d30
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nvoid __gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}\n\n" comment (function_definition "void __gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}" primitive_type (function_declarator "__gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)" identifier (parameter_list "(uint *param_1,uint param_2,uint param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulonglong uVar2;" type_identifier identifier ;) (declaration "ulonglong uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined1 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "undefined1 auStack_7c [12];" type_identifier (array_declarator "auStack_7c [12]" identifier [ number_literal ]) ;) (declaration "uint *local_70;" type_identifier (pointer_declarator "*local_70" * identifier) ;) (declaration "uint local_6c;" type_identifier identifier ;) (declaration "uint *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "uint local_64;" type_identifier identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "uint *local_5c;" type_identifier (pointer_declarator "*local_5c" * identifier) ;) (declaration "undefined **local_58;" type_identifier (pointer_declarator "**local_58" * (pointer_declarator "*local_58" * identifier)) ;) (declaration "uint *local_54;" type_identifier (pointer_declarator "*local_54" * identifier) ;) (declaration "uint local_50;" type_identifier identifier ;) (declaration "uint local_40;" type_identifier identifier ;) (declaration "int local_3c;" primitive_type identifier ;) (declaration "undefined1 local_38 [12];" type_identifier (array_declarator "local_38 [12]" identifier [ number_literal ]) ;) (declaration "undefined1 local_2c [12];" type_identifier (array_declarator "local_2c [12]" identifier [ number_literal ]) ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "local_58 = &__DT_PLTGOT;" (assignment_expression "local_58 = &__DT_PLTGOT" identifier = (pointer_expression "&__DT_PLTGOT" & identifier)) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (expression_statement "local_68 = param_1;" (assignment_expression "local_68 = param_1" identifier = identifier) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (if_statement "if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }" if (parenthesized_expression "((param_2 - 3 < param_3 - 1) || (param_2 < 3))" ( (binary_expression "(param_2 - 3 < param_3 - 1) || (param_2 < 3)" (parenthesized_expression "(param_2 - 3 < param_3 - 1)" ( (binary_expression "param_2 - 3 < param_3 - 1" (binary_expression "param_2 - 3" identifier - number_literal) < (binary_expression "param_3 - 1" identifier - number_literal)) )) || (parenthesized_expression "(param_2 < 3)" ( (binary_expression "param_2 < 3" identifier < number_literal) ))) )) (compound_statement "{\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }" { (expression_statement "*(uint *)param_1[2] = (param_2 == 0) + param_2;" (assignment_expression "*(uint *)param_1[2] = (param_2 == 0) + param_2" (pointer_expression "*(uint *)param_1[2]" * (cast_expression "(uint *)param_1[2]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) = (binary_expression "(param_2 == 0) + param_2" (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) + identifier)) ;) (expression_statement "param_1[1] = 1;" (assignment_expression "param_1[1] = 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "local_40 = param_2;" (assignment_expression "local_40 = param_2" identifier = identifier) ;) (expression_statement "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);" (assignment_expression "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3)" identifier = (call_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_00098d94 + 0x34)" ( (binary_expression "PTR___gmpn_cpuvec_00098d94 + 0x34" identifier + number_literal) ))))) )) (argument_list "(&local_40,1,param_3)" ( (pointer_expression "&local_40" & identifier) , number_literal , identifier )))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (if_statement "if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" if (parenthesized_expression "(local_6c < 2)" ( (binary_expression "local_6c < 2" identifier < number_literal) )) (compound_statement "{\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }" { (if_statement "if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" if (parenthesized_expression "(param_3 < 3)" ( (binary_expression "param_3 < 3" identifier < number_literal) )) (compound_statement "{\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" { (if_statement "if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" { (expression_statement "__gmpz_fac_ui(local_68,param_2);" (call_expression "__gmpz_fac_ui(local_68,param_2)" identifier (argument_list "(local_68,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }) (else_clause "else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" else (compound_statement "{\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" { (expression_statement "__gmpz_2fac_ui(local_68,param_2);" (call_expression "__gmpz_2fac_ui(local_68,param_2)" identifier (argument_list "(local_68,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }))) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "local_3c = 0;" (assignment_expression "local_3c = 0" identifier = number_literal) ;) (expression_statement "local_64 = param_2 - param_3;" (assignment_expression "local_64 = param_2 - param_3" identifier = (binary_expression "param_2 - param_3" identifier - identifier)) ;) (expression_statement "local_50 = param_2 / param_3 + 1;" (assignment_expression "local_50 = param_2 / param_3 + 1" identifier = (binary_expression "param_2 / param_3 + 1" (binary_expression "param_2 / param_3" identifier / identifier) + number_literal)) ;) (expression_statement "puVar1 = local_58[-0x68];" (assignment_expression "puVar1 = local_58[-0x68]" identifier = (subscript_expression "local_58[-0x68]" identifier [ number_literal ])) ;) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (do_statement "do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" do (compound_statement "{\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" * (cast_expression "(uint *)(puVar1 + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + uVar9 * 4)" ( (binary_expression "puVar1 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" identifier = identifier) ;) (if_statement "if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" if (parenthesized_expression "((local_50 / uVar8) * 4 + 8 < 0x7f01)" ( (binary_expression "(local_50 / uVar8) * 4 + 8 < 0x7f01" (binary_expression "(local_50 / uVar8) * 4 + 8" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" ( (binary_expression "local_50 / uVar8" identifier / identifier) )) * number_literal) + number_literal) < number_literal) )) (compound_statement "{\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }" { (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" do (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" * (cast_expression "(uint *)(puVar1 + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + uVar9 * 4)" ( (binary_expression "puVar1 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);" (assignment_expression "iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" identifier = (unary_expression "-((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" - (parenthesized_expression "((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" ( (binary_expression "(local_50 / uVar8) * 4 + 0x23 & 0xfffffff0" (binary_expression "(local_50 / uVar8) * 4 + 0x23" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" ( (binary_expression "local_50 / uVar8" identifier / identifier) )) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "puVar7 = auStack_7c + iVar6;" (assignment_expression "puVar7 = auStack_7c + iVar6" identifier = (binary_expression "auStack_7c + iVar6" identifier + identifier)) ;) (expression_statement "local_70 = (uint *)((int)&local_70 + iVar6);" (assignment_expression "local_70 = (uint *)((int)&local_70 + iVar6)" identifier = (cast_expression "(uint *)((int)&local_70 + iVar6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_70 + iVar6)" ( (binary_expression "(int)&local_70 + iVar6" (cast_expression "(int)&local_70" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_70" & identifier)) + identifier) )))) ;) }) (else_clause "else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" else (compound_statement "{\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" { (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" do (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" * (cast_expression "(uint *)(puVar1 + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + uVar9 * 4)" ( (binary_expression "puVar1 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);" (assignment_expression "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" identifier = (cast_expression "(uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" identifier (argument_list "(&local_3c,(local_50 / uVar8) * 4 + 8)" ( (pointer_expression "&local_3c" & identifier) , (binary_expression "(local_50 / uVar8) * 4 + 8" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" ( (binary_expression "local_50 / uVar8" identifier / identifier) )) * number_literal) + number_literal) ))))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }))) (labeled_statement "LAB_00027988:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) (expression_statement "uVar9 = local_64;" (assignment_expression "uVar9 = local_64" identifier = identifier) ;) (if_statement "if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" if (parenthesized_expression "(param_3 < local_64)" ( (binary_expression "param_3 < local_64" identifier < identifier) )) (compound_statement "{\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }" { (do_statement "do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);" do (compound_statement "{\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      }" { (while_statement "while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);" (assignment_expression "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" identifier = (call_expression "(uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0" (cast_expression "(int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)local_64 * (ulonglong)param_2 >> 0x20)" ( (binary_expression "(ulonglong)local_64 * (ulonglong)param_2 >> 0x20" (binary_expression "(ulonglong)local_64 * (ulonglong)param_2" (cast_expression "(ulonglong)local_64" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) != number_literal) )))) ;) (expression_statement "local_60 = iVar6 + 1;" (assignment_expression "local_60 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_54 = local_70 + iVar6 + 1;" (assignment_expression "local_54 = local_70 + iVar6 + 1" identifier = (binary_expression "local_70 + iVar6 + 1" (binary_expression "local_70 + iVar6" identifier + identifier) + number_literal)) ;) (if_statement "if (local_50 != 0) break;" if (parenthesized_expression "(local_50 != 0)" ( (binary_expression "local_50 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "param_2 = param_2 * uVar8;" (assignment_expression "param_2 = param_2 * uVar8" identifier = (binary_expression "param_2 * uVar8" identifier * identifier)) ;) (expression_statement "uVar9 = uVar8 - param_3;" (assignment_expression "uVar9 = uVar8 - param_3" identifier = (binary_expression "uVar8 - param_3" identifier - identifier)) ;) (expression_statement "puVar4 = local_54;" (assignment_expression "puVar4 = local_54" identifier = identifier) ;) (expression_statement "uVar8 = param_2;" (assignment_expression "uVar8 = param_2" identifier = identifier) ;) (expression_statement "local_5c = local_70 + iVar6;" (assignment_expression "local_5c = local_70 + iVar6" identifier = (binary_expression "local_70 + iVar6" identifier + identifier)) ;) (if_statement "if (uVar9 <= param_3) goto LAB_000279f9;" if (parenthesized_expression "(uVar9 <= param_3)" ( (binary_expression "uVar9 <= param_3" identifier <= identifier) )) (goto_statement "goto LAB_000279f9;" goto statement_identifier ;)) })) (expression_statement "puVar4 = local_70 + iVar6 + 2;" (assignment_expression "puVar4 = local_70 + iVar6 + 2" identifier = (binary_expression "local_70 + iVar6 + 2" (binary_expression "local_70 + iVar6" identifier + identifier) + number_literal)) ;) (expression_statement "local_70[iVar6] = param_2;" (assignment_expression "local_70[iVar6] = param_2" (subscript_expression "local_70[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "uVar9 = uVar8 - param_3;" (assignment_expression "uVar9 = uVar8 - param_3" identifier = (binary_expression "uVar8 - param_3" identifier - identifier)) ;) (expression_statement "iVar6 = local_60;" (assignment_expression "iVar6 = local_60" identifier = identifier) ;) (expression_statement "param_2 = uVar8;" (assignment_expression "param_2 = uVar8" identifier = identifier) ;) (expression_statement "local_5c = local_54;" (assignment_expression "local_5c = local_54" identifier = identifier) ;) }) while (parenthesized_expression "(param_3 < uVar9)" ( (binary_expression "param_3 < uVar9" identifier < identifier) )) ;) (labeled_statement "LAB_000279f9:\n      iVar6 = iVar6 + 2;" statement_identifier : (expression_statement "iVar6 = iVar6 + 2;" (assignment_expression "iVar6 = iVar6 + 2" identifier = (binary_expression "iVar6 + 2" identifier + number_literal)) ;)) (expression_statement "puVar5 = local_5c;" (assignment_expression "puVar5 = local_5c" identifier = identifier) ;) (expression_statement "param_2 = uVar8;" (assignment_expression "param_2 = uVar8" identifier = identifier) ;) }) (else_clause "else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" else (compound_statement "{\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" { (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;) (expression_statement "puVar4 = local_70 + 1;" (assignment_expression "puVar4 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = local_70;" (assignment_expression "puVar5 = local_70" identifier = identifier) ;) }))) (expression_statement "*puVar5 = uVar9;" (assignment_expression "*puVar5 = uVar9" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "*puVar4 = param_2;" (assignment_expression "*puVar4 = param_2" (pointer_expression "*puVar4" * identifier) = identifier) ;) (if_statement "if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }" if (parenthesized_expression "(local_6c < 2)" ( (binary_expression "local_6c < 2" identifier < number_literal) )) (compound_statement "{\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }" { (expression_statement "*(int *)(puVar7 + -8) = iVar6;" (assignment_expression "*(int *)(puVar7 + -8) = iVar6" (pointer_expression "*(int *)(puVar7 + -8)" * (cast_expression "(int *)(puVar7 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar7 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar7 + -0xc)" * (cast_expression "(uint **)(puVar7 + -0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0x10) = local_68;" (assignment_expression "*(uint **)(puVar7 + -0x10) = local_68" (pointer_expression "*(uint **)(puVar7 + -0x10)" * (cast_expression "(uint **)(puVar7 + -0x10)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27c0a;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27c0a" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_prodlimbs();" (call_expression "__gmpz_prodlimbs()" identifier (argument_list "()" ( ))) ;) (if_statement "if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }" if (parenthesized_expression "(local_3c != 0)" ( (binary_expression "local_3c != 0" identifier != number_literal) )) (compound_statement "{\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }" { (expression_statement "*(int *)(puVar7 + -0x10) = local_3c;" (assignment_expression "*(int *)(puVar7 + -0x10) = local_3c" (pointer_expression "*(int *)(puVar7 + -0x10)" * (cast_expression "(int *)(puVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27c24;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27c24" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmp_tmp_reentrant_free();" (call_expression "__gmp_tmp_reentrant_free()" identifier (argument_list "()" ( ))) ;) })) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27a1e;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27a1e" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_init();" (call_expression "__gmpz_init()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(puVar7 + -8) = iVar6;" (assignment_expression "*(int *)(puVar7 + -8) = iVar6" (pointer_expression "*(int *)(puVar7 + -8)" * (cast_expression "(int *)(puVar7 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar7 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar7 + -0xc)" * (cast_expression "(uint **)(puVar7 + -0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27a2e;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27a2e" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_prodlimbs();" (call_expression "__gmpz_prodlimbs()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" else (compound_statement "{\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" { (expression_statement "uVar2 = (ulonglong)param_2;" (assignment_expression "uVar2 = (ulonglong)param_2" identifier = (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ;) (expression_statement "param_2 = (uint)(uVar2 / local_6c);" (assignment_expression "param_2 = (uint)(uVar2 / local_6c)" identifier = (call_expression "(uint)(uVar2 / local_6c)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 / local_6c)" ( (binary_expression "uVar2 / local_6c" identifier / identifier) )))) ;) (expression_statement "uVar3 = (ulonglong)param_3;" (assignment_expression "uVar3 = (ulonglong)param_3" identifier = (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ;) (expression_statement "param_3 = (uint)(uVar3 / local_6c);" (assignment_expression "param_3 = (uint)(uVar3 / local_6c)" identifier = (call_expression "(uint)(uVar3 / local_6c)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 / local_6c)" ( (binary_expression "uVar3 / local_6c" identifier / identifier) )))) ;) (if_statement "if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }" if (parenthesized_expression "(2 < param_3)" ( (binary_expression "2 < param_3" number_literal < identifier) )) (compound_statement "{\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }" { (expression_statement "local_64 = param_2 - param_3;" (assignment_expression "local_64 = param_2 - param_3" identifier = (binary_expression "param_2 - param_3" identifier - identifier)) ;) (expression_statement "local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;" (assignment_expression "local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1" identifier = (binary_expression "(int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1" (cast_expression "(int)((uVar2 / local_6c) / (uVar3 / local_6c))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uVar2 / local_6c) / (uVar3 / local_6c))" ( (binary_expression "(uVar2 / local_6c) / (uVar3 / local_6c)" (parenthesized_expression "(uVar2 / local_6c)" ( (binary_expression "uVar2 / local_6c" identifier / identifier) )) / (parenthesized_expression "(uVar3 / local_6c)" ( (binary_expression "uVar3 / local_6c" identifier / identifier) ))) ))) + number_literal)) ;) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);" do (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar9 * 4)" * (cast_expression "(uint *)(local_58[-0x68] + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58[-0x68] + uVar9 * 4)" ( (binary_expression "local_58[-0x68] + uVar9 * 4" (subscript_expression "local_58[-0x68]" identifier [ number_literal ]) + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" identifier = identifier) ;) (if_statement "if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }" if (parenthesized_expression "(*local_68 < local_50 / uVar8 + 2)" ( (binary_expression "*local_68 < local_50 / uVar8 + 2" (pointer_expression "*local_68" * identifier) < (binary_expression "local_50 / uVar8 + 2" (binary_expression "local_50 / uVar8" identifier / identifier) + number_literal)) )) (compound_statement "{\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }" { (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (do_statement "do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);" do (compound_statement "{\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar9 * 4)" * (cast_expression "(uint *)(local_58[-0x68] + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58[-0x68] + uVar9 * 4)" ( (binary_expression "local_58[-0x68] + uVar9 * 4" (subscript_expression "local_58[-0x68]" identifier [ number_literal ]) + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);" (assignment_expression "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2)" identifier = (cast_expression "(uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(local_68,local_50 / uVar8 + 2)" identifier (argument_list "(local_68,local_50 / uVar8 + 2)" ( identifier , (binary_expression "local_50 / uVar8 + 2" (binary_expression "local_50 / uVar8" identifier / identifier) + number_literal) ))))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }) (else_clause "else {\n        local_70 = (uint *)local_68[2];\n      }" else (compound_statement "{\n        local_70 = (uint *)local_68[2];\n      }" { (expression_statement "local_70 = (uint *)local_68[2];" (assignment_expression "local_70 = (uint *)local_68[2]" identifier = (cast_expression "(uint *)local_68[2]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_68[2]" identifier [ number_literal ]))) ;) }))) (goto_statement "goto LAB_00027988;" goto statement_identifier ;) })) (if_statement "if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }" { (if_statement "if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }" if (parenthesized_expression "(local_6c == 2)" ( (binary_expression "local_6c == 2" identifier == number_literal) )) (compound_statement "{\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }" { (expression_statement "__gmpz_2fac_ui(local_68,param_2 * 2);" (call_expression "__gmpz_2fac_ui(local_68,param_2 * 2)" identifier (argument_list "(local_68,param_2 * 2)" ( identifier , (binary_expression "param_2 * 2" identifier * number_literal) ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "local_50 = param_2;" (assignment_expression "local_50 = param_2" identifier = identifier) ;) (expression_statement "__gmpz_init(local_38);" (call_expression "__gmpz_init(local_38)" identifier (argument_list "(local_38)" ( identifier ))) ;) (expression_statement "__gmpz_fac_ui(local_38,local_50);" (call_expression "__gmpz_fac_ui(local_38,local_50)" identifier (argument_list "(local_38,local_50)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" identifier = identifier) ;) }) (else_clause "else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" else (compound_statement "{\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" { (expression_statement "local_50 = param_2;" (assignment_expression "local_50 = param_2" identifier = identifier) ;) (expression_statement "__gmpz_init(local_38);" (call_expression "__gmpz_init(local_38)" identifier (argument_list "(local_38)" ( identifier ))) ;) (expression_statement "__gmpz_2fac_ui(local_38,local_50);" (call_expression "__gmpz_2fac_ui(local_38,local_50)" identifier (argument_list "(local_38,local_50)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (expression_statement "local_40 = (local_50 >> 1) + 1;" (assignment_expression "local_40 = (local_50 >> 1) + 1" identifier = (binary_expression "(local_50 >> 1) + 1" (parenthesized_expression "(local_50 >> 1)" ( (binary_expression "local_50 >> 1" identifier >> number_literal) )) + number_literal)) ;) }))) }))) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27ae8;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27ae8" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_init();" (call_expression "__gmpz_init()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(uint *)(puVar7 + -8) = local_40;" (assignment_expression "*(uint *)(puVar7 + -8) = local_40" (pointer_expression "*(uint *)(puVar7 + -8)" * (cast_expression "(uint *)(puVar7 + -8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar7 + -0xc) = local_6c;" (assignment_expression "*(uint *)(puVar7 + -0xc) = local_6c" (pointer_expression "*(uint *)(puVar7 + -0xc)" * (cast_expression "(uint *)(puVar7 + -0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27afa;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27afa" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_ui_pow_ui();" (call_expression "__gmpz_ui_pow_ui()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined1 **)(puVar7 + -8) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -8) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -8)" * (cast_expression "(undefined1 **)(puVar7 + -8)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 **)(puVar7 + -0xc) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0xc) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0xc)" * (cast_expression "(undefined1 **)(puVar7 + -0xc)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0x10) = local_68;" (assignment_expression "*(uint **)(puVar7 + -0x10) = local_68" (pointer_expression "*(uint **)(puVar7 + -0x10)" * (cast_expression "(uint **)(puVar7 + -0x10)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b0a;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b0a" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_mul();" (call_expression "__gmpz_mul()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b17;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b17" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_clear();" (call_expression "__gmpz_clear()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b1f;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b1f" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_clear();" (call_expression "__gmpz_clear()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" { comment (expression_statement "*(undefined4 *)(puVar7 + -4) = 0x27cf3;" (assignment_expression "*(undefined4 *)(puVar7 + -4) = 0x27cf3" (pointer_expression "*(undefined4 *)(puVar7 + -4)" * (cast_expression "(undefined4 *)(puVar7 + -4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -4)" ( (binary_expression "puVar7 + -4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_00079d30();" (call_expression "FUN_00079d30()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nvoid __gmpz_mfac_uiui(mpz_ptr x,ulong n,ulong m)\n\n{\n  int iVar1;\n  undefined *puVar2;\n  ulonglong uVar3;\n  ulonglong uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  int iVar7;\n  undefined1 *puVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  mpz_ptr local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  mp_limb_t sn;\n  tmp_reentrant_t *__tmp_marker;\n  mpz_t t;\n  mpz_t p;\n  \n  local_58 = &_GLOBAL_OFFSET_TABLE_;\n  puVar8 = auStack_7c;\n  local_68 = x;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((n - 3 < m - 1) || (n < 3)) {\n    *x->_mp_d = (n == 0) + n;\n    x->_mp_size = 1;\n    goto LAB_00027a58;\n  }\n  sn = n;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&sn,1,m);\n  puVar8 = auStack_7c;\n  if (local_6c < 2) {\n    if (m < 3) {\n      if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    local_64 = n - m;\n    local_50 = n / m + 1;\n    sn = local_50;\n    puVar2 = local_58[-0x68];\n    uVar10 = 8;\n    do {\n      uVar9 = uVar10;\n      uVar10 = uVar9 - 1;\n    } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n    uVar10 = 8;\n    if ((local_50 / uVar9) * 4 + 8 < 0x7f01) {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);\n      puVar8 = auStack_7c + iVar7;\n      local_70 = (uint *)((int)&local_70 + iVar7);\n    }\n    else {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }\nLAB_00027988:\n    iVar7 = 0;\n    uVar10 = local_64;\n    if (m < local_64) {\n      do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);\nLAB_000279f9:\n      iVar11 = iVar11 + 2;\n      puVar6 = local_5c;\n      n = uVar9;\n    }\n    else {\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }\n    *puVar6 = uVar10;\n    *puVar5 = n;\n    if (local_6c < 2) {\n      *(int *)(puVar8 + -8) = iVar11;\n      *(uint **)(puVar8 + -0xc) = local_70;\n      *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));\n      if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }\n      goto LAB_00027a58;\n    }\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a1e;\n    __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n    *(int *)(puVar8 + -8) = iVar11;\n    *(uint **)(puVar8 + -0xc) = local_70;\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8));\n  }\n  else {\n    uVar3 = (ulonglong)n;\n    n = (ulong)(uVar3 / local_6c);\n    uVar4 = (ulonglong)m;\n    m = (ulong)(uVar4 / local_6c);\n    if (2 < m) {\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }\n    if (m == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }\n    else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }\n  }\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27ae8;\n  __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n  *(mp_limb_t *)(puVar8 + -8) = sn;\n  *(uint *)(puVar8 + -0xc) = local_6c;\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui(*(mpz_ptr *)(puVar8 + -0x10),*(ulong *)(puVar8 + -0xc),*(ulong *)(puVar8 + -8));\n  *(__mpz_struct **)(puVar8 + -8) = t;\n  *(__mpz_struct **)(puVar8 + -0xc) = p;\n  *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b0a;\n  __gmpz_mul(*(mpz_ptr *)(puVar8 + -0x10),*(mpz_srcptr *)(puVar8 + -0xc),\n             *(mpz_srcptr *)(puVar8 + -8));\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b17;\n  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));\n  *(__mpz_struct **)(puVar8 + -0x10) = t;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b1f;\n  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));\nLAB_00027a58:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar8 + -4) = 0x27cf3;\n    __stack_chk_fail_local();\n  }\n  return;\n}\n\n" comment (function_definition "void __gmpz_mfac_uiui(mpz_ptr x,ulong n,ulong m)\n\n{\n  int iVar1;\n  undefined *puVar2;\n  ulonglong uVar3;\n  ulonglong uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  int iVar7;\n  undefined1 *puVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  mpz_ptr local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  mp_limb_t sn;\n  tmp_reentrant_t *__tmp_marker;\n  mpz_t t;\n  mpz_t p;\n  \n  local_58 = &_GLOBAL_OFFSET_TABLE_;\n  puVar8 = auStack_7c;\n  local_68 = x;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((n - 3 < m - 1) || (n < 3)) {\n    *x->_mp_d = (n == 0) + n;\n    x->_mp_size = 1;\n    goto LAB_00027a58;\n  }\n  sn = n;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&sn,1,m);\n  puVar8 = auStack_7c;\n  if (local_6c < 2) {\n    if (m < 3) {\n      if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    local_64 = n - m;\n    local_50 = n / m + 1;\n    sn = local_50;\n    puVar2 = local_58[-0x68];\n    uVar10 = 8;\n    do {\n      uVar9 = uVar10;\n      uVar10 = uVar9 - 1;\n    } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n    uVar10 = 8;\n    if ((local_50 / uVar9) * 4 + 8 < 0x7f01) {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);\n      puVar8 = auStack_7c + iVar7;\n      local_70 = (uint *)((int)&local_70 + iVar7);\n    }\n    else {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }\nLAB_00027988:\n    iVar7 = 0;\n    uVar10 = local_64;\n    if (m < local_64) {\n      do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);\nLAB_000279f9:\n      iVar11 = iVar11 + 2;\n      puVar6 = local_5c;\n      n = uVar9;\n    }\n    else {\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }\n    *puVar6 = uVar10;\n    *puVar5 = n;\n    if (local_6c < 2) {\n      *(int *)(puVar8 + -8) = iVar11;\n      *(uint **)(puVar8 + -0xc) = local_70;\n      *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));\n      if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }\n      goto LAB_00027a58;\n    }\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a1e;\n    __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n    *(int *)(puVar8 + -8) = iVar11;\n    *(uint **)(puVar8 + -0xc) = local_70;\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8));\n  }\n  else {\n    uVar3 = (ulonglong)n;\n    n = (ulong)(uVar3 / local_6c);\n    uVar4 = (ulonglong)m;\n    m = (ulong)(uVar4 / local_6c);\n    if (2 < m) {\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }\n    if (m == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }\n    else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }\n  }\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27ae8;\n  __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n  *(mp_limb_t *)(puVar8 + -8) = sn;\n  *(uint *)(puVar8 + -0xc) = local_6c;\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui(*(mpz_ptr *)(puVar8 + -0x10),*(ulong *)(puVar8 + -0xc),*(ulong *)(puVar8 + -8));\n  *(__mpz_struct **)(puVar8 + -8) = t;\n  *(__mpz_struct **)(puVar8 + -0xc) = p;\n  *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b0a;\n  __gmpz_mul(*(mpz_ptr *)(puVar8 + -0x10),*(mpz_srcptr *)(puVar8 + -0xc),\n             *(mpz_srcptr *)(puVar8 + -8));\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b17;\n  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));\n  *(__mpz_struct **)(puVar8 + -0x10) = t;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b1f;\n  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));\nLAB_00027a58:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar8 + -4) = 0x27cf3;\n    __stack_chk_fail_local();\n  }\n  return;\n}" primitive_type (function_declarator "__gmpz_mfac_uiui(mpz_ptr x,ulong n,ulong m)" identifier (parameter_list "(mpz_ptr x,ulong n,ulong m)" ( (parameter_declaration "mpz_ptr x" type_identifier identifier) , (parameter_declaration "ulong n" type_identifier identifier) , (parameter_declaration "ulong m" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined *puVar2;\n  ulonglong uVar3;\n  ulonglong uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  int iVar7;\n  undefined1 *puVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  mpz_ptr local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  mp_limb_t sn;\n  tmp_reentrant_t *__tmp_marker;\n  mpz_t t;\n  mpz_t p;\n  \n  local_58 = &_GLOBAL_OFFSET_TABLE_;\n  puVar8 = auStack_7c;\n  local_68 = x;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((n - 3 < m - 1) || (n < 3)) {\n    *x->_mp_d = (n == 0) + n;\n    x->_mp_size = 1;\n    goto LAB_00027a58;\n  }\n  sn = n;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&sn,1,m);\n  puVar8 = auStack_7c;\n  if (local_6c < 2) {\n    if (m < 3) {\n      if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    local_64 = n - m;\n    local_50 = n / m + 1;\n    sn = local_50;\n    puVar2 = local_58[-0x68];\n    uVar10 = 8;\n    do {\n      uVar9 = uVar10;\n      uVar10 = uVar9 - 1;\n    } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n    uVar10 = 8;\n    if ((local_50 / uVar9) * 4 + 8 < 0x7f01) {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);\n      puVar8 = auStack_7c + iVar7;\n      local_70 = (uint *)((int)&local_70 + iVar7);\n    }\n    else {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }\nLAB_00027988:\n    iVar7 = 0;\n    uVar10 = local_64;\n    if (m < local_64) {\n      do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);\nLAB_000279f9:\n      iVar11 = iVar11 + 2;\n      puVar6 = local_5c;\n      n = uVar9;\n    }\n    else {\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }\n    *puVar6 = uVar10;\n    *puVar5 = n;\n    if (local_6c < 2) {\n      *(int *)(puVar8 + -8) = iVar11;\n      *(uint **)(puVar8 + -0xc) = local_70;\n      *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));\n      if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }\n      goto LAB_00027a58;\n    }\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a1e;\n    __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n    *(int *)(puVar8 + -8) = iVar11;\n    *(uint **)(puVar8 + -0xc) = local_70;\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8));\n  }\n  else {\n    uVar3 = (ulonglong)n;\n    n = (ulong)(uVar3 / local_6c);\n    uVar4 = (ulonglong)m;\n    m = (ulong)(uVar4 / local_6c);\n    if (2 < m) {\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }\n    if (m == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }\n    else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }\n  }\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27ae8;\n  __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n  *(mp_limb_t *)(puVar8 + -8) = sn;\n  *(uint *)(puVar8 + -0xc) = local_6c;\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui(*(mpz_ptr *)(puVar8 + -0x10),*(ulong *)(puVar8 + -0xc),*(ulong *)(puVar8 + -8));\n  *(__mpz_struct **)(puVar8 + -8) = t;\n  *(__mpz_struct **)(puVar8 + -0xc) = p;\n  *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b0a;\n  __gmpz_mul(*(mpz_ptr *)(puVar8 + -0x10),*(mpz_srcptr *)(puVar8 + -0xc),\n             *(mpz_srcptr *)(puVar8 + -8));\n  *(__mpz_struct **)(puVar8 + -0x10) = p;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b17;\n  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));\n  *(__mpz_struct **)(puVar8 + -0x10) = t;\n  *(undefined4 *)(puVar8 + -0x14) = 0x27b1f;\n  __gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));\nLAB_00027a58:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar8 + -4) = 0x27cf3;\n    __stack_chk_fail_local();\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "ulonglong uVar3;" type_identifier identifier ;) (declaration "ulonglong uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined1 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "undefined1 auStack_7c [12];" type_identifier (array_declarator "auStack_7c [12]" identifier [ number_literal ]) ;) (declaration "uint *local_70;" type_identifier (pointer_declarator "*local_70" * identifier) ;) (declaration "uint local_6c;" type_identifier identifier ;) (declaration "mpz_ptr local_68;" type_identifier identifier ;) (declaration "uint local_64;" type_identifier identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "uint *local_5c;" type_identifier (pointer_declarator "*local_5c" * identifier) ;) (declaration "undefined **local_58;" type_identifier (pointer_declarator "**local_58" * (pointer_declarator "*local_58" * identifier)) ;) (declaration "uint *local_54;" type_identifier (pointer_declarator "*local_54" * identifier) ;) (declaration "uint local_50;" type_identifier identifier ;) (declaration "mp_limb_t sn;" type_identifier identifier ;) (declaration "tmp_reentrant_t *__tmp_marker;" type_identifier (pointer_declarator "*__tmp_marker" * identifier) ;) (declaration "mpz_t t;" type_identifier identifier ;) (declaration "mpz_t p;" type_identifier identifier ;) (expression_statement "local_58 = &_GLOBAL_OFFSET_TABLE_;" (assignment_expression "local_58 = &_GLOBAL_OFFSET_TABLE_" identifier = (pointer_expression "&_GLOBAL_OFFSET_TABLE_" & identifier)) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) (expression_statement "local_68 = x;" (assignment_expression "local_68 = x" identifier = identifier) ;) (expression_statement "iVar1 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar1 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (if_statement "if ((n - 3 < m - 1) || (n < 3)) {\n    *x->_mp_d = (n == 0) + n;\n    x->_mp_size = 1;\n    goto LAB_00027a58;\n  }" if (parenthesized_expression "((n - 3 < m - 1) || (n < 3))" ( (binary_expression "(n - 3 < m - 1) || (n < 3)" (parenthesized_expression "(n - 3 < m - 1)" ( (binary_expression "n - 3 < m - 1" (binary_expression "n - 3" identifier - number_literal) < (binary_expression "m - 1" identifier - number_literal)) )) || (parenthesized_expression "(n < 3)" ( (binary_expression "n < 3" identifier < number_literal) ))) )) (compound_statement "{\n    *x->_mp_d = (n == 0) + n;\n    x->_mp_size = 1;\n    goto LAB_00027a58;\n  }" { (expression_statement "*x->_mp_d = (n == 0) + n;" (assignment_expression "*x->_mp_d = (n == 0) + n" (pointer_expression "*x->_mp_d" * (field_expression "x->_mp_d" identifier -> field_identifier)) = (binary_expression "(n == 0) + n" (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) + identifier)) ;) (expression_statement "x->_mp_size = 1;" (assignment_expression "x->_mp_size = 1" (field_expression "x->_mp_size" identifier -> field_identifier) = number_literal) ;) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "sn = n;" (assignment_expression "sn = n" identifier = identifier) ;) (expression_statement "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&sn,1,m);" (assignment_expression "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&sn,1,m)" identifier = (call_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&sn,1,m)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_00098d94 + 0x34)" ( (binary_expression "PTR___gmpn_cpuvec_00098d94 + 0x34" identifier + number_literal) ))))) )) (argument_list "(&sn,1,m)" ( (pointer_expression "&sn" & identifier) , number_literal , identifier )))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) (if_statement "if (local_6c < 2) {\n    if (m < 3) {\n      if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    local_64 = n - m;\n    local_50 = n / m + 1;\n    sn = local_50;\n    puVar2 = local_58[-0x68];\n    uVar10 = 8;\n    do {\n      uVar9 = uVar10;\n      uVar10 = uVar9 - 1;\n    } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n    uVar10 = 8;\n    if ((local_50 / uVar9) * 4 + 8 < 0x7f01) {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);\n      puVar8 = auStack_7c + iVar7;\n      local_70 = (uint *)((int)&local_70 + iVar7);\n    }\n    else {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }\nLAB_00027988:\n    iVar7 = 0;\n    uVar10 = local_64;\n    if (m < local_64) {\n      do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);\nLAB_000279f9:\n      iVar11 = iVar11 + 2;\n      puVar6 = local_5c;\n      n = uVar9;\n    }\n    else {\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }\n    *puVar6 = uVar10;\n    *puVar5 = n;\n    if (local_6c < 2) {\n      *(int *)(puVar8 + -8) = iVar11;\n      *(uint **)(puVar8 + -0xc) = local_70;\n      *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));\n      if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }\n      goto LAB_00027a58;\n    }\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a1e;\n    __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n    *(int *)(puVar8 + -8) = iVar11;\n    *(uint **)(puVar8 + -0xc) = local_70;\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8));\n  }\n  else {\n    uVar3 = (ulonglong)n;\n    n = (ulong)(uVar3 / local_6c);\n    uVar4 = (ulonglong)m;\n    m = (ulong)(uVar4 / local_6c);\n    if (2 < m) {\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }\n    if (m == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }\n    else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }\n  }" if (parenthesized_expression "(local_6c < 2)" ( (binary_expression "local_6c < 2" identifier < number_literal) )) (compound_statement "{\n    if (m < 3) {\n      if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    local_64 = n - m;\n    local_50 = n / m + 1;\n    sn = local_50;\n    puVar2 = local_58[-0x68];\n    uVar10 = 8;\n    do {\n      uVar9 = uVar10;\n      uVar10 = uVar9 - 1;\n    } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n    uVar10 = 8;\n    if ((local_50 / uVar9) * 4 + 8 < 0x7f01) {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);\n      puVar8 = auStack_7c + iVar7;\n      local_70 = (uint *)((int)&local_70 + iVar7);\n    }\n    else {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }\nLAB_00027988:\n    iVar7 = 0;\n    uVar10 = local_64;\n    if (m < local_64) {\n      do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);\nLAB_000279f9:\n      iVar11 = iVar11 + 2;\n      puVar6 = local_5c;\n      n = uVar9;\n    }\n    else {\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }\n    *puVar6 = uVar10;\n    *puVar5 = n;\n    if (local_6c < 2) {\n      *(int *)(puVar8 + -8) = iVar11;\n      *(uint **)(puVar8 + -0xc) = local_70;\n      *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));\n      if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }\n      goto LAB_00027a58;\n    }\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a1e;\n    __gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));\n    *(int *)(puVar8 + -8) = iVar11;\n    *(uint **)(puVar8 + -0xc) = local_70;\n    *(__mpz_struct **)(puVar8 + -0x10) = t;\n    *(undefined4 *)(puVar8 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8));\n  }" { (if_statement "if (m < 3) {\n      if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" if (parenthesized_expression "(m < 3)" ( (binary_expression "m < 3" identifier < number_literal) )) (compound_statement "{\n      if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" { (if_statement "if (m == 1) {\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }" if (parenthesized_expression "(m == 1)" ( (binary_expression "m == 1" identifier == number_literal) )) (compound_statement "{\n        __gmpz_fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }" { (expression_statement "__gmpz_fac_ui(local_68,n);" (call_expression "__gmpz_fac_ui(local_68,n)" identifier (argument_list "(local_68,n)" ( identifier , identifier ))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) }) (else_clause "else {\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }" else (compound_statement "{\n        __gmpz_2fac_ui(local_68,n);\n        puVar8 = auStack_7c;\n      }" { (expression_statement "__gmpz_2fac_ui(local_68,n);" (call_expression "__gmpz_2fac_ui(local_68,n)" identifier (argument_list "(local_68,n)" ( identifier , identifier ))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) }))) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "__tmp_marker = (tmp_reentrant_t *)0x0;" (assignment_expression "__tmp_marker = (tmp_reentrant_t *)0x0" identifier = (cast_expression "(tmp_reentrant_t *)0x0" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_64 = n - m;" (assignment_expression "local_64 = n - m" identifier = (binary_expression "n - m" identifier - identifier)) ;) (expression_statement "local_50 = n / m + 1;" (assignment_expression "local_50 = n / m + 1" identifier = (binary_expression "n / m + 1" (binary_expression "n / m" identifier / identifier) + number_literal)) ;) (expression_statement "sn = local_50;" (assignment_expression "sn = local_50" identifier = identifier) ;) (expression_statement "puVar2 = local_58[-0x68];" (assignment_expression "puVar2 = local_58[-0x68]" identifier = (subscript_expression "local_58[-0x68]" identifier [ number_literal ])) ;) (expression_statement "uVar10 = 8;" (assignment_expression "uVar10 = 8" identifier = number_literal) ;) (do_statement "do {\n      uVar9 = uVar10;\n      uVar10 = uVar9 - 1;\n    } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);" do (compound_statement "{\n      uVar9 = uVar10;\n      uVar10 = uVar9 - 1;\n    }" { (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (expression_statement "uVar10 = uVar9 - 1;" (assignment_expression "uVar10 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar2 + uVar10 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar2 + uVar10 * 4) < local_64" (pointer_expression "*(uint *)(puVar2 + uVar10 * 4)" * (cast_expression "(uint *)(puVar2 + uVar10 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar10 * 4)" ( (binary_expression "puVar2 + uVar10 * 4" identifier + (binary_expression "uVar10 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "uVar10 = 8;" (assignment_expression "uVar10 = 8" identifier = number_literal) ;) (if_statement "if ((local_50 / uVar9) * 4 + 8 < 0x7f01) {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);\n      puVar8 = auStack_7c + iVar7;\n      local_70 = (uint *)((int)&local_70 + iVar7);\n    }\n    else {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }" if (parenthesized_expression "((local_50 / uVar9) * 4 + 8 < 0x7f01)" ( (binary_expression "(local_50 / uVar9) * 4 + 8 < 0x7f01" (binary_expression "(local_50 / uVar9) * 4 + 8" (binary_expression "(local_50 / uVar9) * 4" (parenthesized_expression "(local_50 / uVar9)" ( (binary_expression "local_50 / uVar9" identifier / identifier) )) * number_literal) + number_literal) < number_literal) )) (compound_statement "{\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);\n      puVar8 = auStack_7c + iVar7;\n      local_70 = (uint *)((int)&local_70 + iVar7);\n    }" { (do_statement "do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);" do (compound_statement "{\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      }" { (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (expression_statement "uVar10 = uVar9 - 1;" (assignment_expression "uVar10 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar2 + uVar10 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar2 + uVar10 * 4) < local_64" (pointer_expression "*(uint *)(puVar2 + uVar10 * 4)" * (cast_expression "(uint *)(puVar2 + uVar10 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar10 * 4)" ( (binary_expression "puVar2 + uVar10 * 4" identifier + (binary_expression "uVar10 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0);" (assignment_expression "iVar7 = -((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0)" identifier = (unary_expression "-((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0)" - (parenthesized_expression "((local_50 / uVar9) * 4 + 0x23 & 0xfffffff0)" ( (binary_expression "(local_50 / uVar9) * 4 + 0x23 & 0xfffffff0" (binary_expression "(local_50 / uVar9) * 4 + 0x23" (binary_expression "(local_50 / uVar9) * 4" (parenthesized_expression "(local_50 / uVar9)" ( (binary_expression "local_50 / uVar9" identifier / identifier) )) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "puVar8 = auStack_7c + iVar7;" (assignment_expression "puVar8 = auStack_7c + iVar7" identifier = (binary_expression "auStack_7c + iVar7" identifier + identifier)) ;) (expression_statement "local_70 = (uint *)((int)&local_70 + iVar7);" (assignment_expression "local_70 = (uint *)((int)&local_70 + iVar7)" identifier = (cast_expression "(uint *)((int)&local_70 + iVar7)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_70 + iVar7)" ( (binary_expression "(int)&local_70 + iVar7" (cast_expression "(int)&local_70" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_70" & identifier)) + identifier) )))) ;) }) (else_clause "else {\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }" else (compound_statement "{\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);\n      puVar8 = auStack_7c;\n    }" { (do_statement "do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(puVar2 + uVar10 * 4) < local_64);" do (compound_statement "{\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      }" { (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (expression_statement "uVar10 = uVar9 - 1;" (assignment_expression "uVar10 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar2 + uVar10 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar2 + uVar10 * 4) < local_64" (pointer_expression "*(uint *)(puVar2 + uVar10 * 4)" * (cast_expression "(uint *)(puVar2 + uVar10 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar10 * 4)" ( (binary_expression "puVar2 + uVar10 * 4" identifier + (binary_expression "uVar10 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8);" (assignment_expression "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8)" identifier = (cast_expression "(uint *)__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmp_tmp_reentrant_alloc(&__tmp_marker,(local_50 / uVar9) * 4 + 8)" identifier (argument_list "(&__tmp_marker,(local_50 / uVar9) * 4 + 8)" ( (pointer_expression "&__tmp_marker" & identifier) , (binary_expression "(local_50 / uVar9) * 4 + 8" (binary_expression "(local_50 / uVar9) * 4" (parenthesized_expression "(local_50 / uVar9)" ( (binary_expression "local_50 / uVar9" identifier / identifier) )) * number_literal) + number_literal) ))))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) }))) (labeled_statement "LAB_00027988:\n    iVar7 = 0;" statement_identifier : (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;)) (expression_statement "uVar10 = local_64;" (assignment_expression "uVar10 = local_64" identifier = identifier) ;) (if_statement "if (m < local_64) {\n      do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);\nLAB_000279f9:\n      iVar11 = iVar11 + 2;\n      puVar6 = local_5c;\n      n = uVar9;\n    }\n    else {\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }" if (parenthesized_expression "(m < local_64)" ( (binary_expression "m < local_64" identifier < identifier) )) (compound_statement "{\n      do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);\nLAB_000279f9:\n      iVar11 = iVar11 + 2;\n      puVar6 = local_5c;\n      n = uVar9;\n    }" { (do_statement "do {\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      } while (m < uVar10);" do (compound_statement "{\n        while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }\n        puVar5 = local_70 + iVar7 + 2;\n        local_70[iVar7] = n;\n        local_5c = local_54;\n        uVar10 = uVar9 - m;\n        iVar7 = iVar11;\n        n = uVar9;\n      }" { (while_statement "while( true ) {\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar9 = uVar10;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);\n          local_5c = local_70 + iVar7;\n          iVar11 = iVar7 + 1;\n          local_60 = iVar11;\n          local_54 = local_70 + iVar7 + 1;\n          if (local_50 != 0) break;\n          n = n * uVar9;\n          uVar10 = uVar9 - m;\n          puVar5 = local_54;\n          iVar11 = iVar7;\n          uVar9 = n;\n          if (uVar10 <= m) goto LAB_000279f9;\n        }" { (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (expression_statement "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0);" (assignment_expression "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0)" identifier = (call_expression "(uint)((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)local_64 * (ulonglong)n >> 0x20) != 0" (cast_expression "(int)((ulonglong)local_64 * (ulonglong)n >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)local_64 * (ulonglong)n >> 0x20)" ( (binary_expression "(ulonglong)local_64 * (ulonglong)n >> 0x20" (binary_expression "(ulonglong)local_64 * (ulonglong)n" (cast_expression "(ulonglong)local_64" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)n" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) != number_literal) )))) ;) (expression_statement "local_5c = local_70 + iVar7;" (assignment_expression "local_5c = local_70 + iVar7" identifier = (binary_expression "local_70 + iVar7" identifier + identifier)) ;) (expression_statement "iVar11 = iVar7 + 1;" (assignment_expression "iVar11 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "local_60 = iVar11;" (assignment_expression "local_60 = iVar11" identifier = identifier) ;) (expression_statement "local_54 = local_70 + iVar7 + 1;" (assignment_expression "local_54 = local_70 + iVar7 + 1" identifier = (binary_expression "local_70 + iVar7 + 1" (binary_expression "local_70 + iVar7" identifier + identifier) + number_literal)) ;) (if_statement "if (local_50 != 0) break;" if (parenthesized_expression "(local_50 != 0)" ( (binary_expression "local_50 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "n = n * uVar9;" (assignment_expression "n = n * uVar9" identifier = (binary_expression "n * uVar9" identifier * identifier)) ;) (expression_statement "uVar10 = uVar9 - m;" (assignment_expression "uVar10 = uVar9 - m" identifier = (binary_expression "uVar9 - m" identifier - identifier)) ;) (expression_statement "puVar5 = local_54;" (assignment_expression "puVar5 = local_54" identifier = identifier) ;) (expression_statement "iVar11 = iVar7;" (assignment_expression "iVar11 = iVar7" identifier = identifier) ;) (expression_statement "uVar9 = n;" (assignment_expression "uVar9 = n" identifier = identifier) ;) (if_statement "if (uVar10 <= m) goto LAB_000279f9;" if (parenthesized_expression "(uVar10 <= m)" ( (binary_expression "uVar10 <= m" identifier <= identifier) )) (goto_statement "goto LAB_000279f9;" goto statement_identifier ;)) })) (expression_statement "puVar5 = local_70 + iVar7 + 2;" (assignment_expression "puVar5 = local_70 + iVar7 + 2" identifier = (binary_expression "local_70 + iVar7 + 2" (binary_expression "local_70 + iVar7" identifier + identifier) + number_literal)) ;) (expression_statement "local_70[iVar7] = n;" (assignment_expression "local_70[iVar7] = n" (subscript_expression "local_70[iVar7]" identifier [ identifier ]) = identifier) ;) (expression_statement "local_5c = local_54;" (assignment_expression "local_5c = local_54" identifier = identifier) ;) (expression_statement "uVar10 = uVar9 - m;" (assignment_expression "uVar10 = uVar9 - m" identifier = (binary_expression "uVar9 - m" identifier - identifier)) ;) (expression_statement "iVar7 = iVar11;" (assignment_expression "iVar7 = iVar11" identifier = identifier) ;) (expression_statement "n = uVar9;" (assignment_expression "n = uVar9" identifier = identifier) ;) }) while (parenthesized_expression "(m < uVar10)" ( (binary_expression "m < uVar10" identifier < identifier) )) ;) (labeled_statement "LAB_000279f9:\n      iVar11 = iVar11 + 2;" statement_identifier : (expression_statement "iVar11 = iVar11 + 2;" (assignment_expression "iVar11 = iVar11 + 2" identifier = (binary_expression "iVar11 + 2" identifier + number_literal)) ;)) (expression_statement "puVar6 = local_5c;" (assignment_expression "puVar6 = local_5c" identifier = identifier) ;) (expression_statement "n = uVar9;" (assignment_expression "n = uVar9" identifier = identifier) ;) }) (else_clause "else {\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }" else (compound_statement "{\n      iVar11 = 2;\n      puVar5 = local_70 + 1;\n      puVar6 = local_70;\n    }" { (expression_statement "iVar11 = 2;" (assignment_expression "iVar11 = 2" identifier = number_literal) ;) (expression_statement "puVar5 = local_70 + 1;" (assignment_expression "puVar5 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) (expression_statement "puVar6 = local_70;" (assignment_expression "puVar6 = local_70" identifier = identifier) ;) }))) (expression_statement "*puVar6 = uVar10;" (assignment_expression "*puVar6 = uVar10" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "*puVar5 = n;" (assignment_expression "*puVar5 = n" (pointer_expression "*puVar5" * identifier) = identifier) ;) (if_statement "if (local_6c < 2) {\n      *(int *)(puVar8 + -8) = iVar11;\n      *(uint **)(puVar8 + -0xc) = local_70;\n      *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));\n      if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }\n      goto LAB_00027a58;\n    }" if (parenthesized_expression "(local_6c < 2)" ( (binary_expression "local_6c < 2" identifier < number_literal) )) (compound_statement "{\n      *(int *)(puVar8 + -8) = iVar11;\n      *(uint **)(puVar8 + -0xc) = local_70;\n      *(mpz_ptr *)(puVar8 + -0x10) = local_68;\n      *(undefined4 *)(puVar8 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));\n      if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }\n      goto LAB_00027a58;\n    }" { (expression_statement "*(int *)(puVar8 + -8) = iVar11;" (assignment_expression "*(int *)(puVar8 + -8) = iVar11" (pointer_expression "*(int *)(puVar8 + -8)" * (cast_expression "(int *)(puVar8 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar8 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar8 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar8 + -0xc)" * (cast_expression "(uint **)(puVar8 + -0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(mpz_ptr *)(puVar8 + -0x10) = local_68;" (assignment_expression "*(mpz_ptr *)(puVar8 + -0x10) = local_68" (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27c0a;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27c0a" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8));" (call_expression "__gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                       *(mp_size_t *)(puVar8 + -8))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) , (pointer_expression "*(mp_ptr *)(puVar8 + -0xc)" * (cast_expression "(mp_ptr *)(puVar8 + -0xc)" ( (type_descriptor "mp_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) , (pointer_expression "*(mp_size_t *)(puVar8 + -8)" * (cast_expression "(mp_size_t *)(puVar8 + -8)" ( (type_descriptor "mp_size_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) ))) ;) (if_statement "if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }" if (parenthesized_expression "(__tmp_marker != (tmp_reentrant_t *)0x0)" ( (binary_expression "__tmp_marker != (tmp_reentrant_t *)0x0" identifier != (cast_expression "(tmp_reentrant_t *)0x0" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        *(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;\n        *(undefined4 *)(puVar8 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));\n      }" { (expression_statement "*(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker;" (assignment_expression "*(tmp_reentrant_t **)(puVar8 + -0x10) = __tmp_marker" (pointer_expression "*(tmp_reentrant_t **)(puVar8 + -0x10)" * (cast_expression "(tmp_reentrant_t **)(puVar8 + -0x10)" ( (type_descriptor "tmp_reentrant_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27c24;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27c24" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10));" (call_expression "__gmp_tmp_reentrant_free(*(tmp_reentrant_t **)(puVar8 + -0x10))" identifier (argument_list "(*(tmp_reentrant_t **)(puVar8 + -0x10))" ( (pointer_expression "*(tmp_reentrant_t **)(puVar8 + -0x10)" * (cast_expression "(tmp_reentrant_t **)(puVar8 + -0x10)" ( (type_descriptor "tmp_reentrant_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) ))) ;) })) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "*(__mpz_struct **)(puVar8 + -0x10) = t;" (assignment_expression "*(__mpz_struct **)(puVar8 + -0x10) = t" (pointer_expression "*(__mpz_struct **)(puVar8 + -0x10)" * (cast_expression "(__mpz_struct **)(puVar8 + -0x10)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27a1e;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27a1e" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));" (call_expression "__gmpz_init(*(mpz_ptr *)(puVar8 + -0x10))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) ))) ;) (expression_statement "*(int *)(puVar8 + -8) = iVar11;" (assignment_expression "*(int *)(puVar8 + -8) = iVar11" (pointer_expression "*(int *)(puVar8 + -8)" * (cast_expression "(int *)(puVar8 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar8 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar8 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar8 + -0xc)" * (cast_expression "(uint **)(puVar8 + -0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(__mpz_struct **)(puVar8 + -0x10) = t;" (assignment_expression "*(__mpz_struct **)(puVar8 + -0x10) = t" (pointer_expression "*(__mpz_struct **)(puVar8 + -0x10)" * (cast_expression "(__mpz_struct **)(puVar8 + -0x10)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27a2e;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27a2e" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8));" (call_expression "__gmpz_prodlimbs(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10),*(mp_ptr *)(puVar8 + -0xc),\n                     *(mp_size_t *)(puVar8 + -8))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) , (pointer_expression "*(mp_ptr *)(puVar8 + -0xc)" * (cast_expression "(mp_ptr *)(puVar8 + -0xc)" ( (type_descriptor "mp_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) , (pointer_expression "*(mp_size_t *)(puVar8 + -8)" * (cast_expression "(mp_size_t *)(puVar8 + -8)" ( (type_descriptor "mp_size_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) ))) ;) }) (else_clause "else {\n    uVar3 = (ulonglong)n;\n    n = (ulong)(uVar3 / local_6c);\n    uVar4 = (ulonglong)m;\n    m = (ulong)(uVar4 / local_6c);\n    if (2 < m) {\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }\n    if (m == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }\n    else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }\n  }" else (compound_statement "{\n    uVar3 = (ulonglong)n;\n    n = (ulong)(uVar3 / local_6c);\n    uVar4 = (ulonglong)m;\n    m = (ulong)(uVar4 / local_6c);\n    if (2 < m) {\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }\n    if (m == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }\n    else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }\n  }" { (expression_statement "uVar3 = (ulonglong)n;" (assignment_expression "uVar3 = (ulonglong)n" identifier = (cast_expression "(ulonglong)n" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ;) (expression_statement "n = (ulong)(uVar3 / local_6c);" (assignment_expression "n = (ulong)(uVar3 / local_6c)" identifier = (call_expression "(ulong)(uVar3 / local_6c)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar3 / local_6c)" ( (binary_expression "uVar3 / local_6c" identifier / identifier) )))) ;) (expression_statement "uVar4 = (ulonglong)m;" (assignment_expression "uVar4 = (ulonglong)m" identifier = (cast_expression "(ulonglong)m" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ;) (expression_statement "m = (ulong)(uVar4 / local_6c);" (assignment_expression "m = (ulong)(uVar4 / local_6c)" identifier = (call_expression "(ulong)(uVar4 / local_6c)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar4 / local_6c)" ( (binary_expression "uVar4 / local_6c" identifier / identifier) )))) ;) (if_statement "if (2 < m) {\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }" if (parenthesized_expression "(2 < m)" ( (binary_expression "2 < m" number_literal < identifier) )) (compound_statement "{\n      local_64 = n - m;\n      local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;\n      sn = local_50;\n      uVar10 = 8;\n      do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n      if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }\n      goto LAB_00027988;\n    }" { (expression_statement "local_64 = n - m;" (assignment_expression "local_64 = n - m" identifier = (binary_expression "n - m" identifier - identifier)) ;) (expression_statement "local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1;" (assignment_expression "local_50 = (int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1" identifier = (binary_expression "(int)((uVar3 / local_6c) / (uVar4 / local_6c)) + 1" (cast_expression "(int)((uVar3 / local_6c) / (uVar4 / local_6c))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uVar3 / local_6c) / (uVar4 / local_6c))" ( (binary_expression "(uVar3 / local_6c) / (uVar4 / local_6c)" (parenthesized_expression "(uVar3 / local_6c)" ( (binary_expression "uVar3 / local_6c" identifier / identifier) )) / (parenthesized_expression "(uVar4 / local_6c)" ( (binary_expression "uVar4 / local_6c" identifier / identifier) ))) ))) + number_literal)) ;) (expression_statement "sn = local_50;" (assignment_expression "sn = local_50" identifier = identifier) ;) (expression_statement "uVar10 = 8;" (assignment_expression "uVar10 = 8" identifier = number_literal) ;) (do_statement "do {\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);" do (compound_statement "{\n        uVar9 = uVar10;\n        uVar10 = uVar9 - 1;\n      }" { (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (expression_statement "uVar10 = uVar9 - 1;" (assignment_expression "uVar10 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64)" ( (binary_expression "*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar10 * 4)" * (cast_expression "(uint *)(local_58[-0x68] + uVar10 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58[-0x68] + uVar10 * 4)" ( (binary_expression "local_58[-0x68] + uVar10 * 4" (subscript_expression "local_58[-0x68]" identifier [ number_literal ]) + (binary_expression "uVar10 * 4" identifier * number_literal)) )))) < identifier) )) ;) (if_statement "if ((uint)local_68->_mp_alloc < local_50 / uVar9 + 2) {\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }\n      else {\n        local_70 = local_68->_mp_d;\n      }" if (parenthesized_expression "((uint)local_68->_mp_alloc < local_50 / uVar9 + 2)" ( (binary_expression "(uint)local_68->_mp_alloc < local_50 / uVar9 + 2" (cast_expression "(uint)local_68->_mp_alloc" ( (type_descriptor "uint" type_identifier) ) (field_expression "local_68->_mp_alloc" identifier -> field_identifier)) < (binary_expression "local_50 / uVar9 + 2" (binary_expression "local_50 / uVar9" identifier / identifier) + number_literal)) )) (compound_statement "{\n        uVar10 = 8;\n        do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);\n        puVar8 = auStack_7c;\n      }" { (expression_statement "uVar10 = 8;" (assignment_expression "uVar10 = 8" identifier = number_literal) ;) (do_statement "do {\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64);" do (compound_statement "{\n          uVar9 = uVar10;\n          uVar10 = uVar9 - 1;\n        }" { (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) (expression_statement "uVar10 = uVar9 - 1;" (assignment_expression "uVar10 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64)" ( (binary_expression "*(uint *)(local_58[-0x68] + uVar10 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar10 * 4)" * (cast_expression "(uint *)(local_58[-0x68] + uVar10 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58[-0x68] + uVar10 * 4)" ( (binary_expression "local_58[-0x68] + uVar10 * 4" (subscript_expression "local_58[-0x68]" identifier [ number_literal ]) + (binary_expression "uVar10 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2);" (assignment_expression "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2)" identifier = (cast_expression "(uint *)__gmpz_realloc(local_68,local_50 / uVar9 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(local_68,local_50 / uVar9 + 2)" identifier (argument_list "(local_68,local_50 / uVar9 + 2)" ( identifier , (binary_expression "local_50 / uVar9 + 2" (binary_expression "local_50 / uVar9" identifier / identifier) + number_literal) ))))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) }) (else_clause "else {\n        local_70 = local_68->_mp_d;\n      }" else (compound_statement "{\n        local_70 = local_68->_mp_d;\n      }" { (expression_statement "local_70 = local_68->_mp_d;" (assignment_expression "local_70 = local_68->_mp_d" identifier = (field_expression "local_68->_mp_d" identifier -> field_identifier)) ;) }))) (goto_statement "goto LAB_00027988;" goto statement_identifier ;) })) (if_statement "if (m == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }\n    else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }" if (parenthesized_expression "(m == 1)" ( (binary_expression "m == 1" identifier == number_literal) )) (compound_statement "{\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = local_50;\n    }" { (if_statement "if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }" if (parenthesized_expression "(local_6c == 2)" ( (binary_expression "local_6c == 2" identifier == number_literal) )) (compound_statement "{\n        __gmpz_2fac_ui(local_68,n * 2);\n        puVar8 = auStack_7c;\n        goto LAB_00027a58;\n      }" { (expression_statement "__gmpz_2fac_ui(local_68,n * 2);" (call_expression "__gmpz_2fac_ui(local_68,n * 2)" identifier (argument_list "(local_68,n * 2)" ( identifier , (binary_expression "n * 2" identifier * number_literal) ))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "local_50 = n;" (assignment_expression "local_50 = n" identifier = identifier) ;) (expression_statement "__gmpz_init(t);" (call_expression "__gmpz_init(t)" identifier (argument_list "(t)" ( identifier ))) ;) (expression_statement "__gmpz_fac_ui(t,local_50);" (call_expression "__gmpz_fac_ui(t,local_50)" identifier (argument_list "(t,local_50)" ( identifier , identifier ))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) (expression_statement "sn = local_50;" (assignment_expression "sn = local_50" identifier = identifier) ;) }) (else_clause "else {\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }" else (compound_statement "{\n      local_50 = n;\n      __gmpz_init(t);\n      __gmpz_2fac_ui(t,local_50);\n      puVar8 = auStack_7c;\n      sn = (local_50 >> 1) + 1;\n    }" { (expression_statement "local_50 = n;" (assignment_expression "local_50 = n" identifier = identifier) ;) (expression_statement "__gmpz_init(t);" (call_expression "__gmpz_init(t)" identifier (argument_list "(t)" ( identifier ))) ;) (expression_statement "__gmpz_2fac_ui(t,local_50);" (call_expression "__gmpz_2fac_ui(t,local_50)" identifier (argument_list "(t,local_50)" ( identifier , identifier ))) ;) (expression_statement "puVar8 = auStack_7c;" (assignment_expression "puVar8 = auStack_7c" identifier = identifier) ;) (expression_statement "sn = (local_50 >> 1) + 1;" (assignment_expression "sn = (local_50 >> 1) + 1" identifier = (binary_expression "(local_50 >> 1) + 1" (parenthesized_expression "(local_50 >> 1)" ( (binary_expression "local_50 >> 1" identifier >> number_literal) )) + number_literal)) ;) }))) }))) (expression_statement "*(__mpz_struct **)(puVar8 + -0x10) = p;" (assignment_expression "*(__mpz_struct **)(puVar8 + -0x10) = p" (pointer_expression "*(__mpz_struct **)(puVar8 + -0x10)" * (cast_expression "(__mpz_struct **)(puVar8 + -0x10)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27ae8;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27ae8" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_init(*(mpz_ptr *)(puVar8 + -0x10));" (call_expression "__gmpz_init(*(mpz_ptr *)(puVar8 + -0x10))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) ))) ;) (expression_statement "*(mp_limb_t *)(puVar8 + -8) = sn;" (assignment_expression "*(mp_limb_t *)(puVar8 + -8) = sn" (pointer_expression "*(mp_limb_t *)(puVar8 + -8)" * (cast_expression "(mp_limb_t *)(puVar8 + -8)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar8 + -0xc) = local_6c;" (assignment_expression "*(uint *)(puVar8 + -0xc) = local_6c" (pointer_expression "*(uint *)(puVar8 + -0xc)" * (cast_expression "(uint *)(puVar8 + -0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(__mpz_struct **)(puVar8 + -0x10) = p;" (assignment_expression "*(__mpz_struct **)(puVar8 + -0x10) = p" (pointer_expression "*(__mpz_struct **)(puVar8 + -0x10)" * (cast_expression "(__mpz_struct **)(puVar8 + -0x10)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27afa;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27afa" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_ui_pow_ui(*(mpz_ptr *)(puVar8 + -0x10),*(ulong *)(puVar8 + -0xc),*(ulong *)(puVar8 + -8));" (call_expression "__gmpz_ui_pow_ui(*(mpz_ptr *)(puVar8 + -0x10),*(ulong *)(puVar8 + -0xc),*(ulong *)(puVar8 + -8))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10),*(ulong *)(puVar8 + -0xc),*(ulong *)(puVar8 + -8))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) , (pointer_expression "*(ulong *)(puVar8 + -0xc)" * (cast_expression "(ulong *)(puVar8 + -0xc)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) , (pointer_expression "*(ulong *)(puVar8 + -8)" * (cast_expression "(ulong *)(puVar8 + -8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) ))) ;) (expression_statement "*(__mpz_struct **)(puVar8 + -8) = t;" (assignment_expression "*(__mpz_struct **)(puVar8 + -8) = t" (pointer_expression "*(__mpz_struct **)(puVar8 + -8)" * (cast_expression "(__mpz_struct **)(puVar8 + -8)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(__mpz_struct **)(puVar8 + -0xc) = p;" (assignment_expression "*(__mpz_struct **)(puVar8 + -0xc) = p" (pointer_expression "*(__mpz_struct **)(puVar8 + -0xc)" * (cast_expression "(__mpz_struct **)(puVar8 + -0xc)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(mpz_ptr *)(puVar8 + -0x10) = local_68;" (assignment_expression "*(mpz_ptr *)(puVar8 + -0x10) = local_68" (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27b0a;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27b0a" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_mul(*(mpz_ptr *)(puVar8 + -0x10),*(mpz_srcptr *)(puVar8 + -0xc),\n             *(mpz_srcptr *)(puVar8 + -8));" (call_expression "__gmpz_mul(*(mpz_ptr *)(puVar8 + -0x10),*(mpz_srcptr *)(puVar8 + -0xc),\n             *(mpz_srcptr *)(puVar8 + -8))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10),*(mpz_srcptr *)(puVar8 + -0xc),\n             *(mpz_srcptr *)(puVar8 + -8))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) , (pointer_expression "*(mpz_srcptr *)(puVar8 + -0xc)" * (cast_expression "(mpz_srcptr *)(puVar8 + -0xc)" ( (type_descriptor "mpz_srcptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0xc)" ( (binary_expression "puVar8 + -0xc" identifier + number_literal) )))) , (pointer_expression "*(mpz_srcptr *)(puVar8 + -8)" * (cast_expression "(mpz_srcptr *)(puVar8 + -8)" ( (type_descriptor "mpz_srcptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -8)" ( (binary_expression "puVar8 + -8" identifier + number_literal) )))) ))) ;) (expression_statement "*(__mpz_struct **)(puVar8 + -0x10) = p;" (assignment_expression "*(__mpz_struct **)(puVar8 + -0x10) = p" (pointer_expression "*(__mpz_struct **)(puVar8 + -0x10)" * (cast_expression "(__mpz_struct **)(puVar8 + -0x10)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27b17;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27b17" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));" (call_expression "__gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) ))) ;) (expression_statement "*(__mpz_struct **)(puVar8 + -0x10) = t;" (assignment_expression "*(__mpz_struct **)(puVar8 + -0x10) = t" (pointer_expression "*(__mpz_struct **)(puVar8 + -0x10)" * (cast_expression "(__mpz_struct **)(puVar8 + -0x10)" ( (type_descriptor "__mpz_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar8 + -0x14) = 0x27b1f;" (assignment_expression "*(undefined4 *)(puVar8 + -0x14) = 0x27b1f" (pointer_expression "*(undefined4 *)(puVar8 + -0x14)" * (cast_expression "(undefined4 *)(puVar8 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x14)" ( (binary_expression "puVar8 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10));" (call_expression "__gmpz_clear(*(mpz_ptr *)(puVar8 + -0x10))" identifier (argument_list "(*(mpz_ptr *)(puVar8 + -0x10))" ( (pointer_expression "*(mpz_ptr *)(puVar8 + -0x10)" * (cast_expression "(mpz_ptr *)(puVar8 + -0x10)" ( (type_descriptor "mpz_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -0x10)" ( (binary_expression "puVar8 + -0x10" identifier + number_literal) )))) ))) ;) (labeled_statement "LAB_00027a58:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar8 + -4) = 0x27cf3;\n    __stack_chk_fail_local();\n  }" statement_identifier : (if_statement "if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar8 + -4) = 0x27cf3;\n    __stack_chk_fail_local();\n  }" if (parenthesized_expression "(iVar1 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar1 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    *(undefined4 *)(puVar8 + -4) = 0x27cf3;\n    __stack_chk_fail_local();\n  }" { comment (expression_statement "*(undefined4 *)(puVar8 + -4) = 0x27cf3;" (assignment_expression "*(undefined4 *)(puVar8 + -4) = 0x27cf3" (pointer_expression "*(undefined4 *)(puVar8 + -4)" * (cast_expression "(undefined4 *)(puVar8 + -4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar8 + -4)" ( (binary_expression "puVar8 + -4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void __gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}\n\n" (function_definition "void __gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}" primitive_type (function_declarator "__gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)" identifier (parameter_list "(uint *param_1,uint param_2,uint param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulonglong uVar2;" type_identifier identifier ;) (declaration "ulonglong uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined1 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "undefined1 auStack_7c [12];" type_identifier (array_declarator "auStack_7c [12]" identifier [ number_literal ]) ;) (declaration "uint *local_70;" type_identifier (pointer_declarator "*local_70" * identifier) ;) (declaration "uint local_6c;" type_identifier identifier ;) (declaration "uint *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "uint local_64;" type_identifier identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "uint *local_5c;" type_identifier (pointer_declarator "*local_5c" * identifier) ;) (declaration "undefined **local_58;" type_identifier (pointer_declarator "**local_58" * (pointer_declarator "*local_58" * identifier)) ;) (declaration "uint *local_54;" type_identifier (pointer_declarator "*local_54" * identifier) ;) (declaration "uint local_50;" type_identifier identifier ;) (declaration "uint local_40;" type_identifier identifier ;) (declaration "int local_3c;" primitive_type identifier ;) (declaration "undefined1 local_38 [12];" type_identifier (array_declarator "local_38 [12]" identifier [ number_literal ]) ;) (declaration "undefined1 local_2c [12];" type_identifier (array_declarator "local_2c [12]" identifier [ number_literal ]) ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "local_58 = &__DT_PLTGOT;" (assignment_expression "local_58 = &__DT_PLTGOT" identifier = (pointer_expression "&__DT_PLTGOT" & identifier)) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (expression_statement "local_68 = param_1;" (assignment_expression "local_68 = param_1" identifier = identifier) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (if_statement "if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }" if (parenthesized_expression "((param_2 - 3 < param_3 - 1) || (param_2 < 3))" ( (binary_expression "(param_2 - 3 < param_3 - 1) || (param_2 < 3)" (parenthesized_expression "(param_2 - 3 < param_3 - 1)" ( (binary_expression "param_2 - 3 < param_3 - 1" (binary_expression "param_2 - 3" identifier - number_literal) < (binary_expression "param_3 - 1" identifier - number_literal)) )) || (parenthesized_expression "(param_2 < 3)" ( (binary_expression "param_2 < 3" identifier < number_literal) ))) )) (compound_statement "{\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }" { (expression_statement "*(uint *)param_1[2] = (param_2 == 0) + param_2;" (assignment_expression "*(uint *)param_1[2] = (param_2 == 0) + param_2" (pointer_expression "*(uint *)param_1[2]" * (cast_expression "(uint *)param_1[2]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) = (binary_expression "(param_2 == 0) + param_2" (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) + identifier)) ;) (expression_statement "param_1[1] = 1;" (assignment_expression "param_1[1] = 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "local_40 = param_2;" (assignment_expression "local_40 = param_2" identifier = identifier) ;) (expression_statement "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);" (assignment_expression "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3)" identifier = (call_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_00098d94 + 0x34)" ( (binary_expression "PTR___gmpn_cpuvec_00098d94 + 0x34" identifier + number_literal) ))))) )) (argument_list "(&local_40,1,param_3)" ( (pointer_expression "&local_40" & identifier) , number_literal , identifier )))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (if_statement "if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" if (parenthesized_expression "(local_6c < 2)" ( (binary_expression "local_6c < 2" identifier < number_literal) )) (compound_statement "{\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }" { (if_statement "if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" if (parenthesized_expression "(param_3 < 3)" ( (binary_expression "param_3 < 3" identifier < number_literal) )) (compound_statement "{\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" { (if_statement "if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" { (expression_statement "__gmpz_fac_ui(local_68,param_2);" (call_expression "__gmpz_fac_ui(local_68,param_2)" identifier (argument_list "(local_68,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }) (else_clause "else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" else (compound_statement "{\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" { (expression_statement "__gmpz_2fac_ui(local_68,param_2);" (call_expression "__gmpz_2fac_ui(local_68,param_2)" identifier (argument_list "(local_68,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }))) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "local_3c = 0;" (assignment_expression "local_3c = 0" identifier = number_literal) ;) (expression_statement "local_64 = param_2 - param_3;" (assignment_expression "local_64 = param_2 - param_3" identifier = (binary_expression "param_2 - param_3" identifier - identifier)) ;) (expression_statement "local_50 = param_2 / param_3 + 1;" (assignment_expression "local_50 = param_2 / param_3 + 1" identifier = (binary_expression "param_2 / param_3 + 1" (binary_expression "param_2 / param_3" identifier / identifier) + number_literal)) ;) (expression_statement "puVar1 = local_58[-0x68];" (assignment_expression "puVar1 = local_58[-0x68]" identifier = (subscript_expression "local_58[-0x68]" identifier [ number_literal ])) ;) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (do_statement "do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" do (compound_statement "{\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" * (cast_expression "(uint *)(puVar1 + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + uVar9 * 4)" ( (binary_expression "puVar1 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" identifier = identifier) ;) (if_statement "if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" if (parenthesized_expression "((local_50 / uVar8) * 4 + 8 < 0x7f01)" ( (binary_expression "(local_50 / uVar8) * 4 + 8 < 0x7f01" (binary_expression "(local_50 / uVar8) * 4 + 8" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" ( (binary_expression "local_50 / uVar8" identifier / identifier) )) * number_literal) + number_literal) < number_literal) )) (compound_statement "{\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }" { (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" do (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" * (cast_expression "(uint *)(puVar1 + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + uVar9 * 4)" ( (binary_expression "puVar1 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);" (assignment_expression "iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" identifier = (unary_expression "-((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" - (parenthesized_expression "((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" ( (binary_expression "(local_50 / uVar8) * 4 + 0x23 & 0xfffffff0" (binary_expression "(local_50 / uVar8) * 4 + 0x23" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" ( (binary_expression "local_50 / uVar8" identifier / identifier) )) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "puVar7 = auStack_7c + iVar6;" (assignment_expression "puVar7 = auStack_7c + iVar6" identifier = (binary_expression "auStack_7c + iVar6" identifier + identifier)) ;) (expression_statement "local_70 = (uint *)((int)&local_70 + iVar6);" (assignment_expression "local_70 = (uint *)((int)&local_70 + iVar6)" identifier = (cast_expression "(uint *)((int)&local_70 + iVar6)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_70 + iVar6)" ( (binary_expression "(int)&local_70 + iVar6" (cast_expression "(int)&local_70" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_70" & identifier)) + identifier) )))) ;) }) (else_clause "else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" else (compound_statement "{\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" { (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" do (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" * (cast_expression "(uint *)(puVar1 + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + uVar9 * 4)" ( (binary_expression "puVar1 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);" (assignment_expression "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" identifier = (cast_expression "(uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" identifier (argument_list "(&local_3c,(local_50 / uVar8) * 4 + 8)" ( (pointer_expression "&local_3c" & identifier) , (binary_expression "(local_50 / uVar8) * 4 + 8" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" ( (binary_expression "local_50 / uVar8" identifier / identifier) )) * number_literal) + number_literal) ))))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }))) (labeled_statement "LAB_00027988:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) (expression_statement "uVar9 = local_64;" (assignment_expression "uVar9 = local_64" identifier = identifier) ;) (if_statement "if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" if (parenthesized_expression "(param_3 < local_64)" ( (binary_expression "param_3 < local_64" identifier < identifier) )) (compound_statement "{\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }" { (do_statement "do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);" do (compound_statement "{\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      }" { (while_statement "while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);" (assignment_expression "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" identifier = (call_expression "(uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0" (cast_expression "(int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)local_64 * (ulonglong)param_2 >> 0x20)" ( (binary_expression "(ulonglong)local_64 * (ulonglong)param_2 >> 0x20" (binary_expression "(ulonglong)local_64 * (ulonglong)param_2" (cast_expression "(ulonglong)local_64" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) != number_literal) )))) ;) (expression_statement "local_60 = iVar6 + 1;" (assignment_expression "local_60 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "local_54 = local_70 + iVar6 + 1;" (assignment_expression "local_54 = local_70 + iVar6 + 1" identifier = (binary_expression "local_70 + iVar6 + 1" (binary_expression "local_70 + iVar6" identifier + identifier) + number_literal)) ;) (if_statement "if (local_50 != 0) break;" if (parenthesized_expression "(local_50 != 0)" ( (binary_expression "local_50 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "param_2 = param_2 * uVar8;" (assignment_expression "param_2 = param_2 * uVar8" identifier = (binary_expression "param_2 * uVar8" identifier * identifier)) ;) (expression_statement "uVar9 = uVar8 - param_3;" (assignment_expression "uVar9 = uVar8 - param_3" identifier = (binary_expression "uVar8 - param_3" identifier - identifier)) ;) (expression_statement "puVar4 = local_54;" (assignment_expression "puVar4 = local_54" identifier = identifier) ;) (expression_statement "uVar8 = param_2;" (assignment_expression "uVar8 = param_2" identifier = identifier) ;) (expression_statement "local_5c = local_70 + iVar6;" (assignment_expression "local_5c = local_70 + iVar6" identifier = (binary_expression "local_70 + iVar6" identifier + identifier)) ;) (if_statement "if (uVar9 <= param_3) goto LAB_000279f9;" if (parenthesized_expression "(uVar9 <= param_3)" ( (binary_expression "uVar9 <= param_3" identifier <= identifier) )) (goto_statement "goto LAB_000279f9;" goto statement_identifier ;)) })) (expression_statement "puVar4 = local_70 + iVar6 + 2;" (assignment_expression "puVar4 = local_70 + iVar6 + 2" identifier = (binary_expression "local_70 + iVar6 + 2" (binary_expression "local_70 + iVar6" identifier + identifier) + number_literal)) ;) (expression_statement "local_70[iVar6] = param_2;" (assignment_expression "local_70[iVar6] = param_2" (subscript_expression "local_70[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "uVar9 = uVar8 - param_3;" (assignment_expression "uVar9 = uVar8 - param_3" identifier = (binary_expression "uVar8 - param_3" identifier - identifier)) ;) (expression_statement "iVar6 = local_60;" (assignment_expression "iVar6 = local_60" identifier = identifier) ;) (expression_statement "param_2 = uVar8;" (assignment_expression "param_2 = uVar8" identifier = identifier) ;) (expression_statement "local_5c = local_54;" (assignment_expression "local_5c = local_54" identifier = identifier) ;) }) while (parenthesized_expression "(param_3 < uVar9)" ( (binary_expression "param_3 < uVar9" identifier < identifier) )) ;) (labeled_statement "LAB_000279f9:\n      iVar6 = iVar6 + 2;" statement_identifier : (expression_statement "iVar6 = iVar6 + 2;" (assignment_expression "iVar6 = iVar6 + 2" identifier = (binary_expression "iVar6 + 2" identifier + number_literal)) ;)) (expression_statement "puVar5 = local_5c;" (assignment_expression "puVar5 = local_5c" identifier = identifier) ;) (expression_statement "param_2 = uVar8;" (assignment_expression "param_2 = uVar8" identifier = identifier) ;) }) (else_clause "else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" else (compound_statement "{\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" { (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;) (expression_statement "puVar4 = local_70 + 1;" (assignment_expression "puVar4 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = local_70;" (assignment_expression "puVar5 = local_70" identifier = identifier) ;) }))) (expression_statement "*puVar5 = uVar9;" (assignment_expression "*puVar5 = uVar9" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "*puVar4 = param_2;" (assignment_expression "*puVar4 = param_2" (pointer_expression "*puVar4" * identifier) = identifier) ;) (if_statement "if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }" if (parenthesized_expression "(local_6c < 2)" ( (binary_expression "local_6c < 2" identifier < number_literal) )) (compound_statement "{\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }" { (expression_statement "*(int *)(puVar7 + -8) = iVar6;" (assignment_expression "*(int *)(puVar7 + -8) = iVar6" (pointer_expression "*(int *)(puVar7 + -8)" * (cast_expression "(int *)(puVar7 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar7 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar7 + -0xc)" * (cast_expression "(uint **)(puVar7 + -0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0x10) = local_68;" (assignment_expression "*(uint **)(puVar7 + -0x10) = local_68" (pointer_expression "*(uint **)(puVar7 + -0x10)" * (cast_expression "(uint **)(puVar7 + -0x10)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27c0a;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27c0a" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_prodlimbs();" (call_expression "__gmpz_prodlimbs()" identifier (argument_list "()" ( ))) ;) (if_statement "if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }" if (parenthesized_expression "(local_3c != 0)" ( (binary_expression "local_3c != 0" identifier != number_literal) )) (compound_statement "{\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }" { (expression_statement "*(int *)(puVar7 + -0x10) = local_3c;" (assignment_expression "*(int *)(puVar7 + -0x10) = local_3c" (pointer_expression "*(int *)(puVar7 + -0x10)" * (cast_expression "(int *)(puVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27c24;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27c24" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmp_tmp_reentrant_free();" (call_expression "__gmp_tmp_reentrant_free()" identifier (argument_list "()" ( ))) ;) })) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27a1e;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27a1e" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_init();" (call_expression "__gmpz_init()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(puVar7 + -8) = iVar6;" (assignment_expression "*(int *)(puVar7 + -8) = iVar6" (pointer_expression "*(int *)(puVar7 + -8)" * (cast_expression "(int *)(puVar7 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar7 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar7 + -0xc)" * (cast_expression "(uint **)(puVar7 + -0xc)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27a2e;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27a2e" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_prodlimbs();" (call_expression "__gmpz_prodlimbs()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" else (compound_statement "{\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" { (expression_statement "uVar2 = (ulonglong)param_2;" (assignment_expression "uVar2 = (ulonglong)param_2" identifier = (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ;) (expression_statement "param_2 = (uint)(uVar2 / local_6c);" (assignment_expression "param_2 = (uint)(uVar2 / local_6c)" identifier = (call_expression "(uint)(uVar2 / local_6c)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 / local_6c)" ( (binary_expression "uVar2 / local_6c" identifier / identifier) )))) ;) (expression_statement "uVar3 = (ulonglong)param_3;" (assignment_expression "uVar3 = (ulonglong)param_3" identifier = (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ;) (expression_statement "param_3 = (uint)(uVar3 / local_6c);" (assignment_expression "param_3 = (uint)(uVar3 / local_6c)" identifier = (call_expression "(uint)(uVar3 / local_6c)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar3 / local_6c)" ( (binary_expression "uVar3 / local_6c" identifier / identifier) )))) ;) (if_statement "if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }" if (parenthesized_expression "(2 < param_3)" ( (binary_expression "2 < param_3" number_literal < identifier) )) (compound_statement "{\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }" { (expression_statement "local_64 = param_2 - param_3;" (assignment_expression "local_64 = param_2 - param_3" identifier = (binary_expression "param_2 - param_3" identifier - identifier)) ;) (expression_statement "local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;" (assignment_expression "local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1" identifier = (binary_expression "(int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1" (cast_expression "(int)((uVar2 / local_6c) / (uVar3 / local_6c))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uVar2 / local_6c) / (uVar3 / local_6c))" ( (binary_expression "(uVar2 / local_6c) / (uVar3 / local_6c)" (parenthesized_expression "(uVar2 / local_6c)" ( (binary_expression "uVar2 / local_6c" identifier / identifier) )) / (parenthesized_expression "(uVar3 / local_6c)" ( (binary_expression "uVar3 / local_6c" identifier / identifier) ))) ))) + number_literal)) ;) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);" do (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar9 * 4)" * (cast_expression "(uint *)(local_58[-0x68] + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58[-0x68] + uVar9 * 4)" ( (binary_expression "local_58[-0x68] + uVar9 * 4" (subscript_expression "local_58[-0x68]" identifier [ number_literal ]) + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" identifier = identifier) ;) (if_statement "if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }" if (parenthesized_expression "(*local_68 < local_50 / uVar8 + 2)" ( (binary_expression "*local_68 < local_50 / uVar8 + 2" (pointer_expression "*local_68" * identifier) < (binary_expression "local_50 / uVar8 + 2" (binary_expression "local_50 / uVar8" identifier / identifier) + number_literal)) )) (compound_statement "{\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }" { (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" identifier = number_literal) ;) (do_statement "do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);" do (compound_statement "{\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        }" { (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64)" ( (binary_expression "*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar9 * 4)" * (cast_expression "(uint *)(local_58[-0x68] + uVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58[-0x68] + uVar9 * 4)" ( (binary_expression "local_58[-0x68] + uVar9 * 4" (subscript_expression "local_58[-0x68]" identifier [ number_literal ]) + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) < identifier) )) ;) (expression_statement "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);" (assignment_expression "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2)" identifier = (cast_expression "(uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(local_68,local_50 / uVar8 + 2)" identifier (argument_list "(local_68,local_50 / uVar8 + 2)" ( identifier , (binary_expression "local_50 / uVar8 + 2" (binary_expression "local_50 / uVar8" identifier / identifier) + number_literal) ))))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) }) (else_clause "else {\n        local_70 = (uint *)local_68[2];\n      }" else (compound_statement "{\n        local_70 = (uint *)local_68[2];\n      }" { (expression_statement "local_70 = (uint *)local_68[2];" (assignment_expression "local_70 = (uint *)local_68[2]" identifier = (cast_expression "(uint *)local_68[2]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_68[2]" identifier [ number_literal ]))) ;) }))) (goto_statement "goto LAB_00027988;" goto statement_identifier ;) })) (if_statement "if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" if (parenthesized_expression "(param_3 == 1)" ( (binary_expression "param_3 == 1" identifier == number_literal) )) (compound_statement "{\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }" { (if_statement "if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }" if (parenthesized_expression "(local_6c == 2)" ( (binary_expression "local_6c == 2" identifier == number_literal) )) (compound_statement "{\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }" { (expression_statement "__gmpz_2fac_ui(local_68,param_2 * 2);" (call_expression "__gmpz_2fac_ui(local_68,param_2 * 2)" identifier (argument_list "(local_68,param_2 * 2)" ( identifier , (binary_expression "param_2 * 2" identifier * number_literal) ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (goto_statement "goto LAB_00027a58;" goto statement_identifier ;) })) (expression_statement "local_50 = param_2;" (assignment_expression "local_50 = param_2" identifier = identifier) ;) (expression_statement "__gmpz_init(local_38);" (call_expression "__gmpz_init(local_38)" identifier (argument_list "(local_38)" ( identifier ))) ;) (expression_statement "__gmpz_fac_ui(local_38,local_50);" (call_expression "__gmpz_fac_ui(local_38,local_50)" identifier (argument_list "(local_38,local_50)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" identifier = identifier) ;) }) (else_clause "else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" else (compound_statement "{\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" { (expression_statement "local_50 = param_2;" (assignment_expression "local_50 = param_2" identifier = identifier) ;) (expression_statement "__gmpz_init(local_38);" (call_expression "__gmpz_init(local_38)" identifier (argument_list "(local_38)" ( identifier ))) ;) (expression_statement "__gmpz_2fac_ui(local_38,local_50);" (call_expression "__gmpz_2fac_ui(local_38,local_50)" identifier (argument_list "(local_38,local_50)" ( identifier , identifier ))) ;) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" identifier = identifier) ;) (expression_statement "local_40 = (local_50 >> 1) + 1;" (assignment_expression "local_40 = (local_50 >> 1) + 1" identifier = (binary_expression "(local_50 >> 1) + 1" (parenthesized_expression "(local_50 >> 1)" ( (binary_expression "local_50 >> 1" identifier >> number_literal) )) + number_literal)) ;) }))) }))) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27ae8;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27ae8" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_init();" (call_expression "__gmpz_init()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(uint *)(puVar7 + -8) = local_40;" (assignment_expression "*(uint *)(puVar7 + -8) = local_40" (pointer_expression "*(uint *)(puVar7 + -8)" * (cast_expression "(uint *)(puVar7 + -8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar7 + -0xc) = local_6c;" (assignment_expression "*(uint *)(puVar7 + -0xc) = local_6c" (pointer_expression "*(uint *)(puVar7 + -0xc)" * (cast_expression "(uint *)(puVar7 + -0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27afa;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27afa" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_ui_pow_ui();" (call_expression "__gmpz_ui_pow_ui()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined1 **)(puVar7 + -8) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -8) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -8)" * (cast_expression "(undefined1 **)(puVar7 + -8)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -8)" ( (binary_expression "puVar7 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 **)(puVar7 + -0xc) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0xc) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0xc)" * (cast_expression "(undefined1 **)(puVar7 + -0xc)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0xc)" ( (binary_expression "puVar7 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint **)(puVar7 + -0x10) = local_68;" (assignment_expression "*(uint **)(puVar7 + -0x10) = local_68" (pointer_expression "*(uint **)(puVar7 + -0x10)" * (cast_expression "(uint **)(puVar7 + -0x10)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b0a;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b0a" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_mul();" (call_expression "__gmpz_mul()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b17;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b17" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_clear();" (call_expression "__gmpz_clear()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" * (cast_expression "(undefined1 **)(puVar7 + -0x10)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x10)" ( (binary_expression "puVar7 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b1f;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b1f" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" * (cast_expression "(undefined4 *)(puVar7 + -0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -0x14)" ( (binary_expression "puVar7 + -0x14" identifier + number_literal) )))) = number_literal) ;) (expression_statement "__gmpz_clear();" (call_expression "__gmpz_clear()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" { (expression_statement "*(undefined4 *)(puVar7 + -4) = 0x27cf3;" (assignment_expression "*(undefined4 *)(puVar7 + -4) = 0x27cf3" (pointer_expression "*(undefined4 *)(puVar7 + -4)" * (cast_expression "(undefined4 *)(puVar7 + -4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + -4)" ( (binary_expression "puVar7 + -4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_00079d30();" (call_expression "FUN_00079d30()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < (binary_expression IDENT - LIT)) )) || (parenthesized_expression ( (binary_expression IDENT < LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) = (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (pointer_expression & IDENT) , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT / IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) < IDENT) )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT / IDENT) )) * LIT) + LIT) < LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (unary_expression - (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT / IDENT) )) * LIT) + LIT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & IDENT)) + IDENT) )))) ;) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT / IDENT) )) * LIT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT) ))) != LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT / IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT / IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT / IDENT) )) / (parenthesized_expression ( (binary_expression IDENT / IDENT) ))) ))) + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) < IDENT) )) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < (binary_expression (binary_expression IDENT / IDENT) + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression IDENT / IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) }))) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + LIT)) ;) }))) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return ;) })))
(function_definition "void __gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}" (primitive_type "void") (function_declarator "__gmpz_mfac_uiui(uint *param_1,uint param_2,uint param_3)" (identifier "__gmpz_mfac_uiui") (parameter_list "(uint *param_1,uint param_2,uint param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  ulonglong uVar2;\n  ulonglong uVar3;\n  uint *puVar4;\n  uint *puVar5;\n  int iVar6;\n  undefined1 *puVar7;\n  uint uVar8;\n  uint uVar9;\n  int in_GS_OFFSET;\n  undefined1 auStack_7c [12];\n  uint *local_70;\n  uint local_6c;\n  uint *local_68;\n  uint local_64;\n  int local_60;\n  uint *local_5c;\n  undefined **local_58;\n  uint *local_54;\n  uint local_50;\n  uint local_40;\n  int local_3c;\n  undefined1 local_38 [12];\n  undefined1 local_2c [12];\n  int local_20;\n  \n  local_58 = &__DT_PLTGOT;\n  puVar7 = auStack_7c;\n  local_68 = param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }\n  local_40 = param_2;\n  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);\n  puVar7 = auStack_7c;\n  if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;\n  __gmpz_init();\n  *(uint *)(puVar7 + -8) = local_40;\n  *(uint *)(puVar7 + -0xc) = local_6c;\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;\n  __gmpz_ui_pow_ui();\n  *(undefined1 **)(puVar7 + -8) = local_38;\n  *(undefined1 **)(puVar7 + -0xc) = local_2c;\n  *(uint **)(puVar7 + -0x10) = local_68;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;\n  __gmpz_mul();\n  *(undefined1 **)(puVar7 + -0x10) = local_2c;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;\n  __gmpz_clear();\n  *(undefined1 **)(puVar7 + -0x10) = local_38;\n  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;\n  __gmpz_clear();\nLAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }\n  return;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "ulonglong uVar2;" (type_identifier "ulonglong") (identifier "uVar2") (; ";")) (declaration "ulonglong uVar3;" (type_identifier "ulonglong") (identifier "uVar3") (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined1 *puVar7;" (type_identifier "undefined1") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "undefined1 auStack_7c [12];" (type_identifier "undefined1") (array_declarator "auStack_7c [12]" (identifier "auStack_7c") ([ "[") (number_literal "12") (] "]")) (; ";")) (declaration "uint *local_70;" (type_identifier "uint") (pointer_declarator "*local_70" (* "*") (identifier "local_70")) (; ";")) (declaration "uint local_6c;" (type_identifier "uint") (identifier "local_6c") (; ";")) (declaration "uint *local_68;" (type_identifier "uint") (pointer_declarator "*local_68" (* "*") (identifier "local_68")) (; ";")) (declaration "uint local_64;" (type_identifier "uint") (identifier "local_64") (; ";")) (declaration "int local_60;" (primitive_type "int") (identifier "local_60") (; ";")) (declaration "uint *local_5c;" (type_identifier "uint") (pointer_declarator "*local_5c" (* "*") (identifier "local_5c")) (; ";")) (declaration "undefined **local_58;" (type_identifier "undefined") (pointer_declarator "**local_58" (* "*") (pointer_declarator "*local_58" (* "*") (identifier "local_58"))) (; ";")) (declaration "uint *local_54;" (type_identifier "uint") (pointer_declarator "*local_54" (* "*") (identifier "local_54")) (; ";")) (declaration "uint local_50;" (type_identifier "uint") (identifier "local_50") (; ";")) (declaration "uint local_40;" (type_identifier "uint") (identifier "local_40") (; ";")) (declaration "int local_3c;" (primitive_type "int") (identifier "local_3c") (; ";")) (declaration "undefined1 local_38 [12];" (type_identifier "undefined1") (array_declarator "local_38 [12]" (identifier "local_38") ([ "[") (number_literal "12") (] "]")) (; ";")) (declaration "undefined1 local_2c [12];" (type_identifier "undefined1") (array_declarator "local_2c [12]" (identifier "local_2c") ([ "[") (number_literal "12") (] "]")) (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (expression_statement "local_58 = &__DT_PLTGOT;" (assignment_expression "local_58 = &__DT_PLTGOT" (identifier "local_58") (= "=") (pointer_expression "&__DT_PLTGOT" (& "&") (identifier "__DT_PLTGOT"))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (expression_statement "local_68 = param_1;" (assignment_expression "local_68 = param_1" (identifier "local_68") (= "=") (identifier "param_1")) (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (if_statement "if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }" (if "if") (parenthesized_expression "((param_2 - 3 < param_3 - 1) || (param_2 < 3))" (( "(") (binary_expression "(param_2 - 3 < param_3 - 1) || (param_2 < 3)" (parenthesized_expression "(param_2 - 3 < param_3 - 1)" (( "(") (binary_expression "param_2 - 3 < param_3 - 1" (binary_expression "param_2 - 3" (identifier "param_2") (- "-") (number_literal "3")) (< "<") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1"))) () ")")) (|| "||") (parenthesized_expression "(param_2 < 3)" (( "(") (binary_expression "param_2 < 3" (identifier "param_2") (< "<") (number_literal "3")) () ")"))) () ")")) (compound_statement "{\n    *(uint *)param_1[2] = (param_2 == 0) + param_2;\n    param_1[1] = 1;\n    goto LAB_00027a58;\n  }" ({ "{") (expression_statement "*(uint *)param_1[2] = (param_2 == 0) + param_2;" (assignment_expression "*(uint *)param_1[2] = (param_2 == 0) + param_2" (pointer_expression "*(uint *)param_1[2]" (* "*") (cast_expression "(uint *)param_1[2]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (= "=") (binary_expression "(param_2 == 0) + param_2" (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (+ "+") (identifier "param_2"))) (; ";")) (expression_statement "param_1[1] = 1;" (assignment_expression "param_1[1] = 1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_00027a58;" (goto "goto") (statement_identifier "LAB_00027a58") (; ";")) (} "}"))) (expression_statement "local_40 = param_2;" (assignment_expression "local_40 = param_2" (identifier "local_40") (= "=") (identifier "param_2")) (; ";")) (expression_statement "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);" (assignment_expression "local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3)" (identifier "local_6c") (= "=") (call_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))" (( "(") (pointer_expression "**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" (* "*") (pointer_expression "*(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" (* "*") (cast_expression "(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(PTR___gmpn_cpuvec_00098d94 + 0x34)" (( "(") (binary_expression "PTR___gmpn_cpuvec_00098d94 + 0x34" (identifier "PTR___gmpn_cpuvec_00098d94") (+ "+") (number_literal "0x34")) () ")"))))) () ")")) (argument_list "(&local_40,1,param_3)" (( "(") (pointer_expression "&local_40" (& "&") (identifier "local_40")) (, ",") (number_literal "1") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (if_statement "if (local_6c < 2) {\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }\n  else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" (if "if") (parenthesized_expression "(local_6c < 2)" (( "(") (binary_expression "local_6c < 2" (identifier "local_6c") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }\n    local_3c = 0;\n    local_64 = param_2 - param_3;\n    local_50 = param_2 / param_3 + 1;\n    puVar1 = local_58[-0x68];\n    uVar9 = 8;\n    do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n    uVar9 = 8;\n    local_40 = local_50;\n    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }\nLAB_00027988:\n    iVar6 = 0;\n    uVar9 = local_64;\n    if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }\n    *puVar5 = uVar9;\n    *puVar4 = param_2;\n    if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;\n    __gmpz_init();\n    *(int *)(puVar7 + -8) = iVar6;\n    *(uint **)(puVar7 + -0xc) = local_70;\n    *(undefined1 **)(puVar7 + -0x10) = local_38;\n    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;\n    __gmpz_prodlimbs();\n  }" ({ "{") (if_statement "if (param_3 < 3) {\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" (if "if") (parenthesized_expression "(param_3 < 3)" (( "(") (binary_expression "param_3 < 3" (identifier "param_3") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n      if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      goto LAB_00027a58;\n    }" ({ "{") (if_statement "if (param_3 == 1) {\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" (if "if") (parenthesized_expression "(param_3 == 1)" (( "(") (binary_expression "param_3 == 1" (identifier "param_3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        __gmpz_fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" ({ "{") (expression_statement "__gmpz_fac_ui(local_68,param_2);" (call_expression "__gmpz_fac_ui(local_68,param_2)" (identifier "__gmpz_fac_ui") (argument_list "(local_68,param_2)" (( "(") (identifier "local_68") (, ",") (identifier "param_2") () ")"))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (} "}")) (else_clause "else {\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" (else "else") (compound_statement "{\n        __gmpz_2fac_ui(local_68,param_2);\n        puVar7 = auStack_7c;\n      }" ({ "{") (expression_statement "__gmpz_2fac_ui(local_68,param_2);" (call_expression "__gmpz_2fac_ui(local_68,param_2)" (identifier "__gmpz_2fac_ui") (argument_list "(local_68,param_2)" (( "(") (identifier "local_68") (, ",") (identifier "param_2") () ")"))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (} "}")))) (goto_statement "goto LAB_00027a58;" (goto "goto") (statement_identifier "LAB_00027a58") (; ";")) (} "}"))) (expression_statement "local_3c = 0;" (assignment_expression "local_3c = 0" (identifier "local_3c") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_64 = param_2 - param_3;" (assignment_expression "local_64 = param_2 - param_3" (identifier "local_64") (= "=") (binary_expression "param_2 - param_3" (identifier "param_2") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "local_50 = param_2 / param_3 + 1;" (assignment_expression "local_50 = param_2 / param_3 + 1" (identifier "local_50") (= "=") (binary_expression "param_2 / param_3 + 1" (binary_expression "param_2 / param_3" (identifier "param_2") (/ "/") (identifier "param_3")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar1 = local_58[-0x68];" (assignment_expression "puVar1 = local_58[-0x68]" (identifier "puVar1") (= "=") (subscript_expression "local_58[-0x68]" (identifier "local_58") ([ "[") (number_literal "-0x68") (] "]"))) (; ";")) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" (identifier "uVar9") (= "=") (number_literal "8")) (; ";")) (do_statement "do {\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" (do "do") (compound_statement "{\n      uVar8 = uVar9;\n      uVar9 = uVar8 - 1;\n    }" ({ "{") (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" (identifier "uVar8") (= "=") (identifier "uVar9")) (; ";")) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" (identifier "uVar9") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" (( "(") (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" (* "*") (cast_expression "(uint *)(puVar1 + uVar9 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar1 + uVar9 * 4)" (( "(") (binary_expression "puVar1 + uVar9 * 4" (identifier "puVar1") (+ "+") (binary_expression "uVar9 * 4" (identifier "uVar9") (* "*") (number_literal "4"))) () ")")))) (< "<") (identifier "local_64")) () ")")) (; ";")) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" (identifier "uVar9") (= "=") (number_literal "8")) (; ";")) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" (identifier "local_40") (= "=") (identifier "local_50")) (; ";")) (if_statement "if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }\n    else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" (if "if") (parenthesized_expression "((local_50 / uVar8) * 4 + 8 < 0x7f01)" (( "(") (binary_expression "(local_50 / uVar8) * 4 + 8 < 0x7f01" (binary_expression "(local_50 / uVar8) * 4 + 8" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" (( "(") (binary_expression "local_50 / uVar8" (identifier "local_50") (/ "/") (identifier "uVar8")) () ")")) (* "*") (number_literal "4")) (+ "+") (number_literal "8")) (< "<") (number_literal "0x7f01")) () ")")) (compound_statement "{\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);\n      puVar7 = auStack_7c + iVar6;\n      local_70 = (uint *)((int)&local_70 + iVar6);\n    }" ({ "{") (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" (do "do") (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" ({ "{") (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" (identifier "uVar8") (= "=") (identifier "uVar9")) (; ";")) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" (identifier "uVar9") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" (( "(") (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" (* "*") (cast_expression "(uint *)(puVar1 + uVar9 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar1 + uVar9 * 4)" (( "(") (binary_expression "puVar1 + uVar9 * 4" (identifier "puVar1") (+ "+") (binary_expression "uVar9 * 4" (identifier "uVar9") (* "*") (number_literal "4"))) () ")")))) (< "<") (identifier "local_64")) () ")")) (; ";")) (expression_statement "iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);" (assignment_expression "iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" (identifier "iVar6") (= "=") (unary_expression "-((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" (- "-") (parenthesized_expression "((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0)" (( "(") (binary_expression "(local_50 / uVar8) * 4 + 0x23 & 0xfffffff0" (binary_expression "(local_50 / uVar8) * 4 + 0x23" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" (( "(") (binary_expression "local_50 / uVar8" (identifier "local_50") (/ "/") (identifier "uVar8")) () ")")) (* "*") (number_literal "4")) (+ "+") (number_literal "0x23")) (& "&") (number_literal "0xfffffff0")) () ")")))) (; ";")) (expression_statement "puVar7 = auStack_7c + iVar6;" (assignment_expression "puVar7 = auStack_7c + iVar6" (identifier "puVar7") (= "=") (binary_expression "auStack_7c + iVar6" (identifier "auStack_7c") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "local_70 = (uint *)((int)&local_70 + iVar6);" (assignment_expression "local_70 = (uint *)((int)&local_70 + iVar6)" (identifier "local_70") (= "=") (cast_expression "(uint *)((int)&local_70 + iVar6)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)&local_70 + iVar6)" (( "(") (binary_expression "(int)&local_70 + iVar6" (cast_expression "(int)&local_70" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&local_70" (& "&") (identifier "local_70"))) (+ "+") (identifier "iVar6")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" (else "else") (compound_statement "{\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);\n      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);\n      puVar7 = auStack_7c;\n    }" ({ "{") (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);" (do "do") (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" ({ "{") (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" (identifier "uVar8") (= "=") (identifier "uVar9")) (; ";")) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" (identifier "uVar9") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*(uint *)(puVar1 + uVar9 * 4) < local_64)" (( "(") (binary_expression "*(uint *)(puVar1 + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(puVar1 + uVar9 * 4)" (* "*") (cast_expression "(uint *)(puVar1 + uVar9 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar1 + uVar9 * 4)" (( "(") (binary_expression "puVar1 + uVar9 * 4" (identifier "puVar1") (+ "+") (binary_expression "uVar9 * 4" (identifier "uVar9") (* "*") (number_literal "4"))) () ")")))) (< "<") (identifier "local_64")) () ")")) (; ";")) (expression_statement "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);" (assignment_expression "local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" (identifier "local_70") (= "=") (cast_expression "(uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8)" (identifier "__gmp_tmp_reentrant_alloc") (argument_list "(&local_3c,(local_50 / uVar8) * 4 + 8)" (( "(") (pointer_expression "&local_3c" (& "&") (identifier "local_3c")) (, ",") (binary_expression "(local_50 / uVar8) * 4 + 8" (binary_expression "(local_50 / uVar8) * 4" (parenthesized_expression "(local_50 / uVar8)" (( "(") (binary_expression "local_50 / uVar8" (identifier "local_50") (/ "/") (identifier "uVar8")) () ")")) (* "*") (number_literal "4")) (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (} "}")))) (labeled_statement "LAB_00027988:\n    iVar6 = 0;" (statement_identifier "LAB_00027988") (: ":") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";"))) (expression_statement "uVar9 = local_64;" (assignment_expression "uVar9 = local_64" (identifier "uVar9") (= "=") (identifier "local_64")) (; ";")) (if_statement "if (param_3 < local_64) {\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }\n    else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" (if "if") (parenthesized_expression "(param_3 < local_64)" (( "(") (binary_expression "param_3 < local_64" (identifier "param_3") (< "<") (identifier "local_64")) () ")")) (compound_statement "{\n      do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);\nLAB_000279f9:\n      iVar6 = iVar6 + 2;\n      puVar5 = local_5c;\n      param_2 = uVar8;\n    }" ({ "{") (do_statement "do {\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      } while (param_3 < uVar9);" (do "do") (compound_statement "{\n        while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }\n        puVar4 = local_70 + iVar6 + 2;\n        local_70[iVar6] = param_2;\n        uVar9 = uVar8 - param_3;\n        iVar6 = local_60;\n        param_2 = uVar8;\n        local_5c = local_54;\n      }" ({ "{") (while_statement "while( true ) {\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          uVar8 = uVar9;\n          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);\n          local_60 = iVar6 + 1;\n          local_54 = local_70 + iVar6 + 1;\n          if (local_50 != 0) break;\n          param_2 = param_2 * uVar8;\n          uVar9 = uVar8 - param_3;\n          puVar4 = local_54;\n          uVar8 = param_2;\n          local_5c = local_70 + iVar6;\n          if (uVar9 <= param_3) goto LAB_000279f9;\n        }" ({ "{") (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" (identifier "uVar8") (= "=") (identifier "uVar9")) (; ";")) (expression_statement "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);" (assignment_expression "local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" (identifier "local_50") (= "=") (call_expression "(uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0)" (( "(") (binary_expression "(int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0" (cast_expression "(int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)local_64 * (ulonglong)param_2 >> 0x20)" (( "(") (binary_expression "(ulonglong)local_64 * (ulonglong)param_2 >> 0x20" (binary_expression "(ulonglong)local_64 * (ulonglong)param_2" (cast_expression "(ulonglong)local_64" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "local_64")) (* "*") (cast_expression "(ulonglong)param_2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_2"))) (>> ">>") (number_literal "0x20")) () ")"))) (!= "!=") (number_literal "0")) () ")")))) (; ";")) (expression_statement "local_60 = iVar6 + 1;" (assignment_expression "local_60 = iVar6 + 1" (identifier "local_60") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_54 = local_70 + iVar6 + 1;" (assignment_expression "local_54 = local_70 + iVar6 + 1" (identifier "local_54") (= "=") (binary_expression "local_70 + iVar6 + 1" (binary_expression "local_70 + iVar6" (identifier "local_70") (+ "+") (identifier "iVar6")) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (local_50 != 0) break;" (if "if") (parenthesized_expression "(local_50 != 0)" (( "(") (binary_expression "local_50 != 0" (identifier "local_50") (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "param_2 = param_2 * uVar8;" (assignment_expression "param_2 = param_2 * uVar8" (identifier "param_2") (= "=") (binary_expression "param_2 * uVar8" (identifier "param_2") (* "*") (identifier "uVar8"))) (; ";")) (expression_statement "uVar9 = uVar8 - param_3;" (assignment_expression "uVar9 = uVar8 - param_3" (identifier "uVar9") (= "=") (binary_expression "uVar8 - param_3" (identifier "uVar8") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "puVar4 = local_54;" (assignment_expression "puVar4 = local_54" (identifier "puVar4") (= "=") (identifier "local_54")) (; ";")) (expression_statement "uVar8 = param_2;" (assignment_expression "uVar8 = param_2" (identifier "uVar8") (= "=") (identifier "param_2")) (; ";")) (expression_statement "local_5c = local_70 + iVar6;" (assignment_expression "local_5c = local_70 + iVar6" (identifier "local_5c") (= "=") (binary_expression "local_70 + iVar6" (identifier "local_70") (+ "+") (identifier "iVar6"))) (; ";")) (if_statement "if (uVar9 <= param_3) goto LAB_000279f9;" (if "if") (parenthesized_expression "(uVar9 <= param_3)" (( "(") (binary_expression "uVar9 <= param_3" (identifier "uVar9") (<= "<=") (identifier "param_3")) () ")")) (goto_statement "goto LAB_000279f9;" (goto "goto") (statement_identifier "LAB_000279f9") (; ";"))) (} "}"))) (expression_statement "puVar4 = local_70 + iVar6 + 2;" (assignment_expression "puVar4 = local_70 + iVar6 + 2" (identifier "puVar4") (= "=") (binary_expression "local_70 + iVar6 + 2" (binary_expression "local_70 + iVar6" (identifier "local_70") (+ "+") (identifier "iVar6")) (+ "+") (number_literal "2"))) (; ";")) (expression_statement "local_70[iVar6] = param_2;" (assignment_expression "local_70[iVar6] = param_2" (subscript_expression "local_70[iVar6]" (identifier "local_70") ([ "[") (identifier "iVar6") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "uVar9 = uVar8 - param_3;" (assignment_expression "uVar9 = uVar8 - param_3" (identifier "uVar9") (= "=") (binary_expression "uVar8 - param_3" (identifier "uVar8") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "iVar6 = local_60;" (assignment_expression "iVar6 = local_60" (identifier "iVar6") (= "=") (identifier "local_60")) (; ";")) (expression_statement "param_2 = uVar8;" (assignment_expression "param_2 = uVar8" (identifier "param_2") (= "=") (identifier "uVar8")) (; ";")) (expression_statement "local_5c = local_54;" (assignment_expression "local_5c = local_54" (identifier "local_5c") (= "=") (identifier "local_54")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 < uVar9)" (( "(") (binary_expression "param_3 < uVar9" (identifier "param_3") (< "<") (identifier "uVar9")) () ")")) (; ";")) (labeled_statement "LAB_000279f9:\n      iVar6 = iVar6 + 2;" (statement_identifier "LAB_000279f9") (: ":") (expression_statement "iVar6 = iVar6 + 2;" (assignment_expression "iVar6 = iVar6 + 2" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 2" (identifier "iVar6") (+ "+") (number_literal "2"))) (; ";"))) (expression_statement "puVar5 = local_5c;" (assignment_expression "puVar5 = local_5c" (identifier "puVar5") (= "=") (identifier "local_5c")) (; ";")) (expression_statement "param_2 = uVar8;" (assignment_expression "param_2 = uVar8" (identifier "param_2") (= "=") (identifier "uVar8")) (; ";")) (} "}")) (else_clause "else {\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" (else "else") (compound_statement "{\n      iVar6 = 2;\n      puVar4 = local_70 + 1;\n      puVar5 = local_70;\n    }" ({ "{") (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" (identifier "iVar6") (= "=") (number_literal "2")) (; ";")) (expression_statement "puVar4 = local_70 + 1;" (assignment_expression "puVar4 = local_70 + 1" (identifier "puVar4") (= "=") (binary_expression "local_70 + 1" (identifier "local_70") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar5 = local_70;" (assignment_expression "puVar5 = local_70" (identifier "puVar5") (= "=") (identifier "local_70")) (; ";")) (} "}")))) (expression_statement "*puVar5 = uVar9;" (assignment_expression "*puVar5 = uVar9" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "*puVar4 = param_2;" (assignment_expression "*puVar4 = param_2" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (identifier "param_2")) (; ";")) (if_statement "if (local_6c < 2) {\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }" (if "if") (parenthesized_expression "(local_6c < 2)" (( "(") (binary_expression "local_6c < 2" (identifier "local_6c") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n      *(int *)(puVar7 + -8) = iVar6;\n      *(uint **)(puVar7 + -0xc) = local_70;\n      *(uint **)(puVar7 + -0x10) = local_68;\n      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;\n      __gmpz_prodlimbs();\n      if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }\n      goto LAB_00027a58;\n    }" ({ "{") (expression_statement "*(int *)(puVar7 + -8) = iVar6;" (assignment_expression "*(int *)(puVar7 + -8) = iVar6" (pointer_expression "*(int *)(puVar7 + -8)" (* "*") (cast_expression "(int *)(puVar7 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -8)" (( "(") (binary_expression "puVar7 + -8" (identifier "puVar7") (+ "+") (number_literal "-8")) () ")")))) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "*(uint **)(puVar7 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar7 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar7 + -0xc)" (* "*") (cast_expression "(uint **)(puVar7 + -0xc)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0xc)" (( "(") (binary_expression "puVar7 + -0xc" (identifier "puVar7") (+ "+") (number_literal "-0xc")) () ")")))) (= "=") (identifier "local_70")) (; ";")) (expression_statement "*(uint **)(puVar7 + -0x10) = local_68;" (assignment_expression "*(uint **)(puVar7 + -0x10) = local_68" (pointer_expression "*(uint **)(puVar7 + -0x10)" (* "*") (cast_expression "(uint **)(puVar7 + -0x10)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_68")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27c0a;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27c0a" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27c0a")) (; ";")) (expression_statement "__gmpz_prodlimbs();" (call_expression "__gmpz_prodlimbs()" (identifier "__gmpz_prodlimbs") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (local_3c != 0) {\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }" (if "if") (parenthesized_expression "(local_3c != 0)" (( "(") (binary_expression "local_3c != 0" (identifier "local_3c") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        *(int *)(puVar7 + -0x10) = local_3c;\n        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;\n        __gmp_tmp_reentrant_free();\n      }" ({ "{") (expression_statement "*(int *)(puVar7 + -0x10) = local_3c;" (assignment_expression "*(int *)(puVar7 + -0x10) = local_3c" (pointer_expression "*(int *)(puVar7 + -0x10)" (* "*") (cast_expression "(int *)(puVar7 + -0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_3c")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27c24;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27c24" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27c24")) (; ";")) (expression_statement "__gmp_tmp_reentrant_free();" (call_expression "__gmp_tmp_reentrant_free()" (identifier "__gmp_tmp_reentrant_free") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (goto_statement "goto LAB_00027a58;" (goto "goto") (statement_identifier "LAB_00027a58") (; ";")) (} "}"))) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -0x10)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_38")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27a1e;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27a1e" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27a1e")) (; ";")) (expression_statement "__gmpz_init();" (call_expression "__gmpz_init()" (identifier "__gmpz_init") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(int *)(puVar7 + -8) = iVar6;" (assignment_expression "*(int *)(puVar7 + -8) = iVar6" (pointer_expression "*(int *)(puVar7 + -8)" (* "*") (cast_expression "(int *)(puVar7 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -8)" (( "(") (binary_expression "puVar7 + -8" (identifier "puVar7") (+ "+") (number_literal "-8")) () ")")))) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "*(uint **)(puVar7 + -0xc) = local_70;" (assignment_expression "*(uint **)(puVar7 + -0xc) = local_70" (pointer_expression "*(uint **)(puVar7 + -0xc)" (* "*") (cast_expression "(uint **)(puVar7 + -0xc)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0xc)" (( "(") (binary_expression "puVar7 + -0xc" (identifier "puVar7") (+ "+") (number_literal "-0xc")) () ")")))) (= "=") (identifier "local_70")) (; ";")) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -0x10)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_38")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27a2e;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27a2e" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27a2e")) (; ";")) (expression_statement "__gmpz_prodlimbs();" (call_expression "__gmpz_prodlimbs()" (identifier "__gmpz_prodlimbs") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" (else "else") (compound_statement "{\n    uVar2 = (ulonglong)param_2;\n    param_2 = (uint)(uVar2 / local_6c);\n    uVar3 = (ulonglong)param_3;\n    param_3 = (uint)(uVar3 / local_6c);\n    if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }\n    if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }\n  }" ({ "{") (expression_statement "uVar2 = (ulonglong)param_2;" (assignment_expression "uVar2 = (ulonglong)param_2" (identifier "uVar2") (= "=") (cast_expression "(ulonglong)param_2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_2"))) (; ";")) (expression_statement "param_2 = (uint)(uVar2 / local_6c);" (assignment_expression "param_2 = (uint)(uVar2 / local_6c)" (identifier "param_2") (= "=") (call_expression "(uint)(uVar2 / local_6c)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar2 / local_6c)" (( "(") (binary_expression "uVar2 / local_6c" (identifier "uVar2") (/ "/") (identifier "local_6c")) () ")")))) (; ";")) (expression_statement "uVar3 = (ulonglong)param_3;" (assignment_expression "uVar3 = (ulonglong)param_3" (identifier "uVar3") (= "=") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) (; ";")) (expression_statement "param_3 = (uint)(uVar3 / local_6c);" (assignment_expression "param_3 = (uint)(uVar3 / local_6c)" (identifier "param_3") (= "=") (call_expression "(uint)(uVar3 / local_6c)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar3 / local_6c)" (( "(") (binary_expression "uVar3 / local_6c" (identifier "uVar3") (/ "/") (identifier "local_6c")) () ")")))) (; ";")) (if_statement "if (2 < param_3) {\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }" (if "if") (parenthesized_expression "(2 < param_3)" (( "(") (binary_expression "2 < param_3" (number_literal "2") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n      local_64 = param_2 - param_3;\n      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;\n      uVar9 = 8;\n      do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n      local_40 = local_50;\n      if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }\n      goto LAB_00027988;\n    }" ({ "{") (expression_statement "local_64 = param_2 - param_3;" (assignment_expression "local_64 = param_2 - param_3" (identifier "local_64") (= "=") (binary_expression "param_2 - param_3" (identifier "param_2") (- "-") (identifier "param_3"))) (; ";")) (expression_statement "local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;" (assignment_expression "local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1" (identifier "local_50") (= "=") (binary_expression "(int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1" (cast_expression "(int)((uVar2 / local_6c) / (uVar3 / local_6c))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uVar2 / local_6c) / (uVar3 / local_6c))" (( "(") (binary_expression "(uVar2 / local_6c) / (uVar3 / local_6c)" (parenthesized_expression "(uVar2 / local_6c)" (( "(") (binary_expression "uVar2 / local_6c" (identifier "uVar2") (/ "/") (identifier "local_6c")) () ")")) (/ "/") (parenthesized_expression "(uVar3 / local_6c)" (( "(") (binary_expression "uVar3 / local_6c" (identifier "uVar3") (/ "/") (identifier "local_6c")) () ")"))) () ")"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" (identifier "uVar9") (= "=") (number_literal "8")) (; ";")) (do_statement "do {\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);" (do "do") (compound_statement "{\n        uVar8 = uVar9;\n        uVar9 = uVar8 - 1;\n      }" ({ "{") (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" (identifier "uVar8") (= "=") (identifier "uVar9")) (; ";")) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" (identifier "uVar9") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64)" (( "(") (binary_expression "*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar9 * 4)" (* "*") (cast_expression "(uint *)(local_58[-0x68] + uVar9 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58[-0x68] + uVar9 * 4)" (( "(") (binary_expression "local_58[-0x68] + uVar9 * 4" (subscript_expression "local_58[-0x68]" (identifier "local_58") ([ "[") (number_literal "-0x68") (] "]")) (+ "+") (binary_expression "uVar9 * 4" (identifier "uVar9") (* "*") (number_literal "4"))) () ")")))) (< "<") (identifier "local_64")) () ")")) (; ";")) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" (identifier "local_40") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (*local_68 < local_50 / uVar8 + 2) {\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }\n      else {\n        local_70 = (uint *)local_68[2];\n      }" (if "if") (parenthesized_expression "(*local_68 < local_50 / uVar8 + 2)" (( "(") (binary_expression "*local_68 < local_50 / uVar8 + 2" (pointer_expression "*local_68" (* "*") (identifier "local_68")) (< "<") (binary_expression "local_50 / uVar8 + 2" (binary_expression "local_50 / uVar8" (identifier "local_50") (/ "/") (identifier "uVar8")) (+ "+") (number_literal "2"))) () ")")) (compound_statement "{\n        uVar9 = 8;\n        do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);\n        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);\n        puVar7 = auStack_7c;\n      }" ({ "{") (expression_statement "uVar9 = 8;" (assignment_expression "uVar9 = 8" (identifier "uVar9") (= "=") (number_literal "8")) (; ";")) (do_statement "do {\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);" (do "do") (compound_statement "{\n          uVar8 = uVar9;\n          uVar9 = uVar8 - 1;\n        }" ({ "{") (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" (identifier "uVar8") (= "=") (identifier "uVar9")) (; ";")) (expression_statement "uVar9 = uVar8 - 1;" (assignment_expression "uVar9 = uVar8 - 1" (identifier "uVar9") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64)" (( "(") (binary_expression "*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64" (pointer_expression "*(uint *)(local_58[-0x68] + uVar9 * 4)" (* "*") (cast_expression "(uint *)(local_58[-0x68] + uVar9 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58[-0x68] + uVar9 * 4)" (( "(") (binary_expression "local_58[-0x68] + uVar9 * 4" (subscript_expression "local_58[-0x68]" (identifier "local_58") ([ "[") (number_literal "-0x68") (] "]")) (+ "+") (binary_expression "uVar9 * 4" (identifier "uVar9") (* "*") (number_literal "4"))) () ")")))) (< "<") (identifier "local_64")) () ")")) (; ";")) (expression_statement "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);" (assignment_expression "local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2)" (identifier "local_70") (= "=") (cast_expression "(uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "__gmpz_realloc(local_68,local_50 / uVar8 + 2)" (identifier "__gmpz_realloc") (argument_list "(local_68,local_50 / uVar8 + 2)" (( "(") (identifier "local_68") (, ",") (binary_expression "local_50 / uVar8 + 2" (binary_expression "local_50 / uVar8" (identifier "local_50") (/ "/") (identifier "uVar8")) (+ "+") (number_literal "2")) () ")"))))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (} "}")) (else_clause "else {\n        local_70 = (uint *)local_68[2];\n      }" (else "else") (compound_statement "{\n        local_70 = (uint *)local_68[2];\n      }" ({ "{") (expression_statement "local_70 = (uint *)local_68[2];" (assignment_expression "local_70 = (uint *)local_68[2]" (identifier "local_70") (= "=") (cast_expression "(uint *)local_68[2]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "local_68[2]" (identifier "local_68") ([ "[") (number_literal "2") (] "]")))) (; ";")) (} "}")))) (goto_statement "goto LAB_00027988;" (goto "goto") (statement_identifier "LAB_00027988") (; ";")) (} "}"))) (if_statement "if (param_3 == 1) {\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }\n    else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" (if "if") (parenthesized_expression "(param_3 == 1)" (( "(") (binary_expression "param_3 == 1" (identifier "param_3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n      if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = local_50;\n    }" ({ "{") (if_statement "if (local_6c == 2) {\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }" (if "if") (parenthesized_expression "(local_6c == 2)" (( "(") (binary_expression "local_6c == 2" (identifier "local_6c") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n        __gmpz_2fac_ui(local_68,param_2 * 2);\n        puVar7 = auStack_7c;\n        goto LAB_00027a58;\n      }" ({ "{") (expression_statement "__gmpz_2fac_ui(local_68,param_2 * 2);" (call_expression "__gmpz_2fac_ui(local_68,param_2 * 2)" (identifier "__gmpz_2fac_ui") (argument_list "(local_68,param_2 * 2)" (( "(") (identifier "local_68") (, ",") (binary_expression "param_2 * 2" (identifier "param_2") (* "*") (number_literal "2")) () ")"))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (goto_statement "goto LAB_00027a58;" (goto "goto") (statement_identifier "LAB_00027a58") (; ";")) (} "}"))) (expression_statement "local_50 = param_2;" (assignment_expression "local_50 = param_2" (identifier "local_50") (= "=") (identifier "param_2")) (; ";")) (expression_statement "__gmpz_init(local_38);" (call_expression "__gmpz_init(local_38)" (identifier "__gmpz_init") (argument_list "(local_38)" (( "(") (identifier "local_38") () ")"))) (; ";")) (expression_statement "__gmpz_fac_ui(local_38,local_50);" (call_expression "__gmpz_fac_ui(local_38,local_50)" (identifier "__gmpz_fac_ui") (argument_list "(local_38,local_50)" (( "(") (identifier "local_38") (, ",") (identifier "local_50") () ")"))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (expression_statement "local_40 = local_50;" (assignment_expression "local_40 = local_50" (identifier "local_40") (= "=") (identifier "local_50")) (; ";")) (} "}")) (else_clause "else {\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" (else "else") (compound_statement "{\n      local_50 = param_2;\n      __gmpz_init(local_38);\n      __gmpz_2fac_ui(local_38,local_50);\n      puVar7 = auStack_7c;\n      local_40 = (local_50 >> 1) + 1;\n    }" ({ "{") (expression_statement "local_50 = param_2;" (assignment_expression "local_50 = param_2" (identifier "local_50") (= "=") (identifier "param_2")) (; ";")) (expression_statement "__gmpz_init(local_38);" (call_expression "__gmpz_init(local_38)" (identifier "__gmpz_init") (argument_list "(local_38)" (( "(") (identifier "local_38") () ")"))) (; ";")) (expression_statement "__gmpz_2fac_ui(local_38,local_50);" (call_expression "__gmpz_2fac_ui(local_38,local_50)" (identifier "__gmpz_2fac_ui") (argument_list "(local_38,local_50)" (( "(") (identifier "local_38") (, ",") (identifier "local_50") () ")"))) (; ";")) (expression_statement "puVar7 = auStack_7c;" (assignment_expression "puVar7 = auStack_7c" (identifier "puVar7") (= "=") (identifier "auStack_7c")) (; ";")) (expression_statement "local_40 = (local_50 >> 1) + 1;" (assignment_expression "local_40 = (local_50 >> 1) + 1" (identifier "local_40") (= "=") (binary_expression "(local_50 >> 1) + 1" (parenthesized_expression "(local_50 >> 1)" (( "(") (binary_expression "local_50 >> 1" (identifier "local_50") (>> ">>") (number_literal "1")) () ")")) (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (} "}")))) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -0x10)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_2c")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27ae8;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27ae8" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27ae8")) (; ";")) (expression_statement "__gmpz_init();" (call_expression "__gmpz_init()" (identifier "__gmpz_init") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(uint *)(puVar7 + -8) = local_40;" (assignment_expression "*(uint *)(puVar7 + -8) = local_40" (pointer_expression "*(uint *)(puVar7 + -8)" (* "*") (cast_expression "(uint *)(puVar7 + -8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -8)" (( "(") (binary_expression "puVar7 + -8" (identifier "puVar7") (+ "+") (number_literal "-8")) () ")")))) (= "=") (identifier "local_40")) (; ";")) (expression_statement "*(uint *)(puVar7 + -0xc) = local_6c;" (assignment_expression "*(uint *)(puVar7 + -0xc) = local_6c" (pointer_expression "*(uint *)(puVar7 + -0xc)" (* "*") (cast_expression "(uint *)(puVar7 + -0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0xc)" (( "(") (binary_expression "puVar7 + -0xc" (identifier "puVar7") (+ "+") (number_literal "-0xc")) () ")")))) (= "=") (identifier "local_6c")) (; ";")) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -0x10)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_2c")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27afa;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27afa" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27afa")) (; ";")) (expression_statement "__gmpz_ui_pow_ui();" (call_expression "__gmpz_ui_pow_ui()" (identifier "__gmpz_ui_pow_ui") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(undefined1 **)(puVar7 + -8) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -8) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -8)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -8)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -8)" (( "(") (binary_expression "puVar7 + -8" (identifier "puVar7") (+ "+") (number_literal "-8")) () ")")))) (= "=") (identifier "local_38")) (; ";")) (expression_statement "*(undefined1 **)(puVar7 + -0xc) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0xc) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0xc)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -0xc)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0xc)" (( "(") (binary_expression "puVar7 + -0xc" (identifier "puVar7") (+ "+") (number_literal "-0xc")) () ")")))) (= "=") (identifier "local_2c")) (; ";")) (expression_statement "*(uint **)(puVar7 + -0x10) = local_68;" (assignment_expression "*(uint **)(puVar7 + -0x10) = local_68" (pointer_expression "*(uint **)(puVar7 + -0x10)" (* "*") (cast_expression "(uint **)(puVar7 + -0x10)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_68")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b0a;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b0a" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27b0a")) (; ";")) (expression_statement "__gmpz_mul();" (call_expression "__gmpz_mul()" (identifier "__gmpz_mul") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_2c;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_2c" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -0x10)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_2c")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b17;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b17" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27b17")) (; ";")) (expression_statement "__gmpz_clear();" (call_expression "__gmpz_clear()" (identifier "__gmpz_clear") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(undefined1 **)(puVar7 + -0x10) = local_38;" (assignment_expression "*(undefined1 **)(puVar7 + -0x10) = local_38" (pointer_expression "*(undefined1 **)(puVar7 + -0x10)" (* "*") (cast_expression "(undefined1 **)(puVar7 + -0x10)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + -0x10)" (( "(") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "local_38")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + -0x14) = 0x27b1f;" (assignment_expression "*(undefined4 *)(puVar7 + -0x14) = 0x27b1f" (pointer_expression "*(undefined4 *)(puVar7 + -0x14)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -0x14)" (( "(") (binary_expression "puVar7 + -0x14" (identifier "puVar7") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (number_literal "0x27b1f")) (; ";")) (expression_statement "__gmpz_clear();" (call_expression "__gmpz_clear()" (identifier "__gmpz_clear") (argument_list "()" (( "(") () ")"))) (; ";")) (labeled_statement "LAB_00027a58:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" (statement_identifier "LAB_00027a58") (: ":") (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" (if "if") (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (!= "!=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n                    \n    *(undefined4 *)(puVar7 + -4) = 0x27cf3;\n    FUN_00079d30();\n  }" ({ "{") (expression_statement "*(undefined4 *)(puVar7 + -4) = 0x27cf3;" (assignment_expression "*(undefined4 *)(puVar7 + -4) = 0x27cf3" (pointer_expression "*(undefined4 *)(puVar7 + -4)" (* "*") (cast_expression "(undefined4 *)(puVar7 + -4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + -4)" (( "(") (binary_expression "puVar7 + -4" (identifier "puVar7") (+ "+") (number_literal "-4")) () ")")))) (= "=") (number_literal "0x27cf3")) (; ";")) (expression_statement "FUN_00079d30();" (call_expression "FUN_00079d30()" (identifier "FUN_00079d30") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void function_1(type_1 x,type_2 var_2,type_2 var_3)

{
  int var_29;
  type_3 *var_9;
  type_4 var_23;
  type_4 var_24;
  type_5 *puVar5;
  type_5 *puVar6;
  int var_14;
  type_6 *var_18;
  type_5 var_8;
  type_5 var_10;
  int var_17;
  int var_1;
  type_6 var_13 [12];
  type_5 *var_16;
  type_5 var_5;
  type_1 local_68;
  type_5 var_11;
  int local_60;
  type_5 *local_5c;
  type_3 **local_58;
  type_5 *local_54;
  type_5 var_12;
  type_7 sn;
  type_8 *var_20;
  type_9 t;
  type_9 p;
  
  local_58 = &_GLOBAL_OFFSET_TABLE_;
  var_18 = var_13;
  local_68 = x;
  var_29 = *(int *)(var_1 + 0x14);
  if ((var_2 - 3 < var_3 - 1) || (var_2 < 3)) {
    *x->_mp_d = (var_2 == 0) + var_2;
    x->_mp_size = 1;
    goto LAB_00027a58;
  }
  sn = var_2;
  var_5 = (**(type_10 **)(var_4 + 0x34))(&sn,1,var_3);
  var_18 = var_13;
  if (var_5 < 2) {
    if (var_3 < 3) {
      if (var_3 == 1) {
        var_6(local_68,var_2);
        var_18 = var_13;
      }
      else {
        var_7(local_68,var_2);
        var_18 = var_13;
      }
      goto LAB_00027a58;
    }
    var_20 = (type_8 *)0x0;
    var_11 = var_2 - var_3;
    var_12 = var_2 / var_3 + 1;
    sn = var_12;
    var_9 = local_58[-0x68];
    var_10 = 8;
    do {
      var_8 = var_10;
      var_10 = var_8 - 1;
    } while (*(type_5 *)(var_9 + var_10 * 4) < var_11);
    var_10 = 8;
    if ((var_12 / var_8) * 4 + 8 < 0x7f01) {
      do {
        var_8 = var_10;
        var_10 = var_8 - 1;
      } while (*(type_5 *)(var_9 + var_10 * 4) < var_11);
      var_14 = -((var_12 / var_8) * 4 + 0x23 & 0xfffffff0);
      var_18 = var_13 + var_14;
      var_16 = (type_5 *)((int)&var_16 + var_14);
    }
    else {
      do {
        var_8 = var_10;
        var_10 = var_8 - 1;
      } while (*(type_5 *)(var_9 + var_10 * 4) < var_11);
      var_16 = (type_5 *)var_15(&var_20,(var_12 / var_8) * 4 + 8);
      var_18 = var_13;
    }
LAB_00027988:
    var_14 = 0;
    var_10 = var_11;
    if (var_3 < var_11) {
      do {
        while( true ) {
          var_8 = var_10;
          var_12 = (type_5)((int)((type_4)var_11 * (type_4)var_2 >> 0x20) != 0);
          local_5c = var_16 + var_14;
          var_17 = var_14 + 1;
          local_60 = var_17;
          local_54 = var_16 + var_14 + 1;
          if (var_12 != 0) break;
          var_2 = var_2 * var_8;
          var_10 = var_8 - var_3;
          puVar5 = local_54;
          var_17 = var_14;
          var_8 = var_2;
          if (var_10 <= var_3) goto LAB_000279f9;
        }
        puVar5 = var_16 + var_14 + 2;
        var_16[var_14] = var_2;
        local_5c = local_54;
        var_10 = var_8 - var_3;
        var_14 = var_17;
        var_2 = var_8;
      } while (var_3 < var_10);
LAB_000279f9:
      var_17 = var_17 + 2;
      puVar6 = local_5c;
      var_2 = var_8;
    }
    else {
      var_17 = 2;
      puVar5 = var_16 + 1;
      puVar6 = var_16;
    }
    *puVar6 = var_10;
    *puVar5 = var_2;
    if (var_5 < 2) {
      *(int *)(var_18 + -8) = var_17;
      *(type_5 **)(var_18 + -0xc) = var_16;
      *(type_1 *)(var_18 + -0x10) = local_68;
      *(type_11 *)(var_18 + -0x14) = 0x27c0a;
      var_19(*(type_1 *)(var_18 + -0x10),*(type_12 *)(var_18 + -0xc),
                       *(type_13 *)(var_18 + -8));
      if (var_20 != (type_8 *)0x0) {
        *(type_8 **)(var_18 + -0x10) = var_20;
        *(type_11 *)(var_18 + -0x14) = 0x27c24;
        var_21(*(type_8 **)(var_18 + -0x10));
      }
      goto LAB_00027a58;
    }
    *(type_14 **)(var_18 + -0x10) = t;
    *(type_11 *)(var_18 + -0x14) = 0x27a1e;
    var_22(*(type_1 *)(var_18 + -0x10));
    *(int *)(var_18 + -8) = var_17;
    *(type_5 **)(var_18 + -0xc) = var_16;
    *(type_14 **)(var_18 + -0x10) = t;
    *(type_11 *)(var_18 + -0x14) = 0x27a2e;
    var_19(*(type_1 *)(var_18 + -0x10),*(type_12 *)(var_18 + -0xc),
                     *(type_13 *)(var_18 + -8));
  }
  else {
    var_23 = (type_4)var_2;
    var_2 = (type_2)(var_23 / var_5);
    var_24 = (type_4)var_3;
    var_3 = (type_2)(var_24 / var_5);
    if (2 < var_3) {
      var_11 = var_2 - var_3;
      var_12 = (int)((var_23 / var_5) / (var_24 / var_5)) + 1;
      sn = var_12;
      var_10 = 8;
      do {
        var_8 = var_10;
        var_10 = var_8 - 1;
      } while (*(type_5 *)(local_58[-0x68] + var_10 * 4) < var_11);
      if ((type_5)local_68->_mp_alloc < var_12 / var_8 + 2) {
        var_10 = 8;
        do {
          var_8 = var_10;
          var_10 = var_8 - 1;
        } while (*(type_5 *)(local_58[-0x68] + var_10 * 4) < var_11);
        var_16 = (type_5 *)var_25(local_68,var_12 / var_8 + 2);
        var_18 = var_13;
      }
      else {
        var_16 = local_68->_mp_d;
      }
      goto LAB_00027988;
    }
    if (var_3 == 1) {
      if (var_5 == 2) {
        var_7(local_68,var_2 * 2);
        var_18 = var_13;
        goto LAB_00027a58;
      }
      var_12 = var_2;
      var_22(t);
      var_6(t,var_12);
      var_18 = var_13;
      sn = var_12;
    }
    else {
      var_12 = var_2;
      var_22(t);
      var_7(t,var_12);
      var_18 = var_13;
      sn = (var_12 >> 1) + 1;
    }
  }
  *(type_14 **)(var_18 + -0x10) = p;
  *(type_11 *)(var_18 + -0x14) = 0x27ae8;
  var_22(*(type_1 *)(var_18 + -0x10));
  *(type_7 *)(var_18 + -8) = sn;
  *(type_5 *)(var_18 + -0xc) = var_5;
  *(type_14 **)(var_18 + -0x10) = p;
  *(type_11 *)(var_18 + -0x14) = 0x27afa;
  var_26(*(type_1 *)(var_18 + -0x10),*(type_2 *)(var_18 + -0xc),*(type_2 *)(var_18 + -8));
  *(type_14 **)(var_18 + -8) = t;
  *(type_14 **)(var_18 + -0xc) = p;
  *(type_1 *)(var_18 + -0x10) = local_68;
  *(type_11 *)(var_18 + -0x14) = 0x27b0a;
  var_27(*(type_1 *)(var_18 + -0x10),*(type_15 *)(var_18 + -0xc),
             *(type_15 *)(var_18 + -8));
  *(type_14 **)(var_18 + -0x10) = p;
  *(type_11 *)(var_18 + -0x14) = 0x27b17;
  var_28(*(type_1 *)(var_18 + -0x10));
  *(type_14 **)(var_18 + -0x10) = t;
  *(type_11 *)(var_18 + -0x14) = 0x27b1f;
  var_28(*(type_1 *)(var_18 + -0x10));
LAB_00027a58:
  if (var_29 != *(int *)(var_1 + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(type_11 *)(var_18 + -4) = 0x27cf3;
    var_30();
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (pointer_expression argument: (identifier)) (number_literal) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (unary_expression argument: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))) right: (identifier))))))) alternative: (else_clause (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (number_literal)))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void MASKED(uint *param_1,uint param_2,uint param_3)

{
  undefined *puVar1;
  ulonglong uVar2;
  ulonglong uVar3;
  uint *puVar4;
  uint *puVar5;
  int iVar6;
  undefined1 *puVar7;
  uint uVar8;
  uint uVar9;
  int in_GS_OFFSET;
  undefined1 auStack_7c [12];
  uint *local_70;
  uint local_6c;
  uint *local_68;
  uint local_64;
  int local_60;
  uint *local_5c;
  undefined **local_58;
  uint *local_54;
  uint local_50;
  uint local_40;
  int local_3c;
  undefined1 local_38 [12];
  undefined1 local_2c [12];
  int local_20;
  
  local_58 = &__DT_PLTGOT;
  puVar7 = auStack_7c;
  local_68 = param_1;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  if ((param_2 - 3 < param_3 - 1) || (param_2 < 3)) {
    *(uint *)param_1[2] = (param_2 == 0) + param_2;
    param_1[1] = 1;
    goto LAB_00027a58;
  }
  local_40 = param_2;
  local_6c = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x34))(&local_40,1,param_3);
  puVar7 = auStack_7c;
  if (local_6c < 2) {
    if (param_3 < 3) {
      if (param_3 == 1) {
        __gmpz_fac_ui(local_68,param_2);
        puVar7 = auStack_7c;
      }
      else {
        __gmpz_2fac_ui(local_68,param_2);
        puVar7 = auStack_7c;
      }
      goto LAB_00027a58;
    }
    local_3c = 0;
    local_64 = param_2 - param_3;
    local_50 = param_2 / param_3 + 1;
    puVar1 = local_58[-0x68];
    uVar9 = 8;
    do {
      uVar8 = uVar9;
      uVar9 = uVar8 - 1;
    } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);
    uVar9 = 8;
    local_40 = local_50;
    if ((local_50 / uVar8) * 4 + 8 < 0x7f01) {
      do {
        uVar8 = uVar9;
        uVar9 = uVar8 - 1;
      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);
      iVar6 = -((local_50 / uVar8) * 4 + 0x23 & 0xfffffff0);
      puVar7 = auStack_7c + iVar6;
      local_70 = (uint *)((int)&local_70 + iVar6);
    }
    else {
      do {
        uVar8 = uVar9;
        uVar9 = uVar8 - 1;
      } while (*(uint *)(puVar1 + uVar9 * 4) < local_64);
      local_70 = (uint *)__gmp_tmp_reentrant_alloc(&local_3c,(local_50 / uVar8) * 4 + 8);
      puVar7 = auStack_7c;
    }
LAB_00027988:
    iVar6 = 0;
    uVar9 = local_64;
    if (param_3 < local_64) {
      do {
        while( true ) {
          uVar8 = uVar9;
          local_50 = (uint)((int)((ulonglong)local_64 * (ulonglong)param_2 >> 0x20) != 0);
          local_60 = iVar6 + 1;
          local_54 = local_70 + iVar6 + 1;
          if (local_50 != 0) break;
          param_2 = param_2 * uVar8;
          uVar9 = uVar8 - param_3;
          puVar4 = local_54;
          uVar8 = param_2;
          local_5c = local_70 + iVar6;
          if (uVar9 <= param_3) goto LAB_000279f9;
        }
        puVar4 = local_70 + iVar6 + 2;
        local_70[iVar6] = param_2;
        uVar9 = uVar8 - param_3;
        iVar6 = local_60;
        param_2 = uVar8;
        local_5c = local_54;
      } while (param_3 < uVar9);
LAB_000279f9:
      iVar6 = iVar6 + 2;
      puVar5 = local_5c;
      param_2 = uVar8;
    }
    else {
      iVar6 = 2;
      puVar4 = local_70 + 1;
      puVar5 = local_70;
    }
    *puVar5 = uVar9;
    *puVar4 = param_2;
    if (local_6c < 2) {
      *(int *)(puVar7 + -8) = iVar6;
      *(uint **)(puVar7 + -0xc) = local_70;
      *(uint **)(puVar7 + -0x10) = local_68;
      *(undefined4 *)(puVar7 + -0x14) = 0x27c0a;
      __gmpz_prodlimbs();
      if (local_3c != 0) {
        *(int *)(puVar7 + -0x10) = local_3c;
        *(undefined4 *)(puVar7 + -0x14) = 0x27c24;
        __gmp_tmp_reentrant_free();
      }
      goto LAB_00027a58;
    }
    *(undefined1 **)(puVar7 + -0x10) = local_38;
    *(undefined4 *)(puVar7 + -0x14) = 0x27a1e;
    __gmpz_init();
    *(int *)(puVar7 + -8) = iVar6;
    *(uint **)(puVar7 + -0xc) = local_70;
    *(undefined1 **)(puVar7 + -0x10) = local_38;
    *(undefined4 *)(puVar7 + -0x14) = 0x27a2e;
    __gmpz_prodlimbs();
  }
  else {
    uVar2 = (ulonglong)param_2;
    param_2 = (uint)(uVar2 / local_6c);
    uVar3 = (ulonglong)param_3;
    param_3 = (uint)(uVar3 / local_6c);
    if (2 < param_3) {
      local_64 = param_2 - param_3;
      local_50 = (int)((uVar2 / local_6c) / (uVar3 / local_6c)) + 1;
      uVar9 = 8;
      do {
        uVar8 = uVar9;
        uVar9 = uVar8 - 1;
      } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);
      local_40 = local_50;
      if (*local_68 < local_50 / uVar8 + 2) {
        uVar9 = 8;
        do {
          uVar8 = uVar9;
          uVar9 = uVar8 - 1;
        } while (*(uint *)(local_58[-0x68] + uVar9 * 4) < local_64);
        local_70 = (uint *)__gmpz_realloc(local_68,local_50 / uVar8 + 2);
        puVar7 = auStack_7c;
      }
      else {
        local_70 = (uint *)local_68[2];
      }
      goto LAB_00027988;
    }
    if (param_3 == 1) {
      if (local_6c == 2) {
        __gmpz_2fac_ui(local_68,param_2 * 2);
        puVar7 = auStack_7c;
        goto LAB_00027a58;
      }
      local_50 = param_2;
      __gmpz_init(local_38);
      __gmpz_fac_ui(local_38,local_50);
      puVar7 = auStack_7c;
      local_40 = local_50;
    }
    else {
      local_50 = param_2;
      __gmpz_init(local_38);
      __gmpz_2fac_ui(local_38,local_50);
      puVar7 = auStack_7c;
      local_40 = (local_50 >> 1) + 1;
    }
  }
  *(undefined1 **)(puVar7 + -0x10) = local_2c;
  *(undefined4 *)(puVar7 + -0x14) = 0x27ae8;
  __gmpz_init();
  *(uint *)(puVar7 + -8) = local_40;
  *(uint *)(puVar7 + -0xc) = local_6c;
  *(undefined1 **)(puVar7 + -0x10) = local_2c;
  *(undefined4 *)(puVar7 + -0x14) = 0x27afa;
  __gmpz_ui_pow_ui();
  *(undefined1 **)(puVar7 + -8) = local_38;
  *(undefined1 **)(puVar7 + -0xc) = local_2c;
  *(uint **)(puVar7 + -0x10) = local_68;
  *(undefined4 *)(puVar7 + -0x14) = 0x27b0a;
  __gmpz_mul();
  *(undefined1 **)(puVar7 + -0x10) = local_2c;
  *(undefined4 *)(puVar7 + -0x14) = 0x27b17;
  __gmpz_clear();
  *(undefined1 **)(puVar7 + -0x10) = local_38;
  *(undefined4 *)(puVar7 + -0x14) = 0x27b1f;
  __gmpz_clear();
LAB_00027a58:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    *(undefined4 *)(puVar7 + -4) = 0x27cf3;
    FUN_00079d30();
  }
  return;
}

