user: What would the C source look like for the assembly code provided here:

```asm
<line_isoptstats>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  movl   $0x0,-0xc(%rbp)
  mov    -0x18(%rbp),%rax
  mov    $0x34,%edx
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L37
  movl   $0x1,-0xc(%rbp)
  jmp    L11
L37:
  mov    -0x18(%rbp),%rax
  lea    D88(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L124
  movl   $0x1,-0xc(%rbp)
  jmp    L11
L124:
  mov    -0x18(%rbp),%rax
  lea    D41(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <line_contains@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L46
  mov    -0x8(%rbp),%rax
  lea    D78(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <line_contains@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L11
  mov    -0x8(%rbp),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <line_contains@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L11
  movl   $0x1,-0xc(%rbp)
  jmp    L11
L46:
  mov    -0x18(%rbp),%rax
  lea    D6(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <line_contains@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L128
  mov    -0x8(%rbp),%rax
  lea    D79(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <line_contains@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L11
  mov    -0x8(%rbp),%rax
  lea    D48(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <line_contains@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L11
  movl   $0x1,-0xc(%rbp)
  jmp    L11
L128:
  mov    -0x18(%rbp),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <line_contains@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L11
  movl   $0x1,-0xc(%rbp)
L11:
  mov    -0xc(%rbp),%eax
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D60
datatype: string
name: extract_symbolic_data
arguments: data_label: D88
datatype: string
name: extract_symbolic_data
arguments: data_label: D41
datatype: string
name: extract_symbolic_data
arguments: data_label: D78
datatype: string
name: extract_symbolic_data
arguments: data_label: D8
datatype: string
name: extract_symbolic_data
arguments: data_label: D6
datatype: string
name: extract_symbolic_data
arguments: data_label: D79
datatype: string
name: extract_symbolic_data
arguments: data_label: D48
datatype: string
name: extract_symbolic_data
arguments: data_label: D2
datatype: string

tool: D60: *** WARNING[2052] Optimizer internal counters: pass 

tool: D88: .


tool: D41: groups,

tool: D78: tasks,

tool: D8: rules,

tool: D6: groups merged,

tool: D79: expr. cleaned up,

tool: D48: tasks pruned

tool: D2: log/phys/plans/dupl expressions in CascadesMemo

assistant: ```c
int line_isoptstats(char *line) {
  int rc;
  rc = 0;
  if (strncmp(line, "*** WARNING[2052] Optimizer internal counters: pass ", 52) == 0) {
    rc = 1;
  } else if (strcmp(line, ".\n") == 0) {
    rc = 1;
  } else {
    char *next;
    next = line_contains(line, "groups,");
    if (next) {
      next = line_contains(next, "tasks,");
      if (next) {
        next = line_contains(next, "rules,");
        if (next) {
          rc = 1;
        }
      }
    } else {
      next = line_contains(line, "groups merged,");
      if (next) {
        next = line_contains(next, "expr. cleaned up,");
        if (next) {
          next = line_contains(next, "tasks pruned");
          if (next) {
            rc = 1;
          }
        }
      } else {
        next = line_contains(line, "log/phys/plans/dupl expressions in CascadesMemo");
        if (next) {
          rc = 1;
        }
      }
    }
  }
  return rc;
}
```