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

```asm
<scan1tm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  mov    $0x1,%r12d
  jmp    L287
L89:
  test   %bl,%bl
  jne    L287
  mov    $0x6,%edi
  mov    $0x0,%eax
  call   <ERRMOD@plt>
L287:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x18(%rbp),%rdx
  mov    %rcx,(%rdx)
  movzbl (%rax),%ebx
  movsbl %bl,%eax
  and    $0xffffff80,%eax
  test   %eax,%eax
  jne    L3
  movsbl %bl,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L6
  test   %bl,%bl
  jne    L3
L6:
  mov    $0x1,%eax
  jmp    L1
L3:
  mov    $0x0,%eax
L1:
  test   %eax,%eax
  jne    L89
  movsbl %bl,%eax
  cmp    $0x29,%eax
  je     L55
  cmp    $0x29,%eax
  jg     L190
  cmp    $0x22,%eax
  je     L164
  cmp    $0x28,%eax
  je     L54
  jmp    L190
L55:
  mov    $0x0,%r12d
  jmp    L197
L54:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  mov    %bl,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x20,(%rax)
  jmp    L158
L56:
  addq   $0x1,-0x20(%rbp)
L293:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L56
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x20,(%rax)
L158:
  mov    -0x20(%rbp),%rcx
  mov    -0x18(%rbp),%rax
  mov    $0x0,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scan1tm>
  test   %eax,%eax
  jne    L293
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  movb   $0x29,(%rax)
  jmp    L197
L164:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  mov    %bl,(%rax)
  jmp    L148
L50:
  cmp    $0x5c,%bl
  jne    L148
  nop
L61:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  lea    0x1(%rdx),%rcx
  mov    -0x18(%rbp),%rax
  mov    %rcx,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x20(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movzbl (%rax),%ebx
  movsbl %bl,%eax
  and    $0xffffff80,%eax
  test   %eax,%eax
  jne    L143
  movsbl %bl,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  ja     L143
  cmp    $0x37,%bl
  jg     L143
  mov    $0x1,%eax
  jmp    L280
L143:
  mov    $0x0,%eax
L280:
  test   %eax,%eax
  jne    L61
L148:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  lea    0x1(%rdx),%rcx
  mov    -0x18(%rbp),%rax
  mov    %rcx,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x20(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  movzbl (%rax),%ebx
  cmp    $0x22,%bl
  jne    L50
  jmp    L197
L190:
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x20(%rbp)
  mov    %bl,(%rax)
  jmp    L60
L267:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  lea    0x1(%rdx),%rcx
  mov    -0x18(%rbp),%rax
  mov    %rcx,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x20(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L60:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  and    $0xffffff80,%eax
  test   %eax,%eax
  jne    L267
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %eax,%eax
  jne    L197
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L267
L197:
  mov    -0x20(%rbp),%rax
  movb   $0x0,(%rax)
  cmpl   $0x1,-0x24(%rbp)
  jne    L303
  test   %r12d,%r12d
  je     L328
L303:
  cmpl   $0x2,-0x24(%rbp)
  jne    L241
  cmp    $0x1,%r12d
  jne    L241
L328:
  mov    $0x6,%edi
  mov    $0x0,%eax
  call   <ERRMOD@plt>
L241:
  mov    %r12d,%eax
  add    $0x20,%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

assistant: ```c
int scan1tm(socp, dest, flg)
char **socp, *dest;
int flg;
{
  register char c;
  register int retval = 1;
  while (c = *(*socp)++, (isascii(c) && (isspace(c) || (c) == '\0')))
    if (c == '\0')
      ERRMOD(6);
  switch (c) {
  case ')':
    retval = 0;
    break;
  case '(':
    *dest++ = c;
    *dest++ = ' ';
    while (scan1tm(socp, dest, 0)) {
      {
        while (*(dest))
          (dest)++;
      };
      *dest++ = ' ';
    }
    *dest++ = ')';
    break;
  case '"':
    *dest++ = c;
    while ((c = *dest++ = *(*socp)++) != '"') {
      if (c == '\\') {
        while (c = *dest++ = *(*socp)++, (isascii(c) && (isdigit(c) && (c) < '8')))
          ;
      }
    }
    break;
  default:
    *dest++ = c;
    while (!(isascii(**socp) && (isspace(**socp) || (**socp) == '\0')))
      *dest++ = *(*socp)++;
  }
  *dest = '\0';
  if (flg == 1 && retval == 0 || flg == 2 && retval == 1)
    ERRMOD(6);
  return (retval);
}
```