#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 */
typedef int uInt;
typedef scalar_t__ length;
typedef unsigned char crc;

/* Variables and functions */
unsigned char *Z_NULL;
unsigned long crc32(unsigned long, unsigned char *, int);
int getchar();
int /*<<< orphan*/ putchar(unsigned char);
int main(void) {
  unsigned int i;
  unsigned char buf[500000];
  unsigned long crc;
  unsigned char c;
  int inchar;
  for (i = 8; i; i--) {
    inchar = getchar();
    c = (inchar & 0xffU);
    if (inchar != c)
      break;
    putchar(c);
  }
  if (inchar == c)
    for (;;) {
      unsigned long length;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[0] = c;
      length = c;
      length <<= 8;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[1] = c;
      length += c;
      length <<= 8;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[2] = c;
      length += c;
      length <<= 8;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[3] = c;
      length += c;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[4] = c;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[5] = c;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[6] = c;
      inchar = getchar();
      c = (inchar & 0xffU);
      if (inchar != c)
        break;
      buf[7] = c;
      if (buf[4] == 105 && buf[5] == 84 && buf[6] == 88 && buf[7] == 116) {
        if (length >= 500000 - 12)
          break;
        crc = crc32(0, Z_NULL, 0);
        for (i = 8; i < length + 12; i++) {
          inchar = getchar();
          c = (inchar & 0xffU);
          if (inchar != c)
            break;
          buf[i] = c;
        }
        if (inchar != c)
          break;
        crc = crc32(crc, buf + 4, (uInt)length + 4);
        for (;;) {
          if (((crc >> 24) & 0xffU) == buf[length + 8] &&
              ((crc >> 16) & 0xffU) == buf[length + 9] &&
              ((crc >> 8) & 0xffU) == buf[length + 10] &&
              ((crc)&0xffU) == buf[length + 11])
            break;
          length++;
          if (length >= 500000 - 12)
            break;
          inchar = getchar();
          c = (inchar & 0xffU);
          if (inchar != c)
            break;
          buf[length + 11] = c;
          crc = crc32(crc, buf + 7 + length, 1);
        }
        if (inchar != c)
          break;
        buf[0] = (unsigned char)((length >> 24) & 0xffU);
        buf[1] = (unsigned char)((length >> 16) & 0xffU);
        buf[2] = (unsigned char)((length >> 8) & 0xffU);
        buf[3] = (unsigned char)((length)&0xffU);
        for (i = 0; i < length + 12; i++)
          putchar(buf[i]);
      } else {
        if (inchar != c)
          break;
        for (i = 0; i < 8; i++)
          putchar(buf[i]);
        for (i = 8; i < length + 12; i++) {
          inchar = getchar();
          c = (inchar & 0xffU);
          if (inchar != c)
            break;
          putchar(c);
        }
        if (inchar != c) {
          break;
        }
        if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
          break;
      }
      if (inchar != c)
        break;
      if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
        break;
    }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x7a150,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x8,-0x8(%rbp)
cmpl   $0x0,-0x8(%rbp)
je     11a5 <main+0x75>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     118b <main+0x5b>
jmp    11a5 <main+0x75>
movzbl -0x7a139(%rbp),%edi
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
jmp    1149 <main+0x19>
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
jne    190d <main+0x7dd>
jmp    11bf <main+0x8f>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     11f7 <main+0xc7>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a130(%rbp)
movzbl -0x7a139(%rbp),%eax
mov    %rax,-0x7a148(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x8,%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     125b <main+0x12b>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12f(%rbp)
movzbl -0x7a139(%rbp),%eax
add    -0x7a148(%rbp),%rax
mov    %rax,-0x7a148(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x8,%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     12c6 <main+0x196>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12e(%rbp)
movzbl -0x7a139(%rbp),%eax
add    -0x7a148(%rbp),%rax
mov    %rax,-0x7a148(%rbp)
mov    -0x7a148(%rbp),%rax
shl    $0x8,%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     1331 <main+0x201>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12d(%rbp)
movzbl -0x7a139(%rbp),%eax
add    -0x7a148(%rbp),%rax
mov    %rax,-0x7a148(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     138a <main+0x25a>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12c(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     13ce <main+0x29e>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12b(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     1412 <main+0x2e2>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a12a(%rbp)
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     1456 <main+0x326>
jmp    1908 <main+0x7d8>
mov    -0x7a139(%rbp),%al
mov    %al,-0x7a129(%rbp)
movzbl -0x7a12c(%rbp),%eax
cmp    $0x69,%eax
jne    1787 <main+0x657>
movzbl -0x7a12b(%rbp),%eax
cmp    $0x54,%eax
jne    1787 <main+0x657>
movzbl -0x7a12a(%rbp),%eax
cmp    $0x58,%eax
jne    1787 <main+0x657>
movzbl -0x7a129(%rbp),%eax
cmp    $0x74,%eax
jne    1787 <main+0x657>
cmpq   $0x7a114,-0x7a148(%rbp)
jb     14b8 <main+0x388>
jmp    1908 <main+0x7d8>
mov    0x2b21(%rip),%rax
mov    (%rax),%rsi
xor    %eax,%eax
mov    %eax,%edi
xor    %edx,%edx
call   1040 <crc32@plt>
mov    %rax,-0x7a138(%rbp)
movl   $0x8,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x7a148(%rbp),%rcx
add    $0xc,%rcx
cmp    %rcx,%rax
jae    1548 <main+0x418>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     152a <main+0x3fa>
jmp    1548 <main+0x418>
mov    -0x7a139(%rbp),%cl
mov    -0x8(%rbp),%eax
mov    %cl,-0x7a130(%rbp,%rax,1)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14db <main+0x3ab>
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     1562 <main+0x432>
jmp    1908 <main+0x7d8>
mov    -0x7a138(%rbp),%rdi
lea    -0x7a130(%rbp),%rsi
add    $0x4,%rsi
mov    -0x7a148(%rbp),%rax
mov    %eax,%edx
add    $0x4,%edx
call   1040 <crc32@plt>
mov    %rax,-0x7a138(%rbp)
mov    -0x7a138(%rbp),%rax
shr    $0x18,%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a128(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    1631 <main+0x501>
mov    -0x7a138(%rbp),%rax
shr    $0x10,%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a127(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    1631 <main+0x501>
mov    -0x7a138(%rbp),%rax
shr    $0x8,%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a126(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    1631 <main+0x501>
mov    -0x7a138(%rbp),%rax
and    $0xff,%rax
mov    -0x7a148(%rbp),%rcx
movzbl -0x7a125(%rbp,%rcx,1),%ecx
ff
cmp    %rcx,%rax
jne    1631 <main+0x501>
jmp    16d4 <main+0x5a4>
mov    -0x7a148(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x7a148(%rbp)
cmpq   $0x7a114,-0x7a148(%rbp)
jb     1659 <main+0x529>
jmp    16d4 <main+0x5a4>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     1691 <main+0x561>
jmp    16d4 <main+0x5a4>
mov    -0x7a139(%rbp),%cl
mov    -0x7a148(%rbp),%rax
mov    %cl,-0x7a125(%rbp,%rax,1)
mov    -0x7a138(%rbp),%rdi
lea    -0x7a130(%rbp),%rsi
add    $0x7,%rsi
add    -0x7a148(%rbp),%rsi
mov    $0x1,%edx
call   1040 <crc32@plt>
mov    %rax,-0x7a138(%rbp)
jmp    158c <main+0x45c>
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     16ee <main+0x5be>
jmp    1908 <main+0x7d8>
mov    -0x7a148(%rbp),%rax
shr    $0x18,%rax
and    $0xff,%rax
mov    %al,-0x7a130(%rbp)
mov    -0x7a148(%rbp),%rax
shr    $0x10,%rax
and    $0xff,%rax
mov    %al,-0x7a12f(%rbp)
mov    -0x7a148(%rbp),%rax
shr    $0x8,%rax
and    $0xff,%rax
mov    %al,-0x7a12e(%rbp)
mov    -0x7a148(%rbp),%rax
and    $0xff,%rax
mov    %al,-0x7a12d(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x7a148(%rbp),%rcx
add    $0xc,%rcx
cmp    %rcx,%rax
jae    1782 <main+0x652>
mov    -0x8(%rbp),%eax
movzbl -0x7a130(%rbp,%rax,1),%edi
ff
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    174d <main+0x61d>
jmp    18a4 <main+0x774>
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     17a1 <main+0x671>
jmp    1908 <main+0x7d8>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jae    17d0 <main+0x6a0>
mov    -0x8(%rbp),%eax
movzbl -0x7a130(%rbp,%rax,1),%edi
ff
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    17a8 <main+0x678>
movl   $0x8,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x7a148(%rbp),%rcx
add    $0xc,%rcx
cmp    %rcx,%rax
jae    1840 <main+0x710>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %eax,-0x7a140(%rbp)
mov    -0x7a140(%rbp),%eax
and    $0xff,%eax
mov    %al,-0x7a139(%rbp)
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     1826 <main+0x6f6>
jmp    1840 <main+0x710>
movzbl -0x7a139(%rbp),%edi
call   1030 <putchar@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    17d7 <main+0x6a7>
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     185a <main+0x72a>
jmp    1908 <main+0x7d8>
movzbl -0x7a12c(%rbp),%eax
cmp    $0x49,%eax
jne    189f <main+0x76f>
movzbl -0x7a12b(%rbp),%eax
cmp    $0x45,%eax
jne    189f <main+0x76f>
movzbl -0x7a12a(%rbp),%eax
cmp    $0x4e,%eax
jne    189f <main+0x76f>
movzbl -0x7a129(%rbp),%eax
cmp    $0x44,%eax
jne    189f <main+0x76f>
jmp    1908 <main+0x7d8>
jmp    18a4 <main+0x774>
mov    -0x7a140(%rbp),%eax
movzbl -0x7a139(%rbp),%ecx
cmp    %ecx,%eax
je     18be <main+0x78e>
jmp    1908 <main+0x7d8>
movzbl -0x7a12c(%rbp),%eax
cmp    $0x49,%eax
jne    1903 <main+0x7d3>
movzbl -0x7a12b(%rbp),%eax
cmp    $0x45,%eax
jne    1903 <main+0x7d3>
movzbl -0x7a12a(%rbp),%eax
cmp    $0x4e,%eax
jne    1903 <main+0x7d3>
movzbl -0x7a129(%rbp),%eax
cmp    $0x44,%eax
jne    1903 <main+0x7d3>
jmp    1908 <main+0x7d8>
jmp    11bf <main+0x8f>
jmp    190d <main+0x7dd>
xor    %eax,%eax
add    $0x7a150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x7a128,%rsp
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
lea    0x8(%rsp),%r13
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %eax,%r12d
mov    %r12b,(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %eax,%r15d
mov    %r15b,0x1(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %eax,%ebp
mov    %bpl,0x2(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %rax,%rbx
mov    %al,0x3(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %al,0x4(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %al,0x5(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %al,0x6(%rsp)
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
shl    $0x18,%r12d
movzbl %r15b,%ecx
shl    $0x10,%ecx
or     %r12d,%ecx
shl    $0x8,%ebp
movzwl %bp,%edx
or     %ecx,%edx
or     %edx,%ebx
mov    %al,0x7(%rsp)
cmp    $0x74,%eax
jne    13f5 <main+0x2c5>
cmpb   $0x69,0x4(%rsp)
jne    13f5 <main+0x2c5>
cmpb   $0x54,0x5(%rsp)
jne    13f5 <main+0x2c5>
cmpb   $0x58,0x6(%rsp)
jne    13f5 <main+0x2c5>
cmp    $0x7a113,%ebx
ja     14f7 <main+0x3c7>
mov    %rbx,%r14
mov    0x2cb5(%rip),%rax
mov    (%rax),%rsi
xor    %edi,%edi
xor    %edx,%edx
call   1040 <crc32@plt>
mov    %rax,%r15
mov    %rbx,%rax
lea    0xc(%r14),%r12
mov    $0x8,%ebx
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %eax,%ebp
mov    %bpl,(%rsp,%rbx,1)
add    $0x1,%ebx
cmp    %rbx,%r12
ja     1346 <main+0x216>
lea    0x4(%r14),%edx
mov    %r15,%rdi
lea    0x4(%rsp),%rsi
call   1040 <crc32@plt>
mov    %r14,%rcx
mov    %rax,%r14
mov    %r14,%rax
shr    $0x18,%rax
cmp    %al,0x8(%rsp,%rcx,1)
jne    13af <main+0x27f>
mov    %r14,%rax
shr    $0x10,%rax
cmp    %al,0x9(%rsp,%rcx,1)
jne    13af <main+0x27f>
mov    %r14,%rax
shr    $0x8,%rax
cmp    %al,0xa(%rsp,%rcx,1)
jne    13af <main+0x27f>
cmp    %r14b,0xb(%rsp,%rcx,1)
je     148c <main+0x35c>
cmp    $0x7a112,%rcx
ja     1487 <main+0x357>
mov    %rcx,%rbx
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
mov    %eax,%ebp
mov    %bpl,0xc(%rsp,%rbx,1)
lea    (%rbx,%r13,1),%rsi
mov    %r14,%rdi
mov    $0x1,%edx
call   1040 <crc32@plt>
mov    %rbx,%rcx
mov    %rax,%r14
add    $0x1,%rcx
jmp    137d <main+0x24d>
movzbl (%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x1(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x2(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x3(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x4(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x5(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x6(%rsp),%edi
call   1030 <putchar@plt>
movzbl 0x7(%rsp),%edi
call   1030 <putchar@plt>
mov    %rbx,%rbp
add    $0xc,%rbp
mov    $0x9,%ebx
xor    %eax,%eax
call   1050 <getchar@plt>
cmp    $0xff,%eax
ja     14f7 <main+0x3c7>
movzbl %al,%edi
call   1030 <putchar@plt>
mov    %ebx,%eax
add    $0x1,%ebx
cmp    %rax,%rbp
ja     1450 <main+0x320>
movd   0x4(%rsp),%xmm0
movd   %xmm0,%eax
cmp    $0x444e4549,%eax
jne    14e2 <main+0x3b2>
jmp    14f7 <main+0x3c7>
mov    $0x7a114,%ecx
movb   $0x0,(%rsp)
mov    %rcx,%rax
shr    $0x10,%rax
mov    %al,0x1(%rsp)
mov    %ch,0x2(%rsp)
mov    %cl,0x3(%rsp)
add    $0xc,%rcx
xor    %edi,%edi
mov    %rcx,%r14
call   1030 <putchar@plt>
mov    %r14,%rax
cmp    $0x2,%r14
jb     14da <main+0x3aa>
mov    $0x1,%eax
mov    $0x2,%ebx
movzbl (%rsp,%rax,1),%edi
call   1030 <putchar@plt>
mov    %r14,%rcx
mov    %ebx,%eax
add    $0x1,%ebx
cmp    %rax,%r14
ja     14c4 <main+0x394>
cmp    $0xff,%ebp
ja     14f7 <main+0x3c7>
movd   0x4(%rsp),%xmm0
movd   %xmm0,%eax
cmp    $0x444e4549,%eax
jne    1216 <main+0xe6>
xor    %eax,%eax
add    $0x7a128,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@Z_NULL = global i8* null
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca [500000 x i8]
%4 = alloca i64
%5 = alloca i8
%6 = alloca i32
%7 = alloca i64
store i32 0, i32* %1
store i32 8, i32* %2
br label %8
8: ; preds = %24, %0
%9 = load i32, i32* %2
%10 = icmp ne i32 %9, 0
br i1 %10, label %11, label %27
11: ; preds = %8
%12 = call i32 (...) @getchar()
store i32 %12, i32* %6
%13 = load i32, i32* %6
%14 = and i32 %13, 255
%15 = trunc i32 %14 to i8
store i8 %15, i8* %5
%16 = load i32, i32* %6
%17 = load i8, i8* %5
%18 = zext i8 %17 to i32
%19 = icmp ne i32 %16, %18
br i1 %19, label %20, label %21
20: ; preds = %11
br label %27
21: ; preds = %11
%22 = load i8, i8* %5
%23 = call i32 @putchar(i8 zeroext %22)
br label %24
24: ; preds = %21
%25 = load i32, i32* %2
%26 = add i32 %25, -1
store i32 %26, i32* %2
br label %8
27: ; preds = %20, %8
%28 = load i32, i32* %6
%29 = load i8, i8* %5
%30 = zext i8 %29 to i32
%31 = icmp eq i32 %28, %30
br i1 %31, label %32, label %422
32: ; preds = %27
br label %33
33: ; preds = %420, %32
%34 = call i32 (...) @getchar()
store i32 %34, i32* %6
%35 = load i32, i32* %6
%36 = and i32 %35, 255
%37 = trunc i32 %36 to i8
store i8 %37, i8* %5
%38 = load i32, i32* %6
%39 = load i8, i8* %5
%40 = zext i8 %39 to i32
%41 = icmp ne i32 %38, %40
br i1 %41, label %42, label %43
42: ; preds = %33
br label %421
43: ; preds = %33
%44 = load i8, i8* %5
%45 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 0
store i8 %44, i8* %45
%46 = load i8, i8* %5
%47 = zext i8 %46 to i64
store i64 %47, i64* %7
%48 = load i64, i64* %7
%49 = shl i64 %48, 8
store i64 %49, i64* %7
%50 = call i32 (...) @getchar()
store i32 %50, i32* %6
%51 = load i32, i32* %6
%52 = and i32 %51, 255
%53 = trunc i32 %52 to i8
store i8 %53, i8* %5
%54 = load i32, i32* %6
%55 = load i8, i8* %5
%56 = zext i8 %55 to i32
%57 = icmp ne i32 %54, %56
br i1 %57, label %58, label %59
58: ; preds = %43
br label %421
59: ; preds = %43
%60 = load i8, i8* %5
%61 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 1
store i8 %60, i8* %61
%62 = load i8, i8* %5
%63 = zext i8 %62 to i64
%64 = load i64, i64* %7
%65 = add i64 %64, %63
store i64 %65, i64* %7
%66 = load i64, i64* %7
%67 = shl i64 %66, 8
store i64 %67, i64* %7
%68 = call i32 (...) @getchar()
store i32 %68, i32* %6
%69 = load i32, i32* %6
%70 = and i32 %69, 255
%71 = trunc i32 %70 to i8
store i8 %71, i8* %5
%72 = load i32, i32* %6
%73 = load i8, i8* %5
%74 = zext i8 %73 to i32
%75 = icmp ne i32 %72, %74
br i1 %75, label %76, label %77
76: ; preds = %59
br label %421
77: ; preds = %59
%78 = load i8, i8* %5
%79 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 2
store i8 %78, i8* %79
%80 = load i8, i8* %5
%81 = zext i8 %80 to i64
%82 = load i64, i64* %7
%83 = add i64 %82, %81
store i64 %83, i64* %7
%84 = load i64, i64* %7
%85 = shl i64 %84, 8
store i64 %85, i64* %7
%86 = call i32 (...) @getchar()
store i32 %86, i32* %6
%87 = load i32, i32* %6
%88 = and i32 %87, 255
%89 = trunc i32 %88 to i8
store i8 %89, i8* %5
%90 = load i32, i32* %6
%91 = load i8, i8* %5
%92 = zext i8 %91 to i32
%93 = icmp ne i32 %90, %92
br i1 %93, label %94, label %95
94: ; preds = %77
br label %421
95: ; preds = %77
%96 = load i8, i8* %5
%97 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 3
store i8 %96, i8* %97
%98 = load i8, i8* %5
%99 = zext i8 %98 to i64
%100 = load i64, i64* %7
%101 = add i64 %100, %99
store i64 %101, i64* %7
%102 = call i32 (...) @getchar()
store i32 %102, i32* %6
%103 = load i32, i32* %6
%104 = and i32 %103, 255
%105 = trunc i32 %104 to i8
store i8 %105, i8* %5
%106 = load i32, i32* %6
%107 = load i8, i8* %5
%108 = zext i8 %107 to i32
%109 = icmp ne i32 %106, %108
br i1 %109, label %110, label %111
110: ; preds = %95
br label %421
111: ; preds = %95
%112 = load i8, i8* %5
%113 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 4
store i8 %112, i8* %113
%114 = call i32 (...) @getchar()
store i32 %114, i32* %6
%115 = load i32, i32* %6
%116 = and i32 %115, 255
%117 = trunc i32 %116 to i8
store i8 %117, i8* %5
%118 = load i32, i32* %6
%119 = load i8, i8* %5
%120 = zext i8 %119 to i32
%121 = icmp ne i32 %118, %120
br i1 %121, label %122, label %123
122: ; preds = %111
br label %421
123: ; preds = %111
%124 = load i8, i8* %5
%125 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 5
store i8 %124, i8* %125
%126 = call i32 (...) @getchar()
store i32 %126, i32* %6
%127 = load i32, i32* %6
%128 = and i32 %127, 255
%129 = trunc i32 %128 to i8
store i8 %129, i8* %5
%130 = load i32, i32* %6
%131 = load i8, i8* %5
%132 = zext i8 %131 to i32
%133 = icmp ne i32 %130, %132
br i1 %133, label %134, label %135
134: ; preds = %123
br label %421
135: ; preds = %123
%136 = load i8, i8* %5
%137 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 6
store i8 %136, i8* %137
%138 = call i32 (...) @getchar()
store i32 %138, i32* %6
%139 = load i32, i32* %6
%140 = and i32 %139, 255
%141 = trunc i32 %140 to i8
store i8 %141, i8* %5
%142 = load i32, i32* %6
%143 = load i8, i8* %5
%144 = zext i8 %143 to i32
%145 = icmp ne i32 %142, %144
br i1 %145, label %146, label %147
146: ; preds = %135
br label %421
147: ; preds = %135
%148 = load i8, i8* %5
%149 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 7
store i8 %148, i8* %149
%150 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 4
%151 = load i8, i8* %150
%152 = zext i8 %151 to i32
%153 = icmp eq i32 %152, 105
br i1 %153, label %154, label %323
154: ; preds = %147
%155 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 5
%156 = load i8, i8* %155
%157 = zext i8 %156 to i32
%158 = icmp eq i32 %157, 84
br i1 %158, label %159, label %323
159: ; preds = %154
%160 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 6
%161 = load i8, i8* %160
%162 = zext i8 %161 to i32
%163 = icmp eq i32 %162, 88
br i1 %163, label %164, label %323
164: ; preds = %159
%165 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 7
%166 = load i8, i8* %165
%167 = zext i8 %166 to i32
%168 = icmp eq i32 %167, 116
br i1 %168, label %169, label %323
169: ; preds = %164
%170 = load i64, i64* %7
%171 = icmp uge i64 %170, 499988
br i1 %171, label %172, label %173
172: ; preds = %169
br label %421
173: ; preds = %169
%174 = load i8*, i8** @Z_NULL
%175 = call i64 @crc32(i64 0, i8* %174, i32 0)
store i64 %175, i64* %4
store i32 8, i32* %2
br label %176
176: ; preds = %197, %173
%177 = load i32, i32* %2
%178 = zext i32 %177 to i64
%179 = load i64, i64* %7
%180 = add i64 %179, 12
%181 = icmp ult i64 %178, %180
br i1 %181, label %182, label %200
182: ; preds = %176
%183 = call i32 (...) @getchar()
store i32 %183, i32* %6
%184 = load i32, i32* %6
%185 = and i32 %184, 255
%186 = trunc i32 %185 to i8
store i8 %186, i8* %5
%187 = load i32, i32* %6
%188 = load i8, i8* %5
%189 = zext i8 %188 to i32
%190 = icmp ne i32 %187, %189
br i1 %190, label %191, label %192
191: ; preds = %182
br label %200
192: ; preds = %182
%193 = load i8, i8* %5
%194 = load i32, i32* %2
%195 = zext i32 %194 to i64
%196 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %195
store i8 %193, i8* %196
br label %197
197: ; preds = %192
%198 = load i32, i32* %2
%199 = add i32 %198, 1
store i32 %199, i32* %2
br label %176
200: ; preds = %191, %176
%201 = load i32, i32* %6
%202 = load i8, i8* %5
%203 = zext i8 %202 to i32
%204 = icmp ne i32 %201, %203
br i1 %204, label %205, label %206
205: ; preds = %200
br label %421
206: ; preds = %200
%207 = load i64, i64* %4
%208 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 0
%209 = getelementptr inbounds i8, i8* %208, i64 4
%210 = load i64, i64* %7
%211 = trunc i64 %210 to i32
%212 = add nsw i32 %211, 4
%213 = call i64 @crc32(i64 %207, i8* %209, i32 %212)
store i64 %213, i64* %4
br label %214
214: ; preds = %270, %206
%215 = load i64, i64* %4
%216 = lshr i64 %215, 24
%217 = and i64 %216, 255
%218 = load i64, i64* %7
%219 = add i64 %218, 8
%220 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %219
%221 = load i8, i8* %220
%222 = zext i8 %221 to i64
%223 = icmp eq i64 %217, %222
br i1 %223, label %224, label %254
224: ; preds = %214
%225 = load i64, i64* %4
%226 = lshr i64 %225, 16
%227 = and i64 %226, 255
%228 = load i64, i64* %7
%229 = add i64 %228, 9
%230 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %229
%231 = load i8, i8* %230
%232 = zext i8 %231 to i64
%233 = icmp eq i64 %227, %232
br i1 %233, label %234, label %254
234: ; preds = %224
%235 = load i64, i64* %4
%236 = lshr i64 %235, 8
%237 = and i64 %236, 255
%238 = load i64, i64* %7
%239 = add i64 %238, 10
%240 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %239
%241 = load i8, i8* %240
%242 = zext i8 %241 to i64
%243 = icmp eq i64 %237, %242
br i1 %243, label %244, label %254
244: ; preds = %234
%245 = load i64, i64* %4
%246 = and i64 %245, 255
%247 = load i64, i64* %7
%248 = add i64 %247, 11
%249 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %248
%250 = load i8, i8* %249
%251 = zext i8 %250 to i64
%252 = icmp eq i64 %246, %251
br i1 %252, label %253, label %254
253: ; preds = %244
br label %281
254: ; preds = %244, %234, %224, %214
%255 = load i64, i64* %7
%256 = add i64 %255, 1
store i64 %256, i64* %7
%257 = load i64, i64* %7
%258 = icmp uge i64 %257, 499988
br i1 %258, label %259, label %260
259: ; preds = %254
br label %281
260: ; preds = %254
%261 = call i32 (...) @getchar()
store i32 %261, i32* %6
%262 = load i32, i32* %6
%263 = and i32 %262, 255
%264 = trunc i32 %263 to i8
store i8 %264, i8* %5
%265 = load i32, i32* %6
%266 = load i8, i8* %5
%267 = zext i8 %266 to i32
%268 = icmp ne i32 %265, %267
br i1 %268, label %269, label %270
269: ; preds = %260
br label %281
270: ; preds = %260
%271 = load i8, i8* %5
%272 = load i64, i64* %7
%273 = add i64 %272, 11
%274 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %273
store i8 %271, i8* %274
%275 = load i64, i64* %4
%276 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 0
%277 = getelementptr inbounds i8, i8* %276, i64 7
%278 = load i64, i64* %7
%279 = getelementptr inbounds i8, i8* %277, i64 %278
%280 = call i64 @crc32(i64 %275, i8* %279, i32 1)
store i64 %280, i64* %4
br label %214
281: ; preds = %269, %259, %253
%282 = load i32, i32* %6
%283 = load i8, i8* %5
%284 = zext i8 %283 to i32
%285 = icmp ne i32 %282, %284
br i1 %285, label %286, label %287
286: ; preds = %281
br label %421
287: ; preds = %281
%288 = load i64, i64* %7
%289 = lshr i64 %288, 24
%290 = and i64 %289, 255
%291 = trunc i64 %290 to i8
%292 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 0
store i8 %291, i8* %292
%293 = load i64, i64* %7
%294 = lshr i64 %293, 16
%295 = and i64 %294, 255
%296 = trunc i64 %295 to i8
%297 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 1
store i8 %296, i8* %297
%298 = load i64, i64* %7
%299 = lshr i64 %298, 8
%300 = and i64 %299, 255
%301 = trunc i64 %300 to i8
%302 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 2
store i8 %301, i8* %302
%303 = load i64, i64* %7
%304 = and i64 %303, 255
%305 = trunc i64 %304 to i8
%306 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 3
store i8 %305, i8* %306
store i32 0, i32* %2
br label %307
307: ; preds = %319, %287
%308 = load i32, i32* %2
%309 = zext i32 %308 to i64
%310 = load i64, i64* %7
%311 = add i64 %310, 12
%312 = icmp ult i64 %309, %311
br i1 %312, label %313, label %322
313: ; preds = %307
%314 = load i32, i32* %2
%315 = zext i32 %314 to i64
%316 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %315
%317 = load i8, i8* %316
%318 = call i32 @putchar(i8 zeroext %317)
br label %319
319: ; preds = %313
%320 = load i32, i32* %2
%321 = add i32 %320, 1
store i32 %321, i32* %2
br label %307
322: ; preds = %307
br label %393
323: ; preds = %164, %159, %154, %147
%324 = load i32, i32* %6
%325 = load i8, i8* %5
%326 = zext i8 %325 to i32
%327 = icmp ne i32 %324, %326
br i1 %327, label %328, label %329
328: ; preds = %323
br label %421
329: ; preds = %323
store i32 0, i32* %2
br label %330
330: ; preds = %339, %329
%331 = load i32, i32* %2
%332 = icmp ult i32 %331, 8
br i1 %332, label %333, label %342
333: ; preds = %330
%334 = load i32, i32* %2
%335 = zext i32 %334 to i64
%336 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 %335
%337 = load i8, i8* %336
%338 = call i32 @putchar(i8 zeroext %337)
br label %339
339: ; preds = %333
%340 = load i32, i32* %2
%341 = add i32 %340, 1
store i32 %341, i32* %2
br label %330
342: ; preds = %330
store i32 8, i32* %2
br label %343
343: ; preds = %362, %342
%344 = load i32, i32* %2
%345 = zext i32 %344 to i64
%346 = load i64, i64* %7
%347 = add i64 %346, 12
%348 = icmp ult i64 %345, %347
br i1 %348, label %349, label %365
349: ; preds = %343
%350 = call i32 (...) @getchar()
store i32 %350, i32* %6
%351 = load i32, i32* %6
%352 = and i32 %351, 255
%353 = trunc i32 %352 to i8
store i8 %353, i8* %5
%354 = load i32, i32* %6
%355 = load i8, i8* %5
%356 = zext i8 %355 to i32
%357 = icmp ne i32 %354, %356
br i1 %357, label %358, label %359
358: ; preds = %349
br label %365
359: ; preds = %349
%360 = load i8, i8* %5
%361 = call i32 @putchar(i8 zeroext %360)
br label %362
362: ; preds = %359
%363 = load i32, i32* %2
%364 = add i32 %363, 1
store i32 %364, i32* %2
br label %343
365: ; preds = %358, %343
%366 = load i32, i32* %6
%367 = load i8, i8* %5
%368 = zext i8 %367 to i32
%369 = icmp ne i32 %366, %368
br i1 %369, label %370, label %371
370: ; preds = %365
br label %421
371: ; preds = %365
%372 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 4
%373 = load i8, i8* %372
%374 = zext i8 %373 to i32
%375 = icmp eq i32 %374, 73
br i1 %375, label %376, label %392
376: ; preds = %371
%377 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 5
%378 = load i8, i8* %377
%379 = zext i8 %378 to i32
%380 = icmp eq i32 %379, 69
br i1 %380, label %381, label %392
381: ; preds = %376
%382 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 6
%383 = load i8, i8* %382
%384 = zext i8 %383 to i32
%385 = icmp eq i32 %384, 78
br i1 %385, label %386, label %392
386: ; preds = %381
%387 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 7
%388 = load i8, i8* %387
%389 = zext i8 %388 to i32
%390 = icmp eq i32 %389, 68
br i1 %390, label %391, label %392
391: ; preds = %386
br label %421
392: ; preds = %386, %381, %376, %371
br label %393
393: ; preds = %392, %322
%394 = load i32, i32* %6
%395 = load i8, i8* %5
%396 = zext i8 %395 to i32
%397 = icmp ne i32 %394, %396
br i1 %397, label %398, label %399
398: ; preds = %393
br label %421
399: ; preds = %393
%400 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 4
%401 = load i8, i8* %400
%402 = zext i8 %401 to i32
%403 = icmp eq i32 %402, 73
br i1 %403, label %404, label %420
404: ; preds = %399
%405 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 5
%406 = load i8, i8* %405
%407 = zext i8 %406 to i32
%408 = icmp eq i32 %407, 69
br i1 %408, label %409, label %420
409: ; preds = %404
%410 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 6
%411 = load i8, i8* %410
%412 = zext i8 %411 to i32
%413 = icmp eq i32 %412, 78
br i1 %413, label %414, label %420
414: ; preds = %409
%415 = getelementptr inbounds [500000 x i8], [500000 x i8]* %3, i64 0, i64 7
%416 = load i8, i8* %415
%417 = zext i8 %416 to i32
%418 = icmp eq i32 %417, 68
br i1 %418, label %419, label %420
419: ; preds = %414
br label %421
420: ; preds = %414, %409, %404, %399
br label %33
421: ; preds = %419, %398, %391, %370, %328, %286, %205, %172, %146, %134, %122, %110, %94, %76, %58, %42
br label %422
422: ; preds = %421, %27
ret i32 0
}

LLVM IR (-O2):
@Z_NULL = global i8* null
define i32 @main() {
%1 = alloca [500000 x i8]
%2 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 0
%3 = tail call i32 (...) @getchar()
%4 = icmp ult i32 %3, 256
br i1 %4, label %5, label %224
5: ; preds = %0
%6 = trunc i32 %3 to i8
%7 = tail call i32 @putchar(i8 zeroext %6)
%8 = tail call i32 (...) @getchar()
%9 = icmp ult i32 %8, 256
br i1 %9, label %10, label %224
10: ; preds = %5
%11 = trunc i32 %8 to i8
%12 = tail call i32 @putchar(i8 zeroext %11)
%13 = tail call i32 (...) @getchar()
%14 = icmp ult i32 %13, 256
br i1 %14, label %15, label %224
15: ; preds = %10
%16 = trunc i32 %13 to i8
%17 = tail call i32 @putchar(i8 zeroext %16)
%18 = tail call i32 (...) @getchar()
%19 = icmp ult i32 %18, 256
br i1 %19, label %20, label %224
20: ; preds = %15
%21 = trunc i32 %18 to i8
%22 = tail call i32 @putchar(i8 zeroext %21)
%23 = tail call i32 (...) @getchar()
%24 = icmp ult i32 %23, 256
br i1 %24, label %25, label %224
25: ; preds = %20
%26 = trunc i32 %23 to i8
%27 = tail call i32 @putchar(i8 zeroext %26)
%28 = tail call i32 (...) @getchar()
%29 = icmp ult i32 %28, 256
br i1 %29, label %30, label %224
30: ; preds = %25
%31 = trunc i32 %28 to i8
%32 = tail call i32 @putchar(i8 zeroext %31)
%33 = tail call i32 (...) @getchar()
%34 = icmp ult i32 %33, 256
br i1 %34, label %35, label %224
35: ; preds = %30
%36 = trunc i32 %33 to i8
%37 = tail call i32 @putchar(i8 zeroext %36)
%38 = tail call i32 (...) @getchar()
%39 = icmp ult i32 %38, 256
br i1 %39, label %40, label %224
40: ; preds = %35
%41 = trunc i32 %38 to i8
%42 = tail call i32 @putchar(i8 zeroext %41)
%43 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 1
%44 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 2
%45 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 3
%46 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 4
%47 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 5
%48 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 6
%49 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 7
%50 = bitcast i8* %46 to <4 x i8>*
%51 = bitcast i8* %46 to <4 x i8>*
br label %52
52: ; preds = %40, %219
%53 = call i32 (...) @getchar()
%54 = icmp ult i32 %53, 256
br i1 %54, label %55, label %224
55: ; preds = %52
%56 = trunc i32 %53 to i8
store i8 %56, i8* %2
%57 = call i32 (...) @getchar()
%58 = icmp ult i32 %57, 256
br i1 %58, label %59, label %224
59: ; preds = %55
%60 = trunc i32 %57 to i8
store i8 %60, i8* %43
%61 = call i32 (...) @getchar()
%62 = icmp ult i32 %61, 256
br i1 %62, label %63, label %224
63: ; preds = %59
%64 = trunc i32 %61 to i8
store i8 %64, i8* %44
%65 = call i32 (...) @getchar()
%66 = icmp ult i32 %65, 256
br i1 %66, label %67, label %224
67: ; preds = %63
%68 = trunc i32 %65 to i8
%69 = shl nuw i32 %53, 24
%70 = shl nuw nsw i32 %57, 16
%71 = and i32 %70, 16711680
%72 = or i32 %71, %69
%73 = shl nuw nsw i32 %61, 8
%74 = and i32 %73, 65280
%75 = or i32 %74, %72
store i8 %68, i8* %45
%76 = or i32 %65, %75
%77 = zext i32 %76 to i64
%78 = call i32 (...) @getchar()
%79 = icmp ult i32 %78, 256
br i1 %79, label %80, label %224
80: ; preds = %67
%81 = trunc i32 %78 to i8
store i8 %81, i8* %46
%82 = call i32 (...) @getchar()
%83 = icmp ult i32 %82, 256
br i1 %83, label %84, label %224
84: ; preds = %80
%85 = trunc i32 %82 to i8
store i8 %85, i8* %47
%86 = call i32 (...) @getchar()
%87 = icmp ult i32 %86, 256
br i1 %87, label %88, label %224
88: ; preds = %84
%89 = trunc i32 %86 to i8
store i8 %89, i8* %48
%90 = call i32 (...) @getchar()
%91 = icmp ult i32 %90, 256
br i1 %91, label %92, label %224
92: ; preds = %88
%93 = trunc i32 %90 to i8
store i8 %93, i8* %49
%94 = load i8, i8* %46
%95 = icmp eq i8 %94, 105
%96 = load i8, i8* %47
%97 = icmp eq i8 %96, 84
%98 = select i1 %95, i1 %97, i1 false
%99 = load i8, i8* %48
%100 = icmp eq i8 %99, 88
%101 = select i1 %98, i1 %100, i1 false
%102 = icmp eq i32 %90, 116
%103 = and i1 %102, %101
br i1 %103, label %122, label %104
104: ; preds = %92
%105 = load i8, i8* %2
%106 = call i32 @putchar(i8 zeroext %105)
%107 = load i8, i8* %43
%108 = call i32 @putchar(i8 zeroext %107)
%109 = load i8, i8* %44
%110 = call i32 @putchar(i8 zeroext %109)
%111 = load i8, i8* %45
%112 = call i32 @putchar(i8 zeroext %111)
%113 = load i8, i8* %46
%114 = call i32 @putchar(i8 zeroext %113)
%115 = load i8, i8* %47
%116 = call i32 @putchar(i8 zeroext %115)
%117 = load i8, i8* %48
%118 = call i32 @putchar(i8 zeroext %117)
%119 = load i8, i8* %49
%120 = call i32 @putchar(i8 zeroext %119)
%121 = add nuw nsw i64 %77, 12
br label %202
122: ; preds = %92
%123 = icmp ugt i32 %76, 499987
br i1 %123, label %224, label %124
124: ; preds = %122
%125 = load i8*, i8** @Z_NULL
%126 = call i64 @crc32(i64 0, i8* %125, i32 0)
%127 = add nuw nsw i64 %77, 12
br label %128
128: ; preds = %124, %132
%129 = phi i64 [ 8, %124 ], [ %136, %132 ]
%130 = call i32 (...) @getchar()
%131 = icmp ult i32 %130, 256
br i1 %131, label %132, label %224
132: ; preds = %128
%133 = trunc i32 %130 to i8
%134 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %129
store i8 %133, i8* %134
%135 = add nuw nsw i64 %129, 1
%136 = and i64 %135, 4294967295
%137 = icmp ugt i64 %127, %136
br i1 %137, label %128, label %138
138: ; preds = %132
%139 = add nsw i32 %76, 4
%140 = call i64 @crc32(i64 %126, i8* %46, i32 %139)
br label %141
141: ; preds = %177, %138
%142 = phi i64 [ %140, %138 ], [ %182, %177 ]
%143 = phi i32 [ %130, %138 ], [ %175, %177 ]
%144 = phi i64 [ %77, %138 ], [ %172, %177 ]
%145 = lshr i64 %142, 24
%146 = add nuw nsw i64 %144, 8
%147 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %146
%148 = load i8, i8* %147
%149 = trunc i64 %145 to i8
%150 = icmp eq i8 %148, %149
br i1 %150, label %151, label %171
151: ; preds = %141
%152 = lshr i64 %142, 16
%153 = add nuw nsw i64 %144, 9
%154 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %153
%155 = load i8, i8* %154
%156 = trunc i64 %152 to i8
%157 = icmp eq i8 %155, %156
br i1 %157, label %158, label %171
158: ; preds = %151
%159 = lshr i64 %142, 8
%160 = add nuw nsw i64 %144, 10
%161 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %160
%162 = load i8, i8* %161
%163 = trunc i64 %159 to i8
%164 = icmp eq i8 %162, %163
br i1 %164, label %165, label %171
165: ; preds = %158
%166 = add nuw nsw i64 %144, 11
%167 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %166
%168 = load i8, i8* %167
%169 = trunc i64 %142 to i8
%170 = icmp eq i8 %168, %169
br i1 %170, label %183, label %171
171: ; preds = %165, %158, %151, %141
%172 = add nuw nsw i64 %144, 1
%173 = icmp ugt i64 %144, 499986
br i1 %173, label %183, label %174
174: ; preds = %171
%175 = call i32 (...) @getchar()
%176 = icmp ult i32 %175, 256
br i1 %176, label %177, label %224
177: ; preds = %174
%178 = trunc i32 %175 to i8
%179 = add nuw nsw i64 %144, 12
%180 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %179
store i8 %178, i8* %180
%181 = getelementptr inbounds i8, i8* %49, i64 %172
%182 = call i64 @crc32(i64 %142, i8* %181, i32 1)
br label %141
183: ; preds = %171, %165
%184 = phi i64 [ 499988, %171 ], [ %144, %165 ]
store i8 0, i8* %2
%185 = lshr i64 %184, 16
%186 = trunc i64 %185 to i8
store i8 %186, i8* %43
%187 = lshr i64 %184, 8
%188 = trunc i64 %187 to i8
store i8 %188, i8* %44
%189 = trunc i64 %184 to i8
store i8 %189, i8* %45
%190 = add i64 %184, 12
%191 = call i32 @putchar(i8 zeroext 0)
%192 = icmp ugt i64 %190, 1
br i1 %192, label %193, label %217
193: ; preds = %183, %193
%194 = phi i64 [ %200, %193 ], [ 1, %183 ]
%195 = phi i32 [ %199, %193 ], [ 1, %183 ]
%196 = getelementptr inbounds [500000 x i8], [500000 x i8]* %1, i64 0, i64 %194
%197 = load i8, i8* %196
%198 = call i32 @putchar(i8 zeroext %197)
%199 = add i32 %195, 1
%200 = zext i32 %199 to i64
%201 = icmp ugt i64 %190, %200
br i1 %201, label %193, label %217
202: ; preds = %104, %206
%203 = phi i32 [ 8, %104 ], [ %209, %206 ]
%204 = call i32 (...) @getchar()
%205 = icmp ult i32 %204, 256
br i1 %205, label %206, label %224
206: ; preds = %202
%207 = trunc i32 %204 to i8
%208 = call i32 @putchar(i8 zeroext %207)
%209 = add i32 %203, 1
%210 = zext i32 %209 to i64
%211 = icmp ugt i64 %121, %210
br i1 %211, label %202, label %212
212: ; preds = %206
%213 = load <4 x i8>, <4 x i8>* %50
%214 = freeze <4 x i8> %213
%215 = bitcast <4 x i8> %214 to i32
%216 = icmp eq i32 %215, 1145980233
br i1 %216, label %224, label %219
217: ; preds = %193, %183
%218 = icmp ult i32 %143, 256
br i1 %218, label %219, label %224
219: ; preds = %212, %217
%220 = load <4 x i8>, <4 x i8>* %51
%221 = freeze <4 x i8> %220
%222 = bitcast <4 x i8> %221 to i32
%223 = icmp eq i32 %222, 1145980233
br i1 %223, label %224, label %52
224: ; preds = %219, %217, %212, %122, %88, %84, %80, %67, %63, %59, %55, %52, %202, %128, %174, %35, %30, %25, %20, %15, %10, %5, %0
ret i32 0
}