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

```asm
<main>:
  endbr64
  sub    $0x28,%rsp
  lea    D86(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    0xc(%rsp),%rcx
  lea    0x8(%rsp),%rdx
  xor    %eax,%eax
  lea    0x4(%rsp),%rsi
  lea    0x10(%rsp),%r8
  lea    D16(%rip),%rdi
  call   <scanf@plt>
  lea    D57(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  lea    0x14(%rsp),%rsi
  lea    D43(%rip),%rdi
  call   <scanf@plt>
  movss  0x14(%rsp),%xmm0
  movss  0x4(%rsp),%xmm1
  comiss %xmm1,%xmm0
  ja     L30
L84:
  comiss %xmm0,%xmm1
  jbe    L128
  comiss 0x8(%rsp),%xmm0
  jae    L57
L128:
  movss  0x8(%rsp),%xmm1
  comiss %xmm0,%xmm1
  jbe    L87
  comiss 0xc(%rsp),%xmm0
  jae    L29
L87:
  movss  0xc(%rsp),%xmm1
  comiss %xmm0,%xmm1
  jbe    L40
  comiss 0x10(%rsp),%xmm0
  jae    L53
L40:
  movss  0x10(%rsp),%xmm0
  comiss 0x14(%rsp),%xmm0
  ja     L71
L136:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L28
  xor    %eax,%eax
  add    $0x28,%rsp
  ret
L30:
  lea    D50(%rip),%rdi
  call   <printf@plt>
  movss  0x14(%rsp),%xmm0
  movss  0x4(%rsp),%xmm1
  jmp    L84
L71:
  lea    D26(%rip),%rdi
  call   <printf@plt>
  jmp    L136
L53:
  lea    D78(%rip),%rdi
  call   <printf@plt>
  jmp    L40
L57:
  lea    D15(%rip),%rdi
  call   <printf@plt>
  movss  0x14(%rsp),%xmm0
  jmp    L128
L29:
  lea    D27(%rip),%rdi
  call   <printf@plt>
  movss  0x14(%rsp),%xmm0
  jmp    L87
L28:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D86
type_guessed: string
name: retrieve_data
arguments: label: D16
type_guessed: string
name: retrieve_data
arguments: label: D57
type_guessed: string
name: retrieve_data
arguments: label: D43
type_guessed: string
name: retrieve_data
arguments: label: D50
type_guessed: string
name: retrieve_data
arguments: label: D26
type_guessed: string
name: retrieve_data
arguments: label: D78
type_guessed: string
name: retrieve_data
arguments: label: D15
type_guessed: string
name: retrieve_data
arguments: label: D27
type_guessed: string

tool: D86: Enter thresholds for A, B, C, D
in that order, decreasing percentages > 

tool: D16: %f%f%f%f

tool: D57: Thank you. Now enter student score (percent) >

tool: D43: %f

tool: D50: Student has an A grade


tool: D26: Student has failed the course


tool: D78: Student has an D grade


tool: D15: Student has an B grade


tool: D27: Student has an C grade


assistant: ```c
int main() {
  float thresha, threshb, threshc, threshd, stuscore;
  printf("Enter thresholds for A, B, C, D\nin that order, decreasing percentages > ");
  scanf("%f%f%f%f", &thresha, &threshb, &threshc, &threshd);
  printf("Thank you. Now enter student score (percent) >");
  scanf("%f", &stuscore);
  if (stuscore > thresha)
    printf("Student has an A grade\n");
  if ((stuscore < thresha) && (stuscore >= threshb))
    printf("Student has an B grade\n");
  if ((stuscore < threshb) && (stuscore >= threshc))
    printf("Student has an C grade\n");
  if ((stuscore < threshc) && (stuscore >= threshd))
    printf("Student has an D grade\n");
  if (stuscore < threshd)
    printf("Student has failed the course\n");
  return 0;
}
```