user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %r14
  mov    $0x2e,%edx
  mov    $0x2e,%ecx
  mov    $0x8,%esi
  push   %r13
  push   %r12
  push   %rbp
  sub    $0x1f8,%rsp
  movdqa D57(%rip),%xmm0
  movdqa D50(%rip),%xmm1
  mov    %fs:0x28,%rax
  mov    %rax,0x1e8(%rsp)
  movabs $0x6867666564636261,%rax
  lea    0xb0(%rsp),%r13
  mov    %dx,0x3c(%rsp)
  lea    0x7(%rsp),%rdi
  movaps %xmm0,0x70(%rsp)
  movdqa D30(%rip),%xmm0
  mov    %r13,%rdx
  lea    0x100(%rsp),%r14
  mov    %cx,0x6c(%rsp)
  lea    0x150(%rsp),%rbp
  lea    0x1a0(%rsp),%r12
  movaps %xmm0,0x80(%rsp)
  movdqa D5(%rip),%xmm0
  movaps %xmm1,0x20(%rsp)
  movaps %xmm0,0x90(%rsp)
  movdqa D49(%rip),%xmm0
  mov    %rax,0x7(%rsp)
  movabs $0x2e37393537343331,%rax
  movaps %xmm0,0x10(%rsp)
  movaps %xmm0,0x40(%rsp)
  movdqa D16(%rip),%xmm0
  mov    %rax,0xa0(%rsp)
  movabs $0x6c7020656874206e,%rax
  movaps %xmm0,0x50(%rsp)
  pxor   %xmm0,%xmm0
  movaps %xmm0,0xb0(%rsp)
  movaps %xmm0,0xc0(%rsp)
  mov    %rax,0x30(%rsp)
  mov    %rax,0x60(%rsp)
  movb   $0x0,0xf(%rsp)
  movb   $0x0,0xa8(%rsp)
  movl   $0x736e6961,0x38(%rsp)
  movl   $0x736e6961,0x68(%rsp)
  movaps %xmm0,0xd0(%rsp)
  movaps %xmm0,0xe0(%rsp)
  movaps %xmm0,0x100(%rsp)
  movaps %xmm0,0x110(%rsp)
  movaps %xmm0,0x120(%rsp)
  movaps %xmm0,0x130(%rsp)
  movaps %xmm0,0x150(%rsp)
  movaps %xmm0,0x160(%rsp)
  movaps %xmm0,0x170(%rsp)
  movaps %xmm0,0x180(%rsp)
  movaps %xmm0,0x1a0(%rsp)
  movaps %xmm0,0x1b0(%rsp)
  movaps %xmm0,0x1c0(%rsp)
  movaps %xmm0,0x1d0(%rsp)
  movb   $0x0,0xf0(%rsp)
  movb   $0x0,0x140(%rsp)
  movb   $0x0,0x190(%rsp)
  movb   $0x0,0x1e0(%rsp)
  call   <nilsimsa_compute@plt>
  lea    0x70(%rsp),%rdi
  mov    %r14,%rdx
  mov    $0x38,%esi
  call   <nilsimsa_compute@plt>
  lea    0x10(%rsp),%rdi
  mov    %rbp,%rdx
  mov    $0x2d,%esi
  call   <nilsimsa_compute@plt>
  mov    %r12,%rdx
  lea    0x40(%rsp),%rdi
  mov    $0x2d,%esi
  call   <nilsimsa_compute@plt>
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <nilsimsa_compare@plt>
  xor    %edi,%edi
  cmp    $0x4,%eax
  sete   %dil
  call   <assert@plt>
  mov    %rbp,%rdi
  mov    %r12,%rsi
  call   <nilsimsa_compare@plt>
  xor    %edi,%edi
  cmp    $0x5c,%eax
  sete   %dil
  call   <assert@plt>
  mov    0x1e8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0x1f8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D57
data_type: byte[16]
name: read_data
arguments: data_tag: D50
data_type: byte[16]
name: read_data
arguments: data_tag: D30
data_type: byte[16]
name: read_data
arguments: data_tag: D5
data_type: byte[16]
name: read_data
arguments: data_tag: D49
data_type: byte[16]
name: read_data
arguments: data_tag: D16
data_type: byte[16]

tool: {"D57": [0x54,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x61,0x20,0x6d,0x75,0x63,0x68,0x20,0x6d]}

tool: {"D50": [0x6e,0x20,0x66,0x61,0x6c,0x6c,0x73,0x20,0x6d,0x6f,0x73,0x74,0x6c,0x79,0x20,0x69]}

tool: {"D30": [0x6f,0x72,0x65,0x20,0x72,0x69,0x64,0x69,0x63,0x75,0x6c,0x6f,0x75,0x73,0x20,0x74]}

tool: {"D5": [0x65,0x73,0x74,0x20,0x62,0x65,0x63,0x61,0x75,0x73,0x65,0x20,0x6f,0x66,0x20,0x32]}

tool: {"D49": [0x54,0x68,0x65,0x20,0x72,0x61,0x69,0x6e,0x20,0x69,0x6e,0x20,0x53,0x70,0x61,0x69]}

tool: {"D16": [0x6e,0x20,0x66,0x61,0x6c,0x6c,0x73,0x20,0x6d,0x61,0x69,0x6e,0x6c,0x79,0x20,0x69]}

assistant: ```c
int main(int argc, char **argv) {
  const char data1[] = "abcdefgh";
  const char data2[] = "This is a much more ridiculous test because of 21347597.";
  const char data3[] = "The rain in Spain falls mostly in the plains.";
  const char data4[] = "The rain in Spain falls mainly in the plains.";
  int data1_sz = sizeof(data1) / sizeof(data1[0]) - 1;
  int data2_sz = sizeof(data2) / sizeof(data2[0]) - 1;
  int data3_sz = sizeof(data3) / sizeof(data3[0]) - 1;
  int data4_sz = sizeof(data4) / sizeof(data4[0]) - 1;
  char hash1[65] = {0};
  char hash2[65] = {0};
  char hash3[65] = {0};
  char hash4[65] = {0};
  nilsimsa_compute(data1, data1_sz, hash1);
  nilsimsa_compute(data2, data2_sz, hash2);
  nilsimsa_compute(data3, data3_sz, hash3);
  nilsimsa_compute(data4, data4_sz, hash4);
  assert(nilsimsa_compare(hash1, hash2) == 4);
  assert(nilsimsa_compare(hash3, hash4) == 92);
  return 0;
}
```