
mp_size_t __gmpn_hgcd_itch(mp_size_t n)

{
  long lVar1;
  ulong uVar2;
  
  if (0x93 < n) {
    uVar2 = (n + -1) / 0x93;
    lVar1 = 0x3f;
    if (uVar2 != 0) {
      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {
      }
    }
    n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14;
  }
  return n;
}



long __gmpn_hgcd_itch(long param_1)

{
  long lVar1;
  ulong uVar2;
  
  if (0x93 < param_1) {
    uVar2 = (param_1 + -1) / 0x93;
    lVar1 = 0x3f;
    if (uVar2 != 0) {
      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {
      }
    }
    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;
  }
  return param_1;
}


CMP RDI,0x93
JLE 0x0014274d
MOV RDX,0x1bdd2b899406f74b
LEA RCX,[RDI + -0x1]
ADD RDI,0x3
MOV RAX,RCX
SAR RCX,0x3f
IMUL RDX
MOV EAX,0x40
SAR RDI,0x2
SAR RDX,0x4
SUB RDX,RCX
LEA RCX,[RDI + RDI*0x4]
BSR RDX,RDX
XOR EDX,0x3f
SUB EAX,EDX
IMUL EAX,EAX,0x16
LEA RDI,[RAX + RCX*0x4 + 0x94]
MOV RAX,RDI
RET
(translation_unit "long __gmpn_hgcd_itch(long param_1)\n\n{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}\n\n" (function_definition "long __gmpn_hgcd_itch(long param_1)\n\n{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "__gmpn_hgcd_itch(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (if_statement "if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }" if (parenthesized_expression "(0x93 < param_1)" ( (binary_expression "0x93 < param_1" number_literal < identifier) )) (compound_statement "{\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }" { (expression_statement "uVar2 = (param_1 + -1) / 0x93;" (assignment_expression "uVar2 = (param_1 + -1) / 0x93" identifier = (binary_expression "(param_1 + -1) / 0x93" (parenthesized_expression "(param_1 + -1)" ( (binary_expression "param_1 + -1" identifier + number_literal) )) / number_literal)) ;) (expression_statement "lVar1 = 0x3f;" (assignment_expression "lVar1 = 0x3f" identifier = number_literal) ;) (if_statement "if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" { (for_statement "for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }" for ( ; (binary_expression "uVar2 >> lVar1 == 0" (binary_expression "uVar2 >> lVar1" identifier >> identifier) == number_literal) ; (assignment_expression "lVar1 = lVar1 + -1" identifier = (binary_expression "lVar1 + -1" identifier + number_literal)) ) (compound_statement "{\n      }" { })) })) (expression_statement "param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;" (assignment_expression "param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14" identifier = (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14" (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94" (call_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" ( (binary_expression "(0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16" (parenthesized_expression "(0x40 - ((uint)lVar1 ^ 0x3f))" ( (binary_expression "0x40 - ((uint)lVar1 ^ 0x3f)" number_literal - (parenthesized_expression "((uint)lVar1 ^ 0x3f)" ( (binary_expression "(uint)lVar1 ^ 0x3f" (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier) ^ number_literal) ))) )) * number_literal) ))) + number_literal) + (binary_expression "(param_1 + 3 >> 2) * 0x14" (parenthesized_expression "(param_1 + 3 >> 2)" ( (binary_expression "param_1 + 3 >> 2" (binary_expression "param_1 + 3" identifier + number_literal) >> number_literal) )) * number_literal))) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "mp_size_t __gmpn_hgcd_itch(mp_size_t n)\n\n{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < n) {\n    uVar2 = (n + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14;\n  }\n  return n;\n}\n\n" (function_definition "mp_size_t __gmpn_hgcd_itch(mp_size_t n)\n\n{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < n) {\n    uVar2 = (n + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14;\n  }\n  return n;\n}" type_identifier (function_declarator "__gmpn_hgcd_itch(mp_size_t n)" identifier (parameter_list "(mp_size_t n)" ( (parameter_declaration "mp_size_t n" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < n) {\n    uVar2 = (n + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14;\n  }\n  return n;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (if_statement "if (0x93 < n) {\n    uVar2 = (n + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14;\n  }" if (parenthesized_expression "(0x93 < n)" ( (binary_expression "0x93 < n" number_literal < identifier) )) (compound_statement "{\n    uVar2 = (n + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14;\n  }" { (expression_statement "uVar2 = (n + -1) / 0x93;" (assignment_expression "uVar2 = (n + -1) / 0x93" identifier = (binary_expression "(n + -1) / 0x93" (parenthesized_expression "(n + -1)" ( (binary_expression "n + -1" identifier + number_literal) )) / number_literal)) ;) (expression_statement "lVar1 = 0x3f;" (assignment_expression "lVar1 = 0x3f" identifier = number_literal) ;) (if_statement "if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" { (for_statement "for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }" for ( ; (binary_expression "uVar2 >> lVar1 == 0" (binary_expression "uVar2 >> lVar1" identifier >> identifier) == number_literal) ; (assignment_expression "lVar1 = lVar1 + -1" identifier = (binary_expression "lVar1 + -1" identifier + number_literal)) ) (compound_statement "{\n      }" { })) })) (expression_statement "n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14;" (assignment_expression "n = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14" identifier = (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (n + 3 >> 2) * 0x14" (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94" (call_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" ( (binary_expression "(0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16" (parenthesized_expression "(0x40 - ((uint)lVar1 ^ 0x3f))" ( (binary_expression "0x40 - ((uint)lVar1 ^ 0x3f)" number_literal - (parenthesized_expression "((uint)lVar1 ^ 0x3f)" ( (binary_expression "(uint)lVar1 ^ 0x3f" (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier) ^ number_literal) ))) )) * number_literal) ))) + number_literal) + (binary_expression "(n + 3 >> 2) * 0x14" (parenthesized_expression "(n + 3 >> 2)" ( (binary_expression "n + 3 >> 2" (binary_expression "n + 3" identifier + number_literal) >> number_literal) )) * number_literal))) ;) })) (return_statement "return n;" return identifier ;) })))
(translation_unit "long __gmpn_hgcd_itch(long param_1)\n\n{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}\n\n" (function_definition "long __gmpn_hgcd_itch(long param_1)\n\n{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "__gmpn_hgcd_itch(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (if_statement "if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }" if (parenthesized_expression "(0x93 < param_1)" ( (binary_expression "0x93 < param_1" number_literal < identifier) )) (compound_statement "{\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }" { (expression_statement "uVar2 = (param_1 + -1) / 0x93;" (assignment_expression "uVar2 = (param_1 + -1) / 0x93" identifier = (binary_expression "(param_1 + -1) / 0x93" (parenthesized_expression "(param_1 + -1)" ( (binary_expression "param_1 + -1" identifier + number_literal) )) / number_literal)) ;) (expression_statement "lVar1 = 0x3f;" (assignment_expression "lVar1 = 0x3f" identifier = number_literal) ;) (if_statement "if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" { (for_statement "for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }" for ( ; (binary_expression "uVar2 >> lVar1 == 0" (binary_expression "uVar2 >> lVar1" identifier >> identifier) == number_literal) ; (assignment_expression "lVar1 = lVar1 + -1" identifier = (binary_expression "lVar1 + -1" identifier + number_literal)) ) (compound_statement "{\n      }" { })) })) (expression_statement "param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;" (assignment_expression "param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14" identifier = (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14" (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94" (call_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" ( (binary_expression "(0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16" (parenthesized_expression "(0x40 - ((uint)lVar1 ^ 0x3f))" ( (binary_expression "0x40 - ((uint)lVar1 ^ 0x3f)" number_literal - (parenthesized_expression "((uint)lVar1 ^ 0x3f)" ( (binary_expression "(uint)lVar1 ^ 0x3f" (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier) ^ number_literal) ))) )) * number_literal) ))) + number_literal) + (binary_expression "(param_1 + 3 >> 2) * 0x14" (parenthesized_expression "(param_1 + 3 >> 2)" ( (binary_expression "param_1 + 3 >> 2" (binary_expression "param_1 + 3" identifier + number_literal) >> number_literal) )) * number_literal))) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) / LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (for_statement for ( ; (binary_expression (binary_expression IDENT >> IDENT) == LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { })) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression LIT - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) ^ LIT) ))) )) * LIT) ))) + LIT) + (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) >> LIT) )) * LIT))) ;) })) (return_statement return IDENT ;) })))
(function_definition "long __gmpn_hgcd_itch(long param_1)\n\n{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "__gmpn_hgcd_itch(long param_1)" (identifier "__gmpn_hgcd_itch") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  long lVar1;\n  ulong uVar2;\n  \n  if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }\n  return param_1;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (if_statement "if (0x93 < param_1) {\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }" (if "if") (parenthesized_expression "(0x93 < param_1)" (( "(") (binary_expression "0x93 < param_1" (number_literal "0x93") (< "<") (identifier "param_1")) () ")")) (compound_statement "{\n    uVar2 = (param_1 + -1) / 0x93;\n    lVar1 = 0x3f;\n    if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }\n    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;\n  }" ({ "{") (expression_statement "uVar2 = (param_1 + -1) / 0x93;" (assignment_expression "uVar2 = (param_1 + -1) / 0x93" (identifier "uVar2") (= "=") (binary_expression "(param_1 + -1) / 0x93" (parenthesized_expression "(param_1 + -1)" (( "(") (binary_expression "param_1 + -1" (identifier "param_1") (+ "+") (number_literal "-1")) () ")")) (/ "/") (number_literal "0x93"))) (; ";")) (expression_statement "lVar1 = 0x3f;" (assignment_expression "lVar1 = 0x3f" (identifier "lVar1") (= "=") (number_literal "0x3f")) (; ";")) (if_statement "if (uVar2 != 0) {\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }\n    }" ({ "{") (for_statement "for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {\n      }" (for "for") (( "(") (; ";") (binary_expression "uVar2 >> lVar1 == 0" (binary_expression "uVar2 >> lVar1" (identifier "uVar2") (>> ">>") (identifier "lVar1")) (== "==") (number_literal "0")) (; ";") (assignment_expression "lVar1 = lVar1 + -1" (identifier "lVar1") (= "=") (binary_expression "lVar1 + -1" (identifier "lVar1") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n      }" ({ "{") (} "}"))) (} "}"))) (expression_statement "param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;" (assignment_expression "param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14" (identifier "param_1") (= "=") (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14" (binary_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94" (call_expression "(ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16)" (( "(") (binary_expression "(0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16" (parenthesized_expression "(0x40 - ((uint)lVar1 ^ 0x3f))" (( "(") (binary_expression "0x40 - ((uint)lVar1 ^ 0x3f)" (number_literal "0x40") (- "-") (parenthesized_expression "((uint)lVar1 ^ 0x3f)" (( "(") (binary_expression "(uint)lVar1 ^ 0x3f" (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1")) (^ "^") (number_literal "0x3f")) () ")"))) () ")")) (* "*") (number_literal "0x16")) () ")"))) (+ "+") (number_literal "0x94")) (+ "+") (binary_expression "(param_1 + 3 >> 2) * 0x14" (parenthesized_expression "(param_1 + 3 >> 2)" (( "(") (binary_expression "param_1 + 3 >> 2" (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3")) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "0x14")))) (; ";")) (} "}"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

type_1 function_1(type_1 var_1)

{
  long var_3;
  type_2 var_2;
  
  if (0x93 < var_1) {
    var_2 = (var_1 + -1) / 0x93;
    var_3 = 0x3f;
    if (var_2 != 0) {
      for (; var_2 >> var_3 == 0; var_3 = var_3 + -1) {
      }
    }
    var_1 = (type_2)((0x40 - ((type_3)var_3 ^ 0x3f)) * 0x16) + 0x94 + (var_1 + 3 >> 2) * 0x14;
  }
  return var_1;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (for_statement condition: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))) right: (number_literal)))) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) right: (number_literal))))))) (return_statement (identifier)))))

long MASKED(long param_1)

{
  long lVar1;
  ulong uVar2;
  
  if (0x93 < param_1) {
    uVar2 = (param_1 + -1) / 0x93;
    lVar1 = 0x3f;
    if (uVar2 != 0) {
      for (; uVar2 >> lVar1 == 0; lVar1 = lVar1 + -1) {
      }
    }
    param_1 = (ulong)((0x40 - ((uint)lVar1 ^ 0x3f)) * 0x16) + 0x94 + (param_1 + 3 >> 2) * 0x14;
  }
  return param_1;
}

