user: What would the C source look like for the assembly code provided here:

```asm
<sha1_chunk>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x170,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%r13
  mov    %fs:0x28,%rax
  mov    %rax,0x168(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rdi
  mov    $0x14,%edx
  call   <memcpy@plt>
  mov    $0x0,%edx
L28:
  mov    %edx,%ecx
  sar    $0x2,%ecx
  movslq %ecx,%rcx
  mov    (%rbx,%rdx,4),%eax
  shl    $0x18,%eax
  mov    0x4(%rbx,%rdx,4),%esi
  shl    $0x10,%esi
  or     %esi,%eax
  or     0xc(%rbx,%rdx,4),%eax
  mov    0x8(%rbx,%rdx,4),%esi
  shl    $0x8,%esi
  or     %esi,%eax
  mov    %eax,0x20(%rsp,%rcx,4)
  add    $0x4,%rdx
  cmp    $0x40,%rdx
  jne    L28
  lea    0x20(%rsp),%r12
  lea    0x120(%rsp),%rbp
  mov    %r12,%rbx
L14:
  mov    0x34(%rbx),%edi
  xor    0x20(%rbx),%edi
  xor    0x8(%rbx),%edi
  xor    (%rbx),%edi
  mov    $0x1,%esi
  call   <rotleft@plt>
  mov    %eax,0x40(%rbx)
  add    $0x4,%rbx
  cmp    %rbp,%rbx
  jne    L14
  lea    0x50(%r12),%r14
  mov    %r12,%rbx
  mov    %rsp,%rbp
L69:
  mov    0xc(%rsp),%eax
  mov    %eax,%esi
  xor    0x8(%rsp),%esi
  and    0x4(%rsp),%esi
  xor    %eax,%esi
  mov    (%rbx),%ecx
  mov    $0x5a827999,%edx
  mov    %rbp,%rdi
  call   <sha1_step@plt>
  add    $0x4,%rbx
  cmp    %r14,%rbx
  jne    L69
  lea    0x70(%rsp),%rbx
  lea    0xa0(%r12),%r14
  mov    %rsp,%rbp
L68:
  mov    0x4(%rsp),%esi
  xor    0x8(%rsp),%esi
  xor    0xc(%rsp),%esi
  mov    (%rbx),%ecx
  mov    $0x6ed9eba1,%edx
  mov    %rbp,%rdi
  call   <sha1_step@plt>
  add    $0x4,%rbx
  cmp    %r14,%rbx
  jne    L68
  lea    0xc0(%rsp),%rbx
  lea    0xf0(%r12),%r14
  mov    %rsp,%rbp
L47:
  mov    0x8(%rsp),%esi
  or     0xc(%rsp),%esi
  and    0x4(%rsp),%esi
  mov    0x8(%rsp),%eax
  and    0xc(%rsp),%eax
  or     %eax,%esi
  mov    (%rbx),%ecx
  mov    $0x8f1bbcdc,%edx
  mov    %rbp,%rdi
  call   <sha1_step@plt>
  add    $0x4,%rbx
  cmp    %r14,%rbx
  jne    L47
  lea    0x110(%rsp),%rbx
  add    $0x140,%r12
  mov    %rsp,%rbp
L3:
  mov    0x4(%rsp),%esi
  xor    0x8(%rsp),%esi
  xor    0xc(%rsp),%esi
  mov    (%rbx),%ecx
  mov    $0xca62c1d6,%edx
  mov    %rbp,%rdi
  call   <sha1_step@plt>
  add    $0x4,%rbx
  cmp    %rbx,%r12
  jne    L3
  mov    $0x0,%eax
L53:
  mov    (%rsp,%rax,1),%edx
  add    %edx,0x0(%r13,%rax,1)
  add    $0x4,%rax
  cmp    $0x14,%rax
  jne    L53
  mov    0x168(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L70
  add    $0x170,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L70:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void sha1_chunk(uint8_t *chunk, uint32_t *hash) {
  uint32_t state[5], w[80];
  memcpy(state, hash, sizeof(state));
  for (uint32_t src = 0; src < 64; src += 4) {
    w[src >> 2] = chunk[src] << 24 | chunk[src + 1] << 16 | chunk[src + 2] << 8 | chunk[src + 3];
  }
  for (uint32_t cur = 16; cur < 80; cur++) {
    w[cur] = rotleft(w[cur - 3] ^ w[cur - 8] ^ w[cur - 14] ^ w[cur - 16], 1);
  }
  for (uint32_t cur = 0; cur < 20; cur++) {
    sha1_step(state, (state[1] & state[2]) | ((~state[1]) & state[3]), 0x5A827999, w[cur]);
  }
  for (uint32_t cur = 20; cur < 40; cur++) {
    sha1_step(state, state[1] ^ state[2] ^ state[3], 0x6ED9EBA1, w[cur]);
  }
  for (uint32_t cur = 40; cur < 60; cur++) {
    sha1_step(state, (state[1] & state[2]) | (state[1] & state[3]) | (state[2] & state[3]), 0x8F1BBCDC, w[cur]);
  }
  for (uint32_t cur = 60; cur < 80; cur++) {
    sha1_step(state, state[1] ^ state[2] ^ state[3], 0xCA62C1D6, w[cur]);
  }
  for (uint32_t i = 0; i < 5; i++) {
    hash[i] += state[i];
  }
}
```