#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */
typedef struct TYPE_4__ TYPE_1__;

/* Type definitions */
struct TYPE_4__ {
  scalar_t__ data;
  int /*<<< orphan*/ data_length;
  scalar_t__ name;
  scalar_t__ number;
  scalar_t__ address;
  int /*<<< orphan*/ name_length;
  int /*<<< orphan*/ number_length;
  int /*<<< orphan*/ address_length;
  int /*<<< orphan*/ family;
};
typedef TYPE_1__ Xauth;
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ bzero(scalar_t__, int /*<<< orphan*/);
TYPE_1__ *calloc(int, int);
int /*<<< orphan*/ free(scalar_t__);
scalar_t__ read_counted_string(int /*<<< orphan*/ *, scalar_t__ *,
                               int /*<<< orphan*/ *);
scalar_t__ read_short(int /*<<< orphan*/ *, int /*<<< orphan*/ *);
Xauth *XauReadAuth(FILE *auth_file) {
  Xauth local;
  Xauth *ret;
  if (read_short(&local.family, auth_file) == 0)
    return NULL;
  if (read_counted_string(&local.address_length, &local.address, auth_file) ==
      0)
    return NULL;
  if (read_counted_string(&local.number_length, &local.number, auth_file) ==
      0) {
    if (local.address)
      free(local.address);
    return NULL;
  }
  if (read_counted_string(&local.name_length, &local.name, auth_file) == 0) {
    if (local.address)
      free(local.address);
    if (local.number)
      free(local.number);
    return NULL;
  }
  if (read_counted_string(&local.data_length, &local.data, auth_file) == 0) {
    if (local.address)
      free(local.address);
    if (local.number)
      free(local.number);
    if (local.name)
      free(local.name);
    return NULL;
  }
  ret = calloc(1, sizeof(Xauth));
  if (!ret) {
    if (local.address)
      free(local.address);
    if (local.number)
      free(local.number);
    if (local.name)
      free(local.name);
    if (local.data) {
      bzero(local.data, local.data_length);
      free(local.data);
    }
    return NULL;
  }
  *ret = local;
  return ret;
}


x86 assembly (clang, -O0):
<XauReadAuth>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
lea    -0x48(%rbp),%rdi
add    $0x34,%rdi
mov    -0x10(%rbp),%rsi
call   1040 <read_short@plt>
cmp    $0x0,%rax
jne    1194 <XauReadAuth+0x34>
movq   $0x0,-0x8(%rbp)
jmp    1369 <XauReadAuth+0x209>
lea    -0x48(%rbp),%rdi
add    $0x30,%rdi
lea    -0x48(%rbp),%rsi
add    $0x20,%rsi
mov    -0x10(%rbp),%rdx
call   1050 <read_counted_string@plt>
cmp    $0x0,%rax
jne    11c4 <XauReadAuth+0x64>
movq   $0x0,-0x8(%rbp)
jmp    1369 <XauReadAuth+0x209>
lea    -0x48(%rbp),%rdi
add    $0x2c,%rdi
lea    -0x48(%rbp),%rsi
add    $0x18,%rsi
mov    -0x10(%rbp),%rdx
call   1050 <read_counted_string@plt>
cmp    $0x0,%rax
jne    1208 <XauReadAuth+0xa8>
cmpq   $0x0,-0x28(%rbp)
je     11fb <XauReadAuth+0x9b>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movq   $0x0,-0x8(%rbp)
jmp    1369 <XauReadAuth+0x209>
lea    -0x48(%rbp),%rdi
add    $0x28,%rdi
lea    -0x48(%rbp),%rsi
add    $0x10,%rsi
mov    -0x10(%rbp),%rdx
call   1050 <read_counted_string@plt>
cmp    $0x0,%rax
jne    1260 <XauReadAuth+0x100>
cmpq   $0x0,-0x28(%rbp)
je     123f <XauReadAuth+0xdf>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
cmpq   $0x0,-0x30(%rbp)
je     1253 <XauReadAuth+0xf3>
mov    -0x30(%rbp),%rdi
call   1030 <free@plt>
movq   $0x0,-0x8(%rbp)
jmp    1369 <XauReadAuth+0x209>
lea    -0x48(%rbp),%rdi
add    $0x8,%rdi
lea    -0x48(%rbp),%rsi
mov    -0x10(%rbp),%rdx
call   1050 <read_counted_string@plt>
cmp    $0x0,%rax
jne    12c8 <XauReadAuth+0x168>
cmpq   $0x0,-0x28(%rbp)
je     1293 <XauReadAuth+0x133>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
cmpq   $0x0,-0x30(%rbp)
je     12a7 <XauReadAuth+0x147>
mov    -0x30(%rbp),%rdi
call   1030 <free@plt>
cmpq   $0x0,-0x38(%rbp)
je     12bb <XauReadAuth+0x15b>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
movq   $0x0,-0x8(%rbp)
jmp    1369 <XauReadAuth+0x209>
mov    $0x1,%edi
mov    $0x38,%esi
call   1060 <calloc@plt>
mov    %rax,-0x50(%rbp)
cmpq   $0x0,-0x50(%rbp)
jne    134f <XauReadAuth+0x1ef>
cmpq   $0x0,-0x28(%rbp)
je     12fa <XauReadAuth+0x19a>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
cmpq   $0x0,-0x30(%rbp)
je     130e <XauReadAuth+0x1ae>
mov    -0x30(%rbp),%rdi
call   1030 <free@plt>
cmpq   $0x0,-0x38(%rbp)
je     1322 <XauReadAuth+0x1c2>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
cmpq   $0x0,-0x48(%rbp)
je     1342 <XauReadAuth+0x1e2>
mov    -0x48(%rbp),%rdi
mov    -0x40(%rbp),%esi
call   1080 <bzero@plt>
mov    -0x48(%rbp),%rdi
call   1030 <free@plt>
movq   $0x0,-0x8(%rbp)
jmp    1369 <XauReadAuth+0x209>
mov    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
mov    $0x38,%edx
call   1070 <memcpy@plt>
mov    -0x50(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<XauReadAuth>:
push   %rbx
sub    $0x40,%rsp
mov    %rdi,%rbx
lea    0x3c(%rsp),%rdi
mov    %rbx,%rsi
call   1040 <read_short@plt>
test   %rax,%rax
je     12b0 <XauReadAuth+0x160>
lea    0x38(%rsp),%rdi
lea    0x28(%rsp),%rsi
mov    %rbx,%rdx
call   1050 <read_counted_string@plt>
test   %rax,%rax
je     12b0 <XauReadAuth+0x160>
lea    0x34(%rsp),%rdi
lea    0x20(%rsp),%rsi
mov    %rbx,%rdx
call   1050 <read_counted_string@plt>
test   %rax,%rax
je     120e <XauReadAuth+0xbe>
lea    0x30(%rsp),%rdi
lea    0x18(%rsp),%rsi
mov    %rbx,%rdx
call   1050 <read_counted_string@plt>
test   %rax,%rax
je     1221 <XauReadAuth+0xd1>
lea    0x10(%rsp),%rdi
lea    0x8(%rsp),%rsi
mov    %rbx,%rdx
call   1050 <read_counted_string@plt>
test   %rax,%rax
je     123c <XauReadAuth+0xec>
mov    $0x1,%edi
mov    $0x38,%esi
call   1060 <calloc@plt>
test   %rax,%rax
je     1266 <XauReadAuth+0x116>
mov    0x38(%rsp),%rcx
mov    %rcx,0x30(%rax)
movups 0x8(%rsp),%xmm0
movups 0x18(%rsp),%xmm1
movups 0x28(%rsp),%xmm2
movups %xmm2,0x20(%rax)
movups %xmm1,0x10(%rax)
movups %xmm0,(%rax)
jmp    12b2 <XauReadAuth+0x162>
mov    0x28(%rsp),%rdi
test   %rdi,%rdi
jne    12ab <XauReadAuth+0x15b>
jmp    12b0 <XauReadAuth+0x160>
mov    0x28(%rsp),%rdi
test   %rdi,%rdi
je     1230 <XauReadAuth+0xe0>
call   1030 <free@plt>
mov    0x20(%rsp),%rdi
test   %rdi,%rdi
jne    12ab <XauReadAuth+0x15b>
jmp    12b0 <XauReadAuth+0x160>
mov    0x28(%rsp),%rdi
test   %rdi,%rdi
je     124b <XauReadAuth+0xfb>
call   1030 <free@plt>
mov    0x20(%rsp),%rdi
test   %rdi,%rdi
je     125a <XauReadAuth+0x10a>
call   1030 <free@plt>
mov    0x18(%rsp),%rdi
test   %rdi,%rdi
jne    12ab <XauReadAuth+0x15b>
jmp    12b0 <XauReadAuth+0x160>
mov    0x28(%rsp),%rdi
test   %rdi,%rdi
je     1275 <XauReadAuth+0x125>
call   1030 <free@plt>
mov    0x20(%rsp),%rdi
test   %rdi,%rdi
je     1284 <XauReadAuth+0x134>
call   1030 <free@plt>
mov    0x18(%rsp),%rdi
test   %rdi,%rdi
je     1293 <XauReadAuth+0x143>
call   1030 <free@plt>
mov    0x8(%rsp),%rdi
test   %rdi,%rdi
je     12b0 <XauReadAuth+0x160>
mov    0x10(%rsp),%esi
call   1070 <bzero@plt>
mov    0x8(%rsp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbx
ret

LLVM IR (-O0):
%struct.TYPE_4__ = type { i64, i32, i64, i64, i64, i32, i32, i32, i32 }
define %struct.TYPE_4__* @XauReadAuth(i32* %0) {
%2 = alloca %struct.TYPE_4__*
%3 = alloca i32*
%4 = alloca %struct.TYPE_4__
%5 = alloca %struct.TYPE_4__*
store i32* %0, i32** %3
%6 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 8
%7 = load i32*, i32** %3
%8 = call i64 @read_short(i32* %6, i32* %7)
%9 = icmp eq i64 %8, 0
br i1 %9, label %10, label %11
10: ; preds = %1
store %struct.TYPE_4__* null, %struct.TYPE_4__** %2
br label %134
11: ; preds = %1
%12 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 7
%13 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%14 = load i32*, i32** %3
%15 = call i64 @read_counted_string(i32* %12, i64* %13, i32* %14)
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %18
17: ; preds = %11
store %struct.TYPE_4__* null, %struct.TYPE_4__** %2
br label %134
18: ; preds = %11
%19 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 6
%20 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 3
%21 = load i32*, i32** %3
%22 = call i64 @read_counted_string(i32* %19, i64* %20, i32* %21)
%23 = icmp eq i64 %22, 0
br i1 %23, label %24, label %33
24: ; preds = %18
%25 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%26 = load i64, i64* %25
%27 = icmp ne i64 %26, 0
br i1 %27, label %28, label %32
28: ; preds = %24
%29 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%30 = load i64, i64* %29
%31 = call i32 @free(i64 %30)
br label %32
32: ; preds = %28, %24
store %struct.TYPE_4__* null, %struct.TYPE_4__** %2
br label %134
33: ; preds = %18
%34 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 5
%35 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 2
%36 = load i32*, i32** %3
%37 = call i64 @read_counted_string(i32* %34, i64* %35, i32* %36)
%38 = icmp eq i64 %37, 0
br i1 %38, label %39, label %56
39: ; preds = %33
%40 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%41 = load i64, i64* %40
%42 = icmp ne i64 %41, 0
br i1 %42, label %43, label %47
43: ; preds = %39
%44 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%45 = load i64, i64* %44
%46 = call i32 @free(i64 %45)
br label %47
47: ; preds = %43, %39
%48 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 3
%49 = load i64, i64* %48
%50 = icmp ne i64 %49, 0
br i1 %50, label %51, label %55
51: ; preds = %47
%52 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 3
%53 = load i64, i64* %52
%54 = call i32 @free(i64 %53)
br label %55
55: ; preds = %51, %47
store %struct.TYPE_4__* null, %struct.TYPE_4__** %2
br label %134
56: ; preds = %33
%57 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 1
%58 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 0
%59 = load i32*, i32** %3
%60 = call i64 @read_counted_string(i32* %57, i64* %58, i32* %59)
%61 = icmp eq i64 %60, 0
br i1 %61, label %62, label %87
62: ; preds = %56
%63 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%64 = load i64, i64* %63
%65 = icmp ne i64 %64, 0
br i1 %65, label %66, label %70
66: ; preds = %62
%67 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%68 = load i64, i64* %67
%69 = call i32 @free(i64 %68)
br label %70
70: ; preds = %66, %62
%71 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 3
%72 = load i64, i64* %71
%73 = icmp ne i64 %72, 0
br i1 %73, label %74, label %78
74: ; preds = %70
%75 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 3
%76 = load i64, i64* %75
%77 = call i32 @free(i64 %76)
br label %78
78: ; preds = %74, %70
%79 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 2
%80 = load i64, i64* %79
%81 = icmp ne i64 %80, 0
br i1 %81, label %82, label %86
82: ; preds = %78
%83 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 2
%84 = load i64, i64* %83
%85 = call i32 @free(i64 %84)
br label %86
86: ; preds = %82, %78
store %struct.TYPE_4__* null, %struct.TYPE_4__** %2
br label %134
87: ; preds = %56
%88 = call %struct.TYPE_4__* @calloc(i32 1, i32 56)
store %struct.TYPE_4__* %88, %struct.TYPE_4__** %5
%89 = load %struct.TYPE_4__*, %struct.TYPE_4__** %5
%90 = icmp ne %struct.TYPE_4__* %89, null
br i1 %90, label %129, label %91
91: ; preds = %87
%92 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%93 = load i64, i64* %92
%94 = icmp ne i64 %93, 0
br i1 %94, label %95, label %99
95: ; preds = %91
%96 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 4
%97 = load i64, i64* %96
%98 = call i32 @free(i64 %97)
br label %99
99: ; preds = %95, %91
%100 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 3
%101 = load i64, i64* %100
%102 = icmp ne i64 %101, 0
br i1 %102, label %103, label %107
103: ; preds = %99
%104 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 3
%105 = load i64, i64* %104
%106 = call i32 @free(i64 %105)
br label %107
107: ; preds = %103, %99
%108 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 2
%109 = load i64, i64* %108
%110 = icmp ne i64 %109, 0
br i1 %110, label %111, label %115
111: ; preds = %107
%112 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 2
%113 = load i64, i64* %112
%114 = call i32 @free(i64 %113)
br label %115
115: ; preds = %111, %107
%116 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 0
%117 = load i64, i64* %116
%118 = icmp ne i64 %117, 0
br i1 %118, label %119, label %128
119: ; preds = %115
%120 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 0
%121 = load i64, i64* %120
%122 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 1
%123 = load i32, i32* %122
%124 = call i32 @bzero(i64 %121, i32 %123)
%125 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %4, i32 0, i32 0
%126 = load i64, i64* %125
%127 = call i32 @free(i64 %126)
br label %128
128: ; preds = %119, %115
store %struct.TYPE_4__* null, %struct.TYPE_4__** %2
br label %134
129: ; preds = %87
%130 = load %struct.TYPE_4__*, %struct.TYPE_4__** %5
%131 = bitcast %struct.TYPE_4__* %130 to i8*
%132 = bitcast %struct.TYPE_4__* %4 to i8*
%133 = load %struct.TYPE_4__*, %struct.TYPE_4__** %5
store %struct.TYPE_4__* %133, %struct.TYPE_4__** %2
br label %134
134: ; preds = %129, %128, %86, %55, %32, %17, %10
%135 = load %struct.TYPE_4__*, %struct.TYPE_4__** %2
ret %struct.TYPE_4__* %135
}

LLVM IR (-O2):
%struct.TYPE_4__ = type { i64, i32, i64, i64, i64, i32, i32, i32, i32 }
define noalias %struct.TYPE_4__* @XauReadAuth(i32* %0) {
%2 = alloca %struct.TYPE_4__
%3 = bitcast %struct.TYPE_4__* %2 to i8*
%4 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 8
%5 = call i64 @read_short(i32* %4, i32* %0)
%6 = icmp eq i64 %5, 0
br i1 %6, label %85, label %7
7: ; preds = %1
%8 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 7
%9 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 4
%10 = call i64 @read_counted_string(i32* %8, i64* %9, i32* %0)
%11 = icmp eq i64 %10, 0
br i1 %11, label %85, label %12
12: ; preds = %7
%13 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 6
%14 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 3
%15 = call i64 @read_counted_string(i32* %13, i64* %14, i32* %0)
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %22
17: ; preds = %12
%18 = load i64, i64* %9
%19 = icmp eq i64 %18, 0
br i1 %19, label %85, label %20
20: ; preds = %17
%21 = call i32 @free(i64 %18)
br label %85
22: ; preds = %12
%23 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 5
%24 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 2
%25 = call i64 @read_counted_string(i32* %23, i64* %24, i32* %0)
%26 = icmp eq i64 %25, 0
br i1 %26, label %27, label %37
27: ; preds = %22
%28 = load i64, i64* %9
%29 = icmp eq i64 %28, 0
br i1 %29, label %32, label %30
30: ; preds = %27
%31 = call i32 @free(i64 %28)
br label %32
32: ; preds = %30, %27
%33 = load i64, i64* %14
%34 = icmp eq i64 %33, 0
br i1 %34, label %85, label %35
35: ; preds = %32
%36 = call i32 @free(i64 %33)
br label %85
37: ; preds = %22
%38 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 1
%39 = getelementptr inbounds %struct.TYPE_4__, %struct.TYPE_4__* %2, i64 0, i32 0
%40 = call i64 @read_counted_string(i32* %38, i64* %39, i32* %0)
%41 = icmp eq i64 %40, 0
br i1 %41, label %42, label %57
42: ; preds = %37
%43 = load i64, i64* %9
%44 = icmp eq i64 %43, 0
br i1 %44, label %47, label %45
45: ; preds = %42
%46 = call i32 @free(i64 %43)
br label %47
47: ; preds = %45, %42
%48 = load i64, i64* %14
%49 = icmp eq i64 %48, 0
br i1 %49, label %52, label %50
50: ; preds = %47
%51 = call i32 @free(i64 %48)
br label %52
52: ; preds = %50, %47
%53 = load i64, i64* %24
%54 = icmp eq i64 %53, 0
br i1 %54, label %85, label %55
55: ; preds = %52
%56 = call i32 @free(i64 %53)
br label %85
57: ; preds = %37
%58 = call %struct.TYPE_4__* @calloc(i32 1, i32 56)
%59 = icmp eq %struct.TYPE_4__* %58, null
br i1 %59, label %60, label %83
60: ; preds = %57
%61 = load i64, i64* %9
%62 = icmp eq i64 %61, 0
br i1 %62, label %65, label %63
63: ; preds = %60
%64 = call i32 @free(i64 %61)
br label %65
65: ; preds = %63, %60
%66 = load i64, i64* %14
%67 = icmp eq i64 %66, 0
br i1 %67, label %70, label %68
68: ; preds = %65
%69 = call i32 @free(i64 %66)
br label %70
70: ; preds = %68, %65
%71 = load i64, i64* %24
%72 = icmp eq i64 %71, 0
br i1 %72, label %75, label %73
73: ; preds = %70
%74 = call i32 @free(i64 %71)
br label %75
75: ; preds = %73, %70
%76 = load i64, i64* %39
%77 = icmp eq i64 %76, 0
br i1 %77, label %85, label %78
78: ; preds = %75
%79 = load i32, i32* %38
%80 = call i32 @bzero(i64 %76, i32 %79)
%81 = load i64, i64* %39
%82 = call i32 @free(i64 %81)
br label %85
83: ; preds = %57
%84 = bitcast %struct.TYPE_4__* %58 to i8*
br label %85
85: ; preds = %75, %78, %52, %55, %32, %35, %17, %20, %7, %1, %83
%86 = phi %struct.TYPE_4__* [ %58, %83 ], [ null, %1 ], [ null, %7 ], [ null, %20 ], [ null, %17 ], [ null, %35 ], [ null, %32 ], [ null, %55 ], [ null, %52 ], [ null, %78 ], [ null, %75 ]
ret %struct.TYPE_4__* %86
}