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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x68(%rbp)
  movl   $0x1,-0x70(%rbp)
  movss  D246(%rip),%xmm0
  movss  %xmm0,-0x60(%rbp)
  movss  D89(%rip),%xmm0
  movss  %xmm0,-0x5c(%rbp)
  movss  D97(%rip),%xmm0
  movss  %xmm0,-0x58(%rbp)
  movss  D400(%rip),%xmm0
  movss  %xmm0,-0x54(%rbp)
  movss  D1(%rip),%xmm0
  movss  %xmm0,-0x50(%rbp)
  movss  D301(%rip),%xmm0
  movss  %xmm0,-0x40(%rbp)
  movss  D349(%rip),%xmm0
  movss  %xmm0,-0x3c(%rbp)
  movss  D280(%rip),%xmm0
  movss  %xmm0,-0x38(%rbp)
  movss  D236(%rip),%xmm0
  movss  %xmm0,-0x34(%rbp)
  movss  D96(%rip),%xmm0
  movss  %xmm0,-0x30(%rbp)
  movss  D275(%rip),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  jmp    L46
L53:
  pxor   %xmm2,%xmm2
  cvtss2sd -0x68(%rbp),%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  lea    D78(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D392(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D134(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D222(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x70(%rbp),%eax
  cmp    $0x1,%eax
  je     L69
  cmp    $0x2,%eax
  je     L26
  jmp    L49
L69:
  lea    D166(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D112(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D205(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D360(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D144(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x74(%rbp),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x74(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm0
  movss  -0x68(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x68(%rbp)
  jmp    L49
L26:
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D274(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D289(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D370(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D252(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D294(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x78(%rbp),%rax
  mov    %rax,%rsi
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  movss  -0x68(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jb     L144
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  movss  -0x68(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x6c(%rbp)
  movl   $0x5,-0x64(%rbp)
  jmp    L204
L77:
  mov    -0x64(%rbp),%eax
  cltq
  movl   $0x0,-0x20(%rbp,%rax,4)
  jmp    L47
L130:
  mov    -0x64(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%eax
  lea    0x1(%rax),%edx
  mov    -0x64(%rbp),%eax
  cltq
  mov    %edx,-0x20(%rbp,%rax,4)
  mov    -0x64(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm1
  movss  -0x6c(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x6c(%rbp)
L47:
  mov    -0x64(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm1
  movss  -0x6c(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jae    L130
  subl   $0x1,-0x64(%rbp)
L204:
  cmpl   $0x0,-0x64(%rbp)
  jns    L77
  movl   $0x0,-0x64(%rbp)
  lea    D391(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L175
L171:
  mov    -0x64(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%edx
  mov    -0x64(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movq   %xmm3,%rax
  mov    %edx,%esi
  movq   %rax,%xmm0
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x64(%rbp)
L175:
  cmpl   $0x5,-0x64(%rbp)
  jle    L171
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x68(%rbp)
  jmp    L88
L144:
  lea    D142(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L88:
  nop
L49:
  mov    -0x70(%rbp),%eax
  cmp    $0x2,%eax
  jle    L46
  lea    D384(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L46:
  mov    -0x70(%rbp),%eax
  test   %eax,%eax
  jne    L53
  pxor   %xmm0,%xmm0
  ucomiss -0x68(%rbp),%xmm0
  jp     L52
  pxor   %xmm0,%xmm0
  ucomiss -0x68(%rbp),%xmm0
  je     L215
L52:
  movl   $0x5,-0x64(%rbp)
  jmp    L209
L177:
  mov    -0x64(%rbp),%eax
  cltq
  movl   $0x0,-0x20(%rbp,%rax,4)
  jmp    L201
L211:
  mov    -0x64(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%eax
  lea    0x1(%rax),%edx
  mov    -0x64(%rbp),%eax
  cltq
  mov    %edx,-0x20(%rbp,%rax,4)
  mov    -0x64(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm1
  movss  -0x68(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x68(%rbp)
L201:
  mov    -0x64(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm1
  movss  -0x68(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jae    L211
  subl   $0x1,-0x64(%rbp)
L209:
  cmpl   $0x0,-0x64(%rbp)
  jns    L177
  movl   $0x0,-0x64(%rbp)
  lea    D359(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L63
L198:
  mov    -0x64(%rbp),%eax
  cltq
  mov    -0x20(%rbp,%rax,4),%edx
  mov    -0x64(%rbp),%eax
  cltq
  movss  -0x40(%rbp,%rax,4),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  mov    %edx,%esi
  movq   %rax,%xmm0
  lea    D105(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x64(%rbp)
L63:
  cmpl   $0x5,-0x64(%rbp)
  jle    L198
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x68(%rbp)
L215:
  lea    D261(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L87
  call   <__stack_chk_fail@plt>
L87:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D246
data_type: f32
name: extract_symbolic_data
arguments: data_label: D89
data_type: f32
name: extract_symbolic_data
arguments: data_label: D97
data_type: f32
name: extract_symbolic_data
arguments: data_label: D400
data_type: f32
name: extract_symbolic_data
arguments: data_label: D1
data_type: f32
name: extract_symbolic_data
arguments: data_label: D301
data_type: f32
name: extract_symbolic_data
arguments: data_label: D349
data_type: f32
name: extract_symbolic_data
arguments: data_label: D280
data_type: f32
name: extract_symbolic_data
arguments: data_label: D236
data_type: f32
name: extract_symbolic_data
arguments: data_label: D96
data_type: f32
name: extract_symbolic_data
arguments: data_label: D275
data_type: f32
name: extract_symbolic_data
arguments: data_label: D78
data_type: string
name: extract_symbolic_data
arguments: data_label: D162
data_type: string
name: extract_symbolic_data
arguments: data_label: D392
data_type: string
name: extract_symbolic_data
arguments: data_label: D154
data_type: string
name: extract_symbolic_data
arguments: data_label: D134
data_type: string
name: extract_symbolic_data
arguments: data_label: D222
data_type: string
name: extract_symbolic_data
arguments: data_label: D158
data_type: string
name: extract_symbolic_data
arguments: data_label: D166
data_type: string
name: extract_symbolic_data
arguments: data_label: D112
data_type: string
name: extract_symbolic_data
arguments: data_label: D116
data_type: string
name: extract_symbolic_data
arguments: data_label: D91
data_type: string
name: extract_symbolic_data
arguments: data_label: D205
data_type: string
name: extract_symbolic_data
arguments: data_label: D17
data_type: string
name: extract_symbolic_data
arguments: data_label: D360
data_type: string
name: extract_symbolic_data
arguments: data_label: D144
data_type: string
name: extract_symbolic_data
arguments: data_label: D8
data_type: string
name: extract_symbolic_data
arguments: data_label: D274
data_type: string
name: extract_symbolic_data
arguments: data_label: D289
data_type: string
name: extract_symbolic_data
arguments: data_label: D370
data_type: string
name: extract_symbolic_data
arguments: data_label: D252
data_type: string
name: extract_symbolic_data
arguments: data_label: D18
data_type: string
name: extract_symbolic_data
arguments: data_label: D294
data_type: string
name: extract_symbolic_data
arguments: data_label: D391
data_type: string
name: extract_symbolic_data
arguments: data_label: D105
data_type: string
name: extract_symbolic_data
arguments: data_label: D142
data_type: string
name: extract_symbolic_data
arguments: data_label: D384
data_type: string
name: extract_symbolic_data
arguments: data_label: D359
data_type: string
name: extract_symbolic_data
arguments: data_label: D261
data_type: string

tool: D246: 3.5

tool: D89: 5.8

tool: D97: 2.1

tool: D400: 1.9

tool: D1: 0.7

tool: D301: 0.01

tool: D349: 0.05

tool: D280: 0.1

tool: D236: 0.25

tool: D96: 0.5

tool: D275: 1

tool: D78: 

Seu saldo e de: R$%.2f



tool: D162: Escolha a opcao:


tool: D392: 0 - Sair

tool: D154: 1 - Depositar Moeda

tool: D134: 2 - Escolher refrigerante


tool: D222: Opcao:

tool: D158: %i

tool: D166: 

Deposite a sua moeda


tool: D112: 0 - 1 Centavo

tool: D116: 1 - 5 Centavos

tool: D91: 2 - 10 Centavos

tool: D205: 3 - 25 Centavos

tool: D17: 4 - 50 Centavos

tool: D360: 5 - 1 Real

tool: D144: Moeda:

tool: D8: 

Escolha o Refrigerante


tool: D274: 0 - Coca-Cola - R$3.50

tool: D289: 1 - Ice - R$5.80

tool: D370: 2 - Guarana - R$2.10

tool: D252: 3 - Suco - R$1.90

tool: D18: 4 - Cafe - R$0.70

tool: D294: 
Refrigerante:

tool: D391: 

O seu troco e:


tool: D105: Moedas de R$%.2f: %i


tool: D142: 

====== Saldo Insuficiente ======

tool: D384: Opcao invalida!


tool: D359: 

O seu troco e


tool: D261: 

Obrigado! Volte sempre!


assistant: ```c
int main(void) {
  float refrigerantes[5], valor[6], troco;
  float saldo = 0;
  int TROCO[6], indice, moeda, cont;
  int caso = 1;
  refrigerantes[0] = 3.50;
  refrigerantes[1] = 5.80;
  refrigerantes[2] = 2.10;
  refrigerantes[3] = 1.90;
  refrigerantes[4] = 0.70;
  valor[0] = 0.01;
  valor[1] = 0.05;
  valor[2] = 0.10;
  valor[3] = 0.25;
  valor[4] = 0.50;
  valor[5] = 1.00;
  while (caso) {
    printf("\n\nSeu saldo e de: R$%.2f\n\n", saldo);
    printf("Escolha a opcao:\n\n");
    printf("0 - Sair\n");
    printf("1 - Depositar Moeda\n");
    printf("2 - Escolher refrigerante\n\n");
    printf("Opcao:");
    scanf("%i", &caso);
    switch (caso) {
    case 1:
      printf("\n\nDeposite a sua moeda\n\n");
      printf("0 - 1 Centavo\n");
      printf("1 - 5 Centavos\n");
      printf("2 - 10 Centavos\n");
      printf("3 - 25 Centavos\n");
      printf("4 - 50 Centavos\n");
      printf("5 - 1 Real\n");
      printf("Moeda:");
      scanf("%i", &moeda);
      saldo = saldo + valor[moeda];
      break;
    case 2:
      printf("\n\nEscolha o Refrigerante\n\n");
      printf("0 - Coca-Cola - R$3.50\n");
      printf("1 - Ice - R$5.80\n");
      printf("2 - Guarana - R$2.10\n");
      printf("3 - Suco - R$1.90\n");
      printf("4 - Cafe - R$0.70\n");
      printf("\nRefrigerante:");
      scanf("%i", &indice);
      if (saldo >= refrigerantes[indice]) {
        troco = saldo - refrigerantes[indice];
        cont = 5;
        while (cont >= 0) {
          TROCO[cont] = 0;
          while (troco >= valor[cont]) {
            TROCO[cont] = TROCO[cont] + 1;
            troco = troco - valor[cont];
          }
          cont = cont - 1;
        }
        cont = 0;
        printf("\n\nO seu troco e:\n\n");
        while (cont < 6) {
          printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
          cont++;
        }
        saldo = 0;
      } else {
        printf("\n\n====== Saldo Insuficiente ======");
      }
      break;
    }
    if (caso > 2) {
      printf("Opcao invalida!\n\n");
    }
  }
  if (saldo != 0) {
    cont = 5;
    while (cont >= 0) {
      TROCO[cont] = 0;
      while (saldo >= valor[cont]) {
        TROCO[cont] = TROCO[cont] + 1;
        saldo = saldo - valor[cont];
      }
      cont = cont - 1;
    }
    cont = 0;
    printf("\n\nO seu troco e\n\n");
    while (cont < 6) {
      printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
      cont++;
    }
    saldo = 0;
  }
  printf("\n\nObrigado! Volte sempre!\n\n");
  return 0;
}
```