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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x10(%rbp)
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x14(%rbp),%eax
  test   %eax,%eax
  js     L99
  mov    -0x14(%rbp),%eax
  cmp    $0x64,%eax
  jle    L24
L99:
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L14
L24:
  mov    -0x14(%rbp),%eax
  cmp    $0x5a,%eax
  jle    L64
  movl   $0xa,-0x10(%rbp)
  jmp    L196
L64:
  mov    -0x14(%rbp),%eax
  cmp    $0x50,%eax
  jle    L109
  movl   $0x9,-0x10(%rbp)
  jmp    L196
L109:
  mov    -0x14(%rbp),%eax
  cmp    $0x46,%eax
  jle    L125
  movl   $0x8,-0x10(%rbp)
  jmp    L196
L125:
  mov    -0x14(%rbp),%eax
  cmp    $0x3c,%eax
  jle    L179
  movl   $0x7,-0x10(%rbp)
  jmp    L196
L179:
  mov    -0x14(%rbp),%eax
  cmp    $0x32,%eax
  jle    L52
  movl   $0x6,-0x10(%rbp)
  jmp    L196
L52:
  movl   $0x5,-0x10(%rbp)
L196:
  movb   $0x20,-0x15(%rbp)
  mov    -0x14(%rbp),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0xc(%rbp)
  cmpl   $0x5,-0x10(%rbp)
  je     L120
  cmpl   $0x0,-0xc(%rbp)
  jle    L194
  cmpl   $0x3,-0xc(%rbp)
  jg     L194
  movb   $0x2d,-0x15(%rbp)
  jmp    L120
L194:
  cmpl   $0xa,-0x10(%rbp)
  je     L120
  cmpl   $0x7,-0xc(%rbp)
  jg     L168
  cmpl   $0x0,-0xc(%rbp)
  jne    L120
L168:
  movb   $0x2b,-0x15(%rbp)
L120:
  movsbl -0x15(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L14:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L33
  call   <__stack_chk_fail@plt>
L33:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D15
type_guessed: string
name: retrieve_data
arguments: label: D27
type_guessed: string
name: retrieve_data
arguments: label: D7
type_guessed: string
name: retrieve_data
arguments: label: D29
type_guessed: string

tool: D15: Vnesi poeni: 

tool: D27: %d

tool: D7: Nevalidna vrednost za poeni!

tool: D29: Ocenka %d%c


assistant: ```c
int main() {
  int poeni, ocenka = 0;
  printf("Vnesi poeni: \n");
  scanf("%d", &poeni);
  if (poeni < 0 || poeni > 100)
    printf("Nevalidna vrednost za poeni!\n");
  else {
    if (poeni > 90)
      ocenka = 10;
    else if (poeni > 80)
      ocenka = 9;
    else if (poeni > 70)
      ocenka = 8;
    else if (poeni > 60)
      ocenka = 7;
    else if (poeni > 50)
      ocenka = 6;
    else
      ocenka = 5;
    char znak = ' ';
    int pc = poeni % 10;
    if (ocenka != 5) {
      if (pc >= 1 && pc <= 3)
        znak = '-';
      else if (ocenka != 10 && (pc >= 8 || pc == 0))
        znak = '+';
    }
    printf("Ocenka %d%c\n", ocenka, znak);
  }
  return 0;
}
```