
void * sqlite3HexToBlob(sqlite3 *db,char *z,int n)

{
  char *zBlob;
  undefined1 *puVar1;
  undefined1 *puVar2;
  int iVar3;
  int iVar4;
  undefined4 in_stack_ffffffec;
  
  puVar1 = (undefined1 *)sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec));
  if (puVar1 != (undefined1 *)0x0) {
    puVar2 = puVar1;
    if (0 < n + -1) {
      iVar3 = 0;
      do {
        iVar4 = iVar3 >> 1;
        iVar3 = iVar3 + 2;
        puVar1[iVar4] =
             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |
             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;
        z = z + 2;
      } while (iVar3 < n + -1);
      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);
    }
    *puVar2 = 0;
  }
  return puVar1;
}



void FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  
  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);
  if (puVar1 != (undefined1 *)0x0) {
    if (0 < param_3 + -1) {
      iVar2 = 0;
      do {
        iVar3 = iVar2 >> 1;
        iVar2 = iVar2 + 2;
        puVar1[iVar3] =
             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |
             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;
        param_2 = param_2 + 2;
      } while (iVar2 < param_3 + -1);
      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);
    }
    *puVar1 = 0;
  }
  return;
}


lui gp,0xc
addiu gp,gp,0x5544
addu gp,gp,t9
srl a3,a2,0x1f
lw t9,-0x7fb4(gp)
addiu sp,sp,-0x28
addu a3,a3,a2
addiu t9,t9,0x6c00
sra a3,a3,0x1
sw s1,0x20(sp)
or s1,a2,zero
sw s0,0x1c(sp)
addiu a3,a3,0x1
sw gp,0x10(sp)
sw ra,0x24(sp)
or s0,a1,zero
bal 0x00036c00
_sra a2,a3,0x1f
beq v0,zero,0x00037e34
_lw ra,0x24(sp)
addiu t4,s1,-0x1
blez t4,0x00037e2c
_or v1,v0,zero
or a2,zero,zero
or a1,s0,zero
lb t1,0x0(a1)
sra a3,a2,0x1
lb t0,0x1(a1)
addiu a2,a2,0x2
addu a3,v0,a3
ext t3,t1,0x6,0x1
ext t2,t0,0x6,0x1
sll v1,t3,0x3
sll a0,t2,0x3
addu v1,v1,t3
addu a0,a0,t2
addu v1,v1,t1
addu a0,a0,t0
andi v1,v1,0xf
sll v1,v1,0x4
andi a0,a0,0xf
or v1,v1,a0
slt a0,a2,t4
sb v1,0x0(a3)
bne a0,zero,0x00037dc0
_addiu a1,a1,0x2
addiu v1,s1,-0x2
srl v1,v1,0x1
addiu v1,v1,0x1
sll v1,v1,0x1
sra v1,v1,0x1
addu v1,v0,v1
sb zero,0x0(v1)
lw ra,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x28
(translation_unit "void FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)\n\n{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)\n\n{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,char *param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}" { (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);" (assignment_expression "puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" identifier = (cast_expression "(undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" identifier (argument_list "(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" ( identifier , identifier , (binary_expression "param_3 / 2 + 1 >> 0x1f" (binary_expression "param_3 / 2 + 1" (binary_expression "param_3 / 2" identifier / number_literal) + number_literal) >> number_literal) ))))) ;) (if_statement "if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }" if (parenthesized_expression "(puVar1 != (undefined1 *)0x0)" ( (binary_expression "puVar1 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }" { (if_statement "if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }" if (parenthesized_expression "(0 < param_3 + -1)" ( (binary_expression "0 < param_3 + -1" number_literal < (binary_expression "param_3 + -1" identifier + number_literal)) )) (compound_statement "{\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);" do (compound_statement "{\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      }" { (expression_statement "iVar3 = iVar2 >> 1;" (assignment_expression "iVar3 = iVar2 >> 1" identifier = (binary_expression "iVar2 >> 1" identifier >> number_literal)) ;) (expression_statement "iVar2 = iVar2 + 2;" (assignment_expression "iVar2 = iVar2 + 2" identifier = (binary_expression "iVar2 + 2" identifier + number_literal)) ;) (expression_statement "puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;" (assignment_expression "puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (subscript_expression "puVar1[iVar3]" identifier [ identifier ]) = (binary_expression "(byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (call_expression "(byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4)" ( (binary_expression "((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4" (parenthesized_expression "((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU)" ( (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU" (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2" (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9" (parenthesized_expression "(((int)*param_2 << 0x19) >> 0x1f)" ( (binary_expression "((int)*param_2 << 0x19) >> 0x1f" (parenthesized_expression "((int)*param_2 << 0x19)" ( (binary_expression "(int)*param_2 << 0x19" (cast_expression "(int)*param_2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_2" * identifier)) << number_literal) )) >> number_literal) )) * number_literal) + (cast_expression "(int)*param_2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_2" * identifier))) & number_literal) )) << number_literal) ))) | (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1]" (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9" (cast_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(((int)param_2[1] << 0x19) >> 0x1f)" ( (binary_expression "((int)param_2[1] << 0x19) >> 0x1f" (parenthesized_expression "((int)param_2[1] << 0x19)" ( (binary_expression "(int)param_2[1] << 0x19" (cast_expression "(int)param_2[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) << number_literal) )) >> number_literal) ))) * number_literal) + (subscript_expression "param_2[1]" identifier [ number_literal ])) & number_literal))) ;) (expression_statement "param_2 = param_2 + 2;" (assignment_expression "param_2 = param_2 + 2" identifier = (binary_expression "param_2 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar2 < param_3 + -1)" ( (binary_expression "iVar2 < param_3 + -1" identifier < (binary_expression "param_3 + -1" identifier + number_literal)) )) ;) (expression_statement "puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);" (assignment_expression "puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" identifier = (binary_expression "puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" identifier + (parenthesized_expression "((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" ( (binary_expression "(int)(((param_3 - 2U >> 1) + 1) * 2) >> 1" (cast_expression "(int)(((param_3 - 2U >> 1) + 1) * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(((param_3 - 2U >> 1) + 1) * 2)" ( (binary_expression "((param_3 - 2U >> 1) + 1) * 2" (parenthesized_expression "((param_3 - 2U >> 1) + 1)" ( (binary_expression "(param_3 - 2U >> 1) + 1" (parenthesized_expression "(param_3 - 2U >> 1)" ( (binary_expression "param_3 - 2U >> 1" (binary_expression "param_3 - 2U" identifier - number_literal) >> number_literal) )) + number_literal) )) * number_literal) ))) >> number_literal) )))) ;) })) (expression_statement "*puVar1 = 0;" (assignment_expression "*puVar1 = 0" (pointer_expression "*puVar1" * identifier) = number_literal) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void * sqlite3HexToBlob(sqlite3 *db,char *z,int n)\n\n{\n  char *zBlob;\n  undefined1 *puVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 in_stack_ffffffec;\n  \n  puVar1 = (undefined1 *)sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec));\n  if (puVar1 != (undefined1 *)0x0) {\n    puVar2 = puVar1;\n    if (0 < n + -1) {\n      iVar3 = 0;\n      do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);\n      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar2 = 0;\n  }\n  return puVar1;\n}\n\n" (function_definition "void * sqlite3HexToBlob(sqlite3 *db,char *z,int n)\n\n{\n  char *zBlob;\n  undefined1 *puVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 in_stack_ffffffec;\n  \n  puVar1 = (undefined1 *)sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec));\n  if (puVar1 != (undefined1 *)0x0) {\n    puVar2 = puVar1;\n    if (0 < n + -1) {\n      iVar3 = 0;\n      do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);\n      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar2 = 0;\n  }\n  return puVar1;\n}" primitive_type (pointer_declarator "* sqlite3HexToBlob(sqlite3 *db,char *z,int n)" * (function_declarator "sqlite3HexToBlob(sqlite3 *db,char *z,int n)" identifier (parameter_list "(sqlite3 *db,char *z,int n)" ( (parameter_declaration "sqlite3 *db" type_identifier (pointer_declarator "*db" * identifier)) , (parameter_declaration "char *z" primitive_type (pointer_declarator "*z" * identifier)) , (parameter_declaration "int n" primitive_type identifier) )))) (compound_statement "{\n  char *zBlob;\n  undefined1 *puVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 in_stack_ffffffec;\n  \n  puVar1 = (undefined1 *)sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec));\n  if (puVar1 != (undefined1 *)0x0) {\n    puVar2 = puVar1;\n    if (0 < n + -1) {\n      iVar3 = 0;\n      do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);\n      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar2 = 0;\n  }\n  return puVar1;\n}" { (declaration "char *zBlob;" primitive_type (pointer_declarator "*zBlob" * identifier) ;) (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined1 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 in_stack_ffffffec;" type_identifier identifier ;) (expression_statement "puVar1 = (undefined1 *)sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec));" (assignment_expression "puVar1 = (undefined1 *)sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec))" identifier = (cast_expression "(undefined1 *)sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3DbMallocRawNN(db,CONCAT44(&_gp,in_stack_ffffffec))" identifier (argument_list "(db,CONCAT44(&_gp,in_stack_ffffffec))" ( identifier , (call_expression "CONCAT44(&_gp,in_stack_ffffffec)" identifier (argument_list "(&_gp,in_stack_ffffffec)" ( (pointer_expression "&_gp" & identifier) , identifier ))) ))))) ;) (if_statement "if (puVar1 != (undefined1 *)0x0) {\n    puVar2 = puVar1;\n    if (0 < n + -1) {\n      iVar3 = 0;\n      do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);\n      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar2 = 0;\n  }" if (parenthesized_expression "(puVar1 != (undefined1 *)0x0)" ( (binary_expression "puVar1 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar2 = puVar1;\n    if (0 < n + -1) {\n      iVar3 = 0;\n      do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);\n      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar2 = 0;\n  }" { (expression_statement "puVar2 = puVar1;" (assignment_expression "puVar2 = puVar1" identifier = identifier) ;) (if_statement "if (0 < n + -1) {\n      iVar3 = 0;\n      do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);\n      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);\n    }" if (parenthesized_expression "(0 < n + -1)" ( (binary_expression "0 < n + -1" number_literal < (binary_expression "n + -1" identifier + number_literal)) )) (compound_statement "{\n      iVar3 = 0;\n      do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);\n      puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);\n    }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      } while (iVar3 < n + -1);" do (compound_statement "{\n        iVar4 = iVar3 >> 1;\n        iVar3 = iVar3 + 2;\n        puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;\n        z = z + 2;\n      }" { (expression_statement "iVar4 = iVar3 >> 1;" (assignment_expression "iVar4 = iVar3 >> 1" identifier = (binary_expression "iVar3 >> 1" identifier >> number_literal)) ;) (expression_statement "iVar3 = iVar3 + 2;" (assignment_expression "iVar3 = iVar3 + 2" identifier = (binary_expression "iVar3 + 2" identifier + number_literal)) ;) (expression_statement "puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU;" (assignment_expression "puVar1[iVar4] =\n             (byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU" (subscript_expression "puVar1[iVar4]" identifier [ identifier ]) = (binary_expression "(byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4) |\n             (char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU" (call_expression "(byte)(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4)" ( (binary_expression "((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU) << 4" (parenthesized_expression "((((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU)" ( (binary_expression "(((int)*z << 0x19) >> 0x1f) * -9 + (int)*z & 0xfU" (binary_expression "(((int)*z << 0x19) >> 0x1f) * -9 + (int)*z" (binary_expression "(((int)*z << 0x19) >> 0x1f) * -9" (parenthesized_expression "(((int)*z << 0x19) >> 0x1f)" ( (binary_expression "((int)*z << 0x19) >> 0x1f" (parenthesized_expression "((int)*z << 0x19)" ( (binary_expression "(int)*z << 0x19" (cast_expression "(int)*z" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*z" * identifier)) << number_literal) )) >> number_literal) )) * number_literal) + (cast_expression "(int)*z" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*z" * identifier))) & number_literal) )) << number_literal) ))) | (binary_expression "(char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1] & 0xfU" (binary_expression "(char)(((int)z[1] << 0x19) >> 0x1f) * -9 + z[1]" (binary_expression "(char)(((int)z[1] << 0x19) >> 0x1f) * -9" (cast_expression "(char)(((int)z[1] << 0x19) >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(((int)z[1] << 0x19) >> 0x1f)" ( (binary_expression "((int)z[1] << 0x19) >> 0x1f" (parenthesized_expression "((int)z[1] << 0x19)" ( (binary_expression "(int)z[1] << 0x19" (cast_expression "(int)z[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "z[1]" identifier [ number_literal ])) << number_literal) )) >> number_literal) ))) * number_literal) + (subscript_expression "z[1]" identifier [ number_literal ])) & number_literal))) ;) (expression_statement "z = z + 2;" (assignment_expression "z = z + 2" identifier = (binary_expression "z + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 < n + -1)" ( (binary_expression "iVar3 < n + -1" identifier < (binary_expression "n + -1" identifier + number_literal)) )) ;) (expression_statement "puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1);" (assignment_expression "puVar2 = puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1)" identifier = (binary_expression "puVar1 + ((int)(((n - 2U >> 1) + 1) * 2) >> 1)" identifier + (parenthesized_expression "((int)(((n - 2U >> 1) + 1) * 2) >> 1)" ( (binary_expression "(int)(((n - 2U >> 1) + 1) * 2) >> 1" (cast_expression "(int)(((n - 2U >> 1) + 1) * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(((n - 2U >> 1) + 1) * 2)" ( (binary_expression "((n - 2U >> 1) + 1) * 2" (parenthesized_expression "((n - 2U >> 1) + 1)" ( (binary_expression "(n - 2U >> 1) + 1" (parenthesized_expression "(n - 2U >> 1)" ( (binary_expression "n - 2U >> 1" (binary_expression "n - 2U" identifier - number_literal) >> number_literal) )) + number_literal) )) * number_literal) ))) >> number_literal) )))) ;) })) (expression_statement "*puVar2 = 0;" (assignment_expression "*puVar2 = 0" (pointer_expression "*puVar2" * identifier) = number_literal) ;) })) (return_statement "return puVar1;" return identifier ;) })))
(translation_unit "void FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)\n\n{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}\n\n" (function_definition "void FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)\n\n{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,char *param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}" { (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);" (assignment_expression "puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" identifier = (cast_expression "(undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" identifier (argument_list "(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" ( identifier , identifier , (binary_expression "param_3 / 2 + 1 >> 0x1f" (binary_expression "param_3 / 2 + 1" (binary_expression "param_3 / 2" identifier / number_literal) + number_literal) >> number_literal) ))))) ;) (if_statement "if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }" if (parenthesized_expression "(puVar1 != (undefined1 *)0x0)" ( (binary_expression "puVar1 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }" { (if_statement "if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }" if (parenthesized_expression "(0 < param_3 + -1)" ( (binary_expression "0 < param_3 + -1" number_literal < (binary_expression "param_3 + -1" identifier + number_literal)) )) (compound_statement "{\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);" do (compound_statement "{\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      }" { (expression_statement "iVar3 = iVar2 >> 1;" (assignment_expression "iVar3 = iVar2 >> 1" identifier = (binary_expression "iVar2 >> 1" identifier >> number_literal)) ;) (expression_statement "iVar2 = iVar2 + 2;" (assignment_expression "iVar2 = iVar2 + 2" identifier = (binary_expression "iVar2 + 2" identifier + number_literal)) ;) (expression_statement "puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;" (assignment_expression "puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (subscript_expression "puVar1[iVar3]" identifier [ identifier ]) = (binary_expression "(byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (call_expression "(byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4)" ( (binary_expression "((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4" (parenthesized_expression "((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU)" ( (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU" (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2" (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9" (parenthesized_expression "(((int)*param_2 << 0x19) >> 0x1f)" ( (binary_expression "((int)*param_2 << 0x19) >> 0x1f" (parenthesized_expression "((int)*param_2 << 0x19)" ( (binary_expression "(int)*param_2 << 0x19" (cast_expression "(int)*param_2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_2" * identifier)) << number_literal) )) >> number_literal) )) * number_literal) + (cast_expression "(int)*param_2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_2" * identifier))) & number_literal) )) << number_literal) ))) | (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1]" (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9" (cast_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(((int)param_2[1] << 0x19) >> 0x1f)" ( (binary_expression "((int)param_2[1] << 0x19) >> 0x1f" (parenthesized_expression "((int)param_2[1] << 0x19)" ( (binary_expression "(int)param_2[1] << 0x19" (cast_expression "(int)param_2[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) << number_literal) )) >> number_literal) ))) * number_literal) + (subscript_expression "param_2[1]" identifier [ number_literal ])) & number_literal))) ;) (expression_statement "param_2 = param_2 + 2;" (assignment_expression "param_2 = param_2 + 2" identifier = (binary_expression "param_2 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar2 < param_3 + -1)" ( (binary_expression "iVar2 < param_3 + -1" identifier < (binary_expression "param_3 + -1" identifier + number_literal)) )) ;) (expression_statement "puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);" (assignment_expression "puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" identifier = (binary_expression "puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" identifier + (parenthesized_expression "((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" ( (binary_expression "(int)(((param_3 - 2U >> 1) + 1) * 2) >> 1" (cast_expression "(int)(((param_3 - 2U >> 1) + 1) * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(((param_3 - 2U >> 1) + 1) * 2)" ( (binary_expression "((param_3 - 2U >> 1) + 1) * 2" (parenthesized_expression "((param_3 - 2U >> 1) + 1)" ( (binary_expression "(param_3 - 2U >> 1) + 1" (parenthesized_expression "(param_3 - 2U >> 1)" ( (binary_expression "param_3 - 2U >> 1" (binary_expression "param_3 - 2U" identifier - number_literal) >> number_literal) )) + number_literal) )) * number_literal) ))) >> number_literal) )))) ;) })) (expression_statement "*puVar1 = 0;" (assignment_expression "*puVar1 = 0" (pointer_expression "*puVar1" * identifier) = number_literal) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (binary_expression (binary_expression IDENT / LIT) + LIT) >> LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (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 IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) << LIT) )) >> LIT) )) * LIT) + (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) & LIT) )) << LIT) ))) | (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) << LIT) )) >> LIT) ))) * LIT) + (subscript_expression IDENT [ LIT ])) & LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) >> LIT) )) + LIT) )) * LIT) ))) >> LIT) )))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (return_statement return ;) })))
(function_definition "void FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)\n\n{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00037d5c(undefined4 param_1,char *param_2,int param_3)" (identifier "FUN_00037d5c") (parameter_list "(undefined4 param_1,char *param_2,int param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  \n  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);\n  if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }\n  return;\n}" ({ "{") (declaration "undefined1 *puVar1;" (type_identifier "undefined1") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (expression_statement "puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);" (assignment_expression "puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" (identifier "puVar1") (= "=") (cast_expression "(undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" (identifier "FUN_00036c00") (argument_list "(param_1,param_2,param_3 / 2 + 1 >> 0x1f)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (binary_expression "param_3 / 2 + 1 >> 0x1f" (binary_expression "param_3 / 2 + 1" (binary_expression "param_3 / 2" (identifier "param_3") (/ "/") (number_literal "2")) (+ "+") (number_literal "1")) (>> ">>") (number_literal "0x1f")) () ")"))))) (; ";")) (if_statement "if (puVar1 != (undefined1 *)0x0) {\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }" (if "if") (parenthesized_expression "(puVar1 != (undefined1 *)0x0)" (( "(") (binary_expression "puVar1 != (undefined1 *)0x0" (identifier "puVar1") (!= "!=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }\n    *puVar1 = 0;\n  }" ({ "{") (if_statement "if (0 < param_3 + -1) {\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }" (if "if") (parenthesized_expression "(0 < param_3 + -1)" (( "(") (binary_expression "0 < param_3 + -1" (number_literal "0") (< "<") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1"))) () ")")) (compound_statement "{\n      iVar2 = 0;\n      do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);\n      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);\n    }" ({ "{") (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      } while (iVar2 < param_3 + -1);" (do "do") (compound_statement "{\n        iVar3 = iVar2 >> 1;\n        iVar2 = iVar2 + 2;\n        puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;\n        param_2 = param_2 + 2;\n      }" ({ "{") (expression_statement "iVar3 = iVar2 >> 1;" (assignment_expression "iVar3 = iVar2 >> 1" (identifier "iVar3") (= "=") (binary_expression "iVar2 >> 1" (identifier "iVar2") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "iVar2 = iVar2 + 2;" (assignment_expression "iVar2 = iVar2 + 2" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 2" (identifier "iVar2") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;" (assignment_expression "puVar1[iVar3] =\n             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (subscript_expression "puVar1[iVar3]" (identifier "puVar1") ([ "[") (identifier "iVar3") (] "]")) (= "=") (binary_expression "(byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |\n             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (call_expression "(byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4)" (( "(") (binary_expression "((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4" (parenthesized_expression "((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU)" (( "(") (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU" (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2" (binary_expression "(((int)*param_2 << 0x19) >> 0x1f) * -9" (parenthesized_expression "(((int)*param_2 << 0x19) >> 0x1f)" (( "(") (binary_expression "((int)*param_2 << 0x19) >> 0x1f" (parenthesized_expression "((int)*param_2 << 0x19)" (( "(") (binary_expression "(int)*param_2 << 0x19" (cast_expression "(int)*param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (<< "<<") (number_literal "0x19")) () ")")) (>> ">>") (number_literal "0x1f")) () ")")) (* "*") (number_literal "-9")) (+ "+") (cast_expression "(int)*param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (& "&") (number_literal "0xfU")) () ")")) (<< "<<") (number_literal "4")) () ")"))) (| "|") (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU" (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1]" (binary_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f) * -9" (cast_expression "(char)(((int)param_2[1] << 0x19) >> 0x1f)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "(((int)param_2[1] << 0x19) >> 0x1f)" (( "(") (binary_expression "((int)param_2[1] << 0x19) >> 0x1f" (parenthesized_expression "((int)param_2[1] << 0x19)" (( "(") (binary_expression "(int)param_2[1] << 0x19" (cast_expression "(int)param_2[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (<< "<<") (number_literal "0x19")) () ")")) (>> ">>") (number_literal "0x1f")) () ")"))) (* "*") (number_literal "-9")) (+ "+") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (& "&") (number_literal "0xfU")))) (; ";")) (expression_statement "param_2 = param_2 + 2;" (assignment_expression "param_2 = param_2 + 2" (identifier "param_2") (= "=") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar2 < param_3 + -1)" (( "(") (binary_expression "iVar2 < param_3 + -1" (identifier "iVar2") (< "<") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1"))) () ")")) (; ";")) (expression_statement "puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);" (assignment_expression "puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" (identifier "puVar1") (= "=") (binary_expression "puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" (identifier "puVar1") (+ "+") (parenthesized_expression "((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1)" (( "(") (binary_expression "(int)(((param_3 - 2U >> 1) + 1) * 2) >> 1" (cast_expression "(int)(((param_3 - 2U >> 1) + 1) * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(((param_3 - 2U >> 1) + 1) * 2)" (( "(") (binary_expression "((param_3 - 2U >> 1) + 1) * 2" (parenthesized_expression "((param_3 - 2U >> 1) + 1)" (( "(") (binary_expression "(param_3 - 2U >> 1) + 1" (parenthesized_expression "(param_3 - 2U >> 1)" (( "(") (binary_expression "param_3 - 2U >> 1" (binary_expression "param_3 - 2U" (identifier "param_3") (- "-") (number_literal "2U")) (>> ">>") (number_literal "1")) () ")")) (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "2")) () ")"))) (>> ">>") (number_literal "1")) () ")")))) (; ";")) (} "}"))) (expression_statement "*puVar1 = 0;" (assignment_expression "*puVar1 = 0" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void * function_1(type_1 *db,char *var_6,int var_4)

{
  char *zBlob;
  type_2 *var_3;
  type_2 *puVar2;
  int var_5;
  int iVar4;
  type_3 in_stack_ffffffec;
  
  var_3 = (type_2 *)var_1(db,var_2(&_gp,in_stack_ffffffec));
  if (var_3 != (type_2 *)0x0) {
    puVar2 = var_3;
    if (0 < var_4 + -1) {
      var_5 = 0;
      do {
        iVar4 = var_5 >> 1;
        var_5 = var_5 + 2;
        var_3[iVar4] =
             (byte)(((((int)*var_6 << 0x19) >> 0x1f) * -9 + (int)*var_6 & 0xfU) << 4) |
             (char)(((int)var_6[1] << 0x19) >> 0x1f) * -9 + var_6[1] & 0xfU;
        var_6 = var_6 + 2;
      } while (var_5 < var_4 + -1);
      puVar2 = var_3 + ((int)(((var_4 - 2U >> 1) + 1) * 2) >> 1);
    }
    *puVar2 = 0;
  }
  return var_3;
}


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

void MASKED(undefined4 param_1,char *param_2,int param_3)

{
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  
  puVar1 = (undefined1 *)FUN_00036c00(param_1,param_2,param_3 / 2 + 1 >> 0x1f);
  if (puVar1 != (undefined1 *)0x0) {
    if (0 < param_3 + -1) {
      iVar2 = 0;
      do {
        iVar3 = iVar2 >> 1;
        iVar2 = iVar2 + 2;
        puVar1[iVar3] =
             (byte)(((((int)*param_2 << 0x19) >> 0x1f) * -9 + (int)*param_2 & 0xfU) << 4) |
             (char)(((int)param_2[1] << 0x19) >> 0x1f) * -9 + param_2[1] & 0xfU;
        param_2 = param_2 + 2;
      } while (iVar2 < param_3 + -1);
      puVar1 = puVar1 + ((int)(((param_3 - 2U >> 1) + 1) * 2) >> 1);
    }
    *puVar1 = 0;
  }
  return;
}

