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

```asm
<ScoreBoard>:
  endbr64
  push   %r15
  mov    %rdi,%rax
  pxor   %xmm0,%xmm0
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xb8,%rsp
  mov    (%rdi),%esi
  mov    0x4(%rdi),%ebx
  mov    %fs:0x28,%rdx
  mov    %rdx,0xa8(%rsp)
  xor    %edx,%edx
  mov    0x8(%rdi),%r10d
  mov    0xc(%rdi),%edi
  movl   $0x0,0xa0(%rsp)
  mov    %esi,%edx
  mov    0x14(%rax),%r11d
  mov    0x18(%rax),%r8d
  mov    %esi,0x2c(%rsp)
  add    %ebx,%edx
  movaps %xmm0,0x80(%rsp)
  add    %r10d,%edx
  movaps %xmm0,0x90(%rsp)
  add    %edi,%edx
  mov    %edi,0x8(%rsp)
  lea    0x4(%rdx),%ecx
  sub    %esi,%edx
  mov    %ebx,0x30(%rsp)
  movslq %ecx,%rcx
  mov    %r11d,0x3c(%rsp)
  movl   $0x1,0x80(%rsp,%rcx,4)
  mov    0x10(%rax),%ecx
  mov    %r10d,0x34(%rsp)
  add    %ecx,%edx
  mov    %ecx,0x38(%rsp)
  lea    0x4(%rdx),%ecx
  sub    %ebx,%edx
  mov    %r8d,0x54(%rsp)
  add    %r11d,%edx
  movslq %ecx,%rcx
  addl   $0x1,0x80(%rsp,%rcx,4)
  lea    0x4(%rdx),%ecx
  sub    %r10d,%edx
  lea    0x4(%rdx,%r8,1),%edx
  movslq %ecx,%rcx
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rcx,4)
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    0x1c(%rax),%ebx
  mov    0x20(%rax),%r8d
  mov    0x24(%rax),%r10d
  mov    %ebx,%edx
  mov    0x28(%rax),%r13d
  mov    0x30(%rax),%ebp
  mov    %ebx,0x40(%rsp)
  add    %r8d,%edx
  mov    0x34(%rax),%r14d
  mov    0x3c(%rax),%edi
  mov    %r8d,0xc(%rsp)
  add    %r10d,%edx
  mov    0x40(%rax),%r12d
  mov    0x44(%rax),%esi
  mov    %ebp,0x14(%rsp)
  add    %r13d,%edx
  mov    %r14d,0x58(%rsp)
  lea    0x4(%rdx),%ecx
  sub    %ebx,%edx
  mov    %esi,0x18(%rsp)
  movslq %ecx,%rcx
  addl   $0x1,0x80(%rsp,%rcx,4)
  mov    0x2c(%rax),%ecx
  add    %ecx,%edx
  mov    %ecx,0x10(%rsp)
  lea    0x4(%rdx),%ecx
  sub    %r8d,%edx
  mov    0x48(%rax),%r8d
  add    %ebp,%edx
  movslq %ecx,%rcx
  addl   $0x1,0x80(%rsp,%rcx,4)
  lea    0x4(%rdx),%ecx
  sub    %r10d,%edx
  lea    0x4(%rdx,%r14,1),%edx
  mov    0x38(%rax),%r14d
  movslq %ecx,%rcx
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rcx,4)
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    %r14d,%edx
  add    %edi,%edx
  mov    %r14d,0x5c(%rsp)
  add    %r12d,%edx
  add    %esi,%edx
  lea    0x4(%rdx),%ecx
  sub    %r14d,%edx
  movslq %ecx,%rcx
  add    %r8d,%edx
  addl   $0x1,0x80(%rsp,%rcx,4)
  lea    0x4(%rdx),%ecx
  movslq %ecx,%rcx
  addl   $0x1,0x80(%rsp,%rcx,4)
  sub    %edi,%edx
  mov    %edi,0x60(%rsp)
  mov    0x4c(%rax),%r9d
  mov    0x50(%rax),%r15d
  mov    0x54(%rax),%r11d
  add    %r9d,%edx
  mov    0x5c(%rax),%r14d
  mov    0x6c(%rax),%esi
  mov    %r9d,0x44(%rsp)
  lea    0x4(%rdx),%ecx
  sub    %r12d,%edx
  mov    %r15d,0x70(%rsp)
  mov    0x70(%rax),%ebp
  lea    0x4(%rdx,%r15,1),%edx
  movslq %ecx,%rcx
  mov    0x58(%rax),%r15d
  mov    %r11d,0x64(%rsp)
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rcx,4)
  mov    0x60(%rax),%ecx
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    %r11d,%edx
  add    %r15d,%edx
  mov    %r15d,0x48(%rsp)
  add    %r14d,%edx
  mov    %esi,0x7c(%rsp)
  add    %ecx,%edx
  lea    0x4(%rdx),%edi
  sub    %r11d,%edx
  mov    0x78(%rax),%r11d
  movslq %edi,%rdi
  addl   $0x1,0x80(%rsp,%rdi,4)
  mov    0x64(%rax),%edi
  add    %edi,%edx
  lea    0x4(%rdx),%r9d
  sub    %r15d,%edx
  mov    0x68(%rax),%r15d
  movslq %r9d,%r9
  add    %r15d,%edx
  mov    %r15d,0x1c(%rsp)
  mov    %r11d,%r15d
  addl   $0x1,0x80(%rsp,%r9,4)
  lea    0x4(%rdx),%r9d
  sub    %r14d,%edx
  movslq %r9d,%r9
  lea    0x4(%rdx,%rsi,1),%edx
  addl   $0x1,0x80(%rsp,%r9,4)
  movslq %edx,%rdx
  mov    0x74(%rax),%r9d
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    %ebp,%edx
  mov    %r9d,%esi
  add    %r9d,%edx
  mov    0x7c(%rax),%r9d
  add    %r11d,%edx
  add    %r9d,%edx
  lea    0x4(%rdx),%r11d
  sub    %ebp,%edx
  movslq %r11d,%r11
  addl   $0x1,0x80(%rsp,%r11,4)
  mov    0x80(%rax),%r11d
  mov    %ebp,0x68(%rsp)
  add    %r11d,%edx
  mov    %esi,0x6c(%rsp)
  lea    0x4(%rdx),%ebx
  sub    %esi,%edx
  mov    %r15d,0x4c(%rsp)
  mov    0x94(%rax),%esi
  movslq %ebx,%rbx
  addl   $0x1,0x80(%rsp,%rbx,4)
  mov    0x84(%rax),%ebx
  mov    %esi,0x24(%rsp)
  add    %ebx,%edx
  lea    0x4(%rdx),%ebp
  sub    %r15d,%edx
  movslq %ebp,%rbp
  addl   $0x1,0x80(%rsp,%rbp,4)
  mov    0x88(%rax),%ebp
  lea    0x4(%rdx,%rbp,1),%edx
  mov    %ebp,0x74(%rsp)
  mov    0x8c(%rax),%ebp
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    0x90(%rax),%edx
  mov    %ebp,%r15d
  mov    %r15d,0x50(%rsp)
  add    %edx,%ebp
  mov    %edx,0x20(%rsp)
  mov    %ebp,%edx
  mov    0x98(%rax),%ebp
  add    %esi,%edx
  mov    0x9c(%rax),%esi
  add    %ebp,%edx
  mov    %ebp,0x28(%rsp)
  lea    0x4(%rdx),%ebp
  movslq %ebp,%rbp
  addl   $0x1,0x80(%rsp,%rbp,4)
  sub    %r15d,%edx
  add    %esi,%edx
  lea    0x4(%rdx),%ebp
  sub    0x20(%rsp),%edx
  movslq %ebp,%rbp
  addl   $0x1,0x80(%rsp,%rbp,4)
  mov    0xa0(%rax),%ebp
  add    %ebp,%edx
  lea    0x4(%rdx),%r15d
  sub    0x24(%rsp),%edx
  movslq %r15d,%r15
  addl   $0x1,0x80(%rsp,%r15,4)
  mov    0xa4(%rax),%r15d
  lea    0x4(%rdx,%r15,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x2c(%rsp),%eax
  add    0x40(%rsp),%eax
  add    0x5c(%rsp),%eax
  add    0x64(%rsp),%eax
  lea    0x4(%rax),%edx
  sub    0x2c(%rsp),%eax
  add    0x68(%rsp),%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  lea    0x4(%rax),%edx
  sub    0x40(%rsp),%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    0x50(%rsp),%edx
  lea    0x4(%rdx,%rax,1),%eax
  mov    0x30(%rsp),%edx
  add    0xc(%rsp),%edx
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x60(%rsp),%eax
  add    %edx,%eax
  add    0x48(%rsp),%eax
  lea    0x4(%rax),%edx
  sub    0x30(%rsp),%eax
  add    0x6c(%rsp),%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  lea    0x4(%rax),%edx
  sub    0xc(%rsp),%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    0x20(%rsp),%edx
  lea    0x4(%rdx,%rax,1),%eax
  mov    0x34(%rsp),%edx
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rdx,%r10,1),%eax
  add    %r12d,%eax
  add    %r14d,%eax
  lea    0x4(%rax),%edx
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  sub    0x34(%rsp),%eax
  add    0x4c(%rsp),%eax
  mov    %esi,0x78(%rsp)
  lea    0x4(%rax),%edx
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    0x24(%rsp),%edx
  sub    %r10d,%eax
  lea    0x4(%rdx,%rax,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x8(%rsp),%eax
  add    %r13d,%eax
  add    0x18(%rsp),%eax
  add    %ecx,%eax
  lea    0x4(%rax),%edx
  sub    0x8(%rsp),%eax
  add    %r9d,%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  lea    0x4(%rax),%edx
  sub    %r13d,%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    0x28(%rsp),%edx
  lea    0x4(%rdx,%rax,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x38(%rsp),%eax
  add    0x10(%rsp),%eax
  add    %r8d,%eax
  add    %edi,%eax
  lea    0x4(%rax),%edx
  sub    0x38(%rsp),%eax
  add    %r11d,%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  lea    0x4(%rax),%edx
  sub    0x10(%rsp),%eax
  lea    0x4(%rsi,%rax,1),%eax
  movslq %edx,%rdx
  mov    0x14(%rsp),%esi
  cltq
  addl   $0x1,0x80(%rsp,%rdx,4)
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x3c(%rsp),%eax
  add    %esi,%eax
  add    0x44(%rsp),%eax
  add    0x1c(%rsp),%eax
  lea    0x4(%rax),%edx
  sub    0x3c(%rsp),%eax
  add    %ebx,%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  lea    0x4(%rax),%edx
  sub    %esi,%eax
  mov    0x7c(%rsp),%esi
  lea    0x4(%rbp,%rax,1),%eax
  movslq %edx,%rdx
  cltq
  addl   $0x1,0x80(%rsp,%rdx,4)
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x54(%rsp),%eax
  add    0x58(%rsp),%eax
  add    0x70(%rsp),%eax
  add    %esi,%eax
  lea    0x4(%rax),%edx
  sub    0x54(%rsp),%eax
  add    0x74(%rsp),%eax
  movslq %edx,%rdx
  addl   $0x1,0x80(%rsp,%rdx,4)
  lea    0x4(%rax),%edx
  sub    0x58(%rsp),%eax
  lea    0x4(%rax,%r15,1),%eax
  movslq %edx,%rdx
  cltq
  addl   $0x1,0x80(%rsp,%rdx,4)
  mov    0x30(%rsp),%edx
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x2c(%rsp),%eax
  add    0xc(%rsp),%eax
  add    %r12d,%eax
  lea    0x4(%rax,%rcx,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rdx,%r10,1),%eax
  add    0x18(%rsp),%eax
  mov    0x34(%rsp),%edx
  lea    0x4(%rax,%rdi,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rdx,%r13,1),%eax
  mov    0x1c(%rsp),%edx
  add    %r8d,%eax
  lea    0x4(%rax,%rdx,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x8(%rsp),%eax
  add    0x10(%rsp),%eax
  add    0x44(%rsp),%eax
  lea    0x4(%rax,%rsi,1),%eax
  mov    0x60(%rsp),%edx
  mov    0x18(%rsp),%esi
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x40(%rsp),%eax
  add    %edx,%eax
  add    %r14d,%eax
  lea    0x4(%rax,%r9,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0xc(%rsp),%eax
  add    %r12d,%eax
  add    %ecx,%eax
  lea    0x4(%rax,%r11,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%r10,%rsi,1),%eax
  mov    0x74(%rsp),%esi
  add    %edi,%eax
  lea    0x4(%rax,%rbx,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    0x0(%r13,%r8,1),%eax
  add    0x1c(%rsp),%eax
  lea    0x4(%rax,%rsi,1),%eax
  mov    0x28(%rsp),%esi
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x5c(%rsp),%eax
  add    0x48(%rsp),%eax
  add    0x4c(%rsp),%eax
  lea    0x4(%rsi,%rax,1),%eax
  mov    0x78(%rsp),%esi
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rdx,%r14,1),%eax
  add    %r9d,%eax
  lea    0x4(%rsi,%rax,1),%eax
  mov    0x18(%rsp),%esi
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%r12,%rcx,1),%eax
  add    %r11d,%eax
  lea    0x4(%rbp,%rax,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rsi,%rdi,1),%eax
  add    %ebx,%eax
  lea    0x4(%r15,%rax,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  add    0x64(%rsp),%edx
  mov    %edx,%eax
  mov    0x8(%rsp),%edx
  mov    0x48(%rsp),%ebx
  add    %r10d,%eax
  mov    0x38(%rsp),%r10d
  mov    0x14(%rsp),%ebp
  lea    0x4(%rax,%rdx,1),%eax
  mov    0x10(%rsp),%edx
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%r12,%rbx,1),%eax
  add    %r13d,%eax
  lea    0x4(%rax,%r10,1),%eax
  mov    0x3c(%rsp),%r10d
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rsi,%r14,1),%eax
  add    %edx,%eax
  lea    0x4(%rax,%r10,1),%eax
  mov    0x54(%rsp),%r10d
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%r8,%rcx,1),%eax
  add    %ebp,%eax
  lea    0x4(%rax,%r10,1),%eax
  mov    0x44(%rsp),%r10d
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x68(%rsp),%eax
  add    %ebx,%eax
  mov    0x4c(%rsp),%ebx
  add    %r12d,%eax
  lea    0x4(%rax,%r13,1),%eax
  mov    0x6c(%rsp),%r13d
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%r14,%r13,1),%eax
  add    %esi,%eax
  lea    0x4(%rax,%rdx,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rcx,%rbx,1),%eax
  add    %r8d,%eax
  lea    0x4(%rax,%rbp,1),%eax
  mov    0x58(%rsp),%ebp
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rdi,%r9,1),%eax
  add    %r10d,%eax
  lea    0x4(%rax,%rbp,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x50(%rsp),%eax
  add    %r13d,%eax
  add    %r14d,%eax
  lea    0x4(%rax,%rsi,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x20(%rsp),%eax
  mov    0x28(%rsp),%esi
  mov    0x70(%rsp),%r15d
  add    %ebx,%eax
  add    %ecx,%eax
  lea    0x4(%rax,%r8,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x24(%rsp),%eax
  add    %r9d,%eax
  add    %edi,%eax
  lea    0x4(%rax,%r10,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  lea    (%rsi,%r11,1),%eax
  add    0x1c(%rsp),%eax
  lea    0x4(%rax,%r15,1),%eax
  cltq
  addl   $0x1,0x80(%rsp,%rax,4)
  mov    0x80(%rsp),%ecx
  test   %ecx,%ecx
  jne    L23
  mov    0xa0(%rsp),%edx
  mov    $0xf4240,%eax
  test   %edx,%edx
  jne    L22
  mov    0x98(%rsp),%edx
  mov    0x94(%rsp),%eax
  mov    0x88(%rsp),%edi
  lea    (%rax,%rdx,2),%eax
  mov    0x9c(%rsp),%edx
  lea    (%rdx,%rdx,4),%edx
  add    %edx,%eax
  lea    (%rdi,%rdi,1),%edx
  sub    0x8c(%rsp),%eax
  sub    %edx,%eax
  mov    0x84(%rsp),%edx
  lea    (%rdx,%rdx,4),%edx
  sub    %edx,%eax
L22:
  mov    0xa8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L30
  add    $0xb8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L23:
  mov    $0xfff0bdc0,%eax
  jmp    L22
L30:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int ScoreBoard(int scores[][7]) {
  int counters[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
  int x, y;
  for (y = 0; y < 6; y++) {
    int score = scores[y][0] + scores[y][1] + scores[y][2];
    for (x = 3; x < 7; x++) {
      score += scores[y][x];
      counters[score + 4]++;
      score -= scores[y][x - 3];
    }
  }
  for (x = 0; x < 7; x++) {
    int score = scores[0][x] + scores[1][x] + scores[2][x];
    for (y = 3; y < 6; y++) {
      score += scores[y][x];
      counters[score + 4]++;
      score -= scores[y - 3][x];
    }
  }
  for (y = 0; y < 6 - 3; y++) {
    for (x = 0; x < 7 - 3; x++) {
      int score = 0, idx = 0;
      for (idx = 0; idx < 4; idx++) {
        score += scores[y + idx][x + idx];
      }
      counters[score + 4]++;
    }
  }
  for (y = 3; y < 6; y++) {
    for (x = 0; x < 7 - 3; x++) {
      int score = 0, idx = 0;
      for (idx = 0; idx < 4; idx++) {
        score += scores[y - idx][x + idx];
      }
      counters[score + 4]++;
    }
  }
  if (counters[0] != 0)
    return -1000000;
  else if (counters[8] != 0)
    return 1000000;
  else
    return counters[5] + 2 * counters[6] + 5 * counters[7] - counters[3] - 2 * counters[2] - 5 * counters[1];
}
```