user: Demonstrate the C code that generates the assembly output below:

```asm
<calc_check_digit>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x38(%rbp)
  movl   $0x0,-0x2c(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,-0x18(%rbp)
  movl   $0x0,-0x28(%rbp)
  jmp    L61
L2:
  mov    -0x20(%rbp),%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <lldiv@plt>
  mov    %eax,%ecx
  mov    %rdx,%rax
  mov    %ecx,-0x10(%rbp)
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  mov    -0x28(%rbp),%edx
  add    $0x2,%edx
  imul   %edx,%eax
  add    %eax,-0x2c(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  addl   $0x1,-0x28(%rbp)
L61:
  cmpl   $0x8,-0x28(%rbp)
  jle    L2
  mov    -0x2c(%rbp),%ecx
  movslq %ecx,%rax
  imul   $0x2e8ba2e9,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %ecx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  sub    %eax,%ecx
  mov    %ecx,%edx
  cmp    $0x1,%edx
  jle    L42
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rax
  imul   $0x2e8ba2e9,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  mov    $0xb,%eax
  sub    %ecx,%eax
  jmp    L55
L42:
  mov    $0x0,%eax
L55:
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    %rax,-0x18(%rbp)
  movl   $0x0,-0x2c(%rbp)
  mov    -0x18(%rbp),%rcx
  movabs $0x6666666666666667,%rdx
  mov    %rcx,%rax
  imul   %rdx
  mov    %rdx,%rax
  sar    $0x2,%rax
  sar    $0x3f,%rcx
  mov    %rcx,%rdx
  sub    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  movl   $0x0,-0x28(%rbp)
  jmp    L52
L46:
  mov    -0x20(%rbp),%rax
  mov    $0xa,%esi
  mov    %rax,%rdi
  call   <lldiv@plt>
  mov    %eax,%ecx
  mov    %rdx,%rax
  mov    %ecx,-0x10(%rbp)
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  mov    -0x28(%rbp),%edx
  add    $0x2,%edx
  imul   %edx,%eax
  add    %eax,-0x2c(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  addl   $0x1,-0x28(%rbp)
L52:
  cmpl   $0x9,-0x28(%rbp)
  jle    L46
  mov    -0x2c(%rbp),%ecx
  movslq %ecx,%rax
  imul   $0x2e8ba2e9,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %ecx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  sub    %eax,%ecx
  mov    %ecx,%edx
  cmp    $0x1,%edx
  jle    L58
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rax
  imul   $0x2e8ba2e9,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  mov    $0xb,%eax
  sub    %ecx,%eax
  jmp    L22
L58:
  mov    $0x0,%eax
L22:
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  cltq
  add    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  leave
  ret
```

assistant: ```c
long long calc_check_digit(long long raiz) {
  int produto = 0, i, digito;
  long long aux = raiz, cpf;
  lldiv_t divisao;
  cpf = (long long)raiz * 100;
  for (i = 0; i <= 8; i++) {
    divisao = lldiv(aux, 10);
    produto += divisao.rem * (i + 2);
    aux = divisao.quot;
  }
  digito = produto % 11 < 2 ? 0 : 11 - (produto % 11);
  cpf += (digito * 10);
  produto = 0;
  aux = (long long)cpf / 10;
  for (i = 0; i <= 9; i++) {
    divisao = lldiv(aux, 10);
    produto += divisao.rem * (i + 2);
    aux = divisao.quot;
  }
  digito = produto % 11 < 2 ? 0 : 11 - (produto % 11);
  cpf += digito;
  return cpf;
}
```