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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  movl   $0x0,-0x34(%rbp)
  jmp    L178
L158:
  mov    -0x34(%rbp),%eax
  cltq
  movzbl -0x30(%rbp,%rax,1),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %al,-0x35(%rbp)
  cmpb   $0x41,-0x35(%rbp)
  je     L238
  mov    -0x34(%rbp),%eax
  cltq
  movzbl -0x30(%rbp,%rax,1),%eax
  cmp    $0x42,%al
  je     L238
  cmpb   $0x43,-0x35(%rbp)
  jne    L111
L238:
  mov    $0x32,%edi
  call   <putchar@plt>
  jmp    L112
L111:
  cmpb   $0x44,-0x35(%rbp)
  je     L32
  cmpb   $0x45,-0x35(%rbp)
  je     L32
  cmpb   $0x46,-0x35(%rbp)
  jne    L214
L32:
  mov    $0x33,%edi
  call   <putchar@plt>
  jmp    L112
L214:
  cmpb   $0x47,-0x35(%rbp)
  je     L308
  cmpb   $0x48,-0x35(%rbp)
  je     L308
  cmpb   $0x49,-0x35(%rbp)
  jne    L268
L308:
  mov    $0x34,%edi
  call   <putchar@plt>
  jmp    L112
L268:
  cmpb   $0x4a,-0x35(%rbp)
  je     L184
  cmpb   $0x4b,-0x35(%rbp)
  je     L184
  cmpb   $0x4c,-0x35(%rbp)
  jne    L336
L184:
  mov    $0x35,%edi
  call   <putchar@plt>
  jmp    L112
L336:
  cmpb   $0x4d,-0x35(%rbp)
  je     L6
  cmpb   $0x4e,-0x35(%rbp)
  je     L6
  cmpb   $0x4f,-0x35(%rbp)
  jne    L85
L6:
  mov    $0x36,%edi
  call   <putchar@plt>
  jmp    L112
L85:
  cmpb   $0x50,-0x35(%rbp)
  je     L125
  cmpb   $0x51,-0x35(%rbp)
  je     L125
  cmpb   $0x52,-0x35(%rbp)
  je     L125
  cmpb   $0x53,-0x35(%rbp)
  jne    L93
L125:
  mov    $0x37,%edi
  call   <putchar@plt>
  jmp    L112
L93:
  cmpb   $0x54,-0x35(%rbp)
  je     L19
  cmpb   $0x55,-0x35(%rbp)
  je     L19
  cmpb   $0x56,-0x35(%rbp)
  jne    L57
L19:
  mov    $0x38,%edi
  call   <putchar@plt>
  jmp    L112
L57:
  cmpb   $0x57,-0x35(%rbp)
  je     L233
  cmpb   $0x58,-0x35(%rbp)
  je     L233
  cmpb   $0x59,-0x35(%rbp)
  je     L233
  cmpb   $0x5a,-0x35(%rbp)
  jne    L54
L233:
  mov    $0x39,%edi
  call   <putchar@plt>
  jmp    L112
L54:
  mov    -0x34(%rbp),%eax
  cltq
  movzbl -0x30(%rbp,%rax,1),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <putchar@plt>
L112:
  addl   $0x1,-0x34(%rbp)
L178:
  mov    -0x34(%rbp),%eax
  cltq
  movzbl -0x30(%rbp,%rax,1),%eax
  test   %al,%al
  jne    L158
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L132
  call   <__stack_chk_fail@plt>
L132:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D71
datatype: string
name: parse_data
arguments: label: D25
datatype: string
name: parse_data
arguments: label: D89
datatype: string
name: parse_data
arguments: label: D19
datatype: string
name: parse_data
arguments: label: D12
datatype: string
name: parse_data
arguments: label: D43
datatype: string
name: parse_data
arguments: label: D27
datatype: string
name: parse_data
arguments: label: D79
datatype: string
name: parse_data
arguments: label: D24
datatype: string
name: parse_data
arguments: label: D63
datatype: string

tool: D71: Pressione A B C para 2

tool: D25: 
Pressione D E F para 3

tool: D89: 
Pressione G H I para 4

tool: D19: 
Pressione J K L para 5

tool: D12: 
Pressione M N O para 6

tool: D43: 
Pressione P Q R S para 7

tool: D27: 
Pressione T U V para 8

tool: D79: 
Pressione W X Y Z para 9

tool: D24: 

Informe as letras: 

tool: D63: %s

assistant: ```c
int main() {
  char texto[30];
  printf("Pressione A B C para 2");
  printf("\nPressione D E F para 3");
  printf("\nPressione G H I para 4");
  printf("\nPressione J K L para 5");
  printf("\nPressione M N O para 6");
  printf("\nPressione P Q R S para 7");
  printf("\nPressione T U V para 8");
  printf("\nPressione W X Y Z para 9");
  printf("\n\nInforme as letras: ");
  scanf("%s", texto);
  for (int i = 0; texto[i] != '\0'; i++) {
    char letra = toupper(texto[i]);
    if (letra == 'A' || texto[i] == 'B' || letra == 'C')
      printf("2");
    else if (letra == 'D' || letra == 'E' || letra == 'F')
      printf("3");
    else if (letra == 'G' || letra == 'H' || letra == 'I')
      printf("4");
    else if (letra == 'J' || letra == 'K' || letra == 'L')
      printf("5");
    else if (letra == 'M' || letra == 'N' || letra == 'O')
      printf("6");
    else if (letra == 'P' || letra == 'Q' || letra == 'R' || letra == 'S')
      printf("7");
    else if (letra == 'T' || letra == 'U' || letra == 'V')
      printf("8");
    else if (letra == 'W' || letra == 'X' || letra == 'Y' || letra == 'Z')
      printf("9");
    else
      printf("%c", texto[i]);
  }
}
```