user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  mov    %rsi,%rbp
  lea    D100(%rip),%rdi
  call   <puts@plt>
  lea    D204(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D172(%rip),%rdi
  mov    %rdi,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L104
  mov    $0x2e,%edi
  call   <putchar@plt>
  lea    D26(%rip),%rdi
  mov    %rdi,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L45
  mov    $0x2e,%edi
  call   <putchar@plt>
  lea    D64(%rip),%rsi
  lea    D26(%rip),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L25
  mov    $0x2e,%edi
  call   <putchar@plt>
  lea    D26(%rip),%rsi
  lea    D64(%rip),%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L31
  mov    $0x2e,%edi
  call   <putchar@plt>
  lea    D49(%rip),%rdi
  call   <puts@plt>
  lea    D188(%rip),%rdi
  call   <puts@plt>
  lea    D159(%rip),%r12
  cmp    $0x1,%ebx
  je     L39
  mov    0x8(%rbp),%r12
L39:
  mov    %r12,%rsi
  lea    D86(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D131(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L144
  lea    D159(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L7
L144:
  mov    $0x0,%eax
  call   <test_string@plt>
  test   %rax,%rax
  jne    L28
L7:
  lea    D71(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L57
  lea    D159(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  jne    L38
L57:
  mov    $0x0,%eax
  call   <test_heap@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  je     L38
  lea    D67(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L38
L104:
  lea    D193(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%eax
L38:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L45:
  lea    D190(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L38
L25:
  lea    D135(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L38
L31:
  lea    D60(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L38
L28:
  lea    D61(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L38
```

tool_calls: name: disassemble_data
arguments: tag: D100
type: string
name: disassemble_data
arguments: tag: D204
type: string
name: disassemble_data
arguments: tag: D172
type: string
name: disassemble_data
arguments: tag: D26
type: string
name: disassemble_data
arguments: tag: D64
type: string
name: disassemble_data
arguments: tag: D49
type: string
name: disassemble_data
arguments: tag: D188
type: string
name: disassemble_data
arguments: tag: D159
type: string
name: disassemble_data
arguments: tag: D86
type: string
name: disassemble_data
arguments: tag: D131
type: string
name: disassemble_data
arguments: tag: D71
type: string
name: disassemble_data
arguments: tag: D67
type: string
name: disassemble_data
arguments: tag: D193
type: string
name: disassemble_data
arguments: tag: D190
type: string
name: disassemble_data
arguments: tag: D135
type: string
name: disassemble_data
arguments: tag: D60
type: string
name: disassemble_data
arguments: tag: D61
type: string

tool: D100: Testing basic environment:

tool: D204: 	strcmp

tool: 

tool: D26: 12345

tool: D64: 123456

tool: D49:  passed.

tool: D188: All tests passed.


tool: D159: all

tool: D86: Testsuite "%s" selected:


tool: D131: string

tool: D71: heap

tool: D67: heap tests failed.

tool: D193: 
strcmp("", "") failed.

tool: D190: 
strcmp("12345", "12345") failed.

tool: D135: 
strcmp("12345", "123456") failed.

tool: D60: 
strcmp("123456", "12345") failed.

tool: D61: string tests failed.

assistant: ```c
int main(int argc, char **argv) {
  const char *testsuite;
  printf("Testing basic environment:\n");
  printf("\tstrcmp");
  {
    if (strcmp("", "") != 0) {
      printf("\nstrcmp(\"\", \"\") failed.\n");
      return 1;
    } else {
      printf(".");
    }
    if (strcmp("12345", "12345") != 0) {
      printf("\nstrcmp(\"12345\", \"12345\") failed.\n");
      return 1;
    } else {
      printf(".");
    }
    if (strcmp("12345", "123456") == 0) {
      printf("\nstrcmp(\"12345\", \"123456\") failed.\n");
      return 1;
    } else {
      printf(".");
    }
    if (strcmp("123456", "12345") == 0) {
      printf("\nstrcmp(\"123456\", \"12345\") failed.\n");
      return 1;
    } else {
      printf(".");
    }
    printf(" passed.\n");
  }
  printf("All tests passed.\n\n");
  if (argc == 1) {
    testsuite = "all";
  } else {
    testsuite = argv[1];
  }
  printf("Testsuite \"%s\" selected:\n", testsuite);
  if (!strcmp(testsuite, "string") || !strcmp(testsuite, "all")) {
    if (test_string()) {
      printf("string tests failed.\n");
      return 1;
    }
  }
  if (!strcmp(testsuite, "heap") || !strcmp(testsuite, "all")) {
    if (test_heap()) {
      printf("heap tests failed.\n");
      return 1;
    }
  }
  return 0;
}
```