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

```asm
<main>:
  endbr64
  push   %r15
  xor    %edi,%edi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x14(%rsp)
  movb   $0x79,0x13(%rsp)
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  xor    %eax,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0x10624dd3,%rdx,%rdx
  sar    $0x1f,%ecx
  sar    $0x26,%rdx
  sub    %ecx,%edx
  imul   $0x3e8,%edx,%edx
  sub    %edx,%eax
  cmpb   $0x79,0x13(%rsp)
  lea    0x1(%rax),%ebx
  lea    0x13(%rsp),%rax
  mov    %rax,0x8(%rsp)
  jne    L81
  xor    %ebp,%ebp
  lea    D61(%rip),%r13
  lea    D29(%rip),%r15
  lea    D32(%rip),%r14
L77:
  lea    D8(%rip),%rdi
  call   <puts@plt>
  cmp    %ebx,0x14(%rsp)
  je     L54
  lea    0x14(%rsp),%r12
  jmp    L48
  nopl   0x0(%rax)
L65:
  jl     L59
L13:
  cmp    %ebx,%eax
  je     L54
L48:
  mov    %r12,%rsi
  mov    %r13,%rdi
  xor    %eax,%eax
  add    $0x1,%ebp
  call   <scanf@plt>
  mov    0x14(%rsp),%eax
  cmp    %ebx,%eax
  jle    L65
  mov    %r14,%rdi
  call   <puts@plt>
  mov    0x14(%rsp),%eax
  cmp    %ebx,%eax
  jne    L48
L54:
  mov    %ebp,%edi
  call   <inf@plt>
  lea    D28(%rip),%rdi
  call   <puts@plt>
  xor    %eax,%eax
  call   <rand@plt>
  mov    0x8(%rsp),%rsi
  lea    D33(%rip),%rdi
  movslq %eax,%rdx
  mov    %rdx,%rbx
  imul   $0x10624dd3,%rdx,%rdx
  mov    %ebx,%eax
  sar    $0x1f,%eax
  sar    $0x26,%rdx
  sub    %eax,%edx
  xor    %eax,%eax
  imul   $0x3e8,%edx,%edx
  sub    %edx,%ebx
  call   <scanf@plt>
  lea    D57(%rip),%rdi
  add    $0x1,%ebx
  call   <puts@plt>
  cmpb   $0x79,0x13(%rsp)
  je     L77
L81:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L25
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L59:
  mov    %r15,%rdi
  call   <puts@plt>
  mov    0x14(%rsp),%eax
  jmp    L13
L25:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D61
data_type: string
name: retrieve_data
arguments: data_tag: D29
data_type: string
name: retrieve_data
arguments: data_tag: D32
data_type: string
name: retrieve_data
arguments: data_tag: D8
data_type: string
name: retrieve_data
arguments: data_tag: D28
data_type: string
name: retrieve_data
arguments: data_tag: D33
data_type: string
name: retrieve_data
arguments: data_tag: D57
data_type: string

tool: D61: %d

tool: D29: Too low.Try again.

tool: D32: Too high.Try again.

tool: D8: I have a number between 1 and 1000.
Can you guess my number?
Please type your first guess.

tool: D28: Would you like to play again (y or n)?

tool: D33:  %c

tool: D57: 


assistant: ```c
void main(void) {
  int num, guess = 0, n = 0;
  char status = 'y';
  srand(time(NULL));
  num = rand() % 1000 + 1;
  while ('y' == status) {
    printf("I have a number between 1 and 1000.\nCan you guess my number?\nPlease type your first guess.\n");
    while (guess != num) {
      scanf("%d", &guess);
      ++n;
      if (guess > num) {
        printf("%s\n", "Too high.Try again.");
      } else if (guess < num) {
        printf("%s\n", "Too low.Try again.");
      }
    }
    inf(n);
    printf("%s\n", "Would you like to play again (y or n)?");
    num = rand() % 1000 + 1;
    scanf(" %c", &status);
    printf("\n\n");
  }
}
```