user: Demonstrate the C code that generates the assembly output below:

```asm
<interval_string>:
  endbr64
  push   %r13
  push   %r12
  lea    D199(%rip),%r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  movb   $0x0,D61(%rip)
  test   %edi,%edi
  je     L34
  mov    %edi,%ebx
  lea    D61(%rip),%rbp
  cmp    $0x278cff,%edi
  jbe    L28
  mov    %edi,%edx
  mov    $0xcf2049a1,%eax
  mov    %rbp,%rdi
  imul   %rax,%rdx
  lea    D209(%rip),%rcx
  lea    D105(%rip),%rsi
  shr    $0x35,%rdx
  imul   $0x278d00,%edx,%eax
  sub    %eax,%ebx
  cmp    $0x1,%edx
  lea    D166(%rip),%rax
  cmove  %rax,%rcx
  xor    %eax,%eax
  call   <sprintf@plt>
L28:
  cmp    $0x93a7f,%ebx
  jbe    L21
  mov    %ebx,%ecx
  lea    D209(%rip),%r8
  lea    D161(%rip),%rdx
  imul   $0x6ef5de4d,%rcx,%rcx
  lea    D142(%rip),%r12
  lea    D12(%rip),%rsi
  mov    %r12,%rdi
  shr    $0x32,%rcx
  imul   $0x93a80,%ecx,%eax
  sub    %eax,%ebx
  lea    D166(%rip),%rax
  cmp    $0x1,%ecx
  cmove  %rax,%r8
  cmpb   $0x0,D61(%rip)
  cmove  %rax,%rdx
  xor    %eax,%eax
  call   <sprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
L21:
  cmp    $0x1517f,%ebx
  jbe    L20
  mov    %ebx,%ecx
  mov    $0xc22e4507,%eax
  lea    D209(%rip),%r8
  imul   %rax,%rcx
  lea    D161(%rip),%rdx
  lea    D142(%rip),%r12
  lea    D75(%rip),%rsi
  mov    %r12,%rdi
  shr    $0x30,%rcx
  imul   $0x15180,%ecx,%eax
  sub    %eax,%ebx
  lea    D166(%rip),%rax
  cmp    $0x1,%ecx
  cmove  %rax,%r8
  cmpb   $0x0,D61(%rip)
  cmove  %rax,%rdx
  xor    %eax,%eax
  call   <sprintf@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
L20:
  lea    D61(%rip),%r12
  test   %ebx,%ebx
  je     L34
  mov    %ebx,%ecx
  mov    $0x91a2b3c5,%eax
  lea    D166(%rip),%rsi
  imul   %rax,%rcx
  lea    D161(%rip),%rdx
  lea    D142(%rip),%r13
  mov    %r13,%rdi
  shr    $0x2b,%rcx
  imul   $0xe10,%ecx,%eax
  sub    %eax,%ebx
  mov    $0x88888889,%eax
  mov    %ebx,%r8d
  mov    %r8,%r9
  imul   %rax,%r8
  shr    $0x25,%r8
  imul   $0x3c,%r8d,%eax
  cmpb   $0x0,D61(%rip)
  cmove  %rsi,%rdx
  lea    D111(%rip),%rsi
  sub    %eax,%r9d
  xor    %eax,%eax
  call   <sprintf@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
L34:
  add    $0x8,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

tool_calls: name: parse_data
arguments: tag: D199
datatype: string
name: parse_data
arguments: tag: D209
datatype: string
name: parse_data
arguments: tag: D105
datatype: string
name: parse_data
arguments: tag: D166
datatype: string
name: parse_data
arguments: tag: D161
datatype: string
name: parse_data
arguments: tag: D12
datatype: string
name: parse_data
arguments: tag: D75
datatype: string
name: parse_data
arguments: tag: D111
datatype: string

tool: D199: <none>

tool: D209: s

tool: D105: %d month%s

tool: 

tool: D161: , 

tool: D12: %s%d week%s

tool: D75: %s%d day%s

tool: D111: %s%d:%02d:%02d

assistant: ```c
const char *interval_string(unsigned int secs) {
  static char buf[256], tmp[80];
  int hr, min, num;
  buf[0] = 0;
  if (secs == 0)
    return "<none>";
  if (secs >= (86400 * 30)) {
    num = secs / (86400 * 30);
    secs -= num * (86400 * 30);
    sprintf(buf, "%d month%s", num, (num > 1) ? "s" : "");
  }
  if (secs >= (86400 * 7)) {
    num = secs / (86400 * 7);
    secs -= num * (86400 * 7);
    sprintf(tmp, "%s%d week%s", buf[0] ? ", " : "", num, (num > 1) ? "s" : "");
    strcat(buf, tmp);
  }
  if (secs >= (86400)) {
    num = secs / (86400);
    secs -= num * (86400);
    sprintf(tmp, "%s%d day%s", buf[0] ? ", " : "", num, (num > 1) ? "s" : "");
    strcat(buf, tmp);
  }
  if (secs > 0) {
    hr = secs / (60 * 60);
    secs -= hr * (60 * 60);
    min = secs / (60);
    secs -= min * (60);
    sprintf(tmp, "%s%d:%02d:%02d", buf[0] ? ", " : "", hr, min, secs);
    strcat(buf, tmp);
  }
  return buf;
}
```