#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 */

/* Type definitions */

/* Variables and functions */
long ltohl(long);
int /*<<< orphan*/ printf(char *);
void PrintFlags(long flags) {
  flags = ltohl(flags);
  if (flags & 0x00000001)
    printf("NTLM Flag: Negotiate Unicode\n");
  if (flags & 0x00000002)
    printf("NTLM Flag: Negotiate OEM\n");
  if (flags & 0x00000004)
    printf("NTLM Flag: Request Target\n");
  if (flags & 0x00000008)
    printf("NTLM Flag: Unknown1\n");
  if (flags & 0x00000010)
    printf("NTLM Flag: Negotiate Sign\n");
  if (flags & 0x00000020)
    printf("NTLM Flag: Negotiate Seal\n");
  if (flags & 0x00000040)
    printf("NTLM Flag: Negotiate Datagram Style\n");
  if (flags & 0x00000080)
    printf("NTLM Flag: Negotiate LAN Manager Key\n");
  if (flags & 0x00000100)
    printf("NTLM Flag: Negotiate Netware\n");
  if (flags & 0x00000200)
    printf("NTLM Flag: Negotiate NTLM\n");
  if (flags & 0x00000400)
    printf("NTLM Flag: Unknown2\n");
  if (flags & 0x00000800)
    printf("NTLM Flag: Unknown3\n");
  if (flags & 0x00001000)
    printf("NTLM Flag: Negotiate Domain Supplied\n");
  if (flags & 0x00002000)
    printf("NTLM Flag: Negotiate Workstation Supplied\n");
  if (flags & 0x00004000)
    printf("NTLM Flag: Negotiate Local Call\n");
  if (flags & 0x00008000)
    printf("NTLM Flag: Negotiate Always Sign\n");
  if (flags & 0x00010000)
    printf("NTLM Flag: Target Type Domain\n");
  if (flags & 0x00020000)
    printf("NTLM Flag: Target Type Server\n");
  if (flags & 0x00040000)
    printf("NTLM Flag: Target Type Share\n");
  if (flags & 0x00080000)
    printf("NTLM Flag: Negotiate NTLM2 Key\n");
  if (flags & 0x00100000)
    printf("NTLM Flag: Request Init Response\n");
  if (flags & 0x00200000)
    printf("NTLM Flag: Request Accept Response\n");
  if (flags & 0x00400000)
    printf("NTLM Flag: Request Non-NT Session Key\n");
  if (flags & 0x00800000)
    printf("NTLM Flag: Negotiate Target Info\n");
  if (flags & 0x01000000)
    printf("NTLM Flag: UNKNOWN4\n");
  if (flags & 0x02000000)
    printf("NTLM Flag: UNKNOWN5\n");
  if (flags & 0x04000000)
    printf("NTLM Flag: UNKNOWN6\n");
  if (flags & 0x08000000)
    printf("NTLM Flag: UNKNOWN7\n");
  if (flags & 0x10000000)
    printf("NTLM Flag: UNKNOWN8\n");
  if (flags & 0x20000000)
    printf("NTLM Flag: Negotiate 128\n");
  if (flags & 0x40000000)
    printf("NTLM Flag: Negotiate Key Exchange\n");
  if (flags & 0x80000000)
    printf("NTLM Flag: Negotiate 56\n");
}


x86 assembly (clang, -O0):
<PrintFlags>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <ltohl@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1157 <PrintFlags+0x37>
lea    0xeae(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x2,%rax
cmp    $0x0,%rax
je     1175 <PrintFlags+0x55>
lea    0xeae(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x4,%rax
cmp    $0x0,%rax
je     1193 <PrintFlags+0x73>
lea    0xeaa(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x8,%rax
cmp    $0x0,%rax
je     11b1 <PrintFlags+0x91>
lea    0xea7(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x10,%rax
cmp    $0x0,%rax
je     11cf <PrintFlags+0xaf>
lea    0xe9e(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x20,%rax
cmp    $0x0,%rax
je     11ed <PrintFlags+0xcd>
lea    0xe9b(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x40,%rax
cmp    $0x0,%rax
je     120b <PrintFlags+0xeb>
lea    0xe98(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x80,%rax
cmp    $0x0,%rax
je     122b <PrintFlags+0x10b>
lea    0xe9d(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x100,%rax
cmp    $0x0,%rax
je     124b <PrintFlags+0x12b>
lea    0xea3(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x200,%rax
cmp    $0x0,%rax
je     126b <PrintFlags+0x14b>
lea    0xea1(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x400,%rax
cmp    $0x0,%rax
je     128b <PrintFlags+0x16b>
lea    0xe9c(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x800,%rax
cmp    $0x0,%rax
je     12ab <PrintFlags+0x18b>
lea    0xe91(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x1000,%rax
cmp    $0x0,%rax
je     12cb <PrintFlags+0x1ab>
lea    0xe86(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x2000,%rax
cmp    $0x0,%rax
je     12eb <PrintFlags+0x1cb>
lea    0xe8c(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x4000,%rax
cmp    $0x0,%rax
je     130b <PrintFlags+0x1eb>
lea    0xe97(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x8000,%rax
cmp    $0x0,%rax
je     132b <PrintFlags+0x20b>
lea    0xe98(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x10000,%rax
cmp    $0x0,%rax
je     134b <PrintFlags+0x22b>
lea    0xe9a(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x20000,%rax
cmp    $0x0,%rax
je     136b <PrintFlags+0x24b>
lea    0xe99(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x40000,%rax
cmp    $0x0,%rax
je     138b <PrintFlags+0x26b>
lea    0xe98(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x80000,%rax
cmp    $0x0,%rax
je     13ab <PrintFlags+0x28b>
lea    0xe96(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x100000,%rax
cmp    $0x0,%rax
je     13cb <PrintFlags+0x2ab>
lea    0xe96(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x200000,%rax
cmp    $0x0,%rax
je     13eb <PrintFlags+0x2cb>
lea    0xe98(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x400000,%rax
cmp    $0x0,%rax
je     140b <PrintFlags+0x2eb>
lea    0xe9c(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x800000,%rax
cmp    $0x0,%rax
je     142b <PrintFlags+0x30b>
lea    0xea3(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x1000000,%rax
cmp    $0x0,%rax
je     144b <PrintFlags+0x32b>
lea    0xea5(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x2000000,%rax
cmp    $0x0,%rax
je     146b <PrintFlags+0x34b>
lea    0xe9a(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x4000000,%rax
cmp    $0x0,%rax
je     148b <PrintFlags+0x36b>
lea    0xe8f(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x8000000,%rax
cmp    $0x0,%rax
je     14ab <PrintFlags+0x38b>
lea    0xe84(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x10000000,%rax
cmp    $0x0,%rax
je     14cb <PrintFlags+0x3ab>
lea    0xe79(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x20000000,%rax
cmp    $0x0,%rax
je     14eb <PrintFlags+0x3cb>
lea    0xe6e(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
and    $0x40000000,%rax
cmp    $0x0,%rax
je     150b <PrintFlags+0x3eb>
lea    0xe68(%rip),%rdi
call   1030 <printf@plt>
movabs $0x80000000,%rax
and    -0x8(%rbp),%rax
cmp    $0x0,%rax
je     152f <PrintFlags+0x40f>
lea    0xe67(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<PrintFlags>:
push   %rbx
call   1040 <ltohl@plt>
mov    %rax,%rbx
test   $0x1,%bl
jne    1293 <PrintFlags+0x173>
test   $0x2,%bl
jne    12a8 <PrintFlags+0x188>
test   $0x4,%bl
jne    12bd <PrintFlags+0x19d>
test   $0x8,%bl
jne    12d2 <PrintFlags+0x1b2>
test   $0x10,%bl
jne    12e7 <PrintFlags+0x1c7>
test   $0x20,%bl
jne    12fc <PrintFlags+0x1dc>
test   $0x40,%bl
jne    1311 <PrintFlags+0x1f1>
test   $0x80,%bl
jne    1326 <PrintFlags+0x206>
test   $0x100,%ebx
jne    133e <PrintFlags+0x21e>
test   $0x200,%ebx
jne    1356 <PrintFlags+0x236>
test   $0x400,%ebx
jne    136e <PrintFlags+0x24e>
test   $0x800,%ebx
jne    1386 <PrintFlags+0x266>
test   $0x1000,%ebx
jne    139e <PrintFlags+0x27e>
test   $0x2000,%ebx
jne    13b6 <PrintFlags+0x296>
test   $0x4000,%ebx
jne    13ce <PrintFlags+0x2ae>
test   $0x8000,%ebx
jne    13e6 <PrintFlags+0x2c6>
test   $0x10000,%ebx
jne    13fe <PrintFlags+0x2de>
test   $0x20000,%ebx
jne    1416 <PrintFlags+0x2f6>
test   $0x40000,%ebx
jne    142e <PrintFlags+0x30e>
test   $0x80000,%ebx
jne    1446 <PrintFlags+0x326>
test   $0x100000,%ebx
jne    145e <PrintFlags+0x33e>
test   $0x200000,%ebx
jne    1476 <PrintFlags+0x356>
test   $0x400000,%ebx
jne    148e <PrintFlags+0x36e>
test   $0x800000,%ebx
jne    14a6 <PrintFlags+0x386>
test   $0x1000000,%ebx
jne    14be <PrintFlags+0x39e>
test   $0x2000000,%ebx
jne    14d6 <PrintFlags+0x3b6>
test   $0x4000000,%ebx
jne    14ee <PrintFlags+0x3ce>
test   $0x8000000,%ebx
jne    1506 <PrintFlags+0x3e6>
test   $0x10000000,%ebx
jne    151e <PrintFlags+0x3fe>
test   $0x20000000,%ebx
jne    1536 <PrintFlags+0x416>
test   $0x40000000,%ebx
jne    154e <PrintFlags+0x42e>
test   $0x80000000,%ebx
jne    1566 <PrintFlags+0x446>
pop    %rbx
ret
lea    0x10d3(%rip),%rdi
call   1030 <puts@plt>
test   $0x2,%bl
je     113b <PrintFlags+0x1b>
lea    0x10a5(%rip),%rdi
call   1030 <puts@plt>
test   $0x4,%bl
je     1144 <PrintFlags+0x24>
lea    0x1076(%rip),%rdi
call   1030 <puts@plt>
test   $0x8,%bl
je     114d <PrintFlags+0x2d>
lea    0x104d(%rip),%rdi
call   1030 <puts@plt>
test   $0x10,%bl
je     1156 <PrintFlags+0x36>
lea    0x101e(%rip),%rdi
call   1030 <puts@plt>
test   $0x20,%bl
je     115f <PrintFlags+0x3f>
lea    0xfef(%rip),%rdi
call   1030 <puts@plt>
test   $0x40,%bl
je     1168 <PrintFlags+0x48>
lea    0xfb6(%rip),%rdi
call   1030 <puts@plt>
test   $0x80,%bl
je     1171 <PrintFlags+0x51>
lea    0xf7c(%rip),%rdi
call   1030 <puts@plt>
test   $0x100,%ebx
je     117d <PrintFlags+0x5d>
lea    0xf47(%rip),%rdi
call   1030 <puts@plt>
test   $0x200,%ebx
je     1189 <PrintFlags+0x69>
lea    0xf15(%rip),%rdi
call   1030 <puts@plt>
test   $0x400,%ebx
je     1195 <PrintFlags+0x75>
lea    0xee9(%rip),%rdi
call   1030 <puts@plt>
test   $0x800,%ebx
je     11a1 <PrintFlags+0x81>
lea    0xebd(%rip),%rdi
call   1030 <puts@plt>
test   $0x1000,%ebx
je     11ad <PrintFlags+0x8d>
lea    0xe80(%rip),%rdi
call   1030 <puts@plt>
test   $0x2000,%ebx
je     11b9 <PrintFlags+0x99>
lea    0xe3e(%rip),%rdi
call   1030 <puts@plt>
test   $0x4000,%ebx
je     11c5 <PrintFlags+0xa5>
lea    0xe06(%rip),%rdi
call   1030 <puts@plt>
test   $0x8000,%ebx
je     11d1 <PrintFlags+0xb1>
lea    0xdcd(%rip),%rdi
call   1030 <puts@plt>
test   $0x10000,%ebx
je     11dd <PrintFlags+0xbd>
lea    0xd97(%rip),%rdi
call   1030 <puts@plt>
test   $0x20000,%ebx
je     11e9 <PrintFlags+0xc9>
lea    0xd61(%rip),%rdi
call   1030 <puts@plt>
test   $0x40000,%ebx
je     11f5 <PrintFlags+0xd5>
lea    0xd2c(%rip),%rdi
call   1030 <puts@plt>
test   $0x80000,%ebx
je     1201 <PrintFlags+0xe1>
lea    0xcf5(%rip),%rdi
call   1030 <puts@plt>
test   $0x100000,%ebx
je     120d <PrintFlags+0xed>
lea    0xcbc(%rip),%rdi
call   1030 <puts@plt>
test   $0x200000,%ebx
je     1219 <PrintFlags+0xf9>
lea    0xc81(%rip),%rdi
call   1030 <puts@plt>
test   $0x400000,%ebx
je     1225 <PrintFlags+0x105>
lea    0xc43(%rip),%rdi
call   1030 <puts@plt>
test   $0x800000,%ebx
je     1231 <PrintFlags+0x111>
lea    0xc0a(%rip),%rdi
call   1030 <puts@plt>
test   $0x1000000,%ebx
je     123d <PrintFlags+0x11d>
lea    0xbde(%rip),%rdi
call   1030 <puts@plt>
test   $0x2000000,%ebx
je     1249 <PrintFlags+0x129>
lea    0xbb2(%rip),%rdi
call   1030 <puts@plt>
test   $0x4000000,%ebx
je     1255 <PrintFlags+0x135>
lea    0xb86(%rip),%rdi
call   1030 <puts@plt>
test   $0x8000000,%ebx
je     1261 <PrintFlags+0x141>
lea    0xb5a(%rip),%rdi
call   1030 <puts@plt>
test   $0x10000000,%ebx
je     126d <PrintFlags+0x14d>
lea    0xb2e(%rip),%rdi
call   1030 <puts@plt>
test   $0x20000000,%ebx
je     1279 <PrintFlags+0x159>
lea    0xafd(%rip),%rdi
call   1030 <puts@plt>
test   $0x40000000,%ebx
je     1285 <PrintFlags+0x165>
lea    0xac3(%rip),%rdi
call   1030 <puts@plt>
test   $0x80000000,%ebx
je     1291 <PrintFlags+0x171>
lea    0xa93(%rip),%rdi
pop    %rbx
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [30 x i8] c"NTLM Flag: Negotiate Unicode\0A\00"
@.str.1 = [26 x i8] c"NTLM Flag: Negotiate OEM\0A\00"
@.str.2 = [27 x i8] c"NTLM Flag: Request Target\0A\00"
@.str.3 = [21 x i8] c"NTLM Flag: Unknown1\0A\00"
@.str.4 = [27 x i8] c"NTLM Flag: Negotiate Sign\0A\00"
@.str.5 = [27 x i8] c"NTLM Flag: Negotiate Seal\0A\00"
@.str.6 = [37 x i8] c"NTLM Flag: Negotiate Datagram Style\0A\00"
@.str.7 = [38 x i8] c"NTLM Flag: Negotiate LAN Manager Key\0A\00"
@.str.8 = [30 x i8] c"NTLM Flag: Negotiate Netware\0A\00"
@.str.9 = [27 x i8] c"NTLM Flag: Negotiate NTLM\0A\00"
@.str.10 = [21 x i8] c"NTLM Flag: Unknown2\0A\00"
@.str.11 = [21 x i8] c"NTLM Flag: Unknown3\0A\00"
@.str.12 = [38 x i8] c"NTLM Flag: Negotiate Domain Supplied\0A\00"
@.str.13 = [43 x i8] c"NTLM Flag: Negotiate Workstation Supplied\0A\00"
@.str.14 = [33 x i8] c"NTLM Flag: Negotiate Local Call\0A\00"
@.str.15 = [34 x i8] c"NTLM Flag: Negotiate Always Sign\0A\00"
@.str.16 = [31 x i8] c"NTLM Flag: Target Type Domain\0A\00"
@.str.17 = [31 x i8] c"NTLM Flag: Target Type Server\0A\00"
@.str.18 = [30 x i8] c"NTLM Flag: Target Type Share\0A\00"
@.str.19 = [32 x i8] c"NTLM Flag: Negotiate NTLM2 Key\0A\00"
@.str.20 = [34 x i8] c"NTLM Flag: Request Init Response\0A\00"
@.str.21 = [36 x i8] c"NTLM Flag: Request Accept Response\0A\00"
@.str.22 = [39 x i8] c"NTLM Flag: Request Non-NT Session Key\0A\00"
@.str.23 = [34 x i8] c"NTLM Flag: Negotiate Target Info\0A\00"
@.str.24 = [21 x i8] c"NTLM Flag: UNKNOWN4\0A\00"
@.str.25 = [21 x i8] c"NTLM Flag: UNKNOWN5\0A\00"
@.str.26 = [21 x i8] c"NTLM Flag: UNKNOWN6\0A\00"
@.str.27 = [21 x i8] c"NTLM Flag: UNKNOWN7\0A\00"
@.str.28 = [21 x i8] c"NTLM Flag: UNKNOWN8\0A\00"
@.str.29 = [26 x i8] c"NTLM Flag: Negotiate 128\0A\00"
@.str.30 = [35 x i8] c"NTLM Flag: Negotiate Key Exchange\0A\00"
@.str.31 = [25 x i8] c"NTLM Flag: Negotiate 56\0A\00"
define void @PrintFlags(i64 %0) {
%2 = alloca i64
store i64 %0, i64* %2
%3 = load i64, i64* %2
%4 = call i64 @ltohl(i64 %3)
store i64 %4, i64* %2
%5 = load i64, i64* %2
%6 = and i64 %5, 1
%7 = icmp ne i64 %6, 0
br i1 %7, label %8, label %10
8: ; preds = %1
%9 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0))
br label %10
10: ; preds = %8, %1
%11 = load i64, i64* %2
%12 = and i64 %11, 2
%13 = icmp ne i64 %12, 0
br i1 %13, label %14, label %16
14: ; preds = %10
%15 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.1, i64 0, i64 0))
br label %16
16: ; preds = %14, %10
%17 = load i64, i64* %2
%18 = and i64 %17, 4
%19 = icmp ne i64 %18, 0
br i1 %19, label %20, label %22
20: ; preds = %16
%21 = call i32 @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.2, i64 0, i64 0))
br label %22
22: ; preds = %20, %16
%23 = load i64, i64* %2
%24 = and i64 %23, 8
%25 = icmp ne i64 %24, 0
br i1 %25, label %26, label %28
26: ; preds = %22
%27 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0))
br label %28
28: ; preds = %26, %22
%29 = load i64, i64* %2
%30 = and i64 %29, 16
%31 = icmp ne i64 %30, 0
br i1 %31, label %32, label %34
32: ; preds = %28
%33 = call i32 @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.4, i64 0, i64 0))
br label %34
34: ; preds = %32, %28
%35 = load i64, i64* %2
%36 = and i64 %35, 32
%37 = icmp ne i64 %36, 0
br i1 %37, label %38, label %40
38: ; preds = %34
%39 = call i32 @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.5, i64 0, i64 0))
br label %40
40: ; preds = %38, %34
%41 = load i64, i64* %2
%42 = and i64 %41, 64
%43 = icmp ne i64 %42, 0
br i1 %43, label %44, label %46
44: ; preds = %40
%45 = call i32 @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.6, i64 0, i64 0))
br label %46
46: ; preds = %44, %40
%47 = load i64, i64* %2
%48 = and i64 %47, 128
%49 = icmp ne i64 %48, 0
br i1 %49, label %50, label %52
50: ; preds = %46
%51 = call i32 @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.7, i64 0, i64 0))
br label %52
52: ; preds = %50, %46
%53 = load i64, i64* %2
%54 = and i64 %53, 256
%55 = icmp ne i64 %54, 0
br i1 %55, label %56, label %58
56: ; preds = %52
%57 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.8, i64 0, i64 0))
br label %58
58: ; preds = %56, %52
%59 = load i64, i64* %2
%60 = and i64 %59, 512
%61 = icmp ne i64 %60, 0
br i1 %61, label %62, label %64
62: ; preds = %58
%63 = call i32 @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.9, i64 0, i64 0))
br label %64
64: ; preds = %62, %58
%65 = load i64, i64* %2
%66 = and i64 %65, 1024
%67 = icmp ne i64 %66, 0
br i1 %67, label %68, label %70
68: ; preds = %64
%69 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.10, i64 0, i64 0))
br label %70
70: ; preds = %68, %64
%71 = load i64, i64* %2
%72 = and i64 %71, 2048
%73 = icmp ne i64 %72, 0
br i1 %73, label %74, label %76
74: ; preds = %70
%75 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.11, i64 0, i64 0))
br label %76
76: ; preds = %74, %70
%77 = load i64, i64* %2
%78 = and i64 %77, 4096
%79 = icmp ne i64 %78, 0
br i1 %79, label %80, label %82
80: ; preds = %76
%81 = call i32 @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.12, i64 0, i64 0))
br label %82
82: ; preds = %80, %76
%83 = load i64, i64* %2
%84 = and i64 %83, 8192
%85 = icmp ne i64 %84, 0
br i1 %85, label %86, label %88
86: ; preds = %82
%87 = call i32 @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.13, i64 0, i64 0))
br label %88
88: ; preds = %86, %82
%89 = load i64, i64* %2
%90 = and i64 %89, 16384
%91 = icmp ne i64 %90, 0
br i1 %91, label %92, label %94
92: ; preds = %88
%93 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.14, i64 0, i64 0))
br label %94
94: ; preds = %92, %88
%95 = load i64, i64* %2
%96 = and i64 %95, 32768
%97 = icmp ne i64 %96, 0
br i1 %97, label %98, label %100
98: ; preds = %94
%99 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.15, i64 0, i64 0))
br label %100
100: ; preds = %98, %94
%101 = load i64, i64* %2
%102 = and i64 %101, 65536
%103 = icmp ne i64 %102, 0
br i1 %103, label %104, label %106
104: ; preds = %100
%105 = call i32 @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0))
br label %106
106: ; preds = %104, %100
%107 = load i64, i64* %2
%108 = and i64 %107, 131072
%109 = icmp ne i64 %108, 0
br i1 %109, label %110, label %112
110: ; preds = %106
%111 = call i32 @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.17, i64 0, i64 0))
br label %112
112: ; preds = %110, %106
%113 = load i64, i64* %2
%114 = and i64 %113, 262144
%115 = icmp ne i64 %114, 0
br i1 %115, label %116, label %118
116: ; preds = %112
%117 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.18, i64 0, i64 0))
br label %118
118: ; preds = %116, %112
%119 = load i64, i64* %2
%120 = and i64 %119, 524288
%121 = icmp ne i64 %120, 0
br i1 %121, label %122, label %124
122: ; preds = %118
%123 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.19, i64 0, i64 0))
br label %124
124: ; preds = %122, %118
%125 = load i64, i64* %2
%126 = and i64 %125, 1048576
%127 = icmp ne i64 %126, 0
br i1 %127, label %128, label %130
128: ; preds = %124
%129 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.20, i64 0, i64 0))
br label %130
130: ; preds = %128, %124
%131 = load i64, i64* %2
%132 = and i64 %131, 2097152
%133 = icmp ne i64 %132, 0
br i1 %133, label %134, label %136
134: ; preds = %130
%135 = call i32 @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.21, i64 0, i64 0))
br label %136
136: ; preds = %134, %130
%137 = load i64, i64* %2
%138 = and i64 %137, 4194304
%139 = icmp ne i64 %138, 0
br i1 %139, label %140, label %142
140: ; preds = %136
%141 = call i32 @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.22, i64 0, i64 0))
br label %142
142: ; preds = %140, %136
%143 = load i64, i64* %2
%144 = and i64 %143, 8388608
%145 = icmp ne i64 %144, 0
br i1 %145, label %146, label %148
146: ; preds = %142
%147 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.23, i64 0, i64 0))
br label %148
148: ; preds = %146, %142
%149 = load i64, i64* %2
%150 = and i64 %149, 16777216
%151 = icmp ne i64 %150, 0
br i1 %151, label %152, label %154
152: ; preds = %148
%153 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.24, i64 0, i64 0))
br label %154
154: ; preds = %152, %148
%155 = load i64, i64* %2
%156 = and i64 %155, 33554432
%157 = icmp ne i64 %156, 0
br i1 %157, label %158, label %160
158: ; preds = %154
%159 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.25, i64 0, i64 0))
br label %160
160: ; preds = %158, %154
%161 = load i64, i64* %2
%162 = and i64 %161, 67108864
%163 = icmp ne i64 %162, 0
br i1 %163, label %164, label %166
164: ; preds = %160
%165 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.26, i64 0, i64 0))
br label %166
166: ; preds = %164, %160
%167 = load i64, i64* %2
%168 = and i64 %167, 134217728
%169 = icmp ne i64 %168, 0
br i1 %169, label %170, label %172
170: ; preds = %166
%171 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.27, i64 0, i64 0))
br label %172
172: ; preds = %170, %166
%173 = load i64, i64* %2
%174 = and i64 %173, 268435456
%175 = icmp ne i64 %174, 0
br i1 %175, label %176, label %178
176: ; preds = %172
%177 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.28, i64 0, i64 0))
br label %178
178: ; preds = %176, %172
%179 = load i64, i64* %2
%180 = and i64 %179, 536870912
%181 = icmp ne i64 %180, 0
br i1 %181, label %182, label %184
182: ; preds = %178
%183 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.29, i64 0, i64 0))
br label %184
184: ; preds = %182, %178
%185 = load i64, i64* %2
%186 = and i64 %185, 1073741824
%187 = icmp ne i64 %186, 0
br i1 %187, label %188, label %190
188: ; preds = %184
%189 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.30, i64 0, i64 0))
br label %190
190: ; preds = %188, %184
%191 = load i64, i64* %2
%192 = and i64 %191, 2147483648
%193 = icmp ne i64 %192, 0
br i1 %193, label %194, label %196
194: ; preds = %190
%195 = call i32 @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.31, i64 0, i64 0))
br label %196
196: ; preds = %194, %190
ret void
}

LLVM IR (-O2):
@str = [24 x i8] c"NTLM Flag: Negotiate 56\00"
@str.32 = [34 x i8] c"NTLM Flag: Negotiate Key Exchange\00"
@str.33 = [25 x i8] c"NTLM Flag: Negotiate 128\00"
@str.34 = [20 x i8] c"NTLM Flag: UNKNOWN8\00"
@str.35 = [20 x i8] c"NTLM Flag: UNKNOWN7\00"
@str.36 = [20 x i8] c"NTLM Flag: UNKNOWN6\00"
@str.37 = [20 x i8] c"NTLM Flag: UNKNOWN5\00"
@str.38 = [20 x i8] c"NTLM Flag: UNKNOWN4\00"
@str.39 = [33 x i8] c"NTLM Flag: Negotiate Target Info\00"
@str.40 = [38 x i8] c"NTLM Flag: Request Non-NT Session Key\00"
@str.41 = [35 x i8] c"NTLM Flag: Request Accept Response\00"
@str.42 = [33 x i8] c"NTLM Flag: Request Init Response\00"
@str.43 = [31 x i8] c"NTLM Flag: Negotiate NTLM2 Key\00"
@str.44 = [29 x i8] c"NTLM Flag: Target Type Share\00"
@str.45 = [30 x i8] c"NTLM Flag: Target Type Server\00"
@str.46 = [30 x i8] c"NTLM Flag: Target Type Domain\00"
@str.47 = [33 x i8] c"NTLM Flag: Negotiate Always Sign\00"
@str.48 = [32 x i8] c"NTLM Flag: Negotiate Local Call\00"
@str.49 = [42 x i8] c"NTLM Flag: Negotiate Workstation Supplied\00"
@str.50 = [37 x i8] c"NTLM Flag: Negotiate Domain Supplied\00"
@str.51 = [20 x i8] c"NTLM Flag: Unknown3\00"
@str.52 = [20 x i8] c"NTLM Flag: Unknown2\00"
@str.53 = [26 x i8] c"NTLM Flag: Negotiate NTLM\00"
@str.54 = [29 x i8] c"NTLM Flag: Negotiate Netware\00"
@str.55 = [37 x i8] c"NTLM Flag: Negotiate LAN Manager Key\00"
@str.56 = [36 x i8] c"NTLM Flag: Negotiate Datagram Style\00"
@str.57 = [26 x i8] c"NTLM Flag: Negotiate Seal\00"
@str.58 = [26 x i8] c"NTLM Flag: Negotiate Sign\00"
@str.59 = [20 x i8] c"NTLM Flag: Unknown1\00"
@str.60 = [26 x i8] c"NTLM Flag: Request Target\00"
@str.61 = [25 x i8] c"NTLM Flag: Negotiate OEM\00"
@str.62 = [29 x i8] c"NTLM Flag: Negotiate Unicode\00"
define void @PrintFlags(i64 %0) {
%2 = tail call i64 @ltohl(i64 %0)
%3 = and i64 %2, 1
%4 = icmp eq i64 %3, 0
br i1 %4, label %7, label %5
5: ; preds = %1
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.62, i64 0, i64 0))
br label %7
7: ; preds = %5, %1
%8 = and i64 %2, 2
%9 = icmp eq i64 %8, 0
br i1 %9, label %12, label %10
10: ; preds = %7
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.61, i64 0, i64 0))
br label %12
12: ; preds = %10, %7
%13 = and i64 %2, 4
%14 = icmp eq i64 %13, 0
br i1 %14, label %17, label %15
15: ; preds = %12
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.60, i64 0, i64 0))
br label %17
17: ; preds = %15, %12
%18 = and i64 %2, 8
%19 = icmp eq i64 %18, 0
br i1 %19, label %22, label %20
20: ; preds = %17
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.59, i64 0, i64 0))
br label %22
22: ; preds = %20, %17
%23 = and i64 %2, 16
%24 = icmp eq i64 %23, 0
br i1 %24, label %27, label %25
25: ; preds = %22
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.58, i64 0, i64 0))
br label %27
27: ; preds = %25, %22
%28 = and i64 %2, 32
%29 = icmp eq i64 %28, 0
br i1 %29, label %32, label %30
30: ; preds = %27
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.57, i64 0, i64 0))
br label %32
32: ; preds = %30, %27
%33 = and i64 %2, 64
%34 = icmp eq i64 %33, 0
br i1 %34, label %37, label %35
35: ; preds = %32
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.56, i64 0, i64 0))
br label %37
37: ; preds = %35, %32
%38 = and i64 %2, 128
%39 = icmp eq i64 %38, 0
br i1 %39, label %42, label %40
40: ; preds = %37
%41 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.55, i64 0, i64 0))
br label %42
42: ; preds = %40, %37
%43 = and i64 %2, 256
%44 = icmp eq i64 %43, 0
br i1 %44, label %47, label %45
45: ; preds = %42
%46 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.54, i64 0, i64 0))
br label %47
47: ; preds = %45, %42
%48 = and i64 %2, 512
%49 = icmp eq i64 %48, 0
br i1 %49, label %52, label %50
50: ; preds = %47
%51 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.53, i64 0, i64 0))
br label %52
52: ; preds = %50, %47
%53 = and i64 %2, 1024
%54 = icmp eq i64 %53, 0
br i1 %54, label %57, label %55
55: ; preds = %52
%56 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.52, i64 0, i64 0))
br label %57
57: ; preds = %55, %52
%58 = and i64 %2, 2048
%59 = icmp eq i64 %58, 0
br i1 %59, label %62, label %60
60: ; preds = %57
%61 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.51, i64 0, i64 0))
br label %62
62: ; preds = %60, %57
%63 = and i64 %2, 4096
%64 = icmp eq i64 %63, 0
br i1 %64, label %67, label %65
65: ; preds = %62
%66 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.50, i64 0, i64 0))
br label %67
67: ; preds = %65, %62
%68 = and i64 %2, 8192
%69 = icmp eq i64 %68, 0
br i1 %69, label %72, label %70
70: ; preds = %67
%71 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @str.49, i64 0, i64 0))
br label %72
72: ; preds = %70, %67
%73 = and i64 %2, 16384
%74 = icmp eq i64 %73, 0
br i1 %74, label %77, label %75
75: ; preds = %72
%76 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.48, i64 0, i64 0))
br label %77
77: ; preds = %75, %72
%78 = and i64 %2, 32768
%79 = icmp eq i64 %78, 0
br i1 %79, label %82, label %80
80: ; preds = %77
%81 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.47, i64 0, i64 0))
br label %82
82: ; preds = %80, %77
%83 = and i64 %2, 65536
%84 = icmp eq i64 %83, 0
br i1 %84, label %87, label %85
85: ; preds = %82
%86 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.46, i64 0, i64 0))
br label %87
87: ; preds = %85, %82
%88 = and i64 %2, 131072
%89 = icmp eq i64 %88, 0
br i1 %89, label %92, label %90
90: ; preds = %87
%91 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.45, i64 0, i64 0))
br label %92
92: ; preds = %90, %87
%93 = and i64 %2, 262144
%94 = icmp eq i64 %93, 0
br i1 %94, label %97, label %95
95: ; preds = %92
%96 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.44, i64 0, i64 0))
br label %97
97: ; preds = %95, %92
%98 = and i64 %2, 524288
%99 = icmp eq i64 %98, 0
br i1 %99, label %102, label %100
100: ; preds = %97
%101 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @str.43, i64 0, i64 0))
br label %102
102: ; preds = %100, %97
%103 = and i64 %2, 1048576
%104 = icmp eq i64 %103, 0
br i1 %104, label %107, label %105
105: ; preds = %102
%106 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.42, i64 0, i64 0))
br label %107
107: ; preds = %105, %102
%108 = and i64 %2, 2097152
%109 = icmp eq i64 %108, 0
br i1 %109, label %112, label %110
110: ; preds = %107
%111 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str.41, i64 0, i64 0))
br label %112
112: ; preds = %110, %107
%113 = and i64 %2, 4194304
%114 = icmp eq i64 %113, 0
br i1 %114, label %117, label %115
115: ; preds = %112
%116 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.40, i64 0, i64 0))
br label %117
117: ; preds = %115, %112
%118 = and i64 %2, 8388608
%119 = icmp eq i64 %118, 0
br i1 %119, label %122, label %120
120: ; preds = %117
%121 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.39, i64 0, i64 0))
br label %122
122: ; preds = %120, %117
%123 = and i64 %2, 16777216
%124 = icmp eq i64 %123, 0
br i1 %124, label %127, label %125
125: ; preds = %122
%126 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.38, i64 0, i64 0))
br label %127
127: ; preds = %125, %122
%128 = and i64 %2, 33554432
%129 = icmp eq i64 %128, 0
br i1 %129, label %132, label %130
130: ; preds = %127
%131 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.37, i64 0, i64 0))
br label %132
132: ; preds = %130, %127
%133 = and i64 %2, 67108864
%134 = icmp eq i64 %133, 0
br i1 %134, label %137, label %135
135: ; preds = %132
%136 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.36, i64 0, i64 0))
br label %137
137: ; preds = %135, %132
%138 = and i64 %2, 134217728
%139 = icmp eq i64 %138, 0
br i1 %139, label %142, label %140
140: ; preds = %137
%141 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.35, i64 0, i64 0))
br label %142
142: ; preds = %140, %137
%143 = and i64 %2, 268435456
%144 = icmp eq i64 %143, 0
br i1 %144, label %147, label %145
145: ; preds = %142
%146 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.34, i64 0, i64 0))
br label %147
147: ; preds = %145, %142
%148 = and i64 %2, 536870912
%149 = icmp eq i64 %148, 0
br i1 %149, label %152, label %150
150: ; preds = %147
%151 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.33, i64 0, i64 0))
br label %152
152: ; preds = %150, %147
%153 = and i64 %2, 1073741824
%154 = icmp eq i64 %153, 0
br i1 %154, label %157, label %155
155: ; preds = %152
%156 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.32, i64 0, i64 0))
br label %157
157: ; preds = %155, %152
%158 = and i64 %2, 2147483648
%159 = icmp eq i64 %158, 0
br i1 %159, label %162, label %160
160: ; preds = %157
%161 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str, i64 0, i64 0))
br label %162
162: ; preds = %160, %157
ret void
}