
void sqlite3VdbeDeleteAuxData(sqlite3 *db,AuxData **pp,int iOp,int mask)

{
  uint uVar1;
  AuxData *pAVar2;
  code *pcVar3;
  
  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);
LAB_00068758:
  pAVar2 = *pp;
  do {
    if (pAVar2 == (AuxData *)0x0) {
      return;
    }
    if (-1 < iOp) {
      if (pAVar2->iAuxOp != iOp) break;
      uVar1 = pAVar2->iAuxArg;
      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))
      break;
    }
    if (pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0) {
      (*pAVar2->xDeleteAux)(pAVar2->pAux);
    }
    *pp = pAVar2->pNextAux;
    (*pcVar3)(db,pAVar2);
    pAVar2 = *pp;
  } while( true );
  pp = &pAVar2->pNextAux;
  goto LAB_00068758;
}



void FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)

{
  uint uVar1;
  int *piVar2;
  code *pcVar3;
  
  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);
LAB_00068758:
  piVar2 = (int *)*param_2;
  do {
    if (piVar2 == (int *)0x0) {
      return;
    }
    if (-1 < param_3) {
      if (*piVar2 != param_3) break;
      uVar1 = piVar2[1];
      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))
      break;
    }
    if ((code *)piVar2[3] != (code *)0x0) {
      (*(code *)piVar2[3])(piVar2[2]);
    }
    *param_2 = piVar2[4];
    (*pcVar3)(param_1,piVar2);
    piVar2 = (int *)*param_2;
  } while( true );
  param_2 = piVar2 + 4;
  goto LAB_00068758;
}


lui gp,0x13
addiu gp,gp,-0xde8
addu gp,gp,t9
addiu sp,sp,-0x38
sw ra,0x34(sp)
sw s5,0x30(sp)
sw s4,0x2c(sp)
sw s3,0x28(sp)
sw s2,0x24(sp)
sw s1,0x20(sp)
sw s0,0x1c(sp)
sw gp,0x10(sp)
or s4,a0,zero
or s1,a1,zero
or s2,a2,zero
or s5,a3,zero
lw s3,-0x7d50(gp)
b 0x00068758
_addiu s3,s3,0x7878
addiu s1,s0,0x10
lw s0,0x0(s1)
beq s0,zero,0x000687dc
_lw ra,0x34(sp)
bltz s2,0x00068798
_nop
lw v0,0x0(s0)
bne v0,s2,0x00068754
_nop
lw v0,0x4(s0)
bltz v0,0x00068754
_slti v1,v0,0x20
beq v1,zero,0x00068798
_srlv v0,s5,v0
andi v0,v0,0x1
bne v0,zero,0x00068754
_nop
lw t9,0xc(s0)
beq t9,zero,0x000687b4
_nop
lw a0,0x8(s0)
jalr t9
_nop
lw gp,0x10(sp)
lw v0,0x10(s0)
sw v0,0x0(s1)
or a1,s0,zero
or a0,s4,zero
or t9,s3,zero
jalr t9
_nop
lw gp,0x10(sp)
b 0x0006875c
_lw s0,0x0(s1)
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
(translation_unit "void FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)\n\n{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}\n\n" (function_definition "void FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)\n\n{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}" primitive_type (function_declarator "FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)" identifier (parameter_list "(undefined4 param_1,int *param_2,int param_3,uint param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "code *pcVar3;" type_identifier (pointer_declarator "*pcVar3" * identifier) ;) (expression_statement "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878)" identifier = (cast_expression "(code *)(PTR_LAB_0018fbd0 + 0x7878)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0018fbd0 + 0x7878)" ( (binary_expression "PTR_LAB_0018fbd0 + 0x7878" identifier + number_literal) )))) ;) (labeled_statement "LAB_00068758:\n  piVar2 = (int *)*param_2;" statement_identifier : (expression_statement "piVar2 = (int *)*param_2;" (assignment_expression "piVar2 = (int *)*param_2" identifier = (cast_expression "(int *)*param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) (do_statement "do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );" do (compound_statement "{\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  }" { (if_statement "if (piVar2 == (int *)0x0) {\n      return;\n    }" if (parenthesized_expression "(piVar2 == (int *)0x0)" ( (binary_expression "piVar2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (if_statement "if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" if (parenthesized_expression "(-1 < param_3)" ( (binary_expression "-1 < param_3" number_literal < identifier) )) (compound_statement "{\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" { (if_statement "if (*piVar2 != param_3) break;" if (parenthesized_expression "(*piVar2 != param_3)" ( (binary_expression "*piVar2 != param_3" (pointer_expression "*piVar2" * identifier) != identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar1 = piVar2[1];" (assignment_expression "uVar1 = piVar2[1]" identifier = (subscript_expression "piVar2[1]" identifier [ number_literal ])) ;) (if_statement "if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;" if (parenthesized_expression "(((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))" ( (binary_expression "((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)))" (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) || (parenthesized_expression "(((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)))" ( (parenthesized_expression "((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))" ( (binary_expression "(int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)" (binary_expression "(int)uVar1 < 0x20" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) && (parenthesized_expression "((param_4 >> (uVar1 & 0x1f) & 1) != 0)" ( (binary_expression "(param_4 >> (uVar1 & 0x1f) & 1) != 0" (parenthesized_expression "(param_4 >> (uVar1 & 0x1f) & 1)" ( (binary_expression "param_4 >> (uVar1 & 0x1f) & 1" (binary_expression "param_4 >> (uVar1 & 0x1f)" identifier >> (parenthesized_expression "(uVar1 & 0x1f)" ( (binary_expression "uVar1 & 0x1f" identifier & number_literal) ))) & number_literal) )) != number_literal) ))) )) ))) )) (break_statement "break;" break ;)) })) (if_statement "if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }" if (parenthesized_expression "((code *)piVar2[3] != (code *)0x0)" ( (binary_expression "(code *)piVar2[3] != (code *)0x0" (cast_expression "(code *)piVar2[3]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar2[3]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*(code *)piVar2[3])(piVar2[2]);\n    }" { (expression_statement "(*(code *)piVar2[3])(piVar2[2]);" (call_expression "(*(code *)piVar2[3])(piVar2[2])" (parenthesized_expression "(*(code *)piVar2[3])" ( (pointer_expression "*(code *)piVar2[3]" * (cast_expression "(code *)piVar2[3]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar2[3]" identifier [ number_literal ]))) )) (argument_list "(piVar2[2])" ( (subscript_expression "piVar2[2]" identifier [ number_literal ]) ))) ;) })) (expression_statement "*param_2 = piVar2[4];" (assignment_expression "*param_2 = piVar2[4]" (pointer_expression "*param_2" * identifier) = (subscript_expression "piVar2[4]" identifier [ number_literal ])) ;) (expression_statement "(*pcVar3)(param_1,piVar2);" (call_expression "(*pcVar3)(param_1,piVar2)" (parenthesized_expression "(*pcVar3)" ( (pointer_expression "*pcVar3" * identifier) )) (argument_list "(param_1,piVar2)" ( identifier , identifier ))) ;) (expression_statement "piVar2 = (int *)*param_2;" (assignment_expression "piVar2 = (int *)*param_2" identifier = (cast_expression "(int *)*param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) (expression_statement "param_2 = piVar2 + 4;" (assignment_expression "param_2 = piVar2 + 4" identifier = (binary_expression "piVar2 + 4" identifier + number_literal)) ;) (goto_statement "goto LAB_00068758;" goto statement_identifier ;) })))
(translation_unit "void sqlite3VdbeDeleteAuxData(sqlite3 *db,AuxData **pp,int iOp,int mask)\n\n{\n  uint uVar1;\n  AuxData *pAVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  pAVar2 = *pp;\n  do {\n    if (pAVar2 == (AuxData *)0x0) {\n      return;\n    }\n    if (-1 < iOp) {\n      if (pAVar2->iAuxOp != iOp) break;\n      uVar1 = pAVar2->iAuxArg;\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if (pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0) {\n      (*pAVar2->xDeleteAux)(pAVar2->pAux);\n    }\n    *pp = pAVar2->pNextAux;\n    (*pcVar3)(db,pAVar2);\n    pAVar2 = *pp;\n  } while( true );\n  pp = &pAVar2->pNextAux;\n  goto LAB_00068758;\n}\n\n" (function_definition "void sqlite3VdbeDeleteAuxData(sqlite3 *db,AuxData **pp,int iOp,int mask)\n\n{\n  uint uVar1;\n  AuxData *pAVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  pAVar2 = *pp;\n  do {\n    if (pAVar2 == (AuxData *)0x0) {\n      return;\n    }\n    if (-1 < iOp) {\n      if (pAVar2->iAuxOp != iOp) break;\n      uVar1 = pAVar2->iAuxArg;\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if (pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0) {\n      (*pAVar2->xDeleteAux)(pAVar2->pAux);\n    }\n    *pp = pAVar2->pNextAux;\n    (*pcVar3)(db,pAVar2);\n    pAVar2 = *pp;\n  } while( true );\n  pp = &pAVar2->pNextAux;\n  goto LAB_00068758;\n}" primitive_type (function_declarator "sqlite3VdbeDeleteAuxData(sqlite3 *db,AuxData **pp,int iOp,int mask)" identifier (parameter_list "(sqlite3 *db,AuxData **pp,int iOp,int mask)" ( (parameter_declaration "sqlite3 *db" type_identifier (pointer_declarator "*db" * identifier)) , (parameter_declaration "AuxData **pp" type_identifier (pointer_declarator "**pp" * (pointer_declarator "*pp" * identifier))) , (parameter_declaration "int iOp" primitive_type identifier) , (parameter_declaration "int mask" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  AuxData *pAVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  pAVar2 = *pp;\n  do {\n    if (pAVar2 == (AuxData *)0x0) {\n      return;\n    }\n    if (-1 < iOp) {\n      if (pAVar2->iAuxOp != iOp) break;\n      uVar1 = pAVar2->iAuxArg;\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if (pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0) {\n      (*pAVar2->xDeleteAux)(pAVar2->pAux);\n    }\n    *pp = pAVar2->pNextAux;\n    (*pcVar3)(db,pAVar2);\n    pAVar2 = *pp;\n  } while( true );\n  pp = &pAVar2->pNextAux;\n  goto LAB_00068758;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "AuxData *pAVar2;" type_identifier (pointer_declarator "*pAVar2" * identifier) ;) (declaration "code *pcVar3;" type_identifier (pointer_declarator "*pcVar3" * identifier) ;) (expression_statement "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878)" identifier = (cast_expression "(code *)(PTR_LAB_0018fbd0 + 0x7878)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0018fbd0 + 0x7878)" ( (binary_expression "PTR_LAB_0018fbd0 + 0x7878" identifier + number_literal) )))) ;) (labeled_statement "LAB_00068758:\n  pAVar2 = *pp;" statement_identifier : (expression_statement "pAVar2 = *pp;" (assignment_expression "pAVar2 = *pp" identifier = (pointer_expression "*pp" * identifier)) ;)) (do_statement "do {\n    if (pAVar2 == (AuxData *)0x0) {\n      return;\n    }\n    if (-1 < iOp) {\n      if (pAVar2->iAuxOp != iOp) break;\n      uVar1 = pAVar2->iAuxArg;\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if (pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0) {\n      (*pAVar2->xDeleteAux)(pAVar2->pAux);\n    }\n    *pp = pAVar2->pNextAux;\n    (*pcVar3)(db,pAVar2);\n    pAVar2 = *pp;\n  } while( true );" do (compound_statement "{\n    if (pAVar2 == (AuxData *)0x0) {\n      return;\n    }\n    if (-1 < iOp) {\n      if (pAVar2->iAuxOp != iOp) break;\n      uVar1 = pAVar2->iAuxArg;\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if (pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0) {\n      (*pAVar2->xDeleteAux)(pAVar2->pAux);\n    }\n    *pp = pAVar2->pNextAux;\n    (*pcVar3)(db,pAVar2);\n    pAVar2 = *pp;\n  }" { (if_statement "if (pAVar2 == (AuxData *)0x0) {\n      return;\n    }" if (parenthesized_expression "(pAVar2 == (AuxData *)0x0)" ( (binary_expression "pAVar2 == (AuxData *)0x0" identifier == (cast_expression "(AuxData *)0x0" ( (type_descriptor "AuxData *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (if_statement "if (-1 < iOp) {\n      if (pAVar2->iAuxOp != iOp) break;\n      uVar1 = pAVar2->iAuxArg;\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" if (parenthesized_expression "(-1 < iOp)" ( (binary_expression "-1 < iOp" number_literal < identifier) )) (compound_statement "{\n      if (pAVar2->iAuxOp != iOp) break;\n      uVar1 = pAVar2->iAuxArg;\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" { (if_statement "if (pAVar2->iAuxOp != iOp) break;" if (parenthesized_expression "(pAVar2->iAuxOp != iOp)" ( (binary_expression "pAVar2->iAuxOp != iOp" (field_expression "pAVar2->iAuxOp" identifier -> field_identifier) != identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar1 = pAVar2->iAuxArg;" (assignment_expression "uVar1 = pAVar2->iAuxArg" identifier = (field_expression "pAVar2->iAuxArg" identifier -> field_identifier)) ;) (if_statement "if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))\n      break;" if (parenthesized_expression "(((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))))" ( (binary_expression "((int)uVar1 < 0) || (((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0)))" (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) || (parenthesized_expression "(((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0)))" ( (parenthesized_expression "((int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0))" ( (binary_expression "(int)uVar1 < 0x20 && (((uint)mask >> (uVar1 & 0x1f) & 1) != 0)" (binary_expression "(int)uVar1 < 0x20" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) && (parenthesized_expression "(((uint)mask >> (uVar1 & 0x1f) & 1) != 0)" ( (binary_expression "((uint)mask >> (uVar1 & 0x1f) & 1) != 0" (parenthesized_expression "((uint)mask >> (uVar1 & 0x1f) & 1)" ( (binary_expression "(uint)mask >> (uVar1 & 0x1f) & 1" (binary_expression "(uint)mask >> (uVar1 & 0x1f)" (cast_expression "(uint)mask" ( (type_descriptor "uint" type_identifier) ) identifier) >> (parenthesized_expression "(uVar1 & 0x1f)" ( (binary_expression "uVar1 & 0x1f" identifier & number_literal) ))) & number_literal) )) != number_literal) ))) )) ))) )) (break_statement "break;" break ;)) })) (if_statement "if (pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0) {\n      (*pAVar2->xDeleteAux)(pAVar2->pAux);\n    }" if (parenthesized_expression "(pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0)" ( (binary_expression "pAVar2->xDeleteAux != (_func_void_void_ptr *)0x0" (field_expression "pAVar2->xDeleteAux" identifier -> field_identifier) != (cast_expression "(_func_void_void_ptr *)0x0" ( (type_descriptor "_func_void_void_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*pAVar2->xDeleteAux)(pAVar2->pAux);\n    }" { (expression_statement "(*pAVar2->xDeleteAux)(pAVar2->pAux);" (call_expression "(*pAVar2->xDeleteAux)(pAVar2->pAux)" (parenthesized_expression "(*pAVar2->xDeleteAux)" ( (pointer_expression "*pAVar2->xDeleteAux" * (field_expression "pAVar2->xDeleteAux" identifier -> field_identifier)) )) (argument_list "(pAVar2->pAux)" ( (field_expression "pAVar2->pAux" identifier -> field_identifier) ))) ;) })) (expression_statement "*pp = pAVar2->pNextAux;" (assignment_expression "*pp = pAVar2->pNextAux" (pointer_expression "*pp" * identifier) = (field_expression "pAVar2->pNextAux" identifier -> field_identifier)) ;) (expression_statement "(*pcVar3)(db,pAVar2);" (call_expression "(*pcVar3)(db,pAVar2)" (parenthesized_expression "(*pcVar3)" ( (pointer_expression "*pcVar3" * identifier) )) (argument_list "(db,pAVar2)" ( identifier , identifier ))) ;) (expression_statement "pAVar2 = *pp;" (assignment_expression "pAVar2 = *pp" identifier = (pointer_expression "*pp" * identifier)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) (expression_statement "pp = &pAVar2->pNextAux;" (assignment_expression "pp = &pAVar2->pNextAux" identifier = (pointer_expression "&pAVar2->pNextAux" & (field_expression "pAVar2->pNextAux" identifier -> field_identifier))) ;) (goto_statement "goto LAB_00068758;" goto statement_identifier ;) })))
(translation_unit "void FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)\n\n{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}\n\n" (function_definition "void FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)\n\n{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}" primitive_type (function_declarator "FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)" identifier (parameter_list "(undefined4 param_1,int *param_2,int param_3,uint param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "code *pcVar3;" type_identifier (pointer_declarator "*pcVar3" * identifier) ;) (expression_statement "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878)" identifier = (cast_expression "(code *)(PTR_LAB_0018fbd0 + 0x7878)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0018fbd0 + 0x7878)" ( (binary_expression "PTR_LAB_0018fbd0 + 0x7878" identifier + number_literal) )))) ;) (labeled_statement "LAB_00068758:\n  piVar2 = (int *)*param_2;" statement_identifier : (expression_statement "piVar2 = (int *)*param_2;" (assignment_expression "piVar2 = (int *)*param_2" identifier = (cast_expression "(int *)*param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;)) (do_statement "do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );" do (compound_statement "{\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  }" { (if_statement "if (piVar2 == (int *)0x0) {\n      return;\n    }" if (parenthesized_expression "(piVar2 == (int *)0x0)" ( (binary_expression "piVar2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (if_statement "if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" if (parenthesized_expression "(-1 < param_3)" ( (binary_expression "-1 < param_3" number_literal < identifier) )) (compound_statement "{\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" { (if_statement "if (*piVar2 != param_3) break;" if (parenthesized_expression "(*piVar2 != param_3)" ( (binary_expression "*piVar2 != param_3" (pointer_expression "*piVar2" * identifier) != identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar1 = piVar2[1];" (assignment_expression "uVar1 = piVar2[1]" identifier = (subscript_expression "piVar2[1]" identifier [ number_literal ])) ;) (if_statement "if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;" if (parenthesized_expression "(((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))" ( (binary_expression "((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)))" (parenthesized_expression "((int)uVar1 < 0)" ( (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) || (parenthesized_expression "(((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)))" ( (parenthesized_expression "((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))" ( (binary_expression "(int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)" (binary_expression "(int)uVar1 < 0x20" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) && (parenthesized_expression "((param_4 >> (uVar1 & 0x1f) & 1) != 0)" ( (binary_expression "(param_4 >> (uVar1 & 0x1f) & 1) != 0" (parenthesized_expression "(param_4 >> (uVar1 & 0x1f) & 1)" ( (binary_expression "param_4 >> (uVar1 & 0x1f) & 1" (binary_expression "param_4 >> (uVar1 & 0x1f)" identifier >> (parenthesized_expression "(uVar1 & 0x1f)" ( (binary_expression "uVar1 & 0x1f" identifier & number_literal) ))) & number_literal) )) != number_literal) ))) )) ))) )) (break_statement "break;" break ;)) })) (if_statement "if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }" if (parenthesized_expression "((code *)piVar2[3] != (code *)0x0)" ( (binary_expression "(code *)piVar2[3] != (code *)0x0" (cast_expression "(code *)piVar2[3]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar2[3]" identifier [ number_literal ])) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*(code *)piVar2[3])(piVar2[2]);\n    }" { (expression_statement "(*(code *)piVar2[3])(piVar2[2]);" (call_expression "(*(code *)piVar2[3])(piVar2[2])" (parenthesized_expression "(*(code *)piVar2[3])" ( (pointer_expression "*(code *)piVar2[3]" * (cast_expression "(code *)piVar2[3]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar2[3]" identifier [ number_literal ]))) )) (argument_list "(piVar2[2])" ( (subscript_expression "piVar2[2]" identifier [ number_literal ]) ))) ;) })) (expression_statement "*param_2 = piVar2[4];" (assignment_expression "*param_2 = piVar2[4]" (pointer_expression "*param_2" * identifier) = (subscript_expression "piVar2[4]" identifier [ number_literal ])) ;) (expression_statement "(*pcVar3)(param_1,piVar2);" (call_expression "(*pcVar3)(param_1,piVar2)" (parenthesized_expression "(*pcVar3)" ( (pointer_expression "*pcVar3" * identifier) )) (argument_list "(param_1,piVar2)" ( identifier , identifier ))) ;) (expression_statement "piVar2 = (int *)*param_2;" (assignment_expression "piVar2 = (int *)*param_2" identifier = (cast_expression "(int *)*param_2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) (expression_statement "param_2 = piVar2 + 4;" (assignment_expression "param_2 = piVar2 + 4" identifier = (binary_expression "piVar2 + 4" identifier + number_literal)) ;) (goto_statement "goto LAB_00068758;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;)) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) & LIT) )) != LIT) ))) )) ))) )) (break_statement break ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( BOOL )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (goto_statement goto statement_identifier ;) })))
(function_definition "void FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)\n\n{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}" (primitive_type "void") (function_declarator "FUN_00068708(undefined4 param_1,int *param_2,int param_3,uint param_4)" (identifier "FUN_00068708") (parameter_list "(undefined4 param_1,int *param_2,int param_3,uint param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int *piVar2;\n  code *pcVar3;\n  \n  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);\nLAB_00068758:\n  piVar2 = (int *)*param_2;\n  do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );\n  param_2 = piVar2 + 4;\n  goto LAB_00068758;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "code *pcVar3;" (type_identifier "code") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (expression_statement "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);" (assignment_expression "pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878)" (identifier "pcVar3") (= "=") (cast_expression "(code *)(PTR_LAB_0018fbd0 + 0x7878)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0018fbd0 + 0x7878)" (( "(") (binary_expression "PTR_LAB_0018fbd0 + 0x7878" (identifier "PTR_LAB_0018fbd0") (+ "+") (number_literal "0x7878")) () ")")))) (; ";")) (labeled_statement "LAB_00068758:\n  piVar2 = (int *)*param_2;" (statement_identifier "LAB_00068758") (: ":") (expression_statement "piVar2 = (int *)*param_2;" (assignment_expression "piVar2 = (int *)*param_2" (identifier "piVar2") (= "=") (cast_expression "(int *)*param_2" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";"))) (do_statement "do {\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  } while( true );" (do "do") (compound_statement "{\n    if (piVar2 == (int *)0x0) {\n      return;\n    }\n    if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }\n    if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }\n    *param_2 = piVar2[4];\n    (*pcVar3)(param_1,piVar2);\n    piVar2 = (int *)*param_2;\n  }" ({ "{") (if_statement "if (piVar2 == (int *)0x0) {\n      return;\n    }" (if "if") (parenthesized_expression "(piVar2 == (int *)0x0)" (( "(") (binary_expression "piVar2 == (int *)0x0" (identifier "piVar2") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (-1 < param_3) {\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" (if "if") (parenthesized_expression "(-1 < param_3)" (( "(") (binary_expression "-1 < param_3" (number_literal "-1") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n      if (*piVar2 != param_3) break;\n      uVar1 = piVar2[1];\n      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;\n    }" ({ "{") (if_statement "if (*piVar2 != param_3) break;" (if "if") (parenthesized_expression "(*piVar2 != param_3)" (( "(") (binary_expression "*piVar2 != param_3" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (!= "!=") (identifier "param_3")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar1 = piVar2[1];" (assignment_expression "uVar1 = piVar2[1]" (identifier "uVar1") (= "=") (subscript_expression "piVar2[1]" (identifier "piVar2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))\n      break;" (if "if") (parenthesized_expression "(((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))" (( "(") (binary_expression "((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)))" (parenthesized_expression "((int)uVar1 < 0)" (( "(") (binary_expression "(int)uVar1 < 0" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (< "<") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)))" (( "(") (parenthesized_expression "((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))" (( "(") (binary_expression "(int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0)" (binary_expression "(int)uVar1 < 0x20" (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")) (< "<") (number_literal "0x20")) (&& "&&") (parenthesized_expression "((param_4 >> (uVar1 & 0x1f) & 1) != 0)" (( "(") (binary_expression "(param_4 >> (uVar1 & 0x1f) & 1) != 0" (parenthesized_expression "(param_4 >> (uVar1 & 0x1f) & 1)" (( "(") (binary_expression "param_4 >> (uVar1 & 0x1f) & 1" (binary_expression "param_4 >> (uVar1 & 0x1f)" (identifier "param_4") (>> ">>") (parenthesized_expression "(uVar1 & 0x1f)" (( "(") (binary_expression "uVar1 & 0x1f" (identifier "uVar1") (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}"))) (if_statement "if ((code *)piVar2[3] != (code *)0x0) {\n      (*(code *)piVar2[3])(piVar2[2]);\n    }" (if "if") (parenthesized_expression "((code *)piVar2[3] != (code *)0x0)" (( "(") (binary_expression "(code *)piVar2[3] != (code *)0x0" (cast_expression "(code *)piVar2[3]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar2[3]" (identifier "piVar2") ([ "[") (number_literal "3") (] "]"))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (*(code *)piVar2[3])(piVar2[2]);\n    }" ({ "{") (expression_statement "(*(code *)piVar2[3])(piVar2[2]);" (call_expression "(*(code *)piVar2[3])(piVar2[2])" (parenthesized_expression "(*(code *)piVar2[3])" (( "(") (pointer_expression "*(code *)piVar2[3]" (* "*") (cast_expression "(code *)piVar2[3]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar2[3]" (identifier "piVar2") ([ "[") (number_literal "3") (] "]")))) () ")")) (argument_list "(piVar2[2])" (( "(") (subscript_expression "piVar2[2]" (identifier "piVar2") ([ "[") (number_literal "2") (] "]")) () ")"))) (; ";")) (} "}"))) (expression_statement "*param_2 = piVar2[4];" (assignment_expression "*param_2 = piVar2[4]" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (subscript_expression "piVar2[4]" (identifier "piVar2") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "(*pcVar3)(param_1,piVar2);" (call_expression "(*pcVar3)(param_1,piVar2)" (parenthesized_expression "(*pcVar3)" (( "(") (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3")) () ")")) (argument_list "(param_1,piVar2)" (( "(") (identifier "param_1") (, ",") (identifier "piVar2") () ")"))) (; ";")) (expression_statement "piVar2 = (int *)*param_2;" (assignment_expression "piVar2 = (int *)*param_2" (identifier "piVar2") (= "=") (cast_expression "(int *)*param_2" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (expression_statement "param_2 = piVar2 + 4;" (assignment_expression "param_2 = piVar2 + 4" (identifier "param_2") (= "=") (binary_expression "piVar2 + 4" (identifier "piVar2") (+ "+") (number_literal "4"))) (; ";")) (goto_statement "goto LAB_00068758;" (goto "goto") (statement_identifier "LAB_00068758") (; ";")) (} "}")))
(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)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))) right: (number_literal)))))))) consequence: (break_statement)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) condition: (parenthesized_expression (true))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier)))))

void MASKED(undefined4 param_1,int *param_2,int param_3,uint param_4)

{
  uint uVar1;
  int *piVar2;
  code *pcVar3;
  
  pcVar3 = (code *)(PTR_LAB_0018fbd0 + 0x7878);
LAB_00068758:
  piVar2 = (int *)*param_2;
  do {
    if (piVar2 == (int *)0x0) {
      return;
    }
    if (-1 < param_3) {
      if (*piVar2 != param_3) break;
      uVar1 = piVar2[1];
      if (((int)uVar1 < 0) || (((int)uVar1 < 0x20 && ((param_4 >> (uVar1 & 0x1f) & 1) != 0))))
      break;
    }
    if ((code *)piVar2[3] != (code *)0x0) {
      (*(code *)piVar2[3])(piVar2[2]);
    }
    *param_2 = piVar2[4];
    (*pcVar3)(param_1,piVar2);
    piVar2 = (int *)*param_2;
  } while( true );
  param_2 = piVar2 + 4;
  goto LAB_00068758;
}

