user: What is the c source code of the assembly code below:

```asm
<TimeFmt>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  test   %rsi,%rsi
  js     L64
  mov    %rsi,%rdi
  mov    %rdx,%rbx
  lea    0x10(%rsp),%rcx
  mov    %r12,%r15
  lea    0xc(%rsp),%rdx
  lea    0x8(%rsp),%rsi
  lea    0x14(%rsp),%r8
  call   <Time_hmsl@plt>
  movzbl (%rbx),%eax
  test   %al,%al
  je     L184
  lea    D54(%rip),%rbp
  lea    D126(%rip),%r14
  lea    D3(%rip),%r13
  jmp    L128
  xchg   %ax,%ax
L193:
  mov    %al,(%r15)
  add    $0x1,%r15
  movzbl 0x1(%rbx),%eax
  mov    %rdx,%rbx
L87:
  test   %al,%al
  je     L184
L128:
  lea    0x1(%rbx),%rdx
  cmp    $0x25,%al
  jne    L193
  movzbl 0x1(%rbx),%edx
  test   %dl,%dl
  je     L184
  lea    -0x47(%rdx),%eax
  cmp    $0x2c,%al
  ja     L186
  movzbl %al,%eax
  movslq 0x0(%rbp,%rax,4),%rax
  add    %rbp,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L184:
  movb   $0x0,(%r15)
L36:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L169
  add    $0x28,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L64:
  movb   $0x0,(%rdi)
  jmp    L36
  nopl   (%rax)
L186:
  mov    %dl,(%r15)
  add    $0x2,%rbx
  movzbl (%rbx),%eax
  add    $0x1,%r15
  jmp    L87
  nopl   0x0(%rax,%rax,1)
  mov    0x8(%rsp),%edx
  lea    D56(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  nopl   0x0(%rax,%rax,1)
L35:
  mov    %r15,%rdi
  add    $0x2,%rbx
  call   <strlen@plt>
  cltq
  add    %rax,%r15
  movzbl (%rbx),%eax
  jmp    L87
  nopl   0x0(%rax)
  mov    0x8(%rsp),%edx
  test   %edx,%edx
  je     L55
  lea    -0xc(%rdx),%eax
  cmp    $0xc,%edx
  cmovg  %eax,%edx
L222:
  lea    D56(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  jmp    L35
  xchg   %ax,%ax
  mov    0x14(%rsp),%edx
  lea    D79(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  jmp    L35
  nopl   (%rax)
  mov    0xc(%rsp),%edx
  jmp    L222
  xchg   %ax,%ax
  cmpl   $0xb,0x8(%rsp)
  lea    D122(%rip),%rsi
  lea    D29(%rip),%rax
  cmovg  %rax,%rsi
L162:
  mov    %r15,%rdi
  call   <strcpy@plt>
  jmp    L35
  nopl   0x0(%rax)
  mov    0x10(%rsp),%edx
  lea    D56(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  jmp    L35
  mov    0x8(%rsp),%edx
  lea    D14(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  jmp    L35
  nopl   0x0(%rax,%rax,1)
  mov    0x8(%rsp),%edx
  test   %edx,%edx
  je     L250
  lea    -0xc(%rdx),%eax
  cmp    $0xc,%edx
  cmovg  %eax,%edx
L214:
  lea    D14(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  jmp    L35
  nopl   (%rax)
  mov    0x14(%rsp),%edx
  jmp    L214
  xchg   %ax,%ax
  cmpl   $0xb,0x8(%rsp)
  mov    %r13,%rsi
  cmovg  %r14,%rsi
  jmp    L162
  nopl   0x0(%rax)
  mov    0x10(%rsp),%edx
  lea    D14(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  jmp    L35
  mov    0xc(%rsp),%edx
  lea    D14(%rip),%rsi
  mov    %r15,%rdi
  call   <sprintf@plt>
  jmp    L35
  nopl   0x0(%rax,%rax,1)
L250:
  mov    $0xc,%edx
  jmp    L214
  nopw   0x0(%rax,%rax,1)
L55:
  mov    $0xc,%edx
  jmp    L222
L169:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D126
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D3
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D56
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D79
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D122
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D29
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D14
type_infered: string

tool: D126: pm

tool: D3: am

tool: D56: %02d

tool: D79: %03d

tool: D122: AM

tool: D29: PM

tool: D14: %d

assistant: ```c
char *TimeFmt(char *buf, long tm, char *msk) {
  int h, m, s, l;
  char *bp = buf;
  int temp;
  if (tm < 0L) {
    *buf = '\0';
    return (buf);
  }
  Time_hmsl(tm, &h, &m, &s, &l);
  while (*msk)
    if (*msk != '%')
      *bp++ = *msk++;
    else
      switch (*++msk) {
      case '\0':
        break;
      case '%':
      default:
        *bp++ = *msk++;
        break;
      case 'G':
        sprintf(bp, "%02d", h);
        bp += strlen(bp);
        msk++;
        break;
      case 'g':
        sprintf(bp, "%d", h);
        bp += strlen(bp);
        msk++;
        break;
      case 'H':
        if (!h)
          temp = 12;
        else if (h > 12)
          temp = h - 12;
        else
          temp = h;
        sprintf(bp, "%02d", temp);
        bp += strlen(bp);
        msk++;
        break;
      case 'h':
        if (!h)
          temp = 12;
        else if (h > 12)
          temp = h - 12;
        else
          temp = h;
        sprintf(bp, "%d", temp);
        bp += strlen(bp);
        msk++;
        break;
      case 'M':
        sprintf(bp, "%02d", m);
        bp += strlen(bp);
        msk++;
        break;
      case 'm':
        sprintf(bp, "%d", m);
        bp += strlen(bp);
        msk++;
        break;
      case 'S':
        sprintf(bp, "%02d", s);
        bp += strlen(bp);
        msk++;
        break;
      case 's':
        sprintf(bp, "%d", s);
        bp += strlen(bp);
        msk++;
        break;
      case 'L':
        sprintf(bp, "%03d", l);
        bp += strlen(bp);
        msk++;
        break;
      case 'l':
        sprintf(bp, "%d", l);
        bp += strlen(bp);
        msk++;
        break;
      case 'P':
        strcpy(bp, h >= 12 ? "PM" : "AM");
        bp += strlen(bp);
        msk++;
        break;
      case 'p':
        strcpy(bp, h >= 12 ? "pm" : "am");
        bp += strlen(bp);
        msk++;
        break;
      }
  *bp = '\0';
  return (buf);
}
```