int main(void) {
  char kulcs[8];
  char titkos[4096];
  char *p = titkos;
  int olvasott_bajtok;
  while ((olvasott_bajtok =
              read(0, (void *)p,
                   (p - titkos + 256 < 4096) ? 256 : titkos + 4096 - p)))
    p += olvasott_bajtok;
  for (int i = 0; i < 4096 - (p - titkos); ++i)
    titkos[p - titkos + i] = '\0';
  for (int ii = '0'; ii <= '9'; ++ii)
    for (int ji = '0'; ji <= '9'; ++ji)
      for (int ki = '0'; ki <= '9'; ++ki)
        for (int li = '0'; li <= '9'; ++li)
          for (int mi = '0'; mi <= '9'; ++mi)
            for (int ni = '0'; ni <= '9'; ++ni)
              for (int oi = '0'; oi <= '9'; ++oi)
                for (int pi = '0'; pi <= '9'; ++pi) {
                  kulcs[0] = ii;
                  kulcs[1] = ji;
                  kulcs[2] = ki;
                  kulcs[3] = li;
                  kulcs[4] = mi;
                  kulcs[5] = ni;
                  kulcs[6] = oi;
                  kulcs[7] = pi;
                  if (exor_tores(kulcs, 8, titkos, p - titkos))
                    printf("Kulcs: [%c%c%c%c%c%c%c%c]\nTiszta szoveg: [%s]\n",
                           ii, ji, ki, li, mi, ni, oi, pi, titkos);
                  exor(kulcs, 8, titkos, p - titkos);
                }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %rbx
sub    $0x1078,%rsp
movl   $0x0,-0xc(%rbp)
lea    -0x1020(%rbp),%rax
mov    %rax,-0x1028(%rbp)
mov    -0x1028(%rbp),%rax
mov    %rax,-0x1058(%rbp)
mov    -0x1028(%rbp),%rax
lea    -0x1020(%rbp),%rcx
sub    %rcx,%rax
add    $0x100,%rax
cmp    $0x1000,%rax
jge    11a3 <main+0x63>
mov    $0x100,%eax
mov    %rax,-0x1060(%rbp)
jmp    11c1 <main+0x81>
lea    -0x1020(%rbp),%rax
add    $0x1000,%rax
mov    -0x1028(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x1060(%rbp)
mov    -0x1058(%rbp),%rsi
mov    -0x1060(%rbp),%rdx
xor    %edi,%edi
mov    $0x0,%al
call   1040 <read@plt>
mov    %eax,-0x102c(%rbp)
cmp    $0x0,%eax
je     1206 <main+0xc6>
mov    -0x102c(%rbp),%ecx
mov    -0x1028(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x1028(%rbp)
jmp    1161 <main+0x21>
movl   $0x0,-0x1030(%rbp)
movslq -0x1030(%rbp),%rax
mov    -0x1028(%rbp),%rdx
lea    -0x1020(%rbp),%rcx
sub    %rcx,%rdx
mov    $0x1000,%ecx
sub    %rdx,%rcx
cmp    %rcx,%rax
jge    1270 <main+0x130>
mov    -0x1028(%rbp),%rax
lea    -0x1020(%rbp),%rcx
sub    %rcx,%rax
movslq -0x1030(%rbp),%rcx
add    %rcx,%rax
movb   $0x0,-0x1020(%rbp,%rax,1)
mov    -0x1030(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1030(%rbp)
jmp    1210 <main+0xd0>
movl   $0x30,-0x1034(%rbp)
cmpl   $0x39,-0x1034(%rbp)
jg     14e7 <main+0x3a7>
movl   $0x30,-0x1038(%rbp)
cmpl   $0x39,-0x1038(%rbp)
jg     14ce <main+0x38e>
movl   $0x30,-0x103c(%rbp)
cmpl   $0x39,-0x103c(%rbp)
jg     14b5 <main+0x375>
movl   $0x30,-0x1040(%rbp)
cmpl   $0x39,-0x1040(%rbp)
jg     149c <main+0x35c>
movl   $0x30,-0x1044(%rbp)
cmpl   $0x39,-0x1044(%rbp)
jg     1483 <main+0x343>
movl   $0x30,-0x1048(%rbp)
cmpl   $0x39,-0x1048(%rbp)
jg     146a <main+0x32a>
movl   $0x30,-0x104c(%rbp)
cmpl   $0x39,-0x104c(%rbp)
jg     1451 <main+0x311>
movl   $0x30,-0x1050(%rbp)
cmpl   $0x39,-0x1050(%rbp)
jg     1438 <main+0x2f8>
mov    -0x1034(%rbp),%eax
mov    %al,-0x14(%rbp)
mov    -0x1038(%rbp),%eax
mov    %al,-0x13(%rbp)
mov    -0x103c(%rbp),%eax
mov    %al,-0x12(%rbp)
mov    -0x1040(%rbp),%eax
mov    %al,-0x11(%rbp)
mov    -0x1044(%rbp),%eax
mov    %al,-0x10(%rbp)
mov    -0x1048(%rbp),%eax
mov    %al,-0xf(%rbp)
mov    -0x104c(%rbp),%eax
mov    %al,-0xe(%rbp)
mov    -0x1050(%rbp),%eax
mov    %al,-0xd(%rbp)
lea    -0x14(%rbp),%rdi
lea    -0x1020(%rbp),%rdx
mov    -0x1028(%rbp),%rcx
lea    -0x1020(%rbp),%rax
sub    %rax,%rcx
mov    $0x8,%esi
mov    $0x0,%al
call   1060 <exor_tores@plt>
cmp    $0x0,%eax
je     13fc <main+0x2bc>
mov    -0x1034(%rbp),%esi
mov    -0x1038(%rbp),%edx
mov    -0x103c(%rbp),%ecx
mov    -0x1040(%rbp),%r8d
mov    -0x1044(%rbp),%r9d
mov    -0x1048(%rbp),%ebx
mov    -0x104c(%rbp),%r11d
mov    -0x1050(%rbp),%r10d
lea    -0x1020(%rbp),%rax
lea    0xc1d(%rip),%rdi
mov    %ebx,(%rsp)
mov    %r11d,0x8(%rsp)
mov    %r10d,0x10(%rsp)
mov    %rax,0x18(%rsp)
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x14(%rbp),%rdi
lea    -0x1020(%rbp),%rdx
mov    -0x1028(%rbp),%rcx
lea    -0x1020(%rbp),%rax
sub    %rax,%rcx
mov    $0x8,%esi
mov    $0x0,%al
call   1050 <exor@plt>
mov    -0x1050(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1050(%rbp)
jmp    131b <main+0x1db>
jmp    143d <main+0x2fd>
mov    -0x104c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x104c(%rbp)
jmp    1304 <main+0x1c4>
jmp    1456 <main+0x316>
mov    -0x1048(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1048(%rbp)
jmp    12ed <main+0x1ad>
jmp    146f <main+0x32f>
mov    -0x1044(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1044(%rbp)
jmp    12d6 <main+0x196>
jmp    1488 <main+0x348>
mov    -0x1040(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1040(%rbp)
jmp    12bf <main+0x17f>
jmp    14a1 <main+0x361>
mov    -0x103c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x103c(%rbp)
jmp    12a8 <main+0x168>
jmp    14ba <main+0x37a>
mov    -0x1038(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1038(%rbp)
jmp    1291 <main+0x151>
jmp    14d3 <main+0x393>
mov    -0x1034(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1034(%rbp)
jmp    127a <main+0x13a>
xor    %eax,%eax
add    $0x1078,%rsp
pop    %rbx
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1038,%rsp
xor    %ebp,%ebp
lea    0x30(%rsp),%r15
mov    $0x100,%r14d
mov    $0x100,%edx
xor    %edi,%edi
mov    %r15,%rsi
xor    %eax,%eax
call   1050 <read@plt>
test   %eax,%eax
je     11c5 <main+0x75>
lea    0x1030(%rsp),%r12
mov    %r15,%rbx
xchg   %ax,%ax
cltq
add    %rax,%rbx
mov    %rbx,%rbp
sub    %r15,%rbp
mov    %r12,%rdx
sub    %rbx,%rdx
cmp    $0xf00,%rbp
cmovl  %r14,%rdx
xor    %edi,%edi
mov    %rbx,%rsi
xor    %eax,%eax
call   1050 <read@plt>
test   %eax,%eax
jne    1190 <main+0x40>
cmp    $0xfff,%rbp
jg     11e9 <main+0x99>
mov    $0x1000,%eax
sub    %rbp,%rax
lea    (%rsp,%rbp,1),%rdi
add    $0x30,%rdi
cmp    $0x2,%rax
mov    $0x1,%edx
cmovge %rax,%rdx
xor    %esi,%esi
call   1040 <memset@plt>
mov    %rbp,0x18(%rsp)
mov    $0x30,%r13d
lea    0x4(%rsp),%r15
jmp    120e <main+0xbe>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r13d
cmp    $0x3a,%r13d
je     139f <main+0x24f>
mov    $0x30,%r10d
jmp    122a <main+0xda>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r10d
cmp    $0x3a,%r10d
je     1200 <main+0xb0>
mov    $0x30,%eax
mov    %r10d,0x14(%rsp)
jmp    1248 <main+0xf8>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%eax
cmp    $0x3a,%eax
je     1220 <main+0xd0>
mov    $0x30,%edi
mov    %eax,0xc(%rsp)
jmp    1268 <main+0x118>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%edi
cmp    $0x3a,%edi
je     1240 <main+0xf0>
mov    $0x30,%r9d
mov    %edi,0x10(%rsp)
jmp    128a <main+0x13a>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r9d
cmp    $0x3a,%r9d
je     1260 <main+0x110>
mov    $0x30,%ecx
jmp    12a8 <main+0x158>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%ecx
cmp    $0x3a,%ecx
je     1280 <main+0x130>
mov    $0x30,%edx
mov    %rcx,0x20(%rsp)
jmp    12c8 <main+0x178>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%edx
cmp    $0x3a,%edx
je     12a0 <main+0x150>
mov    $0x30,%ebx
mov    0x18(%rsp),%r12
lea    0x30(%rsp),%rbp
mov    %rdx,0x28(%rsp)
jmp    1324 <main+0x1d4>
xchg   %ax,%ax
lea    0x4(%rsp),%r15
mov    %r15,%rdi
mov    $0x8,%esi
mov    %rbp,%rdx
mov    %r12d,%r14d
mov    0x18(%rsp),%r12
mov    %r12,%rcx
xor    %eax,%eax
call   1060 <exor@plt>
add    $0x1,%ebx
cmp    $0x3a,%ebx
mov    0x14(%rsp),%r10d
mov    0xc(%rsp),%eax
mov    0x10(%rsp),%edi
mov    %r14d,%r9d
mov    0x20(%rsp),%rcx
mov    0x28(%rsp),%rdx
je     12c0 <main+0x170>
mov    %r13b,0x4(%rsp)
mov    %r10b,0x5(%rsp)
mov    %al,0x6(%rsp)
mov    %dil,0x7(%rsp)
mov    %r9b,0x8(%rsp)
mov    %cl,0x9(%rsp)
mov    %dl,0xa(%rsp)
mov    %bl,0xb(%rsp)
mov    %r15,%rdi
mov    $0x8,%esi
mov    %r10d,%r14d
mov    %rdx,%r15
mov    %rbp,%rdx
mov    %r12,%rcx
xor    %eax,%eax
mov    %r9d,%r12d
call   1070 <exor_tores@plt>
test   %eax,%eax
je     12e0 <main+0x190>
lea    0xc8b(%rip),%rdi
mov    %r13d,%esi
mov    %r14d,%edx
mov    0xc(%rsp),%ecx
mov    0x10(%rsp),%r8d
mov    %r12d,%r9d
xor    %eax,%eax
push   %rbp
push   %rbx
push   %r15
push   0x38(%rsp)
call   1030 <printf@plt>
add    $0x20,%rsp
jmp    12e0 <main+0x190>
xor    %eax,%eax
add    $0x1038,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [47 x i8] c"Kulcs: [%c%c%c%c%c%c%c%c]\0ATiszta szoveg: [%s]\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [8 x i8]
%3 = alloca [4096 x i8]
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store i32 0, i32* %1
%15 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
store i8* %15, i8** %4
br label %16
16: ; preds = %37, %0
%17 = load i8*, i8** %4
%18 = load i8*, i8** %4
%19 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%20 = ptrtoint i8* %18 to i64
%21 = ptrtoint i8* %19 to i64
%22 = sub i64 %20, %21
%23 = add nsw i64 %22, 256
%24 = icmp slt i64 %23, 4096
br i1 %24, label %25, label %26
25: ; preds = %16
br label %33
26: ; preds = %16
%27 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%28 = getelementptr inbounds i8, i8* %27, i64 4096
%29 = load i8*, i8** %4
%30 = ptrtoint i8* %28 to i64
%31 = ptrtoint i8* %29 to i64
%32 = sub i64 %30, %31
br label %33
33: ; preds = %26, %25
%34 = phi i64 [ 256, %25 ], [ %32, %26 ]
%35 = call i32 (i32, i8*, i64, ...) bitcast (i32 (...)* @read to i32 (i32, i8*, i64, ...)*)(i32 0, i8* %17, i64 %34)
store i32 %35, i32* %5
%36 = icmp ne i32 %35, 0
br i1 %36, label %37, label %42
37: ; preds = %33
%38 = load i32, i32* %5
%39 = load i8*, i8** %4
%40 = sext i32 %38 to i64
%41 = getelementptr inbounds i8, i8* %39, i64 %40
store i8* %41, i8** %4
br label %16
42: ; preds = %33
store i32 0, i32* %6
br label %43
43: ; preds = %63, %42
%44 = load i32, i32* %6
%45 = sext i32 %44 to i64
%46 = load i8*, i8** %4
%47 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%48 = ptrtoint i8* %46 to i64
%49 = ptrtoint i8* %47 to i64
%50 = sub i64 %48, %49
%51 = sub nsw i64 4096, %50
%52 = icmp slt i64 %45, %51
br i1 %52, label %53, label %66
53: ; preds = %43
%54 = load i8*, i8** %4
%55 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%56 = ptrtoint i8* %54 to i64
%57 = ptrtoint i8* %55 to i64
%58 = sub i64 %56, %57
%59 = load i32, i32* %6
%60 = sext i32 %59 to i64
%61 = add nsw i64 %58, %60
%62 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 %61
store i8 0, i8* %62
br label %63
63: ; preds = %53
%64 = load i32, i32* %6
%65 = add nsw i32 %64, 1
store i32 %65, i32* %6
br label %43
66: ; preds = %43
store i32 48, i32* %7
br label %67
67: ; preds = %180, %66
%68 = load i32, i32* %7
%69 = icmp sle i32 %68, 57
br i1 %69, label %70, label %183
70: ; preds = %67
store i32 48, i32* %8
br label %71
71: ; preds = %176, %70
%72 = load i32, i32* %8
%73 = icmp sle i32 %72, 57
br i1 %73, label %74, label %179
74: ; preds = %71
store i32 48, i32* %9
br label %75
75: ; preds = %172, %74
%76 = load i32, i32* %9
%77 = icmp sle i32 %76, 57
br i1 %77, label %78, label %175
78: ; preds = %75
store i32 48, i32* %10
br label %79
79: ; preds = %168, %78
%80 = load i32, i32* %10
%81 = icmp sle i32 %80, 57
br i1 %81, label %82, label %171
82: ; preds = %79
store i32 48, i32* %11
br label %83
83: ; preds = %164, %82
%84 = load i32, i32* %11
%85 = icmp sle i32 %84, 57
br i1 %85, label %86, label %167
86: ; preds = %83
store i32 48, i32* %12
br label %87
87: ; preds = %160, %86
%88 = load i32, i32* %12
%89 = icmp sle i32 %88, 57
br i1 %89, label %90, label %163
90: ; preds = %87
store i32 48, i32* %13
br label %91
91: ; preds = %156, %90
%92 = load i32, i32* %13
%93 = icmp sle i32 %92, 57
br i1 %93, label %94, label %159
94: ; preds = %91
store i32 48, i32* %14
br label %95
95: ; preds = %152, %94
%96 = load i32, i32* %14
%97 = icmp sle i32 %96, 57
br i1 %97, label %98, label %155
98: ; preds = %95
%99 = load i32, i32* %7
%100 = trunc i32 %99 to i8
%101 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 0
store i8 %100, i8* %101
%102 = load i32, i32* %8
%103 = trunc i32 %102 to i8
%104 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 1
store i8 %103, i8* %104
%105 = load i32, i32* %9
%106 = trunc i32 %105 to i8
%107 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 2
store i8 %106, i8* %107
%108 = load i32, i32* %10
%109 = trunc i32 %108 to i8
%110 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 3
store i8 %109, i8* %110
%111 = load i32, i32* %11
%112 = trunc i32 %111 to i8
%113 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 4
store i8 %112, i8* %113
%114 = load i32, i32* %12
%115 = trunc i32 %114 to i8
%116 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 5
store i8 %115, i8* %116
%117 = load i32, i32* %13
%118 = trunc i32 %117 to i8
%119 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 6
store i8 %118, i8* %119
%120 = load i32, i32* %14
%121 = trunc i32 %120 to i8
%122 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 7
store i8 %121, i8* %122
%123 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 0
%124 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%125 = load i8*, i8** %4
%126 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%127 = ptrtoint i8* %125 to i64
%128 = ptrtoint i8* %126 to i64
%129 = sub i64 %127, %128
%130 = call i32 (i8*, i32, i8*, i64, ...) bitcast (i32 (...)* @exor_tores to i32 (i8*, i32, i8*, i64, ...)*)(i8* %123, i32 8, i8* %124, i64 %129)
%131 = icmp ne i32 %130, 0
br i1 %131, label %132, label %143
132: ; preds = %98
%133 = load i32, i32* %7
%134 = load i32, i32* %8
%135 = load i32, i32* %9
%136 = load i32, i32* %10
%137 = load i32, i32* %11
%138 = load i32, i32* %12
%139 = load i32, i32* %13
%140 = load i32, i32* %14
%141 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%142 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str, i64 0, i64 0), i32 %133, i32 %134, i32 %135, i32 %136, i32 %137, i32 %138, i32 %139, i32 %140, i8* %141)
br label %143
143: ; preds = %132, %98
%144 = getelementptr inbounds [8 x i8], [8 x i8]* %2, i64 0, i64 0
%145 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%146 = load i8*, i8** %4
%147 = getelementptr inbounds [4096 x i8], [4096 x i8]* %3, i64 0, i64 0
%148 = ptrtoint i8* %146 to i64
%149 = ptrtoint i8* %147 to i64
%150 = sub i64 %148, %149
%151 = call i32 (i8*, i32, i8*, i64, ...) bitcast (i32 (...)* @exor to i32 (i8*, i32, i8*, i64, ...)*)(i8* %144, i32 8, i8* %145, i64 %150)
br label %152
152: ; preds = %143
%153 = load i32, i32* %14
%154 = add nsw i32 %153, 1
store i32 %154, i32* %14
br label %95
155: ; preds = %95
br label %156
156: ; preds = %155
%157 = load i32, i32* %13
%158 = add nsw i32 %157, 1
store i32 %158, i32* %13
br label %91
159: ; preds = %91
br label %160
160: ; preds = %159
%161 = load i32, i32* %12
%162 = add nsw i32 %161, 1
store i32 %162, i32* %12
br label %87
163: ; preds = %87
br label %164
164: ; preds = %163
%165 = load i32, i32* %11
%166 = add nsw i32 %165, 1
store i32 %166, i32* %11
br label %83
167: ; preds = %83
br label %168
168: ; preds = %167
%169 = load i32, i32* %10
%170 = add nsw i32 %169, 1
store i32 %170, i32* %10
br label %79
171: ; preds = %79
br label %172
172: ; preds = %171
%173 = load i32, i32* %9
%174 = add nsw i32 %173, 1
store i32 %174, i32* %9
br label %75
175: ; preds = %75
br label %176
176: ; preds = %175
%177 = load i32, i32* %8
%178 = add nsw i32 %177, 1
store i32 %178, i32* %8
br label %71
179: ; preds = %71
br label %180
180: ; preds = %179
%181 = load i32, i32* %7
%182 = add nsw i32 %181, 1
store i32 %182, i32* %7
br label %67
183: ; preds = %67
ret i32 0
}

LLVM IR (-O2):
@.str = [47 x i8] c"Kulcs: [%c%c%c%c%c%c%c%c]\0ATiszta szoveg: [%s]\0A\00"
define i32 @main() {
%1 = alloca [8 x i8]
%2 = alloca [4096 x i8]
%3 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 0
%4 = getelementptr inbounds [4096 x i8], [4096 x i8]* %2, i64 0, i64 0
%5 = ptrtoint [4096 x i8]* %2 to i64
%6 = getelementptr inbounds [4096 x i8], [4096 x i8]* %2, i64 0, i64 4096
%7 = ptrtoint i8* %6 to i64
%8 = call i32 (i32, i8*, i64, ...) bitcast (i32 (...)* @read to i32 (i32, i8*, i64, ...)*)(i32 0, i8* %4, i64 256)
%9 = icmp eq i32 %8, 0
br i1 %9, label %12, label %17
10: ; preds = %17
%11 = icmp slt i64 %23, 4096
br i1 %11, label %12, label %29
12: ; preds = %0, %10
%13 = phi i64 [ %23, %10 ], [ 0, %0 ]
%14 = sub i64 4096, %13
%15 = getelementptr [4096 x i8], [4096 x i8]* %2, i64 0, i64 %13
%16 = call i64 @llvm.smax.i64(i64 %14, i64 1)
br label %29
17: ; preds = %0, %17
%18 = phi i32 [ %27, %17 ], [ %8, %0 ]
%19 = phi i8* [ %21, %17 ], [ %4, %0 ]
%20 = sext i32 %18 to i64
%21 = getelementptr inbounds i8, i8* %19, i64 %20
%22 = ptrtoint i8* %21 to i64
%23 = sub i64 %22, %5
%24 = icmp slt i64 %23, 3840
%25 = sub i64 %7, %22
%26 = select i1 %24, i64 256, i64 %25
%27 = call i32 (i32, i8*, i64, ...) bitcast (i32 (...)* @read to i32 (i32, i8*, i64, ...)*)(i32 0, i8* %21, i64 %26)
%28 = icmp eq i32 %27, 0
br i1 %28, label %10, label %17
29: ; preds = %12, %10
%30 = phi i64 [ %13, %12 ], [ %23, %10 ]
%31 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 1
%32 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 2
%33 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 3
%34 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 4
%35 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 5
%36 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 6
%37 = getelementptr inbounds [8 x i8], [8 x i8]* %1, i64 0, i64 7
br label %38
38: ; preds = %29, %45
%39 = phi i32 [ 48, %29 ], [ %46, %45 ]
%40 = trunc i32 %39 to i8
br label %42
41: ; preds = %45
ret i32 0
42: ; preds = %38, %51
%43 = phi i32 [ 48, %38 ], [ %52, %51 ]
%44 = trunc i32 %43 to i8
br label %48
45: ; preds = %51
%46 = add nuw nsw i32 %39, 1
%47 = icmp eq i32 %46, 58
br i1 %47, label %41, label %38
48: ; preds = %42, %57
%49 = phi i32 [ 48, %42 ], [ %58, %57 ]
%50 = trunc i32 %49 to i8
br label %54
51: ; preds = %57
%52 = add nuw nsw i32 %43, 1
%53 = icmp eq i32 %52, 58
br i1 %53, label %45, label %42
54: ; preds = %48, %63
%55 = phi i32 [ 48, %48 ], [ %64, %63 ]
%56 = trunc i32 %55 to i8
br label %60
57: ; preds = %63
%58 = add nuw nsw i32 %49, 1
%59 = icmp eq i32 %58, 58
br i1 %59, label %51, label %48
60: ; preds = %54, %69
%61 = phi i32 [ 48, %54 ], [ %70, %69 ]
%62 = trunc i32 %61 to i8
br label %66
63: ; preds = %69
%64 = add nuw nsw i32 %55, 1
%65 = icmp eq i32 %64, 58
br i1 %65, label %57, label %54
66: ; preds = %60, %75
%67 = phi i32 [ 48, %60 ], [ %76, %75 ]
%68 = trunc i32 %67 to i8
br label %72
69: ; preds = %75
%70 = add nuw nsw i32 %61, 1
%71 = icmp eq i32 %70, 58
br i1 %71, label %63, label %60
72: ; preds = %66, %78
%73 = phi i32 [ 48, %66 ], [ %79, %78 ]
%74 = trunc i32 %73 to i8
br label %81
75: ; preds = %78
%76 = add nuw nsw i32 %67, 1
%77 = icmp eq i32 %76, 58
br i1 %77, label %69, label %66
78: ; preds = %88
%79 = add nuw nsw i32 %73, 1
%80 = icmp eq i32 %79, 58
br i1 %80, label %75, label %72
81: ; preds = %72, %88
%82 = phi i32 [ 48, %72 ], [ %90, %88 ]
store i8 %40, i8* %3
store i8 %44, i8* %31
store i8 %50, i8* %32
store i8 %56, i8* %33
store i8 %62, i8* %34
store i8 %68, i8* %35
store i8 %74, i8* %36
%83 = trunc i32 %82 to i8
store i8 %83, i8* %37
%84 = call i32 (i8*, i32, i8*, i64, ...) bitcast (i32 (...)* @exor_tores to i32 (i8*, i32, i8*, i64, ...)*)(i8* %3, i32 8, i8* %4, i64 %30)
%85 = icmp eq i32 %84, 0
br i1 %85, label %88, label %86
86: ; preds = %81
%87 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str, i64 0, i64 0), i32 %39, i32 %43, i32 %49, i32 %55, i32 %61, i32 %67, i32 %73, i32 %82, i8* %4)
br label %88
88: ; preds = %86, %81
%89 = call i32 (i8*, i32, i8*, i64, ...) bitcast (i32 (...)* @exor to i32 (i8*, i32, i8*, i64, ...)*)(i8* %3, i32 8, i8* %4, i64 %30)
%90 = add nuw nsw i32 %82, 1
%91 = icmp eq i32 %90, 58
br i1 %91, label %78, label %81
}