
int sqlite3ResolveExprNames(NameContext *pNC,Expr *pExpr)

{
  ushort uVar1;
  long lVar2;
  uint uVar3;
  int iVar4;
  long in_FS_OFFSET;
  Walker w;
  
  lVar2 = *(long *)(in_FS_OFFSET + 0x28);
  uVar3 = 0;
  if (pExpr != (Expr *)0x0) {
    uVar1 = pNC->ncFlags;
    pNC->ncFlags = uVar1 & 0x6fef;
    w.pParse = pNC->pParse;
    w.xExprCallback = resolveExprStep;
    w.xSelectCallback = resolveSelectStep;
    w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0;
    iVar4 = pExpr->nHeight + (w.pParse)->nHeight;
    (w.pParse)->nHeight = iVar4;
    w.u.pNC = pNC;
    iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4);
    uVar3 = 1;
    if (iVar4 == 0) {
      sqlite3WalkExpr(&w,pExpr);
      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;
      if ((pNC->ncFlags & 0x10) != 0) {
        pExpr->flags = pExpr->flags | 2;
      }
      if ((short)pNC->ncFlags < 0) {
        pExpr->flags = pExpr->flags | 0x8000000;
      }
      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;
      uVar3 = 1;
      if (pNC->nErr < 1) {
        uVar3 = (uint)(0 < (w.pParse)->nErr);
      }
    }
  }
  if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {
    return uVar3;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}



bool FUN_001600f0(long *param_1,long param_2)

{
  ushort uVar1;
  int iVar2;
  bool bVar3;
  long in_FS_OFFSET;
  long local_58;
  code *local_50;
  code *local_48;
  undefined8 local_40;
  long *local_30;
  long local_20;
  
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  bVar3 = false;
  if (param_2 != 0) {
    uVar1 = *(ushort *)(param_1 + 5);
    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;
    local_58 = *param_1;
    local_50 = FUN_001778f7;
    local_48 = FUN_00165188;
    local_40 = 0;
    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);
    local_30 = param_1;
    iVar2 = FUN_001600c3();
    bVar3 = true;
    if (iVar2 == 0) {
      FUN_0012dd0b(&local_58,param_2);
      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);
      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {
        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;
      }
      if ((short)param_1[5] < 0) {
        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;
      }
      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;
      bVar3 = true;
      if (*(int *)((long)param_1 + 0x24) < 1) {
        bVar3 = 0 < *(int *)(local_58 + 0x30);
      }
    }
  }
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return bVar3;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}


PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x40
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x38],RAX
XOR EAX,EAX
MOV EDX,0x0
TEST RSI,RSI
JZ 0x00160172
MOV RBX,RDI
MOV RBP,RSI
MOVZX R12D,word ptr [RDI + 0x28]
MOV EAX,R12D
AND AX,0x6fef
MOV word ptr [RDI + 0x28],AX
MOV RDI,qword ptr [RDI]
MOV qword ptr [RSP],RDI
LEA RAX,[0x1778f7]
MOV qword ptr [RSP + 0x8],RAX
LEA RAX,[0x165188]
MOV qword ptr [RSP + 0x10],RAX
MOV qword ptr [RSP + 0x18],0x0
MOV qword ptr [RSP + 0x28],RBX
MOV ESI,dword ptr [RSI + 0x28]
ADD ESI,dword ptr [RDI + 0x114]
MOV dword ptr [RDI + 0x114],ESI
CALL 0x001600c3
MOV EDX,0x1
TEST EAX,EAX
JZ 0x0016018d
MOV EAX,EDX
MOV RCX,qword ptr [RSP + 0x38]
XOR RCX,qword ptr FS:[0x28]
JNZ 0x001601e1
ADD RSP,0x40
POP RBX
POP RBP
POP R12
RET
MOV RDI,RSP
MOV RSI,RBP
CALL 0x0012dd0b
MOV RAX,qword ptr [RSP]
MOV EDX,dword ptr [RBP + 0x28]
SUB dword ptr [RAX + 0x114],EDX
TEST byte ptr [RBX + 0x28],0x10
JZ 0x001601af
OR dword ptr [RBP + 0x4],0x2
CMP word ptr [RBX + 0x28],0x0
JS 0x001601d8
AND R12W,0x9010
OR word ptr [RBX + 0x28],R12W
MOV EDX,0x1
CMP dword ptr [RBX + 0x24],0x0
JG 0x00160172
CMP dword ptr [RAX + 0x30],0x0
SETG DL
MOVZX EDX,DL
JMP 0x00160172
OR dword ptr [RBP + 0x4],0x8000000
JMP 0x001601b6
CALL 0x0010e4d0
(translation_unit "bool FUN_001600f0(long *param_1,long param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "bool FUN_001600f0(long *param_1,long param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" primitive_type (function_declarator "FUN_001600f0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_58;" (sized_type_specifier "long" long) identifier ;) (declaration "code *local_50;" type_identifier (pointer_declarator "*local_50" * identifier) ;) (declaration "code *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined8 local_40;" type_identifier identifier ;) (declaration "long *local_30;" (sized_type_specifier "long" long) (pointer_declarator "*local_30" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) (if_statement "if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }" { (expression_statement "uVar1 = *(ushort *)(param_1 + 5);" (assignment_expression "uVar1 = *(ushort *)(param_1 + 5)" identifier = (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) ))))) ;) (expression_statement "*(ushort *)(param_1 + 5) = uVar1 & 0x6fef;" (assignment_expression "*(ushort *)(param_1 + 5) = uVar1 & 0x6fef" (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) = (binary_expression "uVar1 & 0x6fef" identifier & number_literal)) ;) (expression_statement "local_58 = *param_1;" (assignment_expression "local_58 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "local_50 = FUN_001778f7;" (assignment_expression "local_50 = FUN_001778f7" identifier = identifier) ;) (expression_statement "local_48 = FUN_00165188;" (assignment_expression "local_48 = FUN_00165188" identifier = identifier) ;) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "*(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);" (assignment_expression "*(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114)" (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))) = (binary_expression "*(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114)" (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) + (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))))) ;) (expression_statement "local_30 = param_1;" (assignment_expression "local_30 = param_1" identifier = identifier) ;) (expression_statement "iVar2 = FUN_001600c3();" (assignment_expression "iVar2 = FUN_001600c3()" identifier = (call_expression "FUN_001600c3()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (if_statement "if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }" { (expression_statement "FUN_0012dd0b(&local_58,param_2);" (call_expression "FUN_0012dd0b(&local_58,param_2)" identifier (argument_list "(&local_58,param_2)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "*(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);" (assignment_expression "*(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28)" (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))) = (binary_expression "*(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28)" (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))) - (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))))) ;) (if_statement "if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }" if (parenthesized_expression "((*(byte *)(param_1 + 5) & 0x10) != 0)" ( (binary_expression "(*(byte *)(param_1 + 5) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 5) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 5) & 0x10" (pointer_expression "*(byte *)(param_1 + 5)" * (cast_expression "(byte *)(param_1 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }" { (expression_statement "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;" (assignment_expression "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_2 + 4) | 2" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) | number_literal)) ;) })) (if_statement "if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }" if (parenthesized_expression "((short)param_1[5] < 0)" ( (binary_expression "(short)param_1[5] < 0" (cast_expression "(short)param_1[5]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) < number_literal) )) (compound_statement "{\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }" { (expression_statement "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;" (assignment_expression "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_2 + 4) | 0x8000000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) | number_literal)) ;) })) (expression_statement "*(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;" (assignment_expression "*(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010" (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) = (binary_expression "*(ushort *)(param_1 + 5) | uVar1 & 0x9010" (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) | (binary_expression "uVar1 & 0x9010" identifier & number_literal))) ;) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (if_statement "if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }" if (parenthesized_expression "(*(int *)((long)param_1 + 0x24) < 1)" ( (binary_expression "*(int *)((long)param_1 + 0x24) < 1" (pointer_expression "*(int *)((long)param_1 + 0x24)" * (cast_expression "(int *)((long)param_1 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x24)" ( (binary_expression "(long)param_1 + 0x24" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) < number_literal) )) (compound_statement "{\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }" { (expression_statement "bVar3 = 0 < *(int *)(local_58 + 0x30);" (assignment_expression "bVar3 = 0 < *(int *)(local_58 + 0x30)" identifier = (binary_expression "0 < *(int *)(local_58 + 0x30)" number_literal < (pointer_expression "*(int *)(local_58 + 0x30)" * (cast_expression "(int *)(local_58 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x30)" ( (binary_expression "local_58 + 0x30" identifier + number_literal) )))))) ;) })) })) })) (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }" if (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return bVar3;\n  }" { (return_statement "return bVar3;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "int sqlite3ResolveExprNames(NameContext *pNC,Expr *pExpr)\n\n{\n  ushort uVar1;\n  long lVar2;\n  uint uVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  Walker w;\n  \n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  uVar3 = 0;\n  if (pExpr != (Expr *)0x0) {\n    uVar1 = pNC->ncFlags;\n    pNC->ncFlags = uVar1 & 0x6fef;\n    w.pParse = pNC->pParse;\n    w.xExprCallback = resolveExprStep;\n    w.xSelectCallback = resolveSelectStep;\n    w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0;\n    iVar4 = pExpr->nHeight + (w.pParse)->nHeight;\n    (w.pParse)->nHeight = iVar4;\n    w.u.pNC = pNC;\n    iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4);\n    uVar3 = 1;\n    if (iVar4 == 0) {\n      sqlite3WalkExpr(&w,pExpr);\n      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;\n      if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }\n      if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }\n      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;\n      uVar3 = 1;\n      if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }\n    }\n  }\n  if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}\n\n" (function_definition "int sqlite3ResolveExprNames(NameContext *pNC,Expr *pExpr)\n\n{\n  ushort uVar1;\n  long lVar2;\n  uint uVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  Walker w;\n  \n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  uVar3 = 0;\n  if (pExpr != (Expr *)0x0) {\n    uVar1 = pNC->ncFlags;\n    pNC->ncFlags = uVar1 & 0x6fef;\n    w.pParse = pNC->pParse;\n    w.xExprCallback = resolveExprStep;\n    w.xSelectCallback = resolveSelectStep;\n    w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0;\n    iVar4 = pExpr->nHeight + (w.pParse)->nHeight;\n    (w.pParse)->nHeight = iVar4;\n    w.u.pNC = pNC;\n    iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4);\n    uVar3 = 1;\n    if (iVar4 == 0) {\n      sqlite3WalkExpr(&w,pExpr);\n      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;\n      if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }\n      if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }\n      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;\n      uVar3 = 1;\n      if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }\n    }\n  }\n  if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" primitive_type (function_declarator "sqlite3ResolveExprNames(NameContext *pNC,Expr *pExpr)" identifier (parameter_list "(NameContext *pNC,Expr *pExpr)" ( (parameter_declaration "NameContext *pNC" type_identifier (pointer_declarator "*pNC" * identifier)) , (parameter_declaration "Expr *pExpr" type_identifier (pointer_declarator "*pExpr" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  long lVar2;\n  uint uVar3;\n  int iVar4;\n  long in_FS_OFFSET;\n  Walker w;\n  \n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  uVar3 = 0;\n  if (pExpr != (Expr *)0x0) {\n    uVar1 = pNC->ncFlags;\n    pNC->ncFlags = uVar1 & 0x6fef;\n    w.pParse = pNC->pParse;\n    w.xExprCallback = resolveExprStep;\n    w.xSelectCallback = resolveSelectStep;\n    w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0;\n    iVar4 = pExpr->nHeight + (w.pParse)->nHeight;\n    (w.pParse)->nHeight = iVar4;\n    w.u.pNC = pNC;\n    iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4);\n    uVar3 = 1;\n    if (iVar4 == 0) {\n      sqlite3WalkExpr(&w,pExpr);\n      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;\n      if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }\n      if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }\n      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;\n      uVar3 = 1;\n      if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }\n    }\n  }\n  if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar3;\n  }\n                    /* WARNING: Subroutine does not return */\n  __stack_chk_fail();\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "Walker w;" type_identifier identifier ;) (expression_statement "lVar2 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar2 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (if_statement "if (pExpr != (Expr *)0x0) {\n    uVar1 = pNC->ncFlags;\n    pNC->ncFlags = uVar1 & 0x6fef;\n    w.pParse = pNC->pParse;\n    w.xExprCallback = resolveExprStep;\n    w.xSelectCallback = resolveSelectStep;\n    w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0;\n    iVar4 = pExpr->nHeight + (w.pParse)->nHeight;\n    (w.pParse)->nHeight = iVar4;\n    w.u.pNC = pNC;\n    iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4);\n    uVar3 = 1;\n    if (iVar4 == 0) {\n      sqlite3WalkExpr(&w,pExpr);\n      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;\n      if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }\n      if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }\n      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;\n      uVar3 = 1;\n      if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }\n    }\n  }" if (parenthesized_expression "(pExpr != (Expr *)0x0)" ( (binary_expression "pExpr != (Expr *)0x0" identifier != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar1 = pNC->ncFlags;\n    pNC->ncFlags = uVar1 & 0x6fef;\n    w.pParse = pNC->pParse;\n    w.xExprCallback = resolveExprStep;\n    w.xSelectCallback = resolveSelectStep;\n    w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0;\n    iVar4 = pExpr->nHeight + (w.pParse)->nHeight;\n    (w.pParse)->nHeight = iVar4;\n    w.u.pNC = pNC;\n    iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4);\n    uVar3 = 1;\n    if (iVar4 == 0) {\n      sqlite3WalkExpr(&w,pExpr);\n      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;\n      if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }\n      if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }\n      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;\n      uVar3 = 1;\n      if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }\n    }\n  }" { (expression_statement "uVar1 = pNC->ncFlags;" (assignment_expression "uVar1 = pNC->ncFlags" identifier = (field_expression "pNC->ncFlags" identifier -> field_identifier)) ;) (expression_statement "pNC->ncFlags = uVar1 & 0x6fef;" (assignment_expression "pNC->ncFlags = uVar1 & 0x6fef" (field_expression "pNC->ncFlags" identifier -> field_identifier) = (binary_expression "uVar1 & 0x6fef" identifier & number_literal)) ;) (expression_statement "w.pParse = pNC->pParse;" (assignment_expression "w.pParse = pNC->pParse" (field_expression "w.pParse" identifier . field_identifier) = (field_expression "pNC->pParse" identifier -> field_identifier)) ;) (expression_statement "w.xExprCallback = resolveExprStep;" (assignment_expression "w.xExprCallback = resolveExprStep" (field_expression "w.xExprCallback" identifier . field_identifier) = identifier) ;) (expression_statement "w.xSelectCallback = resolveSelectStep;" (assignment_expression "w.xSelectCallback = resolveSelectStep" (field_expression "w.xSelectCallback" identifier . field_identifier) = identifier) ;) (expression_statement "w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0;" (assignment_expression "w.xSelectCallback2 = (_func_void_Walker_ptr_Select_ptr *)0x0" (field_expression "w.xSelectCallback2" identifier . field_identifier) = (cast_expression "(_func_void_Walker_ptr_Select_ptr *)0x0" ( (type_descriptor "_func_void_Walker_ptr_Select_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "iVar4 = pExpr->nHeight + (w.pParse)->nHeight;" (assignment_expression "iVar4 = pExpr->nHeight + (w.pParse)->nHeight" identifier = (binary_expression "pExpr->nHeight + (w.pParse)->nHeight" (field_expression "pExpr->nHeight" identifier -> field_identifier) + (field_expression "(w.pParse)->nHeight" (parenthesized_expression "(w.pParse)" ( (field_expression "w.pParse" identifier . field_identifier) )) -> field_identifier))) ;) (expression_statement "(w.pParse)->nHeight = iVar4;" (assignment_expression "(w.pParse)->nHeight = iVar4" (field_expression "(w.pParse)->nHeight" (parenthesized_expression "(w.pParse)" ( (field_expression "w.pParse" identifier . field_identifier) )) -> field_identifier) = identifier) ;) (expression_statement "w.u.pNC = pNC;" (assignment_expression "w.u.pNC = pNC" (field_expression "w.u.pNC" (field_expression "w.u" identifier . field_identifier) . field_identifier) = identifier) ;) (expression_statement "iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4);" (assignment_expression "iVar4 = sqlite3ExprCheckHeight(w.pParse,iVar4)" identifier = (call_expression "sqlite3ExprCheckHeight(w.pParse,iVar4)" identifier (argument_list "(w.pParse,iVar4)" ( (field_expression "w.pParse" identifier . field_identifier) , identifier )))) ;) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (iVar4 == 0) {\n      sqlite3WalkExpr(&w,pExpr);\n      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;\n      if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }\n      if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }\n      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;\n      uVar3 = 1;\n      if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      sqlite3WalkExpr(&w,pExpr);\n      (w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;\n      if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }\n      if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }\n      pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;\n      uVar3 = 1;\n      if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }\n    }" { (expression_statement "sqlite3WalkExpr(&w,pExpr);" (call_expression "sqlite3WalkExpr(&w,pExpr)" identifier (argument_list "(&w,pExpr)" ( (pointer_expression "&w" & identifier) , identifier ))) ;) (expression_statement "(w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight;" (assignment_expression "(w.pParse)->nHeight = (w.pParse)->nHeight - pExpr->nHeight" (field_expression "(w.pParse)->nHeight" (parenthesized_expression "(w.pParse)" ( (field_expression "w.pParse" identifier . field_identifier) )) -> field_identifier) = (binary_expression "(w.pParse)->nHeight - pExpr->nHeight" (field_expression "(w.pParse)->nHeight" (parenthesized_expression "(w.pParse)" ( (field_expression "w.pParse" identifier . field_identifier) )) -> field_identifier) - (field_expression "pExpr->nHeight" identifier -> field_identifier))) ;) (if_statement "if ((pNC->ncFlags & 0x10) != 0) {\n        pExpr->flags = pExpr->flags | 2;\n      }" if (parenthesized_expression "((pNC->ncFlags & 0x10) != 0)" ( (binary_expression "(pNC->ncFlags & 0x10) != 0" (parenthesized_expression "(pNC->ncFlags & 0x10)" ( (binary_expression "pNC->ncFlags & 0x10" (field_expression "pNC->ncFlags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        pExpr->flags = pExpr->flags | 2;\n      }" { (expression_statement "pExpr->flags = pExpr->flags | 2;" (assignment_expression "pExpr->flags = pExpr->flags | 2" (field_expression "pExpr->flags" identifier -> field_identifier) = (binary_expression "pExpr->flags | 2" (field_expression "pExpr->flags" identifier -> field_identifier) | number_literal)) ;) })) (if_statement "if ((short)pNC->ncFlags < 0) {\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }" if (parenthesized_expression "((short)pNC->ncFlags < 0)" ( (binary_expression "(short)pNC->ncFlags < 0" (cast_expression "(short)pNC->ncFlags" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (field_expression "pNC->ncFlags" identifier -> field_identifier)) < number_literal) )) (compound_statement "{\n        pExpr->flags = pExpr->flags | 0x8000000;\n      }" { (expression_statement "pExpr->flags = pExpr->flags | 0x8000000;" (assignment_expression "pExpr->flags = pExpr->flags | 0x8000000" (field_expression "pExpr->flags" identifier -> field_identifier) = (binary_expression "pExpr->flags | 0x8000000" (field_expression "pExpr->flags" identifier -> field_identifier) | number_literal)) ;) })) (expression_statement "pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010;" (assignment_expression "pNC->ncFlags = pNC->ncFlags | uVar1 & 0x9010" (field_expression "pNC->ncFlags" identifier -> field_identifier) = (binary_expression "pNC->ncFlags | uVar1 & 0x9010" (field_expression "pNC->ncFlags" identifier -> field_identifier) | (binary_expression "uVar1 & 0x9010" identifier & number_literal))) ;) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) (if_statement "if (pNC->nErr < 1) {\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }" if (parenthesized_expression "(pNC->nErr < 1)" ( (binary_expression "pNC->nErr < 1" (field_expression "pNC->nErr" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n        uVar3 = (uint)(0 < (w.pParse)->nErr);\n      }" { (expression_statement "uVar3 = (uint)(0 < (w.pParse)->nErr);" (assignment_expression "uVar3 = (uint)(0 < (w.pParse)->nErr)" identifier = (call_expression "(uint)(0 < (w.pParse)->nErr)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0 < (w.pParse)->nErr)" ( (binary_expression "0 < (w.pParse)->nErr" number_literal < (field_expression "(w.pParse)->nErr" (parenthesized_expression "(w.pParse)" ( (field_expression "w.pParse" identifier . field_identifier) )) -> field_identifier)) )))) ;) })) })) })) (if_statement "if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return uVar3;\n  }" if (parenthesized_expression "(lVar2 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar2 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return uVar3;\n  }" { (return_statement "return uVar3;" return identifier ;) })) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "bool FUN_001600f0(long *param_1,long param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    \n  __stack_chk_fail();\n}\n\n" (function_definition "bool FUN_001600f0(long *param_1,long param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    \n  __stack_chk_fail();\n}" primitive_type (function_declarator "FUN_001600f0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    \n  __stack_chk_fail();\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_58;" (sized_type_specifier "long" long) identifier ;) (declaration "code *local_50;" type_identifier (pointer_declarator "*local_50" * identifier) ;) (declaration "code *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined8 local_40;" type_identifier identifier ;) (declaration "long *local_30;" (sized_type_specifier "long" long) (pointer_declarator "*local_30" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) (if_statement "if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }" { (expression_statement "uVar1 = *(ushort *)(param_1 + 5);" (assignment_expression "uVar1 = *(ushort *)(param_1 + 5)" identifier = (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) ))))) ;) (expression_statement "*(ushort *)(param_1 + 5) = uVar1 & 0x6fef;" (assignment_expression "*(ushort *)(param_1 + 5) = uVar1 & 0x6fef" (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) = (binary_expression "uVar1 & 0x6fef" identifier & number_literal)) ;) (expression_statement "local_58 = *param_1;" (assignment_expression "local_58 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "local_50 = FUN_001778f7;" (assignment_expression "local_50 = FUN_001778f7" identifier = identifier) ;) (expression_statement "local_48 = FUN_00165188;" (assignment_expression "local_48 = FUN_00165188" identifier = identifier) ;) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "*(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);" (assignment_expression "*(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114)" (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))) = (binary_expression "*(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114)" (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) + (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))))) ;) (expression_statement "local_30 = param_1;" (assignment_expression "local_30 = param_1" identifier = identifier) ;) (expression_statement "iVar2 = FUN_001600c3();" (assignment_expression "iVar2 = FUN_001600c3()" identifier = (call_expression "FUN_001600c3()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (if_statement "if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }" { (expression_statement "FUN_0012dd0b(&local_58,param_2);" (call_expression "FUN_0012dd0b(&local_58,param_2)" identifier (argument_list "(&local_58,param_2)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "*(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);" (assignment_expression "*(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28)" (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))) = (binary_expression "*(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28)" (pointer_expression "*(int *)(local_58 + 0x114)" * (cast_expression "(int *)(local_58 + 0x114)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x114)" ( (binary_expression "local_58 + 0x114" identifier + number_literal) )))) - (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))))) ;) (if_statement "if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }" if (parenthesized_expression "((*(byte *)(param_1 + 5) & 0x10) != 0)" ( (binary_expression "(*(byte *)(param_1 + 5) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 5) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 5) & 0x10" (pointer_expression "*(byte *)(param_1 + 5)" * (cast_expression "(byte *)(param_1 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }" { (expression_statement "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;" (assignment_expression "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_2 + 4) | 2" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) | number_literal)) ;) })) (if_statement "if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }" if (parenthesized_expression "((short)param_1[5] < 0)" ( (binary_expression "(short)param_1[5] < 0" (cast_expression "(short)param_1[5]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) < number_literal) )) (compound_statement "{\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }" { (expression_statement "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;" (assignment_expression "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = (binary_expression "*(uint *)(param_2 + 4) | 0x8000000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) | number_literal)) ;) })) (expression_statement "*(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;" (assignment_expression "*(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010" (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) = (binary_expression "*(ushort *)(param_1 + 5) | uVar1 & 0x9010" (pointer_expression "*(ushort *)(param_1 + 5)" * (cast_expression "(ushort *)(param_1 + 5)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) | (binary_expression "uVar1 & 0x9010" identifier & number_literal))) ;) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (if_statement "if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }" if (parenthesized_expression "(*(int *)((long)param_1 + 0x24) < 1)" ( (binary_expression "*(int *)((long)param_1 + 0x24) < 1" (pointer_expression "*(int *)((long)param_1 + 0x24)" * (cast_expression "(int *)((long)param_1 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x24)" ( (binary_expression "(long)param_1 + 0x24" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) < number_literal) )) (compound_statement "{\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }" { (expression_statement "bVar3 = 0 < *(int *)(local_58 + 0x30);" (assignment_expression "bVar3 = 0 < *(int *)(local_58 + 0x30)" identifier = (binary_expression "0 < *(int *)(local_58 + 0x30)" number_literal < (pointer_expression "*(int *)(local_58 + 0x30)" * (cast_expression "(int *)(local_58 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + 0x30)" ( (binary_expression "local_58 + 0x30" identifier + number_literal) )))))) ;) })) })) })) (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }" if (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return bVar3;\n  }" { (return_statement "return bVar3;" return identifier ;) })) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (subscript_expression IDENT [ LIT ])) < LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) })) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "bool FUN_001600f0(long *param_1,long param_2)\n\n{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    \n  __stack_chk_fail();\n}" (primitive_type "bool") (function_declarator "FUN_001600f0(long *param_1,long param_2)" (identifier "FUN_001600f0") (parameter_list "(long *param_1,long param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  ushort uVar1;\n  int iVar2;\n  bool bVar3;\n  long in_FS_OFFSET;\n  long local_58;\n  code *local_50;\n  code *local_48;\n  undefined8 local_40;\n  long *local_30;\n  long local_20;\n  \n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  bVar3 = false;\n  if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }\n                    \n  __stack_chk_fail();\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "bool bVar3;" (primitive_type "bool") (identifier "bVar3") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "long local_58;" (sized_type_specifier "long" (long "long")) (identifier "local_58") (; ";")) (declaration "code *local_50;" (type_identifier "code") (pointer_declarator "*local_50" (* "*") (identifier "local_50")) (; ";")) (declaration "code *local_48;" (type_identifier "code") (pointer_declarator "*local_48" (* "*") (identifier "local_48")) (; ";")) (declaration "undefined8 local_40;" (type_identifier "undefined8") (identifier "local_40") (; ";")) (declaration "long *local_30;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*local_30" (* "*") (identifier "local_30")) (; ";")) (declaration "long local_20;" (sized_type_specifier "long" (long "long")) (identifier "local_20") (; ";")) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" (identifier "bVar3") (= "=") (false "false")) (; ";")) (if_statement "if (param_2 != 0) {\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar1 = *(ushort *)(param_1 + 5);\n    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;\n    local_58 = *param_1;\n    local_50 = FUN_001778f7;\n    local_48 = FUN_00165188;\n    local_40 = 0;\n    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);\n    local_30 = param_1;\n    iVar2 = FUN_001600c3();\n    bVar3 = true;\n    if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }\n  }" ({ "{") (expression_statement "uVar1 = *(ushort *)(param_1 + 5);" (assignment_expression "uVar1 = *(ushort *)(param_1 + 5)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)(param_1 + 5)" (* "*") (cast_expression "(ushort *)(param_1 + 5)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 5)" (( "(") (binary_expression "param_1 + 5" (identifier "param_1") (+ "+") (number_literal "5")) () ")"))))) (; ";")) (expression_statement "*(ushort *)(param_1 + 5) = uVar1 & 0x6fef;" (assignment_expression "*(ushort *)(param_1 + 5) = uVar1 & 0x6fef" (pointer_expression "*(ushort *)(param_1 + 5)" (* "*") (cast_expression "(ushort *)(param_1 + 5)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 5)" (( "(") (binary_expression "param_1 + 5" (identifier "param_1") (+ "+") (number_literal "5")) () ")")))) (= "=") (binary_expression "uVar1 & 0x6fef" (identifier "uVar1") (& "&") (number_literal "0x6fef"))) (; ";")) (expression_statement "local_58 = *param_1;" (assignment_expression "local_58 = *param_1" (identifier "local_58") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "local_50 = FUN_001778f7;" (assignment_expression "local_50 = FUN_001778f7" (identifier "local_50") (= "=") (identifier "FUN_001778f7")) (; ";")) (expression_statement "local_48 = FUN_00165188;" (assignment_expression "local_48 = FUN_00165188" (identifier "local_48") (= "=") (identifier "FUN_00165188")) (; ";")) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" (identifier "local_40") (= "=") (number_literal "0")) (; ";")) (expression_statement "*(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);" (assignment_expression "*(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114)" (pointer_expression "*(int *)(local_58 + 0x114)" (* "*") (cast_expression "(int *)(local_58 + 0x114)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + 0x114)" (( "(") (binary_expression "local_58 + 0x114" (identifier "local_58") (+ "+") (number_literal "0x114")) () ")")))) (= "=") (binary_expression "*(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114)" (pointer_expression "*(int *)(param_2 + 0x28)" (* "*") (cast_expression "(int *)(param_2 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (+ "+") (pointer_expression "*(int *)(local_58 + 0x114)" (* "*") (cast_expression "(int *)(local_58 + 0x114)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + 0x114)" (( "(") (binary_expression "local_58 + 0x114" (identifier "local_58") (+ "+") (number_literal "0x114")) () ")")))))) (; ";")) (expression_statement "local_30 = param_1;" (assignment_expression "local_30 = param_1" (identifier "local_30") (= "=") (identifier "param_1")) (; ";")) (expression_statement "iVar2 = FUN_001600c3();" (assignment_expression "iVar2 = FUN_001600c3()" (identifier "iVar2") (= "=") (call_expression "FUN_001600c3()" (identifier "FUN_001600c3") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" (identifier "bVar3") (= "=") (true "true")) (; ";")) (if_statement "if (iVar2 == 0) {\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_0012dd0b(&local_58,param_2);\n      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);\n      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }\n      if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }\n      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;\n      bVar3 = true;\n      if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }\n    }" ({ "{") (expression_statement "FUN_0012dd0b(&local_58,param_2);" (call_expression "FUN_0012dd0b(&local_58,param_2)" (identifier "FUN_0012dd0b") (argument_list "(&local_58,param_2)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_2") () ")"))) (; ";")) (expression_statement "*(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);" (assignment_expression "*(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28)" (pointer_expression "*(int *)(local_58 + 0x114)" (* "*") (cast_expression "(int *)(local_58 + 0x114)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + 0x114)" (( "(") (binary_expression "local_58 + 0x114" (identifier "local_58") (+ "+") (number_literal "0x114")) () ")")))) (= "=") (binary_expression "*(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28)" (pointer_expression "*(int *)(local_58 + 0x114)" (* "*") (cast_expression "(int *)(local_58 + 0x114)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + 0x114)" (( "(") (binary_expression "local_58 + 0x114" (identifier "local_58") (+ "+") (number_literal "0x114")) () ")")))) (- "-") (pointer_expression "*(int *)(param_2 + 0x28)" (* "*") (cast_expression "(int *)(param_2 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))))) (; ";")) (if_statement "if ((*(byte *)(param_1 + 5) & 0x10) != 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 5) & 0x10) != 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 5) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 5) & 0x10)" (( "(") (binary_expression "*(byte *)(param_1 + 5) & 0x10" (pointer_expression "*(byte *)(param_1 + 5)" (* "*") (cast_expression "(byte *)(param_1 + 5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 5)" (( "(") (binary_expression "param_1 + 5" (identifier "param_1") (+ "+") (number_literal "5")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;\n      }" ({ "{") (expression_statement "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;" (assignment_expression "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2" (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (= "=") (binary_expression "*(uint *)(param_2 + 4) | 2" (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (| "|") (number_literal "2"))) (; ";")) (} "}"))) (if_statement "if ((short)param_1[5] < 0) {\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }" (if "if") (parenthesized_expression "((short)param_1[5] < 0)" (( "(") (binary_expression "(short)param_1[5] < 0" (cast_expression "(short)param_1[5]" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;\n      }" ({ "{") (expression_statement "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;" (assignment_expression "*(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000" (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (= "=") (binary_expression "*(uint *)(param_2 + 4) | 0x8000000" (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (| "|") (number_literal "0x8000000"))) (; ";")) (} "}"))) (expression_statement "*(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;" (assignment_expression "*(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010" (pointer_expression "*(ushort *)(param_1 + 5)" (* "*") (cast_expression "(ushort *)(param_1 + 5)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 5)" (( "(") (binary_expression "param_1 + 5" (identifier "param_1") (+ "+") (number_literal "5")) () ")")))) (= "=") (binary_expression "*(ushort *)(param_1 + 5) | uVar1 & 0x9010" (pointer_expression "*(ushort *)(param_1 + 5)" (* "*") (cast_expression "(ushort *)(param_1 + 5)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 5)" (( "(") (binary_expression "param_1 + 5" (identifier "param_1") (+ "+") (number_literal "5")) () ")")))) (| "|") (binary_expression "uVar1 & 0x9010" (identifier "uVar1") (& "&") (number_literal "0x9010")))) (; ";")) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" (identifier "bVar3") (= "=") (true "true")) (; ";")) (if_statement "if (*(int *)((long)param_1 + 0x24) < 1) {\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }" (if "if") (parenthesized_expression "(*(int *)((long)param_1 + 0x24) < 1)" (( "(") (binary_expression "*(int *)((long)param_1 + 0x24) < 1" (pointer_expression "*(int *)((long)param_1 + 0x24)" (* "*") (cast_expression "(int *)((long)param_1 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x24)" (( "(") (binary_expression "(long)param_1 + 0x24" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x24")) () ")")))) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n        bVar3 = 0 < *(int *)(local_58 + 0x30);\n      }" ({ "{") (expression_statement "bVar3 = 0 < *(int *)(local_58 + 0x30);" (assignment_expression "bVar3 = 0 < *(int *)(local_58 + 0x30)" (identifier "bVar3") (= "=") (binary_expression "0 < *(int *)(local_58 + 0x30)" (number_literal "0") (< "<") (pointer_expression "*(int *)(local_58 + 0x30)" (* "*") (cast_expression "(int *)(local_58 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + 0x30)" (( "(") (binary_expression "local_58 + 0x30" (identifier "local_58") (+ "+") (number_literal "0x30")) () ")")))))) (; ";")) (} "}"))) (} "}"))) (} "}"))) (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return bVar3;\n  }" (if "if") (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n    return bVar3;\n  }" ({ "{") (return_statement "return bVar3;" (return "return") (identifier "bVar3") (; ";")) (} "}"))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

int function_1(type_1 *pNC,type_2 *var_2)

{
  type_3 var_3;
  long var_7;
  type_4 uVar3;
  int var_5;
  long var_1;
  type_5 w;
  
  var_7 = *(long *)(var_1 + 0x28);
  uVar3 = 0;
  if (var_2 != (type_2 *)0x0) {
    var_3 = pNC->ncFlags;
    pNC->ncFlags = var_3 & 0x6fef;
    w.pParse = pNC->pParse;
    w.xExprCallback = resolveExprStep;
    w.xSelectCallback = resolveSelectStep;
    w.xSelectCallback2 = (type_6 *)0x0;
    var_5 = var_2->nHeight + (w.pParse)->nHeight;
    (w.pParse)->nHeight = var_5;
    w.u.pNC = pNC;
    var_5 = var_4(w.pParse,var_5);
    uVar3 = 1;
    if (var_5 == 0) {
      var_6(&w,var_2);
      (w.pParse)->nHeight = (w.pParse)->nHeight - var_2->nHeight;
      if ((pNC->ncFlags & 0x10) != 0) {
        var_2->flags = var_2->flags | 2;
      }
      if ((short)pNC->ncFlags < 0) {
        var_2->flags = var_2->flags | 0x8000000;
      }
      pNC->ncFlags = pNC->ncFlags | var_3 & 0x9010;
      uVar3 = 1;
      if (pNC->nErr < 1) {
        uVar3 = (type_4)(0 < (w.pParse)->nErr);
      }
    }
  }
  if (var_7 == *(long *)(var_1 + 0x28)) {
    return uVar3;
  }
                    /* WARNING: Subroutine does not return */
  var_8();
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (false))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (true))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (true))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))))

bool MASKED(long *param_1,long param_2)

{
  ushort uVar1;
  int iVar2;
  bool bVar3;
  long in_FS_OFFSET;
  long local_58;
  code *local_50;
  code *local_48;
  undefined8 local_40;
  long *local_30;
  long local_20;
  
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  bVar3 = false;
  if (param_2 != 0) {
    uVar1 = *(ushort *)(param_1 + 5);
    *(ushort *)(param_1 + 5) = uVar1 & 0x6fef;
    local_58 = *param_1;
    local_50 = FUN_001778f7;
    local_48 = FUN_00165188;
    local_40 = 0;
    *(int *)(local_58 + 0x114) = *(int *)(param_2 + 0x28) + *(int *)(local_58 + 0x114);
    local_30 = param_1;
    iVar2 = FUN_001600c3();
    bVar3 = true;
    if (iVar2 == 0) {
      FUN_0012dd0b(&local_58,param_2);
      *(int *)(local_58 + 0x114) = *(int *)(local_58 + 0x114) - *(int *)(param_2 + 0x28);
      if ((*(byte *)(param_1 + 5) & 0x10) != 0) {
        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 2;
      }
      if ((short)param_1[5] < 0) {
        *(uint *)(param_2 + 4) = *(uint *)(param_2 + 4) | 0x8000000;
      }
      *(ushort *)(param_1 + 5) = *(ushort *)(param_1 + 5) | uVar1 & 0x9010;
      bVar3 = true;
      if (*(int *)((long)param_1 + 0x24) < 1) {
        bVar3 = 0 < *(int *)(local_58 + 0x30);
      }
    }
  }
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return bVar3;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

