user: What would the C source look like for the assembly code provided here:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  mov    $0xa,%esi
  lea    D107(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%r15d
  movl   $0x0,0xc(%rsp)
  lea    D59(%rip),%rbp
  jmp    L39
L36:
  cmp    %ebx,%eax
  je     L41
  mov    %ebx,%edx
  mov    $0xa,%esi
  lea    D24(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%r15d
L57:
  lea    D7(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L119:
  mov    $0x0,%eax
  call   <getchar@plt>
  movsbl %al,%ebx
  mov    %ebx,%edi
  call   <isalpha@plt>
  test   %eax,%eax
  je     L119
  mov    %ebx,%edi
  call   <tolower@plt>
  cmp    $0x6e,%al
  je     L2
L39:
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  sar    $0x25,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x64,%edx,%edx
  sub    %edx,%eax
  lea    0x1(%rax),%ebx
  movl   $0x0,0x14(%rsp)
  mov    $0x64,%esi
  lea    D83(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmp    0x14(%rsp),%ebx
  je     L41
  mov    $0x0,%r12d
  lea    D98(%rip),%r14
  lea    D108(%rip),%r13
L105:
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x14(%rsp),%rsi
  mov    %r13,%rdi
  call   <scanf@plt>
  mov    0x14(%rsp),%eax
  sub    %ebx,%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    $0x63,%eax
  jg     L88
  movss  D49(%rip),%xmm1
  movss  %xmm1,0x8(%rsp)
L78:
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movss  0x8(%rsp),%xmm0
  mulss  D102(%rip),%xmm0
  movss  %xmm0,0x8(%rsp)
  cvttss2si %xmm0,%ecx
  mov    0x14(%rsp),%eax
  sub    %ebx,%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  cmp    %eax,%ecx
  jg     L78
L88:
  add    $0x1,%r12d
  mov    0x14(%rsp),%eax
  cmp    $0x9,%r12d
  jg     L36
  cmp    %ebx,%eax
  jne    L105
  jmp    L36
L41:
  lea    D99(%rip),%rdi
  call   <puts@plt>
  addl   $0x1,0xc(%rsp)
  jmp    L57
L2:
  mov    0xc(%rsp),%esi
  add    %esi,%r15d
  imul   $0x64,%esi,%eax
  cltd
  idiv   %r15d
  mov    %eax,%ecx
  mov    %r15d,%edx
  lea    D103(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L75
  mov    $0x0,%eax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L75:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D107
datatype: string
name: retrieve_data
arguments: data_label: D59
datatype: string
name: retrieve_data
arguments: data_label: D24
datatype: string
name: retrieve_data
arguments: data_label: D7
datatype: string
name: retrieve_data
arguments: data_label: D83
datatype: string
name: retrieve_data
arguments: data_label: D98
datatype: string
name: retrieve_data
arguments: data_label: D108
datatype: string
name: retrieve_data
arguments: data_label: D49
datatype: byte[4]
name: retrieve_data
arguments: data_label: D102
datatype: byte[4]
name: retrieve_data
arguments: data_label: D99
datatype: string
name: retrieve_data
arguments: data_label: D103
datatype: string

tool: D107: Seeing Stars
------------
This is a number guessing game with a twist. After every guess you
will be given a number of stars to tell you how close you are to the
number you are trying to guess. The more stars you see, the closer
you are.
You only have %d guesses, so think quick.



tool: D59: **

tool: D24: 
Sorry, thats %d guesses. My number was %d.


tool: D7: Do you want to play again? (y/n) 

tool: D83: 
I'm thinking of a number between 1 and %d.

tool: D98: 
What is your guess? 

tool: D108: %d

tool: {"D49": [0x00,0x00,0xc8,0x42]}

tool: {"D102": [0x00,0x00,0x00,0x3f]}

tool: D99: ******
Bingo! You got my number.

tool: D103: 
Well then, you won %d out of %d games, or %d%%.


assistant: ```c
int main() {
  int goal, guess, c, wins, loses;
  char yesno;
  float d;
  srand(time(NULL));
  wins = 0;
  loses = 0;
  printf("Seeing Stars\n------------\n"
         "This is a number guessing game with a twist. After every guess you\n"
         "will be given a number of stars to tell you how close you are to the\n"
         "number you are trying to guess. The more stars you see, the closer\n"
         "you are.\n"
         "You only have %d guesses, so think quick.\n\n",
         10);
  do {
    goal = rand() % 100 + 1;
    guess = 0;
    printf("\nI'm thinking of a number between 1 and %d.", 100);
    for (c = 0; c < 10 && guess != goal; c++) {
      printf("\nWhat is your guess? ");
      scanf("%d", &guess);
      for (d = 100; (int)d > abs(guess - goal); d /= 2)
        printf("**");
    }
    if (guess != goal) {
      printf("\nSorry, thats %d guesses. My number was %d.\n", 10, goal);
      loses++;
    } else {
      printf("******\nBingo! You got my number.\n");
      wins++;
    }
    printf("Do you want to play again? (y/n) ");
    while (!isalpha(yesno = getchar()))
      ;
  } while (tolower(yesno) != 'n');
  printf("\nWell then, you won %d out of %d games, or %d%%.\n", wins, wins + loses, wins * 100 / (wins + loses));
  exit(0);
}
```