user: Please show me the C implementation that matches the assembly code listed below:

```asm
<fib>:
  endbr64
  lea    -0x1(%rdi),%rax
  cmp    $0x1,%rax
  jbe    L111
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  movq   $0x0,0x8(%rsp)
L149:
  cmp    $0x2,%rax
  je     L299
  movq   $0x0,0x10(%rsp)
  sub    $0x2,%rax
  mov    %rax,%rbp
  mov    %rax,0x30(%rsp)
  mov    %rax,(%rsp)
  cmp    $0x1,%rbp
  je     L115
L40:
  movq   $0x0,0x18(%rsp)
L84:
  cmp    $0x2,%rbp
  je     L248
  movq   $0x0,0x20(%rsp)
  lea    -0x2(%rbp),%rax
  mov    %rax,%rcx
  mov    %rax,0x38(%rsp)
  cmp    $0x1,%rcx
  je     L280
L123:
  movq   $0x0,0x28(%rsp)
  mov    %rcx,%r13
  mov    %rcx,0x40(%rsp)
L102:
  cmp    $0x2,%r13
  je     L267
  sub    $0x2,%r13
  xor    %r15d,%r15d
  mov    %r13,%rbp
  mov    %r13,0x48(%rsp)
  mov    %r15,%r13
  cmp    $0x1,%rbp
  je     L254
L187:
  xor    %r12d,%r12d
  mov    %r13,%rdx
  mov    %rbp,%rax
  mov    %rbp,%rcx
  mov    %r12,%r13
L290:
  cmp    $0x2,%rax
  je     L272
  lea    -0x2(%rax),%rbx
  xor    %r14d,%r14d
  mov    %rbx,%rbp
  mov    %rdx,%rbx
  mov    %rbp,%rdx
  cmp    $0x1,%rbp
  je     L258
L199:
  xor    %r12d,%r12d
  mov    %rbx,0x50(%rsp)
  mov    %rdx,%r15
  mov    %rbp,%rbx
  mov    %rbp,0x58(%rsp)
  mov    %r12,%rbp
  mov    %rcx,%r12
L68:
  mov    %rbx,%rdi
  sub    $0x2,%rbx
  call   <fib>
  add    %rax,%rbp
  cmp    $0x1,%rbx
  ja     L68
  mov    %r12,%rcx
  mov    0x50(%rsp),%rbx
  mov    %rbp,%r12
  mov    0x58(%rsp),%rbp
  mov    %r15,%rdx
  add    $0x1,%r12
L172:
  lea    -0x2(%rbp),%rax
  sub    $0x1,%rbp
  add    %r12,%r14
  cmp    $0x1,%rbp
  jbe    L197
  mov    %rax,%rbp
  cmp    $0x1,%rbp
  jne    L199
L258:
  mov    $0x1,%r12d
  jmp    L172
  nopl   (%rax)
L197:
  mov    %rdx,%rax
  add    $0x1,%r14
  mov    %rbx,%rdx
  mov    %rax,%rbx
L165:
  add    %r14,%r13
  mov    %rbx,%rax
  cmp    $0x1,%rbx
  ja     L290
  mov    %r13,%r12
  mov    %rcx,%rbp
  mov    %rdx,%r13
  add    $0x1,%r12
L139:
  lea    -0x2(%rbp),%rax
  sub    $0x1,%rbp
  add    %r12,%r13
  cmp    $0x1,%rbp
  jbe    L87
  mov    %rax,%rbp
  cmp    $0x1,%rbp
  jne    L187
L254:
  mov    $0x1,%r12d
  jmp    L139
  nopl   0x0(%rax)
L272:
  mov    $0x1,%r14d
  xor    %ebx,%ebx
  jmp    L165
L267:
  mov    $0x1,%ecx
  xor    %r13d,%r13d
L162:
  add    %rcx,0x28(%rsp)
  cmp    $0x1,%r13
  ja     L102
  mov    0x28(%rsp),%r15
  mov    0x40(%rsp),%rcx
  add    $0x1,%r15
L226:
  lea    -0x2(%rcx),%rax
  sub    $0x1,%rcx
  add    %r15,0x20(%rsp)
  cmp    $0x1,%rcx
  jbe    L168
  mov    %rax,%rcx
  cmp    $0x1,%rcx
  jne    L123
L280:
  mov    $0x1,%r15d
  jmp    L226
L168:
  mov    0x20(%rsp),%r13
  add    $0x1,%r13
L263:
  mov    0x38(%rsp),%rbp
  add    %r13,0x18(%rsp)
  cmp    $0x1,%rbp
  ja     L84
  mov    0x18(%rsp),%r13
  add    $0x1,%r13
L205:
  mov    (%rsp),%rax
  add    %r13,0x10(%rsp)
  lea    -0x2(%rax),%rdx
  sub    $0x1,%rax
  cmp    $0x1,%rax
  jbe    L82
  mov    %rdx,%rbp
  mov    %rdx,(%rsp)
  cmp    $0x1,%rbp
  jne    L40
L115:
  mov    $0x1,%r13d
  jmp    L205
L248:
  movq   $0x0,0x38(%rsp)
  mov    $0x1,%r13d
  jmp    L263
L87:
  mov    %r13,%r15
  mov    0x48(%rsp),%r13
  lea    0x1(%r15),%rcx
  jmp    L162
L82:
  mov    0x10(%rsp),%rax
  add    $0x1,%rax
L279:
  add    %rax,0x8(%rsp)
  mov    0x30(%rsp),%rax
  cmp    $0x1,%rax
  ja     L149
  mov    0x8(%rsp),%rax
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  add    $0x1,%rax
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L299:
  movq   $0x0,0x30(%rsp)
  mov    $0x1,%eax
  jmp    L279
L111:
  mov    $0x1,%eax
  ret
```

assistant: ```c
long int fib(long int n) {
  if (n == 1) {
    return 1;
  } else if (n == 2) {
    return 1;
  } else
    return fib(n - 1) + fib(n - 2);
}
```