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

```asm
<entab>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  lea    0x1(%rsi),%edi
  call   <malloc@plt>
  mov    %rax,%rbp
  mov    %rbx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  movzbl 0x0(%rbp),%eax
  test   %al,%al
  je     L62
  mov    $0x0,%esi
  mov    $0x0,%ecx
  lea    0x1(%rbx),%r8
  jmp    L139
L15:
  movslq %ecx,%rdx
  add    %rbp,%rdx
  mov    %ecx,%eax
L9:
  mov    %eax,%r9d
  add    $0x1,%eax
  movzbl (%rdx),%edi
  add    $0x1,%rdx
  cmp    $0x20,%dil
  je     L9
  lea    0x8(%rcx),%r10d
  mov    %ecx,%edi
  sar    $0x1f,%edi
  shr    $0x1d,%edi
  lea    (%rcx,%rdi,1),%edx
  and    $0x7,%edx
  sub    %edi,%edx
  sub    %edx,%r10d
  cmp    %r10d,%eax
  jge    L152
  sub    %ecx,%eax
  cltd
  shr    $0x1d,%edx
  add    %edx,%eax
  and    $0x7,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  jle    L70
  movslq %esi,%rcx
  lea    (%rbx,%rcx,1),%rdx
  add    %r8,%rcx
  lea    -0x2(%rax),%edi
  add    %rdi,%rcx
L53:
  movb   $0x20,(%rdx)
  add    $0x1,%rdx
  cmp    %rcx,%rdx
  jne    L53
  lea    -0x1(%rsi,%rax,1),%esi
  mov    %r9d,%ecx
L84:
  movslq %ecx,%rax
  movzbl 0x0(%rbp,%rax,1),%eax
  test   %al,%al
  je     L157
L139:
  cmp    $0x20,%al
  je     L15
  add    $0x1,%ecx
  movslq %esi,%rdx
  mov    %al,(%rbx,%rdx,1)
  lea    0x1(%rsi),%esi
  jmp    L84
L152:
  mov    %r10d,%edx
L125:
  add    $0x8,%edx
  cmp    %edx,%eax
  jge    L125
  mov    %eax,%edx
  sub    %r10d,%edx
  mov    %edx,%edi
  shr    $0x3,%edi
  and    $0xfffffff8,%edx
  lea    0x8(%r10,%rdx,1),%r11d
  movslq %esi,%r10
  add    %rbx,%r10
  mov    %r10,%rdx
L16:
  movb   $0x9,(%rdx)
  add    $0x1,%rdx
  mov    %edx,%ecx
  sub    %r10d,%ecx
  sub    $0x1,%ecx
  cmp    %ecx,%edi
  jg     L16
  test   %edi,%edi
  mov    $0x0,%edx
  cmovs  %edx,%edi
  lea    0x1(%rsi,%rdi,1),%esi
  sub    %r11d,%eax
  cmp    $0xfffffff9,%eax
  jl     L54
  movslq %esi,%rdi
  lea    (%rbx,%rdi,1),%rdx
  lea    0x7(%rax),%ecx
  add    %r8,%rcx
  add    %rdi,%rcx
L100:
  movb   $0x20,(%rdx)
  add    $0x1,%rdx
  cmp    %rcx,%rdx
  jne    L100
  lea    0x8(%rsi,%rax,1),%esi
  mov    %r9d,%ecx
  jmp    L84
L70:
  mov    %r9d,%ecx
  jmp    L84
L54:
  mov    %r9d,%ecx
  jmp    L84
L62:
  mov    $0x0,%esi
L157:
  movslq %esi,%rsi
  movb   $0x0,(%rbx,%rsi,1)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
```

assistant: ```c
void entab(char *line, int len) {
  int i, m = 0, j, k, stop, nt = 0, nb = 0;
  i = 0;
  j = 0;
  char *copy = (char *)malloc(len + 1);
  strcpy(copy, line);
  while (copy[i] != '\0') {
    if (copy[i] == ' ') {
      k = i;
      while (copy[k++] == ' ')
        ;
      nt = 0;
      nb = 0;
      stop = i + 8 - i % 8;
      if (k < stop) {
        nb = (k - i) % 8;
        for (m = 0; m < nb - 1; m++) {
          line[j++] = ' ';
        }
      } else {
        while (stop <= k) {
          nt++;
          stop += 8;
        }
        for (m = 0; m < nt; m++) {
          line[j++] = '\t';
        }
        for (m = 0; m < k - stop + 8; m++) {
          line[j++] = ' ';
        }
      }
      i = --k;
    } else {
      line[j++] = copy[i++];
    }
  }
  line[j] = '\0';
}
```