int main() {
  unsigned long **INPUT = malloc(5 * sizeof(unsigned long));
  int x;
  for (x = 0; x < 5; x++) {
    INPUT[x] = malloc(5 * sizeof(unsigned long));
  }
  INPUT[0][0] = 0;
  INPUT[1][0] = 0;
  INPUT[2][0] = 0;
  INPUT[3][0] = 0;
  INPUT[4][0] = 0;
  INPUT[0][1] = 0;
  INPUT[1][1] = 0;
  INPUT[2][1] = 0;
  INPUT[3][1] = 0;
  INPUT[4][1] = 0;
  INPUT[0][2] = 0;
  INPUT[1][2] = 0;
  INPUT[2][2] = 0;
  INPUT[3][2] = 0;
  INPUT[4][2] = 0;
  INPUT[0][3] = 0;
  INPUT[1][3] = 0;
  INPUT[2][3] = 0;
  INPUT[3][3] = 0;
  INPUT[4][3] = 0;
  INPUT[0][4] = 0;
  INPUT[1][4] = 0;
  INPUT[2][4] = 0;
  INPUT[3][4] = 0;
  INPUT[4][4] = 0;
  unsigned long **OUTPUT_REF = malloc(5 * sizeof(unsigned long));
  for (x = 0; x < 5; x++) {
    OUTPUT_REF[x] = malloc(5 * sizeof(unsigned long));
  }
  OUTPUT_REF[0][0] = 0xF1258F7940E1DDE7;
  OUTPUT_REF[1][0] = 0x84D5CCF933C0478A;
  OUTPUT_REF[2][0] = 0xD598261EA65AA9EE;
  OUTPUT_REF[3][0] = 0xBD1547306F80494D;
  OUTPUT_REF[4][0] = 0x8B284E056253D057;
  OUTPUT_REF[0][1] = 0xFF97A42D7F8E6FD4;
  OUTPUT_REF[1][1] = 0x90FEE5A0A44647C4;
  OUTPUT_REF[2][1] = 0x8C5BDA0CD6192E76;
  OUTPUT_REF[3][1] = 0xAD30A6F71B19059C;
  OUTPUT_REF[4][1] = 0x30935AB7D08FFC64;
  OUTPUT_REF[0][2] = 0xEB5AA93F2317D635;
  OUTPUT_REF[1][2] = 0xA9A6E6260D712103;
  OUTPUT_REF[2][2] = 0x81A57C16DBCF555F;
  OUTPUT_REF[3][2] = 0x43B831CD0347C826;
  OUTPUT_REF[4][2] = 0x01F22F1A11A5569F;
  OUTPUT_REF[0][3] = 0x05E5635A21D9AE61;
  OUTPUT_REF[1][3] = 0x64BEFEF28CC970F2;
  OUTPUT_REF[2][3] = 0x613670957BC46611;
  OUTPUT_REF[3][3] = 0xB87C5A554FD00ECB;
  OUTPUT_REF[4][3] = 0x8C3EE88A1CCF32C8;
  OUTPUT_REF[0][4] = 0x940C7922AE3A2614;
  OUTPUT_REF[1][4] = 0x1841F924A2C509E4;
  OUTPUT_REF[2][4] = 0x16F53526E70465C2;
  OUTPUT_REF[3][4] = 0x75F644E97F30A13B;
  OUTPUT_REF[4][4] = 0xEAF1FF7B5CECA249;
  unsigned long **OUTPUT = KeccakF(INPUT);
  int y;
  int count = 1;
  for (x = 0; x < 5; x++) {
    for (y = 0; y < 5; y++) {
      if (OUTPUT[x][y] != OUTPUT_REF[x][y]) {
        count = 0;
      }
    }
  }
  if (count == 0) {
    printf("FAIL\n");
  } else {
    printf("PASS\n");
  }
  for (x = 0; x < 5; x++) {
    free(INPUT[x]);
    free(OUTPUT[x]);
    free(OUTPUT_REF[x]);
  }
  free(INPUT);
  free(OUTPUT);
  free(OUTPUT_REF);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x5,-0x14(%rbp)
jge    1195 <main+0x55>
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%rdx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1164 <main+0x24>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movq   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
movq   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
movq   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movq   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rax
movq   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movq   $0x0,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
movq   $0x0,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
movq   $0x0,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movq   $0x0,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rax
movq   $0x0,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movq   $0x0,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
movq   $0x0,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
movq   $0x0,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movq   $0x0,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rax
movq   $0x0,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movq   $0x0,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
movq   $0x0,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
movq   $0x0,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movq   $0x0,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rax
movq   $0x0,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movq   $0x0,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
movq   $0x0,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
movq   $0x0,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movq   $0x0,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rax
movq   $0x0,0x20(%rax)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x5,-0x14(%rbp)
jge    1361 <main+0x221>
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%rdx
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1330 <main+0x1f0>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
movabs $0xf1258f7940e1dde7,%rcx
8f 25 f1
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
movabs $0x84d5ccf933c0478a,%rcx
cc d5 84
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
movabs $0xd598261ea65aa9ee,%rcx
26 98 d5
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
movabs $0xbd1547306f80494d,%rcx
47 15 bd
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
movabs $0x8b284e056253d057,%rcx
4e 28 8b
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
movabs $0xff97a42d7f8e6fd4,%rcx
a4 97 ff
mov    %rcx,0x8(%rax)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
movabs $0x90fee5a0a44647c4,%rcx
e5 fe 90
mov    %rcx,0x8(%rax)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
movabs $0x8c5bda0cd6192e76,%rcx
da 5b 8c
mov    %rcx,0x8(%rax)
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
movabs $0xad30a6f71b19059c,%rcx
a6 30 ad
mov    %rcx,0x8(%rax)
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
movabs $0x30935ab7d08ffc64,%rcx
5a 93 30
mov    %rcx,0x8(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
movabs $0xeb5aa93f2317d635,%rcx
a9 5a eb
mov    %rcx,0x10(%rax)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
movabs $0xa9a6e6260d712103,%rcx
e6 a6 a9
mov    %rcx,0x10(%rax)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
movabs $0x81a57c16dbcf555f,%rcx
7c a5 81
mov    %rcx,0x10(%rax)
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
movabs $0x43b831cd0347c826,%rcx
31 b8 43
mov    %rcx,0x10(%rax)
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
movabs $0x1f22f1a11a5569f,%rcx
2f f2 01
mov    %rcx,0x10(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
movabs $0x5e5635a21d9ae61,%rcx
63 e5 05
mov    %rcx,0x18(%rax)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
movabs $0x64befef28cc970f2,%rcx
fe be 64
mov    %rcx,0x18(%rax)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
movabs $0x613670957bc46611,%rcx
70 36 61
mov    %rcx,0x18(%rax)
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
movabs $0xb87c5a554fd00ecb,%rcx
5a 7c b8
mov    %rcx,0x18(%rax)
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
movabs $0x8c3ee88a1ccf32c8,%rcx
e8 3e 8c
mov    %rcx,0x18(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
movabs $0x940c7922ae3a2614,%rcx
79 0c 94
mov    %rcx,0x20(%rax)
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
movabs $0x1841f924a2c509e4,%rcx
f9 41 18
mov    %rcx,0x20(%rax)
mov    -0x20(%rbp),%rax
mov    0x10(%rax),%rax
movabs $0x16f53526e70465c2,%rcx
35 f5 16
mov    %rcx,0x20(%rax)
mov    -0x20(%rbp),%rax
mov    0x18(%rax),%rax
movabs $0x75f644e97f30a13b,%rcx
44 f6 75
mov    %rcx,0x20(%rax)
mov    -0x20(%rbp),%rax
mov    0x20(%rax),%rax
movabs $0xeaf1ff7b5ceca249,%rcx
ff f1 ea
mov    %rcx,0x20(%rax)
mov    -0x10(%rbp),%rdi
mov    $0x0,%al
call   1060 <KeccakF@plt>
cltq
mov    %rax,-0x28(%rbp)
movl   $0x1,-0x30(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x5,-0x14(%rbp)
jge    1612 <main+0x4d2>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x5,-0x2c(%rbp)
jge    15ff <main+0x4bf>
mov    -0x28(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%rcx
movslq -0x14(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x2c(%rbp),%rdx
cmp    (%rcx,%rdx,8),%rax
je     15ec <main+0x4ac>
movl   $0x0,-0x30(%rbp)
jmp    15f1 <main+0x4b1>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    15ad <main+0x46d>
jmp    1604 <main+0x4c4>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    159c <main+0x45c>
cmpl   $0x0,-0x30(%rbp)
jne    162f <main+0x4ef>
lea    0x9dd(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    163d <main+0x4fd>
lea    0x9d0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x5,-0x14(%rbp)
jge    168f <main+0x54f>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x28(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1644 <main+0x504>
mov    -0x10(%rbp),%rdi
call   1030 <free@plt>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
mov    -0x20(%rbp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%r13
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%r14
mov    %rax,0x0(%r13)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%r15
mov    %rax,0x8(%r13)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%r12
mov    %rax,0x10(%r13)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%rbp
mov    %rax,0x18(%r13)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,0x20(%r13)
mov    %r13,(%rsp)
xorps  %xmm0,%xmm0
movups %xmm0,(%r14)
movups %xmm0,(%r15)
movups %xmm0,(%r12)
movups %xmm0,0x0(%rbp)
movups %xmm0,(%rax)
movups %xmm0,0x10(%r14)
movups %xmm0,0x10(%r15)
movups %xmm0,0x10(%r12)
movups %xmm0,0x10(%rbp)
movups %xmm0,0x10(%rax)
movq   $0x0,0x20(%r14)
movq   $0x0,0x20(%r15)
movq   $0x0,0x20(%r12)
movq   $0x0,0x20(%rbp)
movq   $0x0,0x20(%rax)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%r15
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%rbx
mov    %rax,(%r15)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%r12
mov    %rax,0x8(%r15)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%r14
mov    %rax,0x10(%r15)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,%rbp
mov    %rax,0x18(%r15)
mov    $0x28,%edi
call   1050 <malloc@plt>
mov    %rax,0x20(%r15)
movaps 0xd95(%rip),%xmm0
movups %xmm0,(%rbx)
movaps 0xd9b(%rip),%xmm0
movups %xmm0,(%r12)
movaps 0xd9f(%rip),%xmm0
movups %xmm0,(%r14)
movaps 0xda4(%rip),%xmm0
movups %xmm0,0x0(%rbp)
movaps 0xda9(%rip),%xmm0
movups %xmm0,(%rax)
movaps 0xdaf(%rip),%xmm0
movups %xmm0,0x10(%rbx)
movaps 0xdb4(%rip),%xmm0
movups %xmm0,0x10(%r12)
movaps 0xdb7(%rip),%xmm0
movups %xmm0,0x10(%r14)
movaps 0xdbb(%rip),%xmm0
movups %xmm0,0x10(%rbp)
movaps 0xdc0(%rip),%xmm0
movups %xmm0,0x10(%rax)
movabs $0x940c7922ae3a2614,%rcx
79 0c 94
mov    %rcx,0x20(%rbx)
movabs $0x1841f924a2c509e4,%rcx
f9 41 18
mov    %rcx,0x20(%r12)
movabs $0x16f53526e70465c2,%rcx
35 f5 16
mov    %rcx,0x20(%r14)
movabs $0x75f644e97f30a13b,%rcx
44 f6 75
mov    %rcx,0x20(%rbp)
movabs $0xeaf1ff7b5ceca249,%rcx
ff f1 ea
mov    %rcx,0x20(%rax)
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <KeccakF@plt>
movslq %eax,%r14
mov    (%r14),%rcx
mov    (%rcx),%rdx
mov    0x8(%rcx),%rsi
xor    (%rbx),%rdx
xor    0x8(%rbx),%rsi
mov    0x8(%r14),%rax
mov    0x10(%rcx),%rdi
xor    0x10(%rbx),%rdi
or     %rdx,%rsi
mov    0x18(%rcx),%rbp
xor    0x18(%rbx),%rbp
or     %rdi,%rbp
mov    0x20(%rcx),%rcx
xor    0x20(%rbx),%rcx
or     %rsi,%rbp
mov    (%rax),%rsi
xor    (%r12),%rsi
mov    0x8(%rax),%rdx
or     %rcx,%rsi
xor    0x8(%r12),%rdx
or     %rsi,%rdx
mov    0x10(%rax),%rcx
xor    0x10(%r12),%rcx
or     %rbp,%rdx
mov    0x18(%rax),%rsi
xor    0x18(%r12),%rsi
or     %rcx,%rsi
mov    0x20(%rax),%rax
xor    0x20(%r12),%rax
or     %rsi,%rax
mov    0x10(%r14),%rsi
mov    (%rsi),%rcx
mov    0x8(%rsi),%rdi
mov    0x10(%r15),%r13
mov    0x18(%r15),%r12
xor    0x0(%r13),%rcx
or     %rax,%rcx
or     %rdx,%rcx
xor    0x8(%r13),%rdi
mov    0x10(%rsi),%rax
xor    0x10(%r13),%rax
or     %rdi,%rax
mov    0x18(%rsi),%rdx
xor    0x18(%r13),%rdx
or     %rax,%rdx
mov    0x20(%rsi),%rsi
xor    0x20(%r13),%rsi
or     %rdx,%rsi
mov    0x18(%r14),%rdx
mov    (%rdx),%rax
xor    (%r12),%rax
mov    0x8(%rdx),%rdi
or     %rsi,%rax
xor    0x8(%r12),%rdi
or     %rcx,%rax
mov    0x10(%rdx),%rcx
xor    0x10(%r12),%rcx
or     %rdi,%rcx
mov    0x18(%rdx),%rsi
xor    0x18(%r12),%rsi
or     %rcx,%rsi
mov    0x20(%rdx),%rcx
xor    0x20(%r12),%rcx
or     %rsi,%rcx
mov    0x20(%r14),%rdx
mov    0x20(%r15),%rbp
mov    (%rdx),%rsi
mov    0x8(%rdx),%rdi
xor    0x0(%rbp),%rsi
or     %rcx,%rsi
xor    0x8(%rbp),%rdi
or     %rsi,%rdi
or     %rax,%rdi
mov    0x10(%rdx),%rax
xor    0x10(%rbp),%rax
or     %rdi,%rax
mov    0x18(%rdx),%rcx
xor    0x18(%rbp),%rcx
mov    0x20(%rdx),%rdx
xor    0x20(%rbp),%rdx
or     %rcx,%rdx
lea    0xc48(%rip),%rcx
lea    0xc3c(%rip),%rdi
or     %rax,%rdx
cmovne %rcx,%rdi
call   1040 <puts@plt>
mov    (%rsp),%rbx
mov    (%rbx),%rdi
call   1030 <free@plt>
mov    (%r14),%rdi
call   1030 <free@plt>
mov    (%r15),%rdi
call   1030 <free@plt>
mov    0x8(%rbx),%rdi
call   1030 <free@plt>
mov    0x8(%r14),%rdi
call   1030 <free@plt>
mov    0x8(%r15),%rdi
call   1030 <free@plt>
mov    0x10(%rbx),%rdi
call   1030 <free@plt>
mov    0x10(%r14),%rdi
call   1030 <free@plt>
mov    %r13,%rdi
call   1030 <free@plt>
mov    0x18(%rbx),%rdi
call   1030 <free@plt>
mov    0x18(%r14),%rdi
call   1030 <free@plt>
mov    %r12,%rdi
call   1030 <free@plt>
mov    0x20(%rbx),%rdi
call   1030 <free@plt>
mov    0x20(%r14),%rdi
call   1030 <free@plt>
mov    %rbp,%rdi
call   1030 <free@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
mov    %r14,%rdi
call   1030 <free@plt>
mov    %r15,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [6 x i8] c"FAIL\0A\00"
@.str.1 = [6 x i8] c"PASS\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i64**
%3 = alloca i32
%4 = alloca i64**
%5 = alloca i64**
%6 = alloca i32
%7 = alloca i32
store i32 0, i32* %1
%8 = call i8* @malloc(i64 40)
%9 = bitcast i8* %8 to i64**
store i64** %9, i64*** %2
store i32 0, i32* %3
br label %10
10: ; preds = %20, %0
%11 = load i32, i32* %3
%12 = icmp slt i32 %11, 5
br i1 %12, label %13, label %23
13: ; preds = %10
%14 = call i8* @malloc(i64 40)
%15 = bitcast i8* %14 to i64*
%16 = load i64**, i64*** %2
%17 = load i32, i32* %3
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds i64*, i64** %16, i64 %18
store i64* %15, i64** %19
br label %20
20: ; preds = %13
%21 = load i32, i32* %3
%22 = add nsw i32 %21, 1
store i32 %22, i32* %3
br label %10
23: ; preds = %10
%24 = load i64**, i64*** %2
%25 = getelementptr inbounds i64*, i64** %24, i64 0
%26 = load i64*, i64** %25
%27 = getelementptr inbounds i64, i64* %26, i64 0
store i64 0, i64* %27
%28 = load i64**, i64*** %2
%29 = getelementptr inbounds i64*, i64** %28, i64 1
%30 = load i64*, i64** %29
%31 = getelementptr inbounds i64, i64* %30, i64 0
store i64 0, i64* %31
%32 = load i64**, i64*** %2
%33 = getelementptr inbounds i64*, i64** %32, i64 2
%34 = load i64*, i64** %33
%35 = getelementptr inbounds i64, i64* %34, i64 0
store i64 0, i64* %35
%36 = load i64**, i64*** %2
%37 = getelementptr inbounds i64*, i64** %36, i64 3
%38 = load i64*, i64** %37
%39 = getelementptr inbounds i64, i64* %38, i64 0
store i64 0, i64* %39
%40 = load i64**, i64*** %2
%41 = getelementptr inbounds i64*, i64** %40, i64 4
%42 = load i64*, i64** %41
%43 = getelementptr inbounds i64, i64* %42, i64 0
store i64 0, i64* %43
%44 = load i64**, i64*** %2
%45 = getelementptr inbounds i64*, i64** %44, i64 0
%46 = load i64*, i64** %45
%47 = getelementptr inbounds i64, i64* %46, i64 1
store i64 0, i64* %47
%48 = load i64**, i64*** %2
%49 = getelementptr inbounds i64*, i64** %48, i64 1
%50 = load i64*, i64** %49
%51 = getelementptr inbounds i64, i64* %50, i64 1
store i64 0, i64* %51
%52 = load i64**, i64*** %2
%53 = getelementptr inbounds i64*, i64** %52, i64 2
%54 = load i64*, i64** %53
%55 = getelementptr inbounds i64, i64* %54, i64 1
store i64 0, i64* %55
%56 = load i64**, i64*** %2
%57 = getelementptr inbounds i64*, i64** %56, i64 3
%58 = load i64*, i64** %57
%59 = getelementptr inbounds i64, i64* %58, i64 1
store i64 0, i64* %59
%60 = load i64**, i64*** %2
%61 = getelementptr inbounds i64*, i64** %60, i64 4
%62 = load i64*, i64** %61
%63 = getelementptr inbounds i64, i64* %62, i64 1
store i64 0, i64* %63
%64 = load i64**, i64*** %2
%65 = getelementptr inbounds i64*, i64** %64, i64 0
%66 = load i64*, i64** %65
%67 = getelementptr inbounds i64, i64* %66, i64 2
store i64 0, i64* %67
%68 = load i64**, i64*** %2
%69 = getelementptr inbounds i64*, i64** %68, i64 1
%70 = load i64*, i64** %69
%71 = getelementptr inbounds i64, i64* %70, i64 2
store i64 0, i64* %71
%72 = load i64**, i64*** %2
%73 = getelementptr inbounds i64*, i64** %72, i64 2
%74 = load i64*, i64** %73
%75 = getelementptr inbounds i64, i64* %74, i64 2
store i64 0, i64* %75
%76 = load i64**, i64*** %2
%77 = getelementptr inbounds i64*, i64** %76, i64 3
%78 = load i64*, i64** %77
%79 = getelementptr inbounds i64, i64* %78, i64 2
store i64 0, i64* %79
%80 = load i64**, i64*** %2
%81 = getelementptr inbounds i64*, i64** %80, i64 4
%82 = load i64*, i64** %81
%83 = getelementptr inbounds i64, i64* %82, i64 2
store i64 0, i64* %83
%84 = load i64**, i64*** %2
%85 = getelementptr inbounds i64*, i64** %84, i64 0
%86 = load i64*, i64** %85
%87 = getelementptr inbounds i64, i64* %86, i64 3
store i64 0, i64* %87
%88 = load i64**, i64*** %2
%89 = getelementptr inbounds i64*, i64** %88, i64 1
%90 = load i64*, i64** %89
%91 = getelementptr inbounds i64, i64* %90, i64 3
store i64 0, i64* %91
%92 = load i64**, i64*** %2
%93 = getelementptr inbounds i64*, i64** %92, i64 2
%94 = load i64*, i64** %93
%95 = getelementptr inbounds i64, i64* %94, i64 3
store i64 0, i64* %95
%96 = load i64**, i64*** %2
%97 = getelementptr inbounds i64*, i64** %96, i64 3
%98 = load i64*, i64** %97
%99 = getelementptr inbounds i64, i64* %98, i64 3
store i64 0, i64* %99
%100 = load i64**, i64*** %2
%101 = getelementptr inbounds i64*, i64** %100, i64 4
%102 = load i64*, i64** %101
%103 = getelementptr inbounds i64, i64* %102, i64 3
store i64 0, i64* %103
%104 = load i64**, i64*** %2
%105 = getelementptr inbounds i64*, i64** %104, i64 0
%106 = load i64*, i64** %105
%107 = getelementptr inbounds i64, i64* %106, i64 4
store i64 0, i64* %107
%108 = load i64**, i64*** %2
%109 = getelementptr inbounds i64*, i64** %108, i64 1
%110 = load i64*, i64** %109
%111 = getelementptr inbounds i64, i64* %110, i64 4
store i64 0, i64* %111
%112 = load i64**, i64*** %2
%113 = getelementptr inbounds i64*, i64** %112, i64 2
%114 = load i64*, i64** %113
%115 = getelementptr inbounds i64, i64* %114, i64 4
store i64 0, i64* %115
%116 = load i64**, i64*** %2
%117 = getelementptr inbounds i64*, i64** %116, i64 3
%118 = load i64*, i64** %117
%119 = getelementptr inbounds i64, i64* %118, i64 4
store i64 0, i64* %119
%120 = load i64**, i64*** %2
%121 = getelementptr inbounds i64*, i64** %120, i64 4
%122 = load i64*, i64** %121
%123 = getelementptr inbounds i64, i64* %122, i64 4
store i64 0, i64* %123
%124 = call i8* @malloc(i64 40)
%125 = bitcast i8* %124 to i64**
store i64** %125, i64*** %4
store i32 0, i32* %3
br label %126
126: ; preds = %136, %23
%127 = load i32, i32* %3
%128 = icmp slt i32 %127, 5
br i1 %128, label %129, label %139
129: ; preds = %126
%130 = call i8* @malloc(i64 40)
%131 = bitcast i8* %130 to i64*
%132 = load i64**, i64*** %4
%133 = load i32, i32* %3
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds i64*, i64** %132, i64 %134
store i64* %131, i64** %135
br label %136
136: ; preds = %129
%137 = load i32, i32* %3
%138 = add nsw i32 %137, 1
store i32 %138, i32* %3
br label %126
139: ; preds = %126
%140 = load i64**, i64*** %4
%141 = getelementptr inbounds i64*, i64** %140, i64 0
%142 = load i64*, i64** %141
%143 = getelementptr inbounds i64, i64* %142, i64 0
store i64 -1070291585488265753, i64* %143
%144 = load i64**, i64*** %4
%145 = getelementptr inbounds i64*, i64** %144, i64 1
%146 = load i64*, i64** %145
%147 = getelementptr inbounds i64, i64* %146, i64 0
store i64 -8874962119976532086, i64* %147
%148 = load i64**, i64*** %4
%149 = getelementptr inbounds i64*, i64** %148, i64 2
%150 = load i64*, i64** %149
%151 = getelementptr inbounds i64, i64* %150, i64 0
store i64 -3055650434089047570, i64* %151
%152 = load i64**, i64*** %4
%153 = getelementptr inbounds i64*, i64** %152, i64 3
%154 = load i64*, i64** %153
%155 = getelementptr inbounds i64, i64* %154, i64 0
store i64 -4821869552675567283, i64* %155
%156 = load i64**, i64*** %4
%157 = getelementptr inbounds i64*, i64** %156, i64 4
%158 = load i64*, i64** %157
%159 = getelementptr inbounds i64, i64* %158, i64 0
store i64 -8419393718337679273, i64* %159
%160 = load i64**, i64*** %4
%161 = getelementptr inbounds i64*, i64** %160, i64 0
%162 = load i64*, i64** %161
%163 = getelementptr inbounds i64, i64* %162, i64 1
store i64 -29374357234094124, i64* %163
%164 = load i64**, i64*** %4
%165 = getelementptr inbounds i64*, i64** %164, i64 1
%166 = load i64*, i64** %165
%167 = getelementptr inbounds i64, i64* %166, i64 1
store i64 -7998703410049824828, i64* %167
%168 = load i64**, i64*** %4
%169 = getelementptr inbounds i64*, i64** %168, i64 2
%170 = load i64*, i64** %169
%171 = getelementptr inbounds i64, i64* %170, i64 1
store i64 -8332826936852533642, i64* %171
%172 = load i64**, i64*** %4
%173 = getelementptr inbounds i64*, i64** %172, i64 3
%174 = load i64*, i64** %173
%175 = getelementptr inbounds i64, i64* %174, i64 1
store i64 -5967085926024149604, i64* %175
%176 = load i64**, i64*** %4
%177 = getelementptr inbounds i64*, i64** %176, i64 4
%178 = load i64*, i64** %177
%179 = getelementptr inbounds i64, i64* %178, i64 1
store i64 3500241080921619556, i64* %179
%180 = load i64**, i64*** %4
%181 = getelementptr inbounds i64*, i64** %180, i64 0
%182 = load i64*, i64** %181
%183 = getelementptr inbounds i64, i64* %182, i64 2
store i64 -1487690638255729099, i64* %183
%184 = load i64**, i64*** %4
%185 = getelementptr inbounds i64*, i64** %184, i64 1
%186 = load i64*, i64** %185
%187 = getelementptr inbounds i64, i64* %186, i64 2
store i64 -6222032784057097981, i64* %187
%188 = load i64**, i64*** %4
%189 = getelementptr inbounds i64*, i64** %188, i64 2
%190 = load i64*, i64** %189
%191 = getelementptr inbounds i64, i64* %190, i64 2
store i64 -9104734634040666785, i64* %191
%192 = load i64**, i64*** %4
%193 = getelementptr inbounds i64*, i64** %192, i64 3
%194 = load i64*, i64** %193
%195 = getelementptr inbounds i64, i64* %194, i64 2
store i64 4879704952849025062, i64* %195
%196 = load i64**, i64*** %4
%197 = getelementptr inbounds i64*, i64** %196, i64 4
%198 = load i64*, i64** %197
%199 = getelementptr inbounds i64, i64* %198, i64 2
store i64 140226327413610143, i64* %199
%200 = load i64**, i64*** %4
%201 = getelementptr inbounds i64*, i64** %200, i64 0
%202 = load i64*, i64** %201
%203 = getelementptr inbounds i64, i64* %202, i64 3
store i64 424854978622500449, i64* %203
%204 = load i64**, i64*** %4
%205 = getelementptr inbounds i64*, i64** %204, i64 1
%206 = load i64*, i64** %205
%207 = getelementptr inbounds i64, i64* %206, i64 3
store i64 7259519967065370866, i64* %207
%208 = load i64**, i64*** %4
%209 = getelementptr inbounds i64*, i64** %208, i64 2
%210 = load i64*, i64** %209
%211 = getelementptr inbounds i64, i64* %210, i64 3
store i64 7004910057750291985, i64* %211
%212 = load i64**, i64*** %4
%213 = getelementptr inbounds i64*, i64** %212, i64 3
%214 = load i64*, i64** %213
%215 = getelementptr inbounds i64, i64* %214, i64 3
store i64 -5153144551160934709, i64* %215
%216 = load i64**, i64*** %4
%217 = getelementptr inbounds i64*, i64** %216, i64 4
%218 = load i64*, i64** %217
%219 = getelementptr inbounds i64, i64* %218, i64 3
store i64 -8340973779957108024, i64* %219
%220 = load i64**, i64*** %4
%221 = getelementptr inbounds i64*, i64** %220, i64 0
%222 = load i64*, i64** %221
%223 = getelementptr inbounds i64, i64* %222, i64 4
store i64 -7778709266516793836, i64* %223
%224 = load i64**, i64*** %4
%225 = getelementptr inbounds i64*, i64** %224, i64 1
%226 = load i64*, i64** %225
%227 = getelementptr inbounds i64, i64* %226, i64 4
store i64 1747952066141424100, i64* %227
%228 = load i64**, i64*** %4
%229 = getelementptr inbounds i64*, i64** %228, i64 2
%230 = load i64*, i64** %229
%231 = getelementptr inbounds i64, i64* %230, i64 4
store i64 1654286879329379778, i64* %231
%232 = load i64**, i64*** %4
%233 = getelementptr inbounds i64*, i64** %232, i64 3
%234 = load i64*, i64** %233
%235 = getelementptr inbounds i64, i64* %234, i64 4
store i64 8500057116360352059, i64* %235
%236 = load i64**, i64*** %4
%237 = getelementptr inbounds i64*, i64** %236, i64 4
%238 = load i64*, i64** %237
%239 = getelementptr inbounds i64, i64* %238, i64 4
store i64 -1517150694142074295, i64* %239
%240 = load i64**, i64*** %2
%241 = call i32 (i64**, ...) bitcast (i32 (...)* @KeccakF to i32 (i64**, ...)*)(i64** %240)
%242 = sext i32 %241 to i64
%243 = inttoptr i64 %242 to i64**
store i64** %243, i64*** %5
store i32 1, i32* %7
store i32 0, i32* %3
br label %244
244: ; preds = %277, %139
%245 = load i32, i32* %3
%246 = icmp slt i32 %245, 5
br i1 %246, label %247, label %280
247: ; preds = %244
store i32 0, i32* %6
br label %248
248: ; preds = %273, %247
%249 = load i32, i32* %6
%250 = icmp slt i32 %249, 5
br i1 %250, label %251, label %276
251: ; preds = %248
%252 = load i64**, i64*** %5
%253 = load i32, i32* %3
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds i64*, i64** %252, i64 %254
%256 = load i64*, i64** %255
%257 = load i32, i32* %6
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds i64, i64* %256, i64 %258
%260 = load i64, i64* %259
%261 = load i64**, i64*** %4
%262 = load i32, i32* %3
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds i64*, i64** %261, i64 %263
%265 = load i64*, i64** %264
%266 = load i32, i32* %6
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds i64, i64* %265, i64 %267
%269 = load i64, i64* %268
%270 = icmp ne i64 %260, %269
br i1 %270, label %271, label %272
271: ; preds = %251
store i32 0, i32* %7
br label %272
272: ; preds = %271, %251
br label %273
273: ; preds = %272
%274 = load i32, i32* %6
%275 = add nsw i32 %274, 1
store i32 %275, i32* %6
br label %248
276: ; preds = %248
br label %277
277: ; preds = %276
%278 = load i32, i32* %3
%279 = add nsw i32 %278, 1
store i32 %279, i32* %3
br label %244
280: ; preds = %244
%281 = load i32, i32* %7
%282 = icmp eq i32 %281, 0
br i1 %282, label %283, label %285
283: ; preds = %280
%284 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))
br label %287
285: ; preds = %280
%286 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
br label %287
287: ; preds = %285, %283
store i32 0, i32* %3
br label %288
288: ; preds = %310, %287
%289 = load i32, i32* %3
%290 = icmp slt i32 %289, 5
br i1 %290, label %291, label %313
291: ; preds = %288
%292 = load i64**, i64*** %2
%293 = load i32, i32* %3
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds i64*, i64** %292, i64 %294
%296 = load i64*, i64** %295
%297 = bitcast i64* %296 to i8*
%298 = load i64**, i64*** %5
%299 = load i32, i32* %3
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds i64*, i64** %298, i64 %300
%302 = load i64*, i64** %301
%303 = bitcast i64* %302 to i8*
%304 = load i64**, i64*** %4
%305 = load i32, i32* %3
%306 = sext i32 %305 to i64
%307 = getelementptr inbounds i64*, i64** %304, i64 %306
%308 = load i64*, i64** %307
%309 = bitcast i64* %308 to i8*
br label %310
310: ; preds = %291
%311 = load i32, i32* %3
%312 = add nsw i32 %311, 1
store i32 %312, i32* %3
br label %288
313: ; preds = %288
%314 = load i64**, i64*** %2
%315 = bitcast i64** %314 to i8*
%316 = load i64**, i64*** %5
%317 = bitcast i64** %316 to i8*
%318 = load i64**, i64*** %4
%319 = bitcast i64** %318 to i8*
ret i32 0
}

LLVM IR (-O2):
@str = [5 x i8] c"PASS\00"
@str.2 = [5 x i8] c"FAIL\00"
define i32 @main() {
%1 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%2 = bitcast i8* %1 to i64**
%3 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%4 = bitcast i8* %1 to i8**
store i8* %3, i8** %4
%5 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%6 = getelementptr inbounds i64*, i64** %2, i64 1
%7 = bitcast i64** %6 to i8**
store i8* %5, i8** %7
%8 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%9 = getelementptr inbounds i64*, i64** %2, i64 2
%10 = bitcast i64** %9 to i8**
store i8* %8, i8** %10
%11 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%12 = getelementptr inbounds i64*, i64** %2, i64 3
%13 = bitcast i64** %12 to i8**
store i8* %11, i8** %13
%14 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%15 = getelementptr inbounds i64*, i64** %2, i64 4
%16 = bitcast i64** %15 to i8**
store i8* %14, i8** %16
%17 = bitcast i8* %3 to i64*
%18 = bitcast i8* %5 to i64*
%19 = bitcast i8* %8 to i64*
%20 = bitcast i8* %11 to i64*
%21 = bitcast i8* %14 to i64*
%22 = bitcast i8* %3 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %22
%23 = bitcast i8* %5 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %23
%24 = bitcast i8* %8 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %24
%25 = bitcast i8* %11 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %25
%26 = bitcast i8* %14 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %26
%27 = getelementptr inbounds i64, i64* %17, i64 2
%28 = getelementptr inbounds i64, i64* %18, i64 2
%29 = getelementptr inbounds i64, i64* %19, i64 2
%30 = getelementptr inbounds i64, i64* %20, i64 2
%31 = getelementptr inbounds i64, i64* %21, i64 2
%32 = bitcast i64* %27 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %32
%33 = bitcast i64* %28 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %33
%34 = bitcast i64* %29 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %34
%35 = bitcast i64* %30 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %35
%36 = bitcast i64* %31 to <2 x i64>*
store <2 x i64> zeroinitializer, <2 x i64>* %36
%37 = getelementptr inbounds i64, i64* %17, i64 4
store i64 0, i64* %37
%38 = getelementptr inbounds i64, i64* %18, i64 4
store i64 0, i64* %38
%39 = getelementptr inbounds i64, i64* %19, i64 4
store i64 0, i64* %39
%40 = getelementptr inbounds i64, i64* %20, i64 4
store i64 0, i64* %40
%41 = getelementptr inbounds i64, i64* %21, i64 4
store i64 0, i64* %41
%42 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%43 = bitcast i8* %42 to i64**
%44 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%45 = bitcast i8* %42 to i8**
store i8* %44, i8** %45
%46 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%47 = getelementptr inbounds i64*, i64** %43, i64 1
%48 = bitcast i64** %47 to i8**
store i8* %46, i8** %48
%49 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%50 = getelementptr inbounds i64*, i64** %43, i64 2
%51 = bitcast i64** %50 to i8**
store i8* %49, i8** %51
%52 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%53 = getelementptr inbounds i64*, i64** %43, i64 3
%54 = bitcast i64** %53 to i8**
store i8* %52, i8** %54
%55 = tail call dereferenceable_or_null(40) i8* @malloc(i64 40)
%56 = getelementptr inbounds i64*, i64** %43, i64 4
%57 = bitcast i64** %56 to i8**
store i8* %55, i8** %57
%58 = bitcast i8* %44 to i64*
%59 = bitcast i8* %46 to i64*
%60 = bitcast i8* %49 to i64*
%61 = bitcast i8* %52 to i64*
%62 = bitcast i8* %55 to i64*
%63 = getelementptr inbounds i64, i64* %58, i64 1
%64 = bitcast i8* %44 to <2 x i64>*
store <2 x i64> <i64 -1070291585488265753, i64 -29374357234094124>, <2 x i64>* %64
%65 = getelementptr inbounds i64, i64* %59, i64 1
%66 = bitcast i8* %46 to <2 x i64>*
store <2 x i64> <i64 -8874962119976532086, i64 -7998703410049824828>, <2 x i64>* %66
%67 = bitcast i8* %49 to <2 x i64>*
store <2 x i64> <i64 -3055650434089047570, i64 -8332826936852533642>, <2 x i64>* %67
%68 = bitcast i8* %52 to <2 x i64>*
store <2 x i64> <i64 -4821869552675567283, i64 -5967085926024149604>, <2 x i64>* %68
%69 = bitcast i8* %55 to <2 x i64>*
store <2 x i64> <i64 -8419393718337679273, i64 3500241080921619556>, <2 x i64>* %69
%70 = getelementptr inbounds i64, i64* %58, i64 2
%71 = getelementptr inbounds i64, i64* %59, i64 2
%72 = getelementptr inbounds i64, i64* %60, i64 2
%73 = getelementptr inbounds i64, i64* %61, i64 2
%74 = getelementptr inbounds i64, i64* %62, i64 2
%75 = getelementptr inbounds i64, i64* %58, i64 3
%76 = bitcast i64* %70 to <2 x i64>*
store <2 x i64> <i64 -1487690638255729099, i64 424854978622500449>, <2 x i64>* %76
%77 = getelementptr inbounds i64, i64* %59, i64 3
%78 = bitcast i64* %71 to <2 x i64>*
store <2 x i64> <i64 -6222032784057097981, i64 7259519967065370866>, <2 x i64>* %78
%79 = bitcast i64* %72 to <2 x i64>*
store <2 x i64> <i64 -9104734634040666785, i64 7004910057750291985>, <2 x i64>* %79
%80 = bitcast i64* %73 to <2 x i64>*
store <2 x i64> <i64 4879704952849025062, i64 -5153144551160934709>, <2 x i64>* %80
%81 = bitcast i64* %74 to <2 x i64>*
store <2 x i64> <i64 140226327413610143, i64 -8340973779957108024>, <2 x i64>* %81
%82 = getelementptr inbounds i64, i64* %58, i64 4
store i64 -7778709266516793836, i64* %82
%83 = getelementptr inbounds i64, i64* %59, i64 4
store i64 1747952066141424100, i64* %83
%84 = getelementptr inbounds i64, i64* %60, i64 4
store i64 1654286879329379778, i64* %84
%85 = getelementptr inbounds i64, i64* %61, i64 4
store i64 8500057116360352059, i64* %85
%86 = getelementptr inbounds i64, i64* %62, i64 4
store i64 -1517150694142074295, i64* %86
%87 = tail call i32 (i64**, ...) bitcast (i32 (...)* @KeccakF to i32 (i64**, ...)*)(i64** %2)
%88 = sext i32 %87 to i64
%89 = inttoptr i64 %88 to i64**
%90 = load i64*, i64** %89
%91 = load i64, i64* %90
%92 = load i64, i64* %58
%93 = icmp ne i64 %91, %92
%94 = getelementptr inbounds i64, i64* %90, i64 1
%95 = load i64, i64* %94
%96 = load i64, i64* %63
%97 = icmp ne i64 %95, %96
%98 = getelementptr inbounds i64, i64* %90, i64 2
%99 = load i64, i64* %98
%100 = load i64, i64* %70
%101 = icmp ne i64 %99, %100
%102 = getelementptr inbounds i64, i64* %90, i64 3
%103 = load i64, i64* %102
%104 = load i64, i64* %75
%105 = icmp ne i64 %103, %104
%106 = getelementptr inbounds i64, i64* %90, i64 4
%107 = load i64, i64* %106
%108 = load i64, i64* %82
%109 = icmp ne i64 %107, %108
%110 = getelementptr inbounds i64*, i64** %89, i64 1
%111 = load i64*, i64** %110
%112 = load i64, i64* %111
%113 = load i64, i64* %59
%114 = icmp ne i64 %112, %113
%115 = getelementptr inbounds i64, i64* %111, i64 1
%116 = load i64, i64* %115
%117 = load i64, i64* %65
%118 = icmp ne i64 %116, %117
%119 = getelementptr inbounds i64, i64* %111, i64 2
%120 = load i64, i64* %119
%121 = load i64, i64* %71
%122 = icmp ne i64 %120, %121
%123 = getelementptr inbounds i64, i64* %111, i64 3
%124 = load i64, i64* %123
%125 = load i64, i64* %77
%126 = icmp ne i64 %124, %125
%127 = getelementptr inbounds i64, i64* %111, i64 4
%128 = load i64, i64* %127
%129 = load i64, i64* %83
%130 = icmp ne i64 %128, %129
%131 = getelementptr inbounds i64*, i64** %89, i64 2
%132 = load i64*, i64** %131
%133 = load i64*, i64** %50
%134 = load i64, i64* %132
%135 = load i64, i64* %133
%136 = icmp ne i64 %134, %135
%137 = getelementptr inbounds i64, i64* %132, i64 1
%138 = load i64, i64* %137
%139 = getelementptr inbounds i64, i64* %133, i64 1
%140 = load i64, i64* %139
%141 = icmp ne i64 %138, %140
%142 = getelementptr inbounds i64, i64* %132, i64 2
%143 = load i64, i64* %142
%144 = getelementptr inbounds i64, i64* %133, i64 2
%145 = load i64, i64* %144
%146 = icmp ne i64 %143, %145
%147 = getelementptr inbounds i64, i64* %132, i64 3
%148 = load i64, i64* %147
%149 = getelementptr inbounds i64, i64* %133, i64 3
%150 = load i64, i64* %149
%151 = icmp ne i64 %148, %150
%152 = getelementptr inbounds i64, i64* %132, i64 4
%153 = load i64, i64* %152
%154 = getelementptr inbounds i64, i64* %133, i64 4
%155 = load i64, i64* %154
%156 = icmp ne i64 %153, %155
%157 = getelementptr inbounds i64*, i64** %89, i64 3
%158 = load i64*, i64** %157
%159 = load i64*, i64** %53
%160 = load i64, i64* %158
%161 = load i64, i64* %159
%162 = icmp ne i64 %160, %161
%163 = getelementptr inbounds i64, i64* %158, i64 1
%164 = load i64, i64* %163
%165 = getelementptr inbounds i64, i64* %159, i64 1
%166 = load i64, i64* %165
%167 = icmp ne i64 %164, %166
%168 = getelementptr inbounds i64, i64* %158, i64 2
%169 = load i64, i64* %168
%170 = getelementptr inbounds i64, i64* %159, i64 2
%171 = load i64, i64* %170
%172 = icmp ne i64 %169, %171
%173 = getelementptr inbounds i64, i64* %158, i64 3
%174 = load i64, i64* %173
%175 = getelementptr inbounds i64, i64* %159, i64 3
%176 = load i64, i64* %175
%177 = icmp ne i64 %174, %176
%178 = getelementptr inbounds i64, i64* %158, i64 4
%179 = load i64, i64* %178
%180 = getelementptr inbounds i64, i64* %159, i64 4
%181 = load i64, i64* %180
%182 = icmp ne i64 %179, %181
%183 = getelementptr inbounds i64*, i64** %89, i64 4
%184 = load i64*, i64** %183
%185 = load i64*, i64** %56
%186 = load i64, i64* %184
%187 = load i64, i64* %185
%188 = icmp ne i64 %186, %187
%189 = getelementptr inbounds i64, i64* %184, i64 1
%190 = load i64, i64* %189
%191 = getelementptr inbounds i64, i64* %185, i64 1
%192 = load i64, i64* %191
%193 = icmp ne i64 %190, %192
%194 = getelementptr inbounds i64, i64* %184, i64 2
%195 = load i64, i64* %194
%196 = getelementptr inbounds i64, i64* %185, i64 2
%197 = load i64, i64* %196
%198 = icmp ne i64 %195, %197
%199 = getelementptr inbounds i64, i64* %184, i64 3
%200 = load i64, i64* %199
%201 = getelementptr inbounds i64, i64* %185, i64 3
%202 = load i64, i64* %201
%203 = icmp ne i64 %200, %202
%204 = getelementptr inbounds i64, i64* %184, i64 4
%205 = load i64, i64* %204
%206 = getelementptr inbounds i64, i64* %185, i64 4
%207 = load i64, i64* %206
%208 = icmp ne i64 %205, %207
%209 = select i1 %208, i1 true, i1 %203
%210 = select i1 %209, i1 true, i1 %198
%211 = select i1 %210, i1 true, i1 %193
%212 = select i1 %211, i1 true, i1 %188
%213 = select i1 %212, i1 true, i1 %182
%214 = select i1 %213, i1 true, i1 %177
%215 = select i1 %214, i1 true, i1 %172
%216 = select i1 %215, i1 true, i1 %167
%217 = select i1 %216, i1 true, i1 %162
%218 = select i1 %217, i1 true, i1 %156
%219 = select i1 %218, i1 true, i1 %151
%220 = select i1 %219, i1 true, i1 %146
%221 = select i1 %220, i1 true, i1 %141
%222 = select i1 %221, i1 true, i1 %136
%223 = select i1 %222, i1 true, i1 %130
%224 = select i1 %223, i1 true, i1 %126
%225 = select i1 %224, i1 true, i1 %122
%226 = select i1 %225, i1 true, i1 %118
%227 = select i1 %226, i1 true, i1 %114
%228 = select i1 %227, i1 true, i1 %109
%229 = select i1 %228, i1 true, i1 %105
%230 = select i1 %229, i1 true, i1 %101
%231 = select i1 %230, i1 true, i1 %97
%232 = select i1 %231, i1 true, i1 %93
%233 = select i1 %232, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @str.2, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @str, i64 0, i64 0)
%234 = tail call i32 @puts(i8* dereferenceable(1) %233)
%235 = bitcast i64* %185 to i8*
%236 = bitcast i64* %159 to i8*
%237 = bitcast i64* %133 to i8*
%238 = load i8*, i8** %4
tail call void @free(i8* %238)
%239 = inttoptr i64 %88 to i8**
%240 = load i8*, i8** %239
tail call void @free(i8* %240)
%241 = load i8*, i8** %45
tail call void @free(i8* %241)
%242 = load i8*, i8** %7
tail call void @free(i8* %242)
%243 = bitcast i64** %110 to i8**
%244 = load i8*, i8** %243
tail call void @free(i8* %244)
%245 = load i8*, i8** %48
tail call void @free(i8* %245)
%246 = load i8*, i8** %10
tail call void @free(i8* %246)
%247 = bitcast i64** %131 to i8**
%248 = load i8*, i8** %247
tail call void @free(i8* %248)
tail call void @free(i8* %237)
%249 = load i8*, i8** %13
tail call void @free(i8* %249)
%250 = bitcast i64** %157 to i8**
%251 = load i8*, i8** %250
tail call void @free(i8* %251)
tail call void @free(i8* %236)
%252 = load i8*, i8** %16
tail call void @free(i8* %252)
%253 = bitcast i64** %183 to i8**
%254 = load i8*, i8** %253
tail call void @free(i8* %254)
tail call void @free(i8* %235)
tail call void @free(i8* %1)
%255 = inttoptr i64 %88 to i8*
tail call void @free(i8* %255)
tail call void @free(i8* %42)
ret i32 0
}