user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  sub    $0x8,%rsp
  lea    D438(%rip),%rdi
  call   <puts@plt>
  lea    D363(%rip),%rsi
  lea    D1097(%rip),%rdi
  call   <strcmp1@plt>
  test   %eax,%eax
  js     L322
  je     L449
  lea    D363(%rip),%rdx
  lea    D1097(%rip),%rsi
  lea    D1137(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L302
L322:
  lea    D363(%rip),%rdx
  lea    D1097(%rip),%rsi
  lea    D299(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L302:
  lea    D1097(%rip),%rsi
  lea    D363(%rip),%rdi
  call   <strcmp1@plt>
  test   %eax,%eax
  js     L183
  je     L401
  lea    D1097(%rip),%rdx
  lea    D363(%rip),%rsi
  lea    D1137(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L84
L449:
  lea    D363(%rip),%rdx
  lea    D1097(%rip),%rsi
  lea    D252(%rip),%rdi
  call   <printf@plt>
  jmp    L302
L183:
  lea    D1097(%rip),%rdx
  lea    D363(%rip),%rsi
  lea    D299(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L84:
  lea    D1097(%rip),%rdi
  mov    %rdi,%rsi
  call   <strcmp1@plt>
  test   %eax,%eax
  js     L365
  je     L385
  lea    D1097(%rip),%rsi
  mov    %rsi,%rdx
  lea    D1137(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L389
L401:
  lea    D1097(%rip),%rdx
  lea    D363(%rip),%rsi
  lea    D252(%rip),%rdi
  call   <printf@plt>
  jmp    L84
L365:
  lea    D1097(%rip),%rsi
  mov    %rsi,%rdx
  lea    D299(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L389:
  lea    D629(%rip),%rdi
  call   <puts@plt>
  mov    $0x5,%edx
  lea    D258(%rip),%rsi
  lea    D74(%rip),%rdi
  call   <strncmp1@plt>
  test   %eax,%eax
  js     L254
  je     L272
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1026(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L283
L385:
  lea    D1097(%rip),%rsi
  mov    %rsi,%rdx
  lea    D252(%rip),%rdi
  call   <printf@plt>
  jmp    L389
L254:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1034(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L283:
  mov    $0x5,%edx
  lea    D116(%rip),%rsi
  lea    D74(%rip),%rdi
  call   <strncmp1@plt>
  test   %eax,%eax
  js     L286
  je     L464
  lea    D116(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1026(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L398
L272:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D997(%rip),%rdi
  call   <printf@plt>
  jmp    L283
L286:
  lea    D116(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1034(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L398:
  mov    $0x6,%edx
  lea    D258(%rip),%rsi
  lea    D74(%rip),%rdi
  call   <strncmp1@plt>
  test   %eax,%eax
  js     L473
  je     L142
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D263(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L212
L464:
  lea    D116(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D997(%rip),%rdi
  call   <printf@plt>
  jmp    L398
L473:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D48(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L212:
  lea    D972(%rip),%rdi
  call   <puts@plt>
  lea    D363(%rip),%rsi
  lea    D1097(%rip),%rdi
  call   <strcmp2@plt>
  test   %eax,%eax
  js     L32
  je     L40
  lea    D363(%rip),%rdx
  lea    D1097(%rip),%rsi
  lea    D1137(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L294
L142:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1074(%rip),%rdi
  call   <printf@plt>
  jmp    L212
L32:
  lea    D363(%rip),%rdx
  lea    D1097(%rip),%rsi
  lea    D299(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L294:
  lea    D1097(%rip),%rsi
  lea    D363(%rip),%rdi
  call   <strcmp2@plt>
  test   %eax,%eax
  js     L127
  je     L292
  lea    D1097(%rip),%rdx
  lea    D363(%rip),%rsi
  lea    D1137(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L248
L40:
  lea    D363(%rip),%rdx
  lea    D1097(%rip),%rsi
  lea    D252(%rip),%rdi
  call   <printf@plt>
  jmp    L294
L127:
  lea    D1097(%rip),%rdx
  lea    D363(%rip),%rsi
  lea    D299(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L248:
  lea    D1097(%rip),%rdi
  mov    %rdi,%rsi
  call   <strcmp2@plt>
  test   %eax,%eax
  js     L337
  je     L36
  lea    D1097(%rip),%rsi
  mov    %rsi,%rdx
  lea    D1137(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L429
L292:
  lea    D1097(%rip),%rdx
  lea    D363(%rip),%rsi
  lea    D252(%rip),%rdi
  call   <printf@plt>
  jmp    L248
L337:
  lea    D1097(%rip),%rsi
  mov    %rsi,%rdx
  lea    D299(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L429:
  lea    D629(%rip),%rdi
  call   <puts@plt>
  mov    $0x5,%edx
  lea    D258(%rip),%rsi
  lea    D74(%rip),%rdi
  call   <strncmp2@plt>
  test   %eax,%eax
  js     L49
  je     L478
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1026(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L117
L36:
  lea    D1097(%rip),%rsi
  mov    %rsi,%rdx
  lea    D252(%rip),%rdi
  call   <printf@plt>
  jmp    L429
L49:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1034(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L117:
  mov    $0x5,%edx
  lea    D116(%rip),%rsi
  lea    D74(%rip),%rdi
  call   <strncmp2@plt>
  test   %eax,%eax
  js     L132
  je     L420
  lea    D116(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1026(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L367
L478:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D997(%rip),%rdi
  call   <printf@plt>
  jmp    L117
L132:
  lea    D116(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1034(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L367:
  mov    $0x6,%edx
  lea    D258(%rip),%rsi
  lea    D74(%rip),%rdi
  call   <strncmp2@plt>
  test   %eax,%eax
  js     L443
  je     L459
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D263(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L90
L420:
  lea    D116(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D997(%rip),%rdi
  call   <printf@plt>
  jmp    L367
L443:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D48(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L90:
  mov    $0x0,%eax
  add    $0x8,%rsp
  ret
L459:
  lea    D258(%rip),%rdx
  lea    D74(%rip),%rsi
  lea    D1074(%rip),%rdi
  call   <printf@plt>
  jmp    L90
```

tool_calls: name: parse_data
arguments: tag: D438
data_type: string
name: parse_data
arguments: tag: D363
data_type: string
name: parse_data
arguments: tag: D1097
data_type: string
name: parse_data
arguments: tag: D1137
data_type: string
name: parse_data
arguments: tag: D299
data_type: string
name: parse_data
arguments: tag: D252
data_type: string
name: parse_data
arguments: tag: D629
data_type: string
name: parse_data
arguments: tag: D258
data_type: string
name: parse_data
arguments: tag: D74
data_type: string
name: parse_data
arguments: tag: D1026
data_type: string
name: parse_data
arguments: tag: D1034
data_type: string
name: parse_data
arguments: tag: D116
data_type: string
name: parse_data
arguments: tag: D997
data_type: string
name: parse_data
arguments: tag: D263
data_type: string
name: parse_data
arguments: tag: D48
data_type: string
name: parse_data
arguments: tag: D972
data_type: string
name: parse_data
arguments: tag: D1074
data_type: string

tool: D438: ---- strcmp1 tests ----

tool: D363: bread

tool: D1097: apple

tool: D1137: %s is greater than %s


tool: D299: %s is less than %s


tool: D252: %s is equal to %s


tool: D629: 
---- strncmp1 tests ----

tool: D258: applepie

tool: D74: appletart

tool: D1026: 5 characters of %s is greater than %s


tool: D1034: 5 characters of %s is less than %s


tool: D116: apply

tool: D997: 5 characters of %s is equal to %s


tool: D263: 6 characters of %s is greater than %s


tool: D48: 6 characters of %s is less than %s


tool: D972: 
---- strcmp2 tests ----

tool: D1074: 6 characters of %s is equal to %s


assistant: ```c
int main() {
  printf("---- strcmp1 tests ----\n");
  const char *a = "apple";
  const char *b = "bread";
  const char *c = "apple";
  int result = strcmp1(a, b);
  if (result < 0)
    printf("%s is less than %s\n", a, b);
  else if (result == 0)
    printf("%s is equal to %s\n", a, b);
  else if (result > 0)
    printf("%s is greater than %s\n", a, b);
  result = strcmp1(b, a);
  if (result < 0)
    printf("%s is less than %s\n", b, a);
  else if (result == 0)
    printf("%s is equal to %s\n", b, a);
  else if (result > 0)
    printf("%s is greater than %s\n", b, a);
  result = strcmp1(a, c);
  if (result < 0)
    printf("%s is less than %s\n", a, c);
  else if (result == 0)
    printf("%s is equal to %s\n", a, c);
  else if (result > 0)
    printf("%s is greater than %s\n", a, c);
  printf("\n---- strncmp1 tests ----\n");
  const char *a1 = "appletart";
  const char *b1 = "applepie";
  const char *c1 = "apply";
  result = strncmp1(a1, b1, 5);
  if (result < 0)
    printf("5 characters of %s is less than %s\n", a1, b1);
  else if (result == 0)
    printf("5 characters of %s is equal to %s\n", a1, b1);
  else if (result > 0)
    printf("5 characters of %s is greater than %s\n", a1, b1);
  result = strncmp1(a1, c1, 5);
  if (result < 0)
    printf("5 characters of %s is less than %s\n", a1, c1);
  else if (result == 0)
    printf("5 characters of %s is equal to %s\n", a1, c1);
  else if (result > 0)
    printf("5 characters of %s is greater than %s\n", a1, c1);
  result = strncmp1(a1, b1, 6);
  if (result < 0)
    printf("6 characters of %s is less than %s\n", a1, b1);
  else if (result == 0)
    printf("6 characters of %s is equal to %s\n", a1, b1);
  else if (result > 0)
    printf("6 characters of %s is greater than %s\n", a1, b1);
  printf("\n---- strcmp2 tests ----\n");
  result = strcmp2(a, b);
  if (result < 0)
    printf("%s is less than %s\n", a, b);
  else if (result == 0)
    printf("%s is equal to %s\n", a, b);
  else if (result > 0)
    printf("%s is greater than %s\n", a, b);
  result = strcmp2(b, a);
  if (result < 0)
    printf("%s is less than %s\n", b, a);
  else if (result == 0)
    printf("%s is equal to %s\n", b, a);
  else if (result > 0)
    printf("%s is greater than %s\n", b, a);
  result = strcmp2(a, c);
  if (result < 0)
    printf("%s is less than %s\n", a, c);
  else if (result == 0)
    printf("%s is equal to %s\n", a, c);
  else if (result > 0)
    printf("%s is greater than %s\n", a, c);
  printf("\n---- strncmp1 tests ----\n");
  result = strncmp2(a1, b1, 5);
  if (result < 0)
    printf("5 characters of %s is less than %s\n", a1, b1);
  else if (result == 0)
    printf("5 characters of %s is equal to %s\n", a1, b1);
  else if (result > 0)
    printf("5 characters of %s is greater than %s\n", a1, b1);
  result = strncmp2(a1, c1, 5);
  if (result < 0)
    printf("5 characters of %s is less than %s\n", a1, c1);
  else if (result == 0)
    printf("5 characters of %s is equal to %s\n", a1, c1);
  else if (result > 0)
    printf("5 characters of %s is greater than %s\n", a1, c1);
  result = strncmp2(a1, b1, 6);
  if (result < 0)
    printf("6 characters of %s is less than %s\n", a1, b1);
  else if (result == 0)
    printf("6 characters of %s is equal to %s\n", a1, b1);
  else if (result > 0)
    printf("6 characters of %s is greater than %s\n", a1, b1);
  return 0;
}
```