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
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D100(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D73(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0xc(%rbp),%eax
  cmp    $0x4,%eax
  je     L72
  cmp    $0x4,%eax
  jg     L1
  cmp    $0x3,%eax
  je     L22
  cmp    $0x3,%eax
  jg     L1
  cmp    $0x1,%eax
  je     L84
  cmp    $0x2,%eax
  je     L93
  jmp    L1
L84:
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%esi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1
L93:
  mov    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%edx
  sub    %edx,%eax
  mov    %eax,%esi
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1
L22:
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,%esi
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L1
L72:
  mov    -0x14(%rbp),%eax
  mov    -0x10(%rbp),%ecx
  cltd
  idiv   %ecx
  mov    %eax,%esi
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
L1:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L41
  call   <__stack_chk_fail@plt>
L41:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D79
type_guessed: string
name: retrieve_data
arguments: data_tag: D80
type_guessed: string
name: retrieve_data
arguments: data_tag: D30
type_guessed: string
name: retrieve_data
arguments: data_tag: D100
type_guessed: string
name: retrieve_data
arguments: data_tag: D73
type_guessed: string
name: retrieve_data
arguments: data_tag: D35
type_guessed: string
name: retrieve_data
arguments: data_tag: D40
type_guessed: string
name: retrieve_data
arguments: data_tag: D9
type_guessed: string
name: retrieve_data
arguments: data_tag: D104
type_guessed: string

tool: D79: digite o primeiro numero:

tool: D80: %d

tool: D30: digite o segundo numero:

tool: D100: Qual operacao voce deseja ?

tool: D73:  1 Soma
 2 Subtracao
 3 Multiplicacao
 4 Divisao

tool: D35: voce escolheu soma %d

tool: D40: voce escolheu Subtracao %d

tool: D9: voce escolheu Multiplicacao %d

tool: D104: voce escolheu Divisao %d

assistant: ```c
int main() {
  int a, b, operacao;
  printf("digite o primeiro numero:\n");
  scanf("%d", &a);
  printf("digite o segundo numero:\n");
  scanf("%d", &b);
  printf("Qual operacao voce deseja ?\n");
  printf(" 1 Soma\n 2 Subtracao\n 3 Multiplicacao\n 4 Divisao\n");
  scanf("%d", &operacao);
  switch (operacao) {
  case 1:
    printf("voce escolheu soma %d", a + b);
    break;
  case 2:
    printf("voce escolheu Subtracao %d", a - b);
    break;
  case 3:
    printf("voce escolheu Multiplicacao %d", a * b);
    break;
  case 4:
    printf("voce escolheu Divisao %d", a / b);
    break;
  }
}
```