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

```asm
<md4_transform>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    0xc(%rax),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x7,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0x13,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x7,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0x13,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x24,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x7,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x2c,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0x13,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x34,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x7,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  add    $0x3c,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0x13,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND1@plt>
  mov    -0x30(%rbp),%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x5,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xd,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x5,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x24,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x34,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xd,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x5,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xd,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x5,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x2c,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  add    $0x3c,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xd,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND2@plt>
  mov    -0x30(%rbp),%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xf,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x38,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xf,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x24,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x34,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xf,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edi
  mov    -0xc(%rbp),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%esi
  lea    -0x18(%rbp),%rax
  mov    $0x3,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x2c,%rax
  mov    (%rax),%edi
  mov    -0x10(%rbp),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%esi
  lea    -0xc(%rbp),%rax
  mov    $0x9,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%edi
  mov    -0x14(%rbp),%ecx
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%esi
  lea    -0x10(%rbp),%rax
  mov    $0xb,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x30(%rbp),%rax
  add    $0x3c,%rax
  mov    (%rax),%edi
  mov    -0x18(%rbp),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%esi
  lea    -0x14(%rbp),%rax
  mov    $0xf,%r9d
  mov    %edi,%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <ROUND3@plt>
  mov    -0x28(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%ecx
  mov    -0x10(%rbp),%edx
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%ecx
  mov    -0xc(%rbp),%edx
  mov    -0x28(%rbp),%rax
  add    $0xc,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L0
  call   <__stack_chk_fail@plt>
L0:
  leave
  ret
```

assistant: ```c
void md4_transform(unsigned int *hash, unsigned int const *in) {
  unsigned int a, b, c, d;
  a = hash[0];
  b = hash[1];
  c = hash[2];
  d = hash[3];
  ROUND1(&a, b, c, d, in[0], 3);
  ROUND1(&d, a, b, c, in[1], 7);
  ROUND1(&c, d, a, b, in[2], 11);
  ROUND1(&b, c, d, a, in[3], 19);
  ROUND1(&a, b, c, d, in[4], 3);
  ROUND1(&d, a, b, c, in[5], 7);
  ROUND1(&c, d, a, b, in[6], 11);
  ROUND1(&b, c, d, a, in[7], 19);
  ROUND1(&a, b, c, d, in[8], 3);
  ROUND1(&d, a, b, c, in[9], 7);
  ROUND1(&c, d, a, b, in[10], 11);
  ROUND1(&b, c, d, a, in[11], 19);
  ROUND1(&a, b, c, d, in[12], 3);
  ROUND1(&d, a, b, c, in[13], 7);
  ROUND1(&c, d, a, b, in[14], 11);
  ROUND1(&b, c, d, a, in[15], 19);
  ROUND2(&a, b, c, d, in[0], 3);
  ROUND2(&d, a, b, c, in[4], 5);
  ROUND2(&c, d, a, b, in[8], 9);
  ROUND2(&b, c, d, a, in[12], 13);
  ROUND2(&a, b, c, d, in[1], 3);
  ROUND2(&d, a, b, c, in[5], 5);
  ROUND2(&c, d, a, b, in[9], 9);
  ROUND2(&b, c, d, a, in[13], 13);
  ROUND2(&a, b, c, d, in[2], 3);
  ROUND2(&d, a, b, c, in[6], 5);
  ROUND2(&c, d, a, b, in[10], 9);
  ROUND2(&b, c, d, a, in[14], 13);
  ROUND2(&a, b, c, d, in[3], 3);
  ROUND2(&d, a, b, c, in[7], 5);
  ROUND2(&c, d, a, b, in[11], 9);
  ROUND2(&b, c, d, a, in[15], 13);
  ROUND3(&a, b, c, d, in[0], 3);
  ROUND3(&d, a, b, c, in[8], 9);
  ROUND3(&c, d, a, b, in[4], 11);
  ROUND3(&b, c, d, a, in[12], 15);
  ROUND3(&a, b, c, d, in[2], 3);
  ROUND3(&d, a, b, c, in[10], 9);
  ROUND3(&c, d, a, b, in[6], 11);
  ROUND3(&b, c, d, a, in[14], 15);
  ROUND3(&a, b, c, d, in[1], 3);
  ROUND3(&d, a, b, c, in[9], 9);
  ROUND3(&c, d, a, b, in[5], 11);
  ROUND3(&b, c, d, a, in[13], 15);
  ROUND3(&a, b, c, d, in[3], 3);
  ROUND3(&d, a, b, c, in[11], 9);
  ROUND3(&c, d, a, b, in[7], 11);
  ROUND3(&b, c, d, a, in[15], 15);
  hash[0] += a;
  hash[1] += b;
  hash[2] += c;
  hash[3] += d;
}
```