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

```asm
<handleClient>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %esi,-0x28(%rbp)
  mov    %rdx,-0x30(%rbp)
  mov    %rcx,-0x38(%rbp)
  mov    %r8,-0x40(%rbp)
  mov    %r9,-0x48(%rbp)
L64:
  mov    -0x30(%rbp),%rsi
  mov    -0x24(%rbp),%eax
  mov    $0x0,%ecx
  mov    $0x10,%edx
  mov    %eax,%edi
  call   <recv@plt>
  mov    %eax,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  je     L47
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x30(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x28(%rbp),%eax
  cltq
  cmp    %rax,-0x10(%rbp)
  je     L76
  mov    -0x24(%rbp),%eax
  mov    $0x2,%esi
  mov    %eax,%edi
  call   <shutdown@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <close@plt>
  jmp    L30
L76:
  mov    -0x8(%rbp),%rdx
  mov    -0x30(%rbp),%rcx
  mov    -0x24(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <pullFromSocket@plt>
  mov    -0x30(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x30(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <otp_encode@plt>
  mov    -0x8(%rbp),%rdx
  mov    -0x30(%rbp),%rcx
  mov    -0x24(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <pullFromSocket@plt>
  mov    -0x30(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x30(%rbp),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <otp_encode@plt>
  cmpl   $0x0,-0x28(%rbp)
  je     L32
  mov    -0x8(%rbp),%rax
  mov    %eax,%ecx
  mov    -0x40(%rbp),%rdx
  mov    -0x48(%rbp),%rsi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <otp_encrypt@plt>
  jmp    L34
L32:
  mov    -0x8(%rbp),%rax
  mov    %eax,%ecx
  mov    -0x40(%rbp),%rdx
  mov    -0x48(%rbp),%rsi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <otp_decrypt@plt>
L34:
  mov    -0x8(%rbp),%rax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rcx
  mov    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <otp_decode@plt>
  mov    -0x8(%rbp),%rdx
  mov    -0x30(%rbp),%rsi
  mov    -0x24(%rbp),%eax
  mov    $0x0,%ecx
  mov    %eax,%edi
  call   <send@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  je     L71
  jmp    L64
L47:
  nop
  jmp    L30
L71:
  nop
L30:
  leave
  ret
```

assistant: ```c
void handleClient(int clientFd, int encryptionMode, char *buffer, int *resultBuffer, int *keyBuffer, int *msgBuffer) {
  ssize_t receiveLength;
  ssize_t sendSuccess;
  size_t msgAndKeyLength;
  size_t isEncrypting;
  while (1) {
    receiveLength = recv(clientFd, buffer, sizeof(size_t) * 2, 0);
    if (!receiveLength)
      return;
    isEncrypting = ((size_t *)buffer)[0];
    msgAndKeyLength = ((size_t *)buffer)[1];
    if (isEncrypting != encryptionMode) {
      shutdown(clientFd, 2);
      close(clientFd);
      return;
    }
    pullFromSocket(clientFd, buffer, msgAndKeyLength);
    buffer[msgAndKeyLength] = '\0';
    otp_encode(keyBuffer, buffer);
    pullFromSocket(clientFd, buffer, msgAndKeyLength);
    buffer[msgAndKeyLength] = '\0';
    otp_encode(msgBuffer, buffer);
    if (encryptionMode)
      otp_encrypt(resultBuffer, msgBuffer, keyBuffer, (int)msgAndKeyLength);
    else
      otp_decrypt(resultBuffer, msgBuffer, keyBuffer, (int)msgAndKeyLength);
    otp_decode(buffer, resultBuffer, (int)msgAndKeyLength);
    sendSuccess = send(clientFd, buffer, msgAndKeyLength, 0);
    if (!sendSuccess)
      return;
  }
}
```