user: 请将以下的汇编代码转换成C语言代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  cmpl   $0x2,-0x24(%rbp)
  jle    L61
  cmpl   $0x3,-0x24(%rbp)
  jle    L60
L61:
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L60:
  mov    -0x30(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    $0x0,%eax
  call   <MostrarFuncionamiento@plt>
  mov    -0x10(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <amigoConectado@plt>
  test   %rax,%rax
  je     L65
L68:
  mov    $0x0,%eax
  call   <Menu@plt>
  mov    $0x0,%eax
  call   <ingresarMensaje@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L95
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <enviarMsj@plt>
  jmp    L70
L95:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <enviarMsj@plt>
  mov    $0x0,%eax
  call   <recibirMsj@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <mostrar@plt>
  mov    $0x0,%eax
  call   <recibirMsj@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L98
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <Preguntas@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <enviarMsj@plt>
  jmp    L68
L98:
  nop
L70:
  mov    $0x0,%eax
  call   <cerrarSesion@plt>
  jmp    L39
L65:
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <iniciarServicio@plt>
L112:
  mov    $0x0,%eax
  call   <recibirMsj@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L96
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <Preguntas@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <enviarMsj@plt>
  mov    $0x0,%eax
  call   <Menu@plt>
  mov    $0x0,%eax
  call   <ingresarMensaje@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L12
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <enviarMsj@plt>
  jmp    L113
L12:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <enviarMsj@plt>
  mov    $0x0,%eax
  call   <recibirMsj@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <mostrar@plt>
  jmp    L112
L96:
  nop
L113:
  mov    $0x0,%eax
  call   <cerrarSesion@plt>
L39:
  mov    $0x0,%edi
  call   <exit@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D6
data_type: string
name: disassemble_data
arguments: data_label: D37
data_type: string

tool: D6: Cantidad de parametros invalido, debe ingresar <IP AMIGO,PUERTO> -


tool: D37: 5


assistant: ```c
int main(int argc, char **argv) {
  char *amigo;
  char *mensaje;
  char *puerto;
  if (argc < 3 || argc > 3) {
    printf("Cantidad de parametros invalido, debe ingresar <IP AMIGO,PUERTO> -\n");
    exit(1);
  }
  amigo = argv[1];
  puerto = argv[2];
  MostrarFuncionamiento();
  if (amigoConectado(amigo, puerto)) {
    while (1) {
      Menu();
      mensaje = ingresarMensaje();
      if (strcmp(mensaje, "5\n") == 0) {
        enviarMsj(mensaje);
        break;
      }
      enviarMsj(mensaje);
      mensaje = recibirMsj();
      mostrar(mensaje);
      mensaje = recibirMsj();
      if (strcmp(mensaje, "5\n") == 0)
        break;
      Preguntas(mensaje);
      enviarMsj(mensaje);
    }
    cerrarSesion();
  } else {
    iniciarServicio(puerto);
    while (1) {
      mensaje = recibirMsj();
      if (strcmp(mensaje, "5\n") == 0)
        break;
      Preguntas(mensaje);
      enviarMsj(mensaje);
      Menu();
      mensaje = ingresarMensaje();
      if (strcmp(mensaje, "5\n") == 0) {
        enviarMsj(mensaje);
        break;
      }
      enviarMsj(mensaje);
      mensaje = recibirMsj();
      mostrar(mensaje);
    }
    cerrarSesion();
  }
  exit(0);
}
```