user: 请将以下的汇编代码转换成C语言代码:

```asm
<test_array>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %edi,-0xa4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movabs $0x7365742073696854,%rax
  movabs $0x676e697274732074,%rdx
  mov    %rax,-0xa0(%rbp)
  mov    %rdx,-0x98(%rbp)
  movabs $0x4f4e205453554d20,%rax
  movabs $0x646f6d2065622054,%rdx
  mov    %rax,-0x90(%rbp)
  mov    %rdx,-0x88(%rbp)
  movabs $0x2e2e2e6465696669,%rax
  mov    %rax,-0x80(%rbp)
  movb   $0x0,-0x78(%rbp)
  movzbl -0x9b(%rbp),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <report@plt>
  lea    -0xa0(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    $0x28,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  movzbl -0x9b(%rbp),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <report@plt>
  movzbl -0x6b(%rbp),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <report@plt>
  mov    -0xa4(%rbp),%eax
  mov    %eax,%edi
  call   <report@plt>
  movzbl -0x70(%rbp),%eax
  movsbl %al,%edx
  movzbl -0x6f(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x6e(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x6d(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x6c(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x6b(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x6a(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x69(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x68(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x67(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x66(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x65(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x64(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x63(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x62(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x61(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x60(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x5f(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x5e(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x5d(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x5c(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x5b(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x5a(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x59(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x58(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x57(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x56(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x55(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x54(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x53(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x52(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x51(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x50(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x4f(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x4e(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x4d(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x4c(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x4b(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x4a(%rbp),%eax
  movsbl %al,%eax
  add    %eax,%edx
  movzbl -0x49(%rbp),%eax
  movsbl %al,%eax
  add    %edx,%eax
  add    %eax,-0xa4(%rbp)
  mov    -0xa4(%rbp),%eax
  mov    %eax,%edi
  call   <report@plt>
  mov    -0xa4(%rbp),%eax
  cltq
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L9
  call   <__stack_chk_fail@plt>
L9:
  leave
  ret
```

assistant: ```c
signed long test_array(int i) {
  char a1[] = "This test string MUST NOT be modified...";
  char a2[100];
  report(a1[5]);
  memcpy(a2, a1, 40);
  report(a1[5]);
  report(a2[5]);
  report(i);
  i += a2[0] + a2[1] + a2[2] + a2[3] + a2[4] + a2[5] + a2[6] + a2[7] + a2[8] + a2[9] + a2[10] + a2[11] + a2[12] + a2[13] + a2[14] + a2[15] + a2[16] + a2[17] + a2[18] + a2[19] + a2[20] + a2[21] + a2[22] + a2[23] + a2[24] + a2[25] + a2[26] + a2[27] + a2[28] + a2[29] + a2[30] + a2[31] + a2[32] + a2[33] + a2[34] + a2[35] + a2[36] + a2[37] + a2[38] + a2[39];
  report(i);
  return i;
}
```