user: What is the c source code of the assembly code below?

```asm
<receiveGameBoard>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %rdi,-0x98(%rbp)
  mov    %esi,-0x9c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x84(%rbp)
  movl   $0x0,-0x90(%rbp)
  movl   $0x0,-0x8c(%rbp)
  movl   $0x0,-0x88(%rbp)
  mov    $0x0,%eax
  call   <rx_Handshake@plt>
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L76
L104:
  mov    $0x10001010,%edi
  call   <__builtin_ldwio@plt>
  mov    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%eax
  mov    %eax,%edx
  mov    -0x78(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x80(%rbp),%eax
  shr    $0xf,%eax
  and    $0x1,%eax
  sub    $0x1,%eax
  mov    %eax,-0x7c(%rbp)
  mov    -0x80(%rbp),%eax
  mov    %eax,%edi
  call   <alt_up_rs232_check_parity@plt>
  mov    %eax,-0x84(%rbp)
  cmpl   $0xffffffff,-0x7c(%rbp)
  je     L76
  mov    -0x78(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L119
  movl   $0x1,-0x90(%rbp)
  jmp    L76
L119:
  mov    -0x78(%rbp),%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    -0x8c(%rbp),%eax
  cltq
  mov    %dl,-0x70(%rbp,%rax,1)
  addl   $0x1,-0x8c(%rbp)
L76:
  cmpl   $0x0,-0x90(%rbp)
  je     L104
  mov    -0x8c(%rbp),%eax
  cmp    -0x9c(%rbp),%eax
  je     L75
  mov    $0x1,%eax
  jmp    L44
L75:
  movl   $0x0,-0x88(%rbp)
  jmp    L67
L70:
  mov    -0x88(%rbp),%ecx
  movslq %ecx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %ecx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  sub    %eax,%ecx
  mov    %ecx,%edx
  test   %edx,%edx
  jne    L106
  mov    $0xa,%edi
  call   <putchar@plt>
L106:
  mov    -0x88(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%eax
  movsbl %al,%eax
  mov    %eax,%esi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x88(%rbp)
L67:
  mov    -0x88(%rbp),%eax
  cmp    -0x8c(%rbp),%eax
  jl     L70
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x88(%rbp)
  jmp    L40
L47:
  mov    -0x88(%rbp),%eax
  cltq
  movzbl -0x70(%rbp,%rax,1),%eax
  movsbl %al,%edx
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x98(%rbp),%rax
  add    %rcx,%rax
  sub    $0x30,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x88(%rbp)
L40:
  mov    -0x88(%rbp),%eax
  cmp    -0x9c(%rbp),%eax
  jl     L47
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
L44:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L0
  call   <__stack_chk_fail@plt>
L0:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D6
type: string
name: extract_symbolic_data
arguments: tag: D18
type: string

tool: D6: rx_Handshake established!

tool: D18: %c,

assistant: ```c
int receiveGameBoard(volatile int gameBoard[], int length) {
  unsigned int data_reg;
  unsigned char *data;
  unsigned int pe = 0;
  int retVal;
  char charGameBoard[101];
  int messageReceived = 0;
  int idx = 0, i = 0;
  rx_Handshake();
  printf("rx_Handshake established!\n");
  while (messageReceived == 0) {
    data_reg = __builtin_ldwio(((volatile int *)0x10001010));
    *data = (data_reg & 0x000001FF);
    retVal = ((data_reg & 0x00008000) >> 15) - 1;
    pe = alt_up_rs232_check_parity(data_reg);
    if (retVal != -1) {
      if (((char)('\n')) == ((char)*data)) {
        messageReceived = 1;
      } else {
        charGameBoard[idx] = (char)(*data);
        idx++;
      }
    }
  }
  if (idx != length)
    return 1;
  for (i = 0; i < idx; i++) {
    if (i % 10 == 0)
      printf("\n");
    printf("%c,", (char)charGameBoard[i]);
  }
  printf("\n");
  for (i = 0; i < length; i++) {
    gameBoard[i] = charGameBoard[i] - '0';
  }
  printf("\n");
  return 0;
}
```