user: 下面的汇编指令对应的C源代码是什么：

```asm
<scan3>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1e0,%rsp
  mov    %rdi,-0x1c8(%rbp)
  mov    %esi,-0x1cc(%rbp)
  mov    %rdx,-0x1d8(%rbp)
  mov    %rcx,-0x1e0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpq   $0x0,-0x1d8(%rbp)
  je     L56
  mov    -0x1d8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  jmp    L4
L56:
  mov    $0x0,%eax
L4:
  mov    %eax,-0x1b8(%rbp)
  cmpq   $0x0,-0x1e0(%rbp)
  je     L22
  mov    -0x1e0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  jmp    L86
L22:
  mov    $0x0,%eax
L86:
  mov    %eax,-0x1b4(%rbp)
L154:
  mov    -0x1c8(%rbp),%rdx
  lea    -0x1a0(%rbp),%rax
  mov    $0x190,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L175
  mov    $0xffffffffffffffff,%rax
  jmp    L41
L175:
  lea    -0x1a0(%rbp),%rax
  mov    %rax,-0x1b0(%rbp)
  nop
L93:
  mov    -0x1b0(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x1b0(%rbp)
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L93
  mov    -0x1b0(%rbp),%rax
  mov    %rax,%rdi
  call   <atol@plt>
  mov    %rax,-0x1a8(%rbp)
  nop
L136:
  mov    -0x1b0(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x1b0(%rbp)
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L136
  cmpl   $0x0,-0x1cc(%rbp)
  jle    L61
  mov    -0x1b0(%rbp),%rax
  add    $0x2,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  cmp    %eax,-0x1cc(%rbp)
  jne    L12
L61:
  nop
L20:
  mov    -0x1b0(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x1b0(%rbp)
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L20
  cmpl   $0x0,-0x1b8(%rbp)
  jle    L165
  mov    -0x1b8(%rbp),%edx
  mov    -0x1d8(%rbp),%rcx
  mov    -0x1b0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L167
L165:
  nop
L170:
  mov    -0x1b0(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x1b0(%rbp)
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L170
  cmpl   $0x0,-0x1b4(%rbp)
  jle    L184
  mov    -0x1b4(%rbp),%edx
  mov    -0x1e0(%rbp),%rcx
  mov    -0x1b0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L144
L184:
  nop
L188:
  mov    -0x1b0(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x1b0(%rbp)
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  jne    L188
  mov    -0x1a8(%rbp),%rax
  jmp    L41
L12:
  nop
  jmp    L154
L167:
  nop
  jmp    L154
L144:
  nop
  jmp    L154
L41:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L110
  call   <__stack_chk_fail@plt>
L110:
  leave
  ret
```

assistant: ```c
long int scan3(FILE *input, int date, char *variable, char *level) {
  long int pos;
  char line[400], *pntr;
  int n_var, n_lev;
  n_var = variable != NULL ? strlen(variable) : 0;
  n_lev = level != NULL ? strlen(level) : 0;
  for (;;) {
    if (fgets(line, sizeof(line), input) == NULL)
      return -1;
    pntr = line;
    while (*pntr++ != ':')
      ;
    pos = atol(pntr);
    while (*pntr++ != ':')
      ;
    if (date > 0 && date != atoi(pntr + 2))
      continue;
    while (*pntr++ != ':')
      ;
    if (n_var > 0 && strncmp(pntr, variable, n_var) != 0)
      continue;
    while (*pntr++ != ':')
      ;
    if (n_lev > 0 && strncmp(pntr, level, n_lev) != 0)
      continue;
    while (*pntr++ != ':')
      ;
    return pos;
  }
}
```