
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

Bignum_conflict bignum_from_bytes_le(uchar *data,int nbytes)

{
  BignumInt BVar1;
  Bignum_conflict pBVar2;
  Bignum_conflict pBVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  
  if (0xffffffe < (uint)nbytes) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");
  }
  iVar6 = nbytes + 3 >> 2;
  pBVar2 = newbn(iVar6);
  if (iVar6 != 0) {
    pBVar3 = pBVar2 + 1;
    do {
      *pBVar3 = 0;
      pBVar3 = pBVar3 + 1;
    } while (pBVar2 + iVar6 + 1 != pBVar3);
  }
  if (nbytes != 0) {
    iVar6 = 0;
    do {
      iVar4 = iVar6 + 1;
      pBVar2[(iVar6 >> 2) + 1] =
           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);
      iVar6 = iVar4;
    } while (nbytes != iVar4);
  }
  uVar5 = *pBVar2;
  if (1 < uVar5) {
    BVar1 = pBVar2[uVar5];
    while (BVar1 == 0) {
      uVar5 = uVar5 - 1;
      *pBVar2 = uVar5;
      if (uVar5 == 1) {
        return pBVar2;
      }
      BVar1 = pBVar2[uVar5];
    }
  }
  return pBVar2;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void FUN_00045ca0(int param_1,uint param_2)

{
  uint *puVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  
  if (0xffffffe < param_2) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");
  }
  iVar5 = (int)(param_2 + 3) >> 2;
  puVar1 = (uint *)FUN_00044e30();
  if (iVar5 != 0) {
    puVar2 = puVar1 + 1;
    do {
      *puVar2 = 0;
      puVar2 = puVar2 + 1;
    } while (puVar1 + iVar5 + 1 != puVar2);
  }
  if (param_2 != 0) {
    uVar4 = 0;
    do {
      uVar3 = uVar4 + 1;
      puVar1[((int)uVar4 >> 2) + 1] =
           puVar1[((int)uVar4 >> 2) + 1] |
           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);
      uVar4 = uVar3;
    } while (param_2 != uVar3);
  }
  uVar4 = *puVar1;
  if (1 < uVar4) {
    uVar3 = puVar1[uVar4];
    while (uVar3 == 0) {
      uVar4 = uVar4 - 1;
      *puVar1 = uVar4;
      if (uVar4 == 1) {
        return;
      }
      uVar3 = puVar1[uVar4];
    }
  }
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00014980
ADD EBX,0x630c7
SUB ESP,0xc
MOV ESI,dword ptr [ESP + 0x24]
MOV EDI,dword ptr [ESP + 0x20]
CMP ESI,0xffffffe
JA 0x00045d4a
LEA EBX,[ESI + 0x3]
SAR EBX,0x2
MOV EAX,EBX
CALL 0x00044e30
TEST EBX,EBX
JZ 0x00045ced
LEA EDX,[EAX + 0x4]
LEA ECX,[EAX + EBX*0x4 + 0x4]
NOP
MOV dword ptr [EDX],0x0
ADD EDX,0x4
CMP ECX,EDX
JNZ 0x00045ce0
TEST ESI,ESI
JZ 0x00045d18
XOR EDX,EDX
LEA ESI,[ESI]
NOP
MOVZX EBX,byte ptr [EDI + EDX*0x1]
MOV EBP,EDX
LEA ECX,[EDX*0x8 + 0x0]
ADD EDX,0x1
SAR EBP,0x2
AND ECX,0x1f
SHL EBX,CL
OR dword ptr [EAX + EBP*0x4 + 0x4],EBX
CMP ESI,EDX
JNZ 0x00045cf8
MOV EDX,dword ptr [EAX]
CMP EDX,0x1
JBE 0x00045d42
MOV EBX,dword ptr [EAX + EDX*0x4]
TEST EBX,EBX
JNZ 0x00045d42
SUB EDX,0x1
JMP 0x00045d3b
SUB EDX,0x1
MOV ECX,dword ptr [EAX + EDX*0x4 + 0x4]
TEST ECX,ECX
JNZ 0x00045d42
MOV dword ptr [EAX],EDX
CMP EDX,0x1
JNZ 0x00045d30
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
LEA EAX,[EBX + 0xfffd2b68]
PUSH EAX
LEA EAX,[EBX + 0xfffd29f8]
PUSH 0x59a
PUSH EAX
LEA EAX,[EBX + 0xfffd2b04]
PUSH EAX
CALL 0x00014880
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_00045ca0(int param_1,uint param_2)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void FUN_00045ca0(int param_1,uint param_2)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00045ca0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (0xffffffe < param_2) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" if (parenthesized_expression "(0xffffffe < param_2)" ( (binary_expression "0xffffffe < param_2" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" { comment (expression_statement "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");" (call_expression "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" identifier (argument_list "("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" ( (string_literal ""nbytes >= 0 && nbytes < INT_MAX/8"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bignum_from_bytes_le"" " string_content ") ))) ;) })) (expression_statement "iVar5 = (int)(param_2 + 3) >> 2;" (assignment_expression "iVar5 = (int)(param_2 + 3) >> 2" identifier = (binary_expression "(int)(param_2 + 3) >> 2" (cast_expression "(int)(param_2 + 3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_2 + 3)" ( (binary_expression "param_2 + 3" identifier + number_literal) ))) >> number_literal)) ;) (expression_statement "puVar1 = (uint *)FUN_00044e30();" (assignment_expression "puVar1 = (uint *)FUN_00044e30()" identifier = (cast_expression "(uint *)FUN_00044e30()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00044e30()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }" { (expression_statement "puVar2 = puVar1 + 1;" (assignment_expression "puVar2 = puVar1 + 1" identifier = (binary_expression "puVar1 + 1" identifier + number_literal)) ;) (do_statement "do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);" do (compound_statement "{\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    }" { (expression_statement "*puVar2 = 0;" (assignment_expression "*puVar2 = 0" (pointer_expression "*puVar2" * identifier) = number_literal) ;) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar1 + iVar5 + 1 != puVar2)" ( (binary_expression "puVar1 + iVar5 + 1 != puVar2" (binary_expression "puVar1 + iVar5 + 1" (binary_expression "puVar1 + iVar5" identifier + identifier) + number_literal) != identifier) )) ;) })) (if_statement "if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);" do (compound_statement "{\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    }" { (expression_statement "uVar3 = uVar4 + 1;" (assignment_expression "uVar3 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);" (assignment_expression "puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (subscript_expression "puVar1[((int)uVar4 >> 2) + 1]" identifier [ (binary_expression "((int)uVar4 >> 2) + 1" (parenthesized_expression "((int)uVar4 >> 2)" ( (binary_expression "(int)uVar4 >> 2" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) + number_literal) ]) = (binary_expression "puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (subscript_expression "puVar1[((int)uVar4 >> 2) + 1]" identifier [ (binary_expression "((int)uVar4 >> 2) + 1" (parenthesized_expression "((int)uVar4 >> 2)" ( (binary_expression "(int)uVar4 >> 2" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) + number_literal) ]) | (binary_expression "(uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (binary_expression "(uint)*(byte *)(param_1 + uVar4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_1 + uVar4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + uVar4)" ( (binary_expression "param_1 + uVar4" identifier + identifier) )))) << (parenthesized_expression "((char)uVar4 * '\b' & 0x1fU)" ( (binary_expression "(char)uVar4 * '\b' & 0x1fU" (binary_expression "(char)uVar4 * '\b'" (cast_expression "(char)uVar4" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))))) ;) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" identifier = identifier) ;) }) while (parenthesized_expression "(param_2 != uVar3)" ( (binary_expression "param_2 != uVar3" identifier != identifier) )) ;) })) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (if_statement "if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }" if (parenthesized_expression "(1 < uVar4)" ( (binary_expression "1 < uVar4" number_literal < identifier) )) (compound_statement "{\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }" { (expression_statement "uVar3 = puVar1[uVar4];" (assignment_expression "uVar3 = puVar1[uVar4]" identifier = (subscript_expression "puVar1[uVar4]" identifier [ identifier ])) ;) (while_statement "while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }" while (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }" { (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (expression_statement "*puVar1 = uVar4;" (assignment_expression "*puVar1 = uVar4" (pointer_expression "*puVar1" * identifier) = identifier) ;) (if_statement "if (uVar4 == 1) {\n        return;\n      }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "uVar3 = puVar1[uVar4];" (assignment_expression "uVar3 = puVar1[uVar4]" identifier = (subscript_expression "puVar1[uVar4]" identifier [ identifier ])) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nBignum_conflict bignum_from_bytes_le(uchar *data,int nbytes)\n\n{\n  BignumInt BVar1;\n  Bignum_conflict pBVar2;\n  Bignum_conflict pBVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if (0xffffffe < (uint)nbytes) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar6 = nbytes + 3 >> 2;\n  pBVar2 = newbn(iVar6);\n  if (iVar6 != 0) {\n    pBVar3 = pBVar2 + 1;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar2 + iVar6 + 1 != pBVar3);\n  }\n  if (nbytes != 0) {\n    iVar6 = 0;\n    do {\n      iVar4 = iVar6 + 1;\n      pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);\n      iVar6 = iVar4;\n    } while (nbytes != iVar4);\n  }\n  uVar5 = *pBVar2;\n  if (1 < uVar5) {\n    BVar1 = pBVar2[uVar5];\n    while (BVar1 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar2 = uVar5;\n      if (uVar5 == 1) {\n        return pBVar2;\n      }\n      BVar1 = pBVar2[uVar5];\n    }\n  }\n  return pBVar2;\n}\n\n" comment (function_definition "Bignum_conflict bignum_from_bytes_le(uchar *data,int nbytes)\n\n{\n  BignumInt BVar1;\n  Bignum_conflict pBVar2;\n  Bignum_conflict pBVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if (0xffffffe < (uint)nbytes) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar6 = nbytes + 3 >> 2;\n  pBVar2 = newbn(iVar6);\n  if (iVar6 != 0) {\n    pBVar3 = pBVar2 + 1;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar2 + iVar6 + 1 != pBVar3);\n  }\n  if (nbytes != 0) {\n    iVar6 = 0;\n    do {\n      iVar4 = iVar6 + 1;\n      pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);\n      iVar6 = iVar4;\n    } while (nbytes != iVar4);\n  }\n  uVar5 = *pBVar2;\n  if (1 < uVar5) {\n    BVar1 = pBVar2[uVar5];\n    while (BVar1 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar2 = uVar5;\n      if (uVar5 == 1) {\n        return pBVar2;\n      }\n      BVar1 = pBVar2[uVar5];\n    }\n  }\n  return pBVar2;\n}" type_identifier (function_declarator "bignum_from_bytes_le(uchar *data,int nbytes)" identifier (parameter_list "(uchar *data,int nbytes)" ( (parameter_declaration "uchar *data" type_identifier (pointer_declarator "*data" * identifier)) , (parameter_declaration "int nbytes" primitive_type identifier) ))) (compound_statement "{\n  BignumInt BVar1;\n  Bignum_conflict pBVar2;\n  Bignum_conflict pBVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  \n  if (0xffffffe < (uint)nbytes) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar6 = nbytes + 3 >> 2;\n  pBVar2 = newbn(iVar6);\n  if (iVar6 != 0) {\n    pBVar3 = pBVar2 + 1;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar2 + iVar6 + 1 != pBVar3);\n  }\n  if (nbytes != 0) {\n    iVar6 = 0;\n    do {\n      iVar4 = iVar6 + 1;\n      pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);\n      iVar6 = iVar4;\n    } while (nbytes != iVar4);\n  }\n  uVar5 = *pBVar2;\n  if (1 < uVar5) {\n    BVar1 = pBVar2[uVar5];\n    while (BVar1 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar2 = uVar5;\n      if (uVar5 == 1) {\n        return pBVar2;\n      }\n      BVar1 = pBVar2[uVar5];\n    }\n  }\n  return pBVar2;\n}" { (declaration "BignumInt BVar1;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar2;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (if_statement "if (0xffffffe < (uint)nbytes) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" if (parenthesized_expression "(0xffffffe < (uint)nbytes)" ( (binary_expression "0xffffffe < (uint)nbytes" number_literal < (cast_expression "(uint)nbytes" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" { comment (expression_statement "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");" (call_expression "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" identifier (argument_list "("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" ( (string_literal ""nbytes >= 0 && nbytes < INT_MAX/8"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bignum_from_bytes_le"" " string_content ") ))) ;) })) (expression_statement "iVar6 = nbytes + 3 >> 2;" (assignment_expression "iVar6 = nbytes + 3 >> 2" identifier = (binary_expression "nbytes + 3 >> 2" (binary_expression "nbytes + 3" identifier + number_literal) >> number_literal)) ;) (expression_statement "pBVar2 = newbn(iVar6);" (assignment_expression "pBVar2 = newbn(iVar6)" identifier = (call_expression "newbn(iVar6)" identifier (argument_list "(iVar6)" ( identifier )))) ;) (if_statement "if (iVar6 != 0) {\n    pBVar3 = pBVar2 + 1;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar2 + iVar6 + 1 != pBVar3);\n  }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n    pBVar3 = pBVar2 + 1;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar2 + iVar6 + 1 != pBVar3);\n  }" { (expression_statement "pBVar3 = pBVar2 + 1;" (assignment_expression "pBVar3 = pBVar2 + 1" identifier = (binary_expression "pBVar2 + 1" identifier + number_literal)) ;) (do_statement "do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar2 + iVar6 + 1 != pBVar3);" do (compound_statement "{\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    }" { (expression_statement "*pBVar3 = 0;" (assignment_expression "*pBVar3 = 0" (pointer_expression "*pBVar3" * identifier) = number_literal) ;) (expression_statement "pBVar3 = pBVar3 + 1;" (assignment_expression "pBVar3 = pBVar3 + 1" identifier = (binary_expression "pBVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar2 + iVar6 + 1 != pBVar3)" ( (binary_expression "pBVar2 + iVar6 + 1 != pBVar3" (binary_expression "pBVar2 + iVar6 + 1" (binary_expression "pBVar2 + iVar6" identifier + identifier) + number_literal) != identifier) )) ;) })) (if_statement "if (nbytes != 0) {\n    iVar6 = 0;\n    do {\n      iVar4 = iVar6 + 1;\n      pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);\n      iVar6 = iVar4;\n    } while (nbytes != iVar4);\n  }" if (parenthesized_expression "(nbytes != 0)" ( (binary_expression "nbytes != 0" identifier != number_literal) )) (compound_statement "{\n    iVar6 = 0;\n    do {\n      iVar4 = iVar6 + 1;\n      pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);\n      iVar6 = iVar4;\n    } while (nbytes != iVar4);\n  }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar4 = iVar6 + 1;\n      pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);\n      iVar6 = iVar4;\n    } while (nbytes != iVar4);" do (compound_statement "{\n      iVar4 = iVar6 + 1;\n      pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);\n      iVar6 = iVar4;\n    }" { (expression_statement "iVar4 = iVar6 + 1;" (assignment_expression "iVar4 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU);" (assignment_expression "pBVar2[(iVar6 >> 2) + 1] =\n           pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU)" (subscript_expression "pBVar2[(iVar6 >> 2) + 1]" identifier [ (binary_expression "(iVar6 >> 2) + 1" (parenthesized_expression "(iVar6 >> 2)" ( (binary_expression "iVar6 >> 2" identifier >> number_literal) )) + number_literal) ]) = (binary_expression "pBVar2[(iVar6 >> 2) + 1] | (uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU)" (subscript_expression "pBVar2[(iVar6 >> 2) + 1]" identifier [ (binary_expression "(iVar6 >> 2) + 1" (parenthesized_expression "(iVar6 >> 2)" ( (binary_expression "iVar6 >> 2" identifier >> number_literal) )) + number_literal) ]) | (binary_expression "(uint)data[iVar6] << ((char)iVar6 * '\b' & 0x1fU)" (cast_expression "(uint)data[iVar6]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "data[iVar6]" identifier [ identifier ])) << (parenthesized_expression "((char)iVar6 * '\b' & 0x1fU)" ( (binary_expression "(char)iVar6 * '\b' & 0x1fU" (binary_expression "(char)iVar6 * '\b'" (cast_expression "(char)iVar6" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))))) ;) (expression_statement "iVar6 = iVar4;" (assignment_expression "iVar6 = iVar4" identifier = identifier) ;) }) while (parenthesized_expression "(nbytes != iVar4)" ( (binary_expression "nbytes != iVar4" identifier != identifier) )) ;) })) (expression_statement "uVar5 = *pBVar2;" (assignment_expression "uVar5 = *pBVar2" identifier = (pointer_expression "*pBVar2" * identifier)) ;) (if_statement "if (1 < uVar5) {\n    BVar1 = pBVar2[uVar5];\n    while (BVar1 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar2 = uVar5;\n      if (uVar5 == 1) {\n        return pBVar2;\n      }\n      BVar1 = pBVar2[uVar5];\n    }\n  }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n    BVar1 = pBVar2[uVar5];\n    while (BVar1 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar2 = uVar5;\n      if (uVar5 == 1) {\n        return pBVar2;\n      }\n      BVar1 = pBVar2[uVar5];\n    }\n  }" { (expression_statement "BVar1 = pBVar2[uVar5];" (assignment_expression "BVar1 = pBVar2[uVar5]" identifier = (subscript_expression "pBVar2[uVar5]" identifier [ identifier ])) ;) (while_statement "while (BVar1 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar2 = uVar5;\n      if (uVar5 == 1) {\n        return pBVar2;\n      }\n      BVar1 = pBVar2[uVar5];\n    }" while (parenthesized_expression "(BVar1 == 0)" ( (binary_expression "BVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar5 = uVar5 - 1;\n      *pBVar2 = uVar5;\n      if (uVar5 == 1) {\n        return pBVar2;\n      }\n      BVar1 = pBVar2[uVar5];\n    }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*pBVar2 = uVar5;" (assignment_expression "*pBVar2 = uVar5" (pointer_expression "*pBVar2" * identifier) = identifier) ;) (if_statement "if (uVar5 == 1) {\n        return pBVar2;\n      }" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (compound_statement "{\n        return pBVar2;\n      }" { (return_statement "return pBVar2;" return identifier ;) })) (expression_statement "BVar1 = pBVar2[uVar5];" (assignment_expression "BVar1 = pBVar2[uVar5]" identifier = (subscript_expression "pBVar2[uVar5]" identifier [ identifier ])) ;) })) })) (return_statement "return pBVar2;" return identifier ;) })))
(translation_unit "void FUN_00045ca0(int param_1,uint param_2)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_00045ca0(int param_1,uint param_2)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00045ca0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (0xffffffe < param_2) {\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" if (parenthesized_expression "(0xffffffe < param_2)" ( (binary_expression "0xffffffe < param_2" number_literal < identifier) )) (compound_statement "{\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" { (expression_statement "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");" (call_expression "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" identifier (argument_list "("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" ( (string_literal ""nbytes >= 0 && nbytes < INT_MAX/8"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bignum_from_bytes_le"" " string_content ") ))) ;) })) (expression_statement "iVar5 = (int)(param_2 + 3) >> 2;" (assignment_expression "iVar5 = (int)(param_2 + 3) >> 2" identifier = (binary_expression "(int)(param_2 + 3) >> 2" (cast_expression "(int)(param_2 + 3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_2 + 3)" ( (binary_expression "param_2 + 3" identifier + number_literal) ))) >> number_literal)) ;) (expression_statement "puVar1 = (uint *)FUN_00044e30();" (assignment_expression "puVar1 = (uint *)FUN_00044e30()" identifier = (cast_expression "(uint *)FUN_00044e30()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00044e30()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }" { (expression_statement "puVar2 = puVar1 + 1;" (assignment_expression "puVar2 = puVar1 + 1" identifier = (binary_expression "puVar1 + 1" identifier + number_literal)) ;) (do_statement "do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);" do (compound_statement "{\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    }" { (expression_statement "*puVar2 = 0;" (assignment_expression "*puVar2 = 0" (pointer_expression "*puVar2" * identifier) = number_literal) ;) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" identifier = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar1 + iVar5 + 1 != puVar2)" ( (binary_expression "puVar1 + iVar5 + 1 != puVar2" (binary_expression "puVar1 + iVar5 + 1" (binary_expression "puVar1 + iVar5" identifier + identifier) + number_literal) != identifier) )) ;) })) (if_statement "if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);" do (compound_statement "{\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    }" { (expression_statement "uVar3 = uVar4 + 1;" (assignment_expression "uVar3 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);" (assignment_expression "puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (subscript_expression "puVar1[((int)uVar4 >> 2) + 1]" identifier [ (binary_expression "((int)uVar4 >> 2) + 1" (parenthesized_expression "((int)uVar4 >> 2)" ( (binary_expression "(int)uVar4 >> 2" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) + number_literal) ]) = (binary_expression "puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (subscript_expression "puVar1[((int)uVar4 >> 2) + 1]" identifier [ (binary_expression "((int)uVar4 >> 2) + 1" (parenthesized_expression "((int)uVar4 >> 2)" ( (binary_expression "(int)uVar4 >> 2" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )) + number_literal) ]) | (binary_expression "(uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (binary_expression "(uint)*(byte *)(param_1 + uVar4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_1 + uVar4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + uVar4)" ( (binary_expression "param_1 + uVar4" identifier + identifier) )))) << (parenthesized_expression "((char)uVar4 * '\b' & 0x1fU)" ( (binary_expression "(char)uVar4 * '\b' & 0x1fU" (binary_expression "(char)uVar4 * '\b'" (cast_expression "(char)uVar4" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))))) ;) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" identifier = identifier) ;) }) while (parenthesized_expression "(param_2 != uVar3)" ( (binary_expression "param_2 != uVar3" identifier != identifier) )) ;) })) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (if_statement "if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }" if (parenthesized_expression "(1 < uVar4)" ( (binary_expression "1 < uVar4" number_literal < identifier) )) (compound_statement "{\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }" { (expression_statement "uVar3 = puVar1[uVar4];" (assignment_expression "uVar3 = puVar1[uVar4]" identifier = (subscript_expression "puVar1[uVar4]" identifier [ identifier ])) ;) (while_statement "while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }" while (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }" { (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (expression_statement "*puVar1 = uVar4;" (assignment_expression "*puVar1 = uVar4" (pointer_expression "*puVar1" * identifier) = identifier) ;) (if_statement "if (uVar4 == 1) {\n        return;\n      }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "uVar3 = puVar1[uVar4];" (assignment_expression "uVar3 = puVar1[uVar4]" identifier = (subscript_expression "puVar1[uVar4]" identifier [ identifier ])) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT + IDENT) + LIT) != IDENT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )) + LIT) ]) = (binary_expression (subscript_expression IDENT [ (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )) + LIT) ]) | (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) << (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (char_literal ' escape_sequence ')) & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) })) })) (return_statement return ;) })))
(function_definition "void FUN_00045ca0(int param_1,uint param_2)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00045ca0(int param_1,uint param_2)" (identifier "FUN_00045ca0") (parameter_list "(int param_1,uint param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint uVar3;\n  uint uVar4;\n  int iVar5;\n  \n  if (0xffffffe < param_2) {\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }\n  iVar5 = (int)(param_2 + 3) >> 2;\n  puVar1 = (uint *)FUN_00044e30();\n  if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }\n  if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }\n  uVar4 = *puVar1;\n  if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }\n  return;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (if_statement "if (0xffffffe < param_2) {\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" (if "if") (parenthesized_expression "(0xffffffe < param_2)" (( "(") (binary_expression "0xffffffe < param_2" (number_literal "0xffffffe") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n                    \n    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");\n  }" ({ "{") (expression_statement "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");" (call_expression "__assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" (identifier "__assert_fail") (argument_list "("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le")" (( "(") (string_literal ""nbytes >= 0 && nbytes < INT_MAX/8"" (" """) (string_content "nbytes >= 0 && nbytes < INT_MAX/8") (" """)) (, ",") (string_literal ""sshbn.c"" (" """) (string_content "sshbn.c") (" """)) (, ",") (number_literal "0x59a") (, ",") (string_literal ""bignum_from_bytes_le"" (" """) (string_content "bignum_from_bytes_le") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar5 = (int)(param_2 + 3) >> 2;" (assignment_expression "iVar5 = (int)(param_2 + 3) >> 2" (identifier "iVar5") (= "=") (binary_expression "(int)(param_2 + 3) >> 2" (cast_expression "(int)(param_2 + 3)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(param_2 + 3)" (( "(") (binary_expression "param_2 + 3" (identifier "param_2") (+ "+") (number_literal "3")) () ")"))) (>> ">>") (number_literal "2"))) (; ";")) (expression_statement "puVar1 = (uint *)FUN_00044e30();" (assignment_expression "puVar1 = (uint *)FUN_00044e30()" (identifier "puVar1") (= "=") (cast_expression "(uint *)FUN_00044e30()" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00044e30()" (identifier "FUN_00044e30") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (iVar5 != 0) {\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    puVar2 = puVar1 + 1;\n    do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);\n  }" ({ "{") (expression_statement "puVar2 = puVar1 + 1;" (assignment_expression "puVar2 = puVar1 + 1" (identifier "puVar2") (= "=") (binary_expression "puVar1 + 1" (identifier "puVar1") (+ "+") (number_literal "1"))) (; ";")) (do_statement "do {\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    } while (puVar1 + iVar5 + 1 != puVar2);" (do "do") (compound_statement "{\n      *puVar2 = 0;\n      puVar2 = puVar2 + 1;\n    }" ({ "{") (expression_statement "*puVar2 = 0;" (assignment_expression "*puVar2 = 0" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar2 = puVar2 + 1;" (assignment_expression "puVar2 = puVar2 + 1" (identifier "puVar2") (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar1 + iVar5 + 1 != puVar2)" (( "(") (binary_expression "puVar1 + iVar5 + 1 != puVar2" (binary_expression "puVar1 + iVar5 + 1" (binary_expression "puVar1 + iVar5" (identifier "puVar1") (+ "+") (identifier "iVar5")) (+ "+") (number_literal "1")) (!= "!=") (identifier "puVar2")) () ")")) (; ";")) (} "}"))) (if_statement "if (param_2 != 0) {\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar4 = 0;\n    do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);\n  }" ({ "{") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    } while (param_2 != uVar3);" (do "do") (compound_statement "{\n      uVar3 = uVar4 + 1;\n      puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);\n      uVar4 = uVar3;\n    }" ({ "{") (expression_statement "uVar3 = uVar4 + 1;" (assignment_expression "uVar3 = uVar4 + 1" (identifier "uVar3") (= "=") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);" (assignment_expression "puVar1[((int)uVar4 >> 2) + 1] =\n           puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (subscript_expression "puVar1[((int)uVar4 >> 2) + 1]" (identifier "puVar1") ([ "[") (binary_expression "((int)uVar4 >> 2) + 1" (parenthesized_expression "((int)uVar4 >> 2)" (( "(") (binary_expression "(int)uVar4 >> 2" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (>> ">>") (number_literal "2")) () ")")) (+ "+") (number_literal "1")) (] "]")) (= "=") (binary_expression "puVar1[((int)uVar4 >> 2) + 1] |\n           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (subscript_expression "puVar1[((int)uVar4 >> 2) + 1]" (identifier "puVar1") ([ "[") (binary_expression "((int)uVar4 >> 2) + 1" (parenthesized_expression "((int)uVar4 >> 2)" (( "(") (binary_expression "(int)uVar4 >> 2" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (>> ">>") (number_literal "2")) () ")")) (+ "+") (number_literal "1")) (] "]")) (| "|") (binary_expression "(uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU)" (binary_expression "(uint)*(byte *)(param_1 + uVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(param_1 + uVar4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + uVar4)" (( "(") (binary_expression "param_1 + uVar4" (identifier "param_1") (+ "+") (identifier "uVar4")) () ")")))) (<< "<<") (parenthesized_expression "((char)uVar4 * '\b' & 0x1fU)" (( "(") (binary_expression "(char)uVar4 * '\b' & 0x1fU" (binary_expression "(char)uVar4 * '\b'" (cast_expression "(char)uVar4" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar4")) (* "*") (char_literal "'\b'" (' "'") (escape_sequence "\b") (' "'"))) (& "&") (number_literal "0x1fU")) () ")"))))) (; ";")) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" (identifier "uVar4") (= "=") (identifier "uVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 != uVar3)" (( "(") (binary_expression "param_2 != uVar3" (identifier "param_2") (!= "!=") (identifier "uVar3")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar4 = *puVar1;" (assignment_expression "uVar4 = *puVar1" (identifier "uVar4") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (if_statement "if (1 < uVar4) {\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }" (if "if") (parenthesized_expression "(1 < uVar4)" (( "(") (binary_expression "1 < uVar4" (number_literal "1") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n    uVar3 = puVar1[uVar4];\n    while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }\n  }" ({ "{") (expression_statement "uVar3 = puVar1[uVar4];" (assignment_expression "uVar3 = puVar1[uVar4]" (identifier "uVar3") (= "=") (subscript_expression "puVar1[uVar4]" (identifier "puVar1") ([ "[") (identifier "uVar4") (] "]"))) (; ";")) (while_statement "while (uVar3 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }" (while "while") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar4 = uVar4 - 1;\n      *puVar1 = uVar4;\n      if (uVar4 == 1) {\n        return;\n      }\n      uVar3 = puVar1[uVar4];\n    }" ({ "{") (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar1 = uVar4;" (assignment_expression "*puVar1 = uVar4" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar4 == 1) {\n        return;\n      }" (if "if") (parenthesized_expression "(uVar4 == 1)" (( "(") (binary_expression "uVar4 == 1" (identifier "uVar4") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar3 = puVar1[uVar4];" (assignment_expression "uVar3 = puVar1[uVar4]" (identifier "uVar3") (= "=") (subscript_expression "puVar1[uVar4]" (identifier "puVar1") ([ "[") (identifier "uVar4") (] "]"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

type_1 function_1(type_2 *data,int var_2)

{
  type_3 var_9;
  type_1 var_5;
  type_1 var_6;
  int var_7;
  type_4 var_8;
  int var_4;
  
  if (0xffffffe < (type_4)var_2) {
                    /* WARNING: Subroutine does not return */
    var_1("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");
  }
  var_4 = var_2 + 3 >> 2;
  var_5 = var_3(var_4);
  if (var_4 != 0) {
    var_6 = var_5 + 1;
    do {
      *var_6 = 0;
      var_6 = var_6 + 1;
    } while (var_5 + var_4 + 1 != var_6);
  }
  if (var_2 != 0) {
    var_4 = 0;
    do {
      var_7 = var_4 + 1;
      var_5[(var_4 >> 2) + 1] =
           var_5[(var_4 >> 2) + 1] | (type_4)data[var_4] << ((char)var_4 * '\b' & 0x1fU);
      var_4 = var_7;
    } while (var_2 != var_7);
  }
  var_8 = *var_5;
  if (1 < var_8) {
    var_9 = var_5[var_8];
    while (var_9 == 0) {
      var_8 = var_8 - 1;
      *var_5 = var_8;
      if (var_8 == 1) {
        return var_5;
      }
      var_9 = var_5[var_8];
    }
  }
  return var_5;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) 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: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))) (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))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (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: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (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 (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))))))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void MASKED(int param_1,uint param_2)

{
  uint *puVar1;
  uint *puVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  
  if (0xffffffe < param_2) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("nbytes >= 0 && nbytes < INT_MAX/8","sshbn.c",0x59a,"bignum_from_bytes_le");
  }
  iVar5 = (int)(param_2 + 3) >> 2;
  puVar1 = (uint *)FUN_00044e30();
  if (iVar5 != 0) {
    puVar2 = puVar1 + 1;
    do {
      *puVar2 = 0;
      puVar2 = puVar2 + 1;
    } while (puVar1 + iVar5 + 1 != puVar2);
  }
  if (param_2 != 0) {
    uVar4 = 0;
    do {
      uVar3 = uVar4 + 1;
      puVar1[((int)uVar4 >> 2) + 1] =
           puVar1[((int)uVar4 >> 2) + 1] |
           (uint)*(byte *)(param_1 + uVar4) << ((char)uVar4 * '\b' & 0x1fU);
      uVar4 = uVar3;
    } while (param_2 != uVar3);
  }
  uVar4 = *puVar1;
  if (1 < uVar4) {
    uVar3 = puVar1[uVar4];
    while (uVar3 == 0) {
      uVar4 = uVar4 - 1;
      *puVar1 = uVar4;
      if (uVar4 == 1) {
        return;
      }
      uVar3 = puVar1[uVar4];
    }
  }
  return;
}

