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

```asm
<find_lf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  ja     L132
  jmp    L284
L52:
  addq   $0x1,-0x8(%rbp)
L284:
  mov    -0x8(%rbp),%rax
  and    $0x3,%eax
  test   %rax,%rax
  je     L196
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  jne    L52
L196:
  mov    -0x8(%rbp),%rax
  and    $0x4,%eax
  test   %rax,%rax
  je     L132
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  xor    $0xa0a0a0a,%eax
  mov    %eax,%edi
  call   <has_zero32@plt>
  test   %rax,%rax
  jne    L132
  addq   $0x4,-0x8(%rbp)
  jmp    L132
L288:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L123
  addq   $0x8,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L136
  addq   $0x8,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L24
  addq   $0x8,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L215
  addq   $0x8,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L273
  addq   $0x8,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L0
  addq   $0x8,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L224
  addq   $0x8,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movabs $0xa0a0a0a0a0a0a0a,%rdx
  xor    %rdx,%rax
  mov    %rax,%rdi
  call   <has_zero64@plt>
  test   %rax,%rax
  jne    L83
  addq   $0x8,-0x8(%rbp)
L132:
  mov    -0x10(%rbp),%rax
  sub    $0x44,%rax
  cmp    %rax,-0x8(%rbp)
  jbe    L288
  jmp    L213
L123:
  nop
  jmp    L213
L136:
  nop
  jmp    L213
L24:
  nop
  jmp    L213
L215:
  nop
  jmp    L213
L273:
  nop
  jmp    L213
L0:
  nop
  jmp    L213
L224:
  nop
  jmp    L213
L83:
  nop
L213:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  xor    $0xa0a0a0a,%eax
  mov    %eax,%edi
  call   <has_zero32@plt>
  test   %rax,%rax
  jne    L163
  addq   $0x4,-0x8(%rbp)
  jmp    L163
L66:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L243
  addq   $0x1,-0x8(%rbp)
L163:
  mov    -0x8(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L66
  jmp    L30
L243:
  nop
L30:
  mov    -0x8(%rbp),%rax
  leave
  ret
```

assistant: ```c
char *find_lf(char *next, char *end) {
  if (sizeof(long) == 4) {
    while (next < end && (((unsigned long)next) & 3) && *next != '\n')
      next++;
    while (next < end) {
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
      if (has_zero32(*(unsigned int *)next ^ 0x0A0A0A0A))
        break;
      next += 4;
    }
  } else {
    if (next <= end) {
      while ((((unsigned long)next) & 3) && *next != '\n')
        next++;
      if ((((unsigned long)next) & 4) && !has_zero32(*(unsigned int *)next ^ 0x0A0A0A0AU))
        next += 4;
    }
    while (next <= (end - 68)) {
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
      if (has_zero64(*(unsigned long long *)next ^ 0x0A0A0A0A0A0A0A0AULL))
        break;
      next += 8;
    }
    if (!has_zero32(*(unsigned int *)next ^ 0x0A0A0A0AU))
      next += 4;
  }
  while (next < end) {
    if (*next == '\n')
      break;
    next++;
  }
  return next;
}
```