user: Converte this assembly snippet into its equivalent C code:

```asm
<MD5Transform>:
  endbr64
  push   %r15
  mov    $0x40,%edx
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x98,%rsp
  mov    0x10(%rdi),%r13
  mov    0x8(%rdi),%r12
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbp
  mov    0x18(%rdi),%r14
  mov    (%rdi),%r15
  mov    %rbp,%rdi
  call   <Decode@plt>
  mov    %r13,%rdx
  mov    $0xd76aa478,%eax
  add    (%rsp),%rax
  xor    %r14,%rdx
  add    %r15,%rax
  mov    $0xe8c7b756,%ecx
  add    0x8(%rsp),%rcx
  and    %r12,%rdx
  add    %r14,%rcx
  mov    0x10(%rsp),%r10
  mov    0x28(%rsp),%r8
  xor    %r14,%rdx
  mov    0x38(%rsp),%r14
  mov    0x68(%rsp),%r11
  add    %rax,%rdx
  mov    0x58(%rsp),%r15
  mov    %rdx,%rax
  shr    $0x19,%rdx
  shl    $0x7,%rax
  or     %rdx,%rax
  mov    %r12,%rdx
  add    %r12,%rax
  xor    %r13,%rdx
  and    %rax,%rdx
  mov    %rax,%rdi
  xor    %r13,%rdx
  add    %rcx,%rdx
  lea    0x242070db(%r10,%r13,1),%rcx
  mov    0x60(%rsp),%r13
  mov    %rdx,%rsi
  shr    $0x14,%rdx
  shl    $0xc,%rsi
  or     %rdx,%rsi
  mov    %r12,%rdx
  add    %rax,%rsi
  xor    %rax,%rdx
  and    %rsi,%rdx
  xor    %r12,%rdx
  add    %rcx,%rdx
  mov    %rdx,%rcx
  shr    $0xf,%rdx
  shl    $0x11,%rcx
  or     %rdx,%rcx
  mov    $0xc1bdceee,%edx
  add    0x18(%rsp),%rdx
  add    %rsi,%rcx
  add    %r12,%rdx
  xor    %rsi,%rdi
  mov    0x40(%rsp),%r12
  and    %rcx,%rdi
  xor    %rax,%rdi
  add    %rdx,%rdi
  mov    %rdi,%rdx
  shr    $0xa,%rdi
  shl    $0x16,%rdx
  or     %rdi,%rdx
  mov    $0xf57c0faf,%edi
  add    0x20(%rsp),%rdi
  add    %rdi,%rax
  mov    %rsi,%rdi
  add    %rcx,%rdx
  xor    %rcx,%rdi
  and    %rdx,%rdi
  xor    %rsi,%rdi
  lea    0x4787c62a(%r8,%rsi,1),%rsi
  add    %rax,%rdi
  mov    %rdi,%rax
  shr    $0x19,%rdi
  shl    $0x7,%rax
  or     %rdi,%rax
  mov    %rcx,%rdi
  add    %rdx,%rax
  xor    %rdx,%rdi
  and    %rax,%rdi
  xor    %rcx,%rdi
  add    %rsi,%rdi
  mov    %rdi,%rsi
  shr    $0x14,%rdi
  shl    $0xc,%rsi
  or     %rdi,%rsi
  mov    $0xa8304613,%edi
  add    0x30(%rsp),%rdi
  add    %rdi,%rcx
  mov    %rdx,%rdi
  add    %rax,%rsi
  xor    %rax,%rdi
  and    %rsi,%rdi
  xor    %rdx,%rdi
  add    %rcx,%rdi
  mov    %rdi,%rcx
  shr    $0xf,%rdi
  shl    $0x11,%rcx
  or     %rdi,%rcx
  mov    $0xfd469501,%edi
  add    %r14,%rdi
  add    %rsi,%rcx
  add    %rdx,%rdi
  mov    %rax,%rdx
  xor    %rsi,%rdx
  and    %rcx,%rdx
  xor    %rax,%rdx
  add    %rdi,%rdx
  mov    %rdx,%rdi
  shr    $0xa,%rdx
  shl    $0x16,%rdi
  or     %rdx,%rdi
  lea    0x698098d8(%r12,%rax,1),%rdx
  mov    %rsi,%rax
  add    %rcx,%rdi
  xor    %rcx,%rax
  and    %rdi,%rax
  xor    %rsi,%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  shr    $0x19,%rax
  shl    $0x7,%rdx
  or     %rax,%rdx
  mov    $0x8b44f7af,%eax
  add    0x48(%rsp),%rax
  add    %rsi,%rax
  mov    %rcx,%rsi
  add    %rdi,%rdx
  xor    %rdi,%rsi
  and    %rdx,%rsi
  xor    %rcx,%rsi
  add    %rax,%rsi
  mov    %rsi,%rax
  shr    $0x14,%rsi
  shl    $0xc,%rax
  or     %rsi,%rax
  mov    $0xffff5bb1,%esi
  add    %rdx,%rax
  add    0x50(%rsp),%rsi
  add    %rcx,%rsi
  mov    %rdi,%rcx
  xor    %rdx,%rcx
  and    %rax,%rcx
  xor    %rdi,%rcx
  add    %rsi,%rcx
  mov    %rcx,%rsi
  shr    $0xf,%rcx
  shl    $0x11,%rsi
  or     %rcx,%rsi
  mov    $0x895cd7be,%ecx
  add    0x58(%rsp),%rcx
  add    %rdi,%rcx
  mov    %rdx,%rdi
  add    %rax,%rsi
  xor    %rax,%rdi
  and    %rsi,%rdi
  xor    %rdx,%rdi
  lea    0x6b901122(%r13,%rdx,1),%rdx
  add    %rcx,%rdi
  mov    %rdi,%rcx
  shr    $0xa,%rdi
  shl    $0x16,%rcx
  or     %rdi,%rcx
  mov    %rax,%rdi
  add    %rsi,%rcx
  xor    %rsi,%rdi
  and    %rcx,%rdi
  xor    %rax,%rdi
  add    %rdx,%rdi
  mov    %rdi,%rdx
  shr    $0x19,%rdi
  shl    $0x7,%rdx
  or     %rdi,%rdx
  mov    $0xfd987193,%edi
  add    %r11,%rdi
  add    %rcx,%rdx
  add    %rax,%rdi
  mov    %rsi,%rax
  xor    %rcx,%rax
  and    %rdx,%rax
  xor    %rsi,%rax
  add    %rdi,%rax
  mov    0x78(%rsp),%rdi
  mov    %rax,%r9
  shr    $0x14,%rax
  shl    $0xc,%r9
  or     %rax,%r9
  mov    $0xa679438e,%eax
  add    0x70(%rsp),%rax
  add    %rsi,%rax
  mov    %rcx,%rsi
  add    %rdx,%r9
  xor    %rdx,%rsi
  and    %r9,%rsi
  xor    %rcx,%rsi
  lea    0x49b40821(%rdi,%rcx,1),%rcx
  add    %rax,%rsi
  mov    %rsi,%rax
  shr    $0xf,%rsi
  shl    $0x11,%rax
  or     %rsi,%rax
  mov    %rdx,%rsi
  add    %r9,%rax
  xor    %r9,%rsi
  and    %rax,%rsi
  xor    %rdx,%rsi
  add    %rcx,%rsi
  mov    %rsi,%rcx
  shr    $0xa,%rsi
  shl    $0x16,%rcx
  or     %rsi,%rcx
  mov    $0xf61e2562,%esi
  add    0x8(%rsp),%rsi
  add    %rax,%rcx
  add    %rdx,%rsi
  mov    %rax,%rdx
  xor    %rcx,%rdx
  and    %r9,%rdx
  xor    %rax,%rdx
  add    %rsi,%rdx
  mov    %rdx,%rsi
  shl    $0x5,%rsi
  shr    $0x1b,%rdx
  or     %rdx,%rsi
  mov    $0xc040b340,%edx
  add    0x30(%rsp),%rdx
  add    %rcx,%rsi
  add    %r9,%rdx
  mov    %rcx,%r9
  xor    %rsi,%r9
  and    %rax,%r9
  lea    0x265e5a51(%r15,%rax,1),%rax
  mov    0x48(%rsp),%r15
  xor    %rcx,%r9
  add    %rdx,%r9
  mov    %r9,%rdx
  shr    $0x17,%r9
  shl    $0x9,%rdx
  or     %r9,%rdx
  mov    %rsi,%r9
  add    %rsi,%rdx
  xor    %rdx,%r9
  and    %rcx,%r9
  xor    %rsi,%r9
  add    %rax,%r9
  mov    %r9,%rax
  shr    $0x12,%r9
  shl    $0xe,%rax
  or     %r9,%rax
  mov    $0xe9b6c7aa,%r9d
  add    (%rsp),%r9
  add    %rdx,%rax
  add    %rcx,%r9
  mov    %rdx,%rcx
  xor    %rax,%rcx
  and    %rsi,%rcx
  xor    %rdx,%rcx
  add    %r9,%rcx
  mov    %rcx,%r9
  shr    $0xc,%rcx
  shl    $0x14,%r9
  or     %rcx,%r9
  mov    $0xd62f105d,%ecx
  add    %r8,%rcx
  add    %rax,%r9
  add    %rsi,%rcx
  mov    %rax,%rsi
  xor    %r9,%rsi
  and    %rdx,%rsi
  xor    %rax,%rsi
  add    %rcx,%rsi
  mov    %rsi,%rcx
  shr    $0x1b,%rsi
  shl    $0x5,%rcx
  or     %rsi,%rcx
  mov    0x50(%rsp),%rsi
  add    %r9,%rcx
  lea    0x2441453(%rsi,%rdx,1),%rsi
  mov    %r9,%rdx
  xor    %rcx,%rdx
  and    %rax,%rdx
  xor    %r9,%rdx
  add    %rsi,%rdx
  mov    %rdx,%rsi
  shr    $0x17,%rdx
  shl    $0x9,%rsi
  or     %rdx,%rsi
  mov    $0xd8a1e681,%edx
  add    %rdi,%rdx
  add    %rcx,%rsi
  add    %rax,%rdx
  mov    %rcx,%rax
  xor    %rsi,%rax
  and    %r9,%rax
  xor    %rcx,%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  shr    $0x12,%rax
  shl    $0xe,%rdx
  or     %rax,%rdx
  mov    $0xe7d3fbc8,%eax
  add    0x20(%rsp),%rax
  add    %rsi,%rdx
  add    %r9,%rax
  mov    %rsi,%r9
  xor    %rdx,%r9
  and    %rcx,%r9
  lea    0x21e1cde6(%r15,%rcx,1),%rcx
  mov    $0x8d2a4c8a,%r15d
  xor    %rsi,%r9
  add    %rax,%r9
  mov    %r9,%rax
  shr    $0xc,%r9
  shl    $0x14,%rax
  or     %r9,%rax
  mov    %rdx,%r9
  add    %rdx,%rax
  xor    %rax,%r9
  and    %rsi,%r9
  xor    %rdx,%r9
  add    %rcx,%r9
  mov    %r9,%rcx
  shr    $0x1b,%r9
  shl    $0x5,%rcx
  or     %r9,%rcx
  mov    $0xc33707d6,%r9d
  add    0x70(%rsp),%r9
  add    %rax,%rcx
  add    %rsi,%r9
  mov    %rax,%rsi
  xor    %rcx,%rsi
  and    %rdx,%rsi
  xor    %rax,%rsi
  add    %r9,%rsi
  mov    %rsi,%r9
  shr    $0x17,%rsi
  shl    $0x9,%r9
  or     %rsi,%r9
  mov    $0xf4d50d87,%esi
  add    0x18(%rsp),%rsi
  add    %rcx,%r9
  add    %rdx,%rsi
  mov    %rcx,%rdx
  xor    %r9,%rdx
  and    %rax,%rdx
  xor    %rcx,%rdx
  add    %rsi,%rdx
  mov    %rdx,%rsi
  shr    $0x12,%rdx
  shl    $0xe,%rsi
  or     %rdx,%rsi
  lea    0x455a14ed(%r12,%rax,1),%rdx
  mov    %r9,%rax
  add    %r9,%rsi
  xor    %rsi,%rax
  and    %rcx,%rax
  xor    %r9,%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  shr    $0xc,%rax
  shl    $0x14,%rdx
  or     %rax,%rdx
  mov    $0xa9e3e905,%eax
  add    %r11,%rax
  add    %rsi,%rdx
  add    %rcx,%rax
  mov    %rsi,%rcx
  xor    %rdx,%rcx
  and    %r9,%rcx
  xor    %rsi,%rcx
  add    %rax,%rcx
  mov    %rcx,%rax
  shr    $0x1b,%rcx
  shl    $0x5,%rax
  or     %rcx,%rax
  mov    $0xfcefa3f8,%ecx
  add    %r10,%rcx
  add    %rdx,%rax
  add    %r9,%rcx
  mov    %rdx,%r9
  xor    %rax,%r9
  and    %rsi,%r9
  xor    %rdx,%r9
  add    %rcx,%r9
  mov    %r9,%rcx
  shr    $0x17,%r9
  shl    $0x9,%rcx
  or     %r9,%rcx
  lea    0x676f02d9(%r14,%rsi,1),%r9
  mov    %rax,%rsi
  add    %rax,%rcx
  xor    %rcx,%rsi
  and    %rdx,%rsi
  xor    %rax,%rsi
  add    %r9,%rsi
  add    %r13,%r15
  mov    %rsi,%r9
  shr    $0x12,%rsi
  add    %r15,%rdx
  mov    %rax,%r15
  shl    $0xe,%r9
  or     %rsi,%r9
  mov    %rcx,%rsi
  add    %rcx,%r9
  xor    %r9,%rsi
  and    %rsi,%r15
  xor    %rcx,%r15
  add    %rdx,%r15
  mov    %r15,%rdx
  shr    $0xc,%r15
  shl    $0x14,%rdx
  or     %r15,%rdx
  mov    $0xfffa3942,%r15d
  add    %r9,%rdx
  add    %r8,%r15
  xor    %rdx,%rsi
  add    %r15,%rax
  lea    (%rsi,%rax,1),%r15
  mov    %r15,%rax
  shr    $0x1c,%r15
  shl    $0x4,%rax
  or     %r15,%rax
  lea    (%rdx,%rax,1),%rsi
  mov    $0x8771f681,%eax
  add    %r12,%rax
  add    %rax,%rcx
  mov    %r9,%rax
  xor    %rdx,%rax
  xor    %rsi,%rax
  add    %rcx,%rax
  mov    %rax,%rcx
  shr    $0x15,%rax
  shl    $0xb,%rcx
  or     %rax,%rcx
  mov    0x58(%rsp),%rax
  add    %rsi,%rcx
  lea    0x6d9d6122(%rax,%r9,1),%r9
  mov    %rdx,%rax
  xor    %rsi,%rax
  xor    %rcx,%rax
  add    %r9,%rax
  mov    %rax,%r9
  shr    $0x10,%rax
  shl    $0x10,%r9
  or     %rax,%r9
  mov    $0xfde5380c,%eax
  add    0x70(%rsp),%rax
  add    %rax,%rdx
  mov    %rsi,%rax
  add    %rcx,%r9
  xor    %rcx,%rax
  xor    %r9,%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  shr    $0x9,%rax
  shl    $0x17,%rdx
  or     %rax,%rdx
  mov    $0xa4beea44,%eax
  add    0x8(%rsp),%rax
  add    %rsi,%rax
  mov    %rcx,%rsi
  add    %r9,%rdx
  xor    %r9,%rsi
  xor    %rdx,%rsi
  add    %rax,%rsi
  mov    %rsi,%rax
  shr    $0x1c,%rsi
  shl    $0x4,%rax
  or     %rsi,%rax
  mov    0x20(%rsp),%rsi
  add    %rdx,%rax
  lea    0x4bdecfa9(%rsi,%rcx,1),%rcx
  mov    %r9,%rsi
  xor    %rdx,%rsi
  xor    %rax,%rsi
  add    %rcx,%rsi
  mov    %rsi,%rcx
  shr    $0x15,%rsi
  shl    $0xb,%rcx
  or     %rsi,%rcx
  mov    $0xf6bb4b60,%esi
  add    %r14,%rsi
  add    %rax,%rcx
  add    %r9,%rsi
  mov    %rdx,%r9
  xor    %rax,%r9
  xor    %rcx,%r9
  add    %rsi,%r9
  mov    %r9,%rsi
  shr    $0x10,%r9
  shl    $0x10,%rsi
  or     %r9,%rsi
  mov    $0xbebfbc70,%r9d
  add    0x50(%rsp),%r9
  add    %r9,%rdx
  mov    %rax,%r9
  add    %rcx,%rsi
  xor    %rcx,%r9
  xor    %rsi,%r9
  add    %rdx,%r9
  mov    %r9,%rdx
  shr    $0x9,%r9
  shl    $0x17,%rdx
  or     %r9,%rdx
  lea    0x289b7ec6(%r11,%rax,1),%r9
  mov    %rcx,%rax
  add    %rsi,%rdx
  xor    %rsi,%rax
  xor    %rdx,%rax
  add    %r9,%rax
  mov    %rax,%r9
  shr    $0x1c,%rax
  shl    $0x4,%r9
  or     %rax,%r9
  mov    $0xeaa127fa,%eax
  add    (%rsp),%rax
  add    %rax,%rcx
  mov    %rsi,%rax
  add    %rdx,%r9
  xor    %rdx,%rax
  xor    %r9,%rax
  add    %rcx,%rax
  mov    %rax,%rcx
  shr    $0x15,%rax
  shl    $0xb,%rcx
  or     %rax,%rcx
  mov    $0xd4ef3085,%eax
  add    %r9,%rcx
  add    0x18(%rsp),%rax
  add    %rsi,%rax
  mov    %rdx,%rsi
  xor    %r9,%rsi
  xor    %rcx,%rsi
  add    %rax,%rsi
  mov    %rsi,%rax
  shr    $0x10,%rsi
  shl    $0x10,%rax
  or     %rsi,%rax
  mov    0x30(%rsp),%rsi
  add    %rcx,%rax
  lea    0x4881d05(%rsi,%rdx,1),%rsi
  mov    %r9,%rdx
  xor    %rcx,%rdx
  xor    %rax,%rdx
  add    %rsi,%rdx
  mov    %rdx,%rsi
  shr    $0x9,%rdx
  shl    $0x17,%rsi
  or     %rdx,%rsi
  mov    $0xd9d4d039,%edx
  add    0x48(%rsp),%rdx
  add    %rdx,%r9
  mov    %rcx,%rdx
  add    %rax,%rsi
  xor    %rax,%rdx
  xor    %rsi,%rdx
  add    %r9,%rdx
  mov    %rdx,%r9
  shr    $0x1c,%rdx
  shl    $0x4,%r9
  or     %rdx,%r9
  mov    $0xe6db99e5,%edx
  add    %r13,%rdx
  add    %rsi,%r9
  add    %rcx,%rdx
  mov    %rax,%rcx
  xor    %rsi,%rcx
  xor    %r9,%rcx
  add    %rdx,%rcx
  mov    %rcx,%rdx
  shr    $0x15,%rcx
  shl    $0xb,%rdx
  or     %rcx,%rdx
  lea    0x1fa27cf8(%rdi,%rax,1),%rcx
  mov    %rsi,%rax
  add    %r9,%rdx
  xor    %r9,%rax
  xor    %rdx,%rax
  add    %rcx,%rax
  mov    %rax,%rcx
  shr    $0x10,%rax
  shl    $0x10,%rcx
  or     %rax,%rcx
  mov    $0xc4ac5665,%eax
  add    %r10,%rax
  add    %rdx,%rcx
  add    %rax,%rsi
  mov    %r9,%rax
  xor    %rdx,%rax
  xor    %rcx,%rax
  add    %rsi,%rax
  mov    %rax,%rsi
  shr    $0x9,%rax
  shl    $0x17,%rsi
  or     %rax,%rsi
  mov    $0xf4292244,%eax
  add    (%rsp),%rax
  add    %rax,%r9
  mov    %rdx,%rax
  add    %rcx,%rsi
  not    %rax
  lea    0x432aff97(%r14,%rdx,1),%rdx
  or     %rsi,%rax
  xor    %rcx,%rax
  add    %r9,%rax
  mov    %rax,%r9
  shr    $0x1a,%rax
  shl    $0x6,%r9
  or     %rax,%r9
  mov    %rcx,%rax
  add    %rsi,%r9
  not    %rax
  or     %r9,%rax
  xor    %rsi,%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  shr    $0x16,%rax
  shl    $0xa,%rdx
  or     %rax,%rdx
  mov    $0xab9423a7,%eax
  add    0x70(%rsp),%rax
  add    %rax,%rcx
  mov    %rsi,%rax
  add    %r9,%rdx
  not    %rax
  or     %rdx,%rax
  xor    %r9,%rax
  add    %rcx,%rax
  mov    %rax,%rcx
  shr    $0x11,%rax
  shl    $0xf,%rcx
  or     %rax,%rcx
  mov    $0xfc93a039,%eax
  add    %rax,%r8
  mov    %r9,%rax
  add    %rdx,%rcx
  not    %rax
  add    %rsi,%r8
  or     %rcx,%rax
  xor    %rdx,%rax
  add    %r8,%rax
  lea    0x655b59c3(%r13,%r9,1),%r8
  mov    %rax,%rsi
  shr    $0xb,%rax
  shl    $0x15,%rsi
  or     %rax,%rsi
  mov    %rdx,%rax
  add    %rcx,%rsi
  not    %rax
  or     %rsi,%rax
  xor    %rcx,%rax
  add    %r8,%rax
  mov    %rax,%r8
  shr    $0x1a,%rax
  shl    $0x6,%r8
  or     %rax,%r8
  mov    $0x8f0ccc92,%eax
  add    0x18(%rsp),%rax
  add    %rax,%rdx
  mov    %rcx,%rax
  add    %rsi,%r8
  not    %rax
  or     %r8,%rax
  xor    %rsi,%rax
  add    %rdx,%rax
  mov    %rax,%rdx
  shl    $0xa,%rdx
  shr    $0x16,%rax
  or     %rax,%rdx
  mov    $0xffeff47d,%eax
  add    0x50(%rsp),%rax
  add    %rax,%rcx
  mov    %rsi,%rax
  add    %r8,%rdx
  not    %rax
  or     %rdx,%rax
  xor    %r8,%rax
  add    %rcx,%rax
  mov    %rax,%rcx
  shr    $0x11,%rax
  shl    $0xf,%rcx
  or     %rax,%rcx
  mov    $0x85845dd1,%eax
  add    0x8(%rsp),%rax
  add    %rsi,%rax
  mov    %r8,%rsi
  add    %rdx,%rcx
  not    %rsi
  or     %rcx,%rsi
  xor    %rdx,%rsi
  add    %rax,%rsi
  mov    %rsi,%rax
  shr    $0xb,%rsi
  shl    $0x15,%rax
  or     %rsi,%rax
  lea    0x6fa87e4f(%r12,%r8,1),%rsi
  mov    %rdx,%r8
  add    %rcx,%rax
  not    %r8
  or     %rax,%r8
  xor    %rcx,%r8
  add    %rsi,%r8
  mov    %r8,%rsi
  shr    $0x1a,%r8
  shl    $0x6,%rsi
  or     %r8,%rsi
  mov    $0xfe2ce6e0,%r8d
  add    %r8,%rdi
  add    %rax,%rsi
  add    %rdi,%rdx
  mov    %rcx,%rdi
  not    %rdi
  or     %rsi,%rdi
  xor    %rax,%rdi
  add    %rdx,%rdi
  mov    %rdi,%rdx
  shr    $0x16,%rdi
  shl    $0xa,%rdx
  or     %rdi,%rdx
  mov    $0xa3014314,%edi
  add    0x30(%rsp),%rdi
  add    %rdi,%rcx
  mov    %rax,%rdi
  add    %rsi,%rdx
  not    %rdi
  or     %rdx,%rdi
  xor    %rsi,%rdi
  add    %rcx,%rdi
  mov    %rdi,%rcx
  shr    $0x11,%rdi
  shl    $0xf,%rcx
  or     %rdi,%rcx
  lea    0x4e0811a1(%r11,%rax,1),%rdi
  mov    %rsi,%rax
  add    %rdx,%rcx
  not    %rax
  or     %rcx,%rax
  xor    %rdx,%rax
  add    %rdi,%rax
  mov    %rax,%rdi
  shr    $0xb,%rax
  shl    $0x15,%rdi
  or     %rax,%rdi
  mov    $0xf7537e82,%eax
  add    0x20(%rsp),%rax
  add    %rsi,%rax
  mov    %rdx,%rsi
  add    %rcx,%rdi
  not    %rsi
  or     %rdi,%rsi
  xor    %rcx,%rsi
  add    %rax,%rsi
  mov    %rsi,%rax
  shr    $0x1a,%rsi
  shl    $0x6,%rax
  or     %rsi,%rax
  mov    $0xbd3af235,%esi
  add    0x58(%rsp),%rsi
  add    %rdi,%rax
  add    %rdx,%rsi
  mov    %rcx,%rdx
  not    %rdx
  or     %rax,%rdx
  xor    %rdi,%rdx
  add    %rsi,%rdx
  mov    %rdx,%rsi
  shr    $0x16,%rdx
  shl    $0xa,%rsi
  or     %rdx,%rsi
  lea    0x2ad7d2bb(%r10,%rcx,1),%rdx
  mov    %rdi,%rcx
  mov    0x10(%rbx),%r10
  add    %rax,%rsi
  not    %rcx
  or     %rsi,%rcx
  xor    %rax,%rcx
  add    %rdx,%rcx
  mov    %rcx,%rdx
  shr    $0x11,%rcx
  shl    $0xf,%rdx
  or     %rcx,%rdx
  mov    $0xeb86d391,%ecx
  add    0x48(%rsp),%rcx
  add    %rcx,%rdi
  mov    %rax,%rcx
  add    %rsi,%rdx
  add    (%rbx),%rax
  not    %rcx
  add    %rdx,%r10
  movq   %rax,%xmm0
  xor    %eax,%eax
  or     %rdx,%rcx
  add    0x8(%rbx),%rdx
  movq   %r10,%xmm1
  xor    %rsi,%rcx
  add    0x18(%rbx),%rsi
  add    %rdi,%rcx
  movq   %rsi,%xmm2
  xor    %esi,%esi
  mov    %rcx,%rdi
  shr    $0xb,%rcx
  punpcklqdq %xmm2,%xmm1
  shl    $0x15,%rdi
  movups %xmm1,0x10(%rbx)
  or     %rdi,%rcx
  mov    %rbp,%rdi
  add    %rcx,%rdx
  movq   %rdx,%xmm3
  mov    $0x80,%edx
  punpcklqdq %xmm3,%xmm0
  movups %xmm0,(%rbx)
  call   <MD5_memset@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L6
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L6:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void MD5Transform(state, block) unsigned long state[4];
unsigned char block[64];
{
  unsigned long a = state[0], b = state[1], c = state[2], d = state[3], x[16];
  Decode(x, block, 64);
  {
    (a) += ((((b)) & ((c))) | ((~(b)) & ((d)))) + (x[0]) + (unsigned long)(0xd76aa478);
    (a) = ((((a)) << ((7))) | (((a)) >> (32 - ((7)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((b))) | ((~(a)) & ((c)))) + (x[1]) + (unsigned long)(0xe8c7b756);
    (d) = ((((d)) << ((12))) | (((d)) >> (32 - ((12)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((a))) | ((~(d)) & ((b)))) + (x[2]) + (unsigned long)(0x242070db);
    (c) = ((((c)) << ((17))) | (((c)) >> (32 - ((17)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((d))) | ((~(c)) & ((a)))) + (x[3]) + (unsigned long)(0xc1bdceee);
    (b) = ((((b)) << ((22))) | (((b)) >> (32 - ((22)))));
    (b) += (c);
  };
  {
    (a) += ((((b)) & ((c))) | ((~(b)) & ((d)))) + (x[4]) + (unsigned long)(0xf57c0faf);
    (a) = ((((a)) << ((7))) | (((a)) >> (32 - ((7)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((b))) | ((~(a)) & ((c)))) + (x[5]) + (unsigned long)(0x4787c62a);
    (d) = ((((d)) << ((12))) | (((d)) >> (32 - ((12)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((a))) | ((~(d)) & ((b)))) + (x[6]) + (unsigned long)(0xa8304613);
    (c) = ((((c)) << ((17))) | (((c)) >> (32 - ((17)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((d))) | ((~(c)) & ((a)))) + (x[7]) + (unsigned long)(0xfd469501);
    (b) = ((((b)) << ((22))) | (((b)) >> (32 - ((22)))));
    (b) += (c);
  };
  {
    (a) += ((((b)) & ((c))) | ((~(b)) & ((d)))) + (x[8]) + (unsigned long)(0x698098d8);
    (a) = ((((a)) << ((7))) | (((a)) >> (32 - ((7)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((b))) | ((~(a)) & ((c)))) + (x[9]) + (unsigned long)(0x8b44f7af);
    (d) = ((((d)) << ((12))) | (((d)) >> (32 - ((12)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((a))) | ((~(d)) & ((b)))) + (x[10]) + (unsigned long)(0xffff5bb1);
    (c) = ((((c)) << ((17))) | (((c)) >> (32 - ((17)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((d))) | ((~(c)) & ((a)))) + (x[11]) + (unsigned long)(0x895cd7be);
    (b) = ((((b)) << ((22))) | (((b)) >> (32 - ((22)))));
    (b) += (c);
  };
  {
    (a) += ((((b)) & ((c))) | ((~(b)) & ((d)))) + (x[12]) + (unsigned long)(0x6b901122);
    (a) = ((((a)) << ((7))) | (((a)) >> (32 - ((7)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((b))) | ((~(a)) & ((c)))) + (x[13]) + (unsigned long)(0xfd987193);
    (d) = ((((d)) << ((12))) | (((d)) >> (32 - ((12)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((a))) | ((~(d)) & ((b)))) + (x[14]) + (unsigned long)(0xa679438e);
    (c) = ((((c)) << ((17))) | (((c)) >> (32 - ((17)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((d))) | ((~(c)) & ((a)))) + (x[15]) + (unsigned long)(0x49b40821);
    (b) = ((((b)) << ((22))) | (((b)) >> (32 - ((22)))));
    (b) += (c);
  };
  {
    (a) += ((((b)) & ((d))) | (((c)) & (~(d)))) + (x[1]) + (unsigned long)(0xf61e2562);
    (a) = ((((a)) << ((5))) | (((a)) >> (32 - ((5)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((c))) | (((b)) & (~(c)))) + (x[6]) + (unsigned long)(0xc040b340);
    (d) = ((((d)) << ((9))) | (((d)) >> (32 - ((9)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((b))) | (((a)) & (~(b)))) + (x[11]) + (unsigned long)(0x265e5a51);
    (c) = ((((c)) << ((14))) | (((c)) >> (32 - ((14)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((a))) | (((d)) & (~(a)))) + (x[0]) + (unsigned long)(0xe9b6c7aa);
    (b) = ((((b)) << ((20))) | (((b)) >> (32 - ((20)))));
    (b) += (c);
  };
  {
    (a) += ((((b)) & ((d))) | (((c)) & (~(d)))) + (x[5]) + (unsigned long)(0xd62f105d);
    (a) = ((((a)) << ((5))) | (((a)) >> (32 - ((5)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((c))) | (((b)) & (~(c)))) + (x[10]) + (unsigned long)(0x2441453);
    (d) = ((((d)) << ((9))) | (((d)) >> (32 - ((9)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((b))) | (((a)) & (~(b)))) + (x[15]) + (unsigned long)(0xd8a1e681);
    (c) = ((((c)) << ((14))) | (((c)) >> (32 - ((14)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((a))) | (((d)) & (~(a)))) + (x[4]) + (unsigned long)(0xe7d3fbc8);
    (b) = ((((b)) << ((20))) | (((b)) >> (32 - ((20)))));
    (b) += (c);
  };
  {
    (a) += ((((b)) & ((d))) | (((c)) & (~(d)))) + (x[9]) + (unsigned long)(0x21e1cde6);
    (a) = ((((a)) << ((5))) | (((a)) >> (32 - ((5)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((c))) | (((b)) & (~(c)))) + (x[14]) + (unsigned long)(0xc33707d6);
    (d) = ((((d)) << ((9))) | (((d)) >> (32 - ((9)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((b))) | (((a)) & (~(b)))) + (x[3]) + (unsigned long)(0xf4d50d87);
    (c) = ((((c)) << ((14))) | (((c)) >> (32 - ((14)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((a))) | (((d)) & (~(a)))) + (x[8]) + (unsigned long)(0x455a14ed);
    (b) = ((((b)) << ((20))) | (((b)) >> (32 - ((20)))));
    (b) += (c);
  };
  {
    (a) += ((((b)) & ((d))) | (((c)) & (~(d)))) + (x[13]) + (unsigned long)(0xa9e3e905);
    (a) = ((((a)) << ((5))) | (((a)) >> (32 - ((5)))));
    (a) += (b);
  };
  {
    (d) += ((((a)) & ((c))) | (((b)) & (~(c)))) + (x[2]) + (unsigned long)(0xfcefa3f8);
    (d) = ((((d)) << ((9))) | (((d)) >> (32 - ((9)))));
    (d) += (a);
  };
  {
    (c) += ((((d)) & ((b))) | (((a)) & (~(b)))) + (x[7]) + (unsigned long)(0x676f02d9);
    (c) = ((((c)) << ((14))) | (((c)) >> (32 - ((14)))));
    (c) += (d);
  };
  {
    (b) += ((((c)) & ((a))) | (((d)) & (~(a)))) + (x[12]) + (unsigned long)(0x8d2a4c8a);
    (b) = ((((b)) << ((20))) | (((b)) >> (32 - ((20)))));
    (b) += (c);
  };
  {
    (a) += (((b)) ^ ((c)) ^ ((d))) + (x[5]) + (unsigned long)(0xfffa3942);
    (a) = ((((a)) << ((4))) | (((a)) >> (32 - ((4)))));
    (a) += (b);
  };
  {
    (d) += (((a)) ^ ((b)) ^ ((c))) + (x[8]) + (unsigned long)(0x8771f681);
    (d) = ((((d)) << ((11))) | (((d)) >> (32 - ((11)))));
    (d) += (a);
  };
  {
    (c) += (((d)) ^ ((a)) ^ ((b))) + (x[11]) + (unsigned long)(0x6d9d6122);
    (c) = ((((c)) << ((16))) | (((c)) >> (32 - ((16)))));
    (c) += (d);
  };
  {
    (b) += (((c)) ^ ((d)) ^ ((a))) + (x[14]) + (unsigned long)(0xfde5380c);
    (b) = ((((b)) << ((23))) | (((b)) >> (32 - ((23)))));
    (b) += (c);
  };
  {
    (a) += (((b)) ^ ((c)) ^ ((d))) + (x[1]) + (unsigned long)(0xa4beea44);
    (a) = ((((a)) << ((4))) | (((a)) >> (32 - ((4)))));
    (a) += (b);
  };
  {
    (d) += (((a)) ^ ((b)) ^ ((c))) + (x[4]) + (unsigned long)(0x4bdecfa9);
    (d) = ((((d)) << ((11))) | (((d)) >> (32 - ((11)))));
    (d) += (a);
  };
  {
    (c) += (((d)) ^ ((a)) ^ ((b))) + (x[7]) + (unsigned long)(0xf6bb4b60);
    (c) = ((((c)) << ((16))) | (((c)) >> (32 - ((16)))));
    (c) += (d);
  };
  {
    (b) += (((c)) ^ ((d)) ^ ((a))) + (x[10]) + (unsigned long)(0xbebfbc70);
    (b) = ((((b)) << ((23))) | (((b)) >> (32 - ((23)))));
    (b) += (c);
  };
  {
    (a) += (((b)) ^ ((c)) ^ ((d))) + (x[13]) + (unsigned long)(0x289b7ec6);
    (a) = ((((a)) << ((4))) | (((a)) >> (32 - ((4)))));
    (a) += (b);
  };
  {
    (d) += (((a)) ^ ((b)) ^ ((c))) + (x[0]) + (unsigned long)(0xeaa127fa);
    (d) = ((((d)) << ((11))) | (((d)) >> (32 - ((11)))));
    (d) += (a);
  };
  {
    (c) += (((d)) ^ ((a)) ^ ((b))) + (x[3]) + (unsigned long)(0xd4ef3085);
    (c) = ((((c)) << ((16))) | (((c)) >> (32 - ((16)))));
    (c) += (d);
  };
  {
    (b) += (((c)) ^ ((d)) ^ ((a))) + (x[6]) + (unsigned long)(0x4881d05);
    (b) = ((((b)) << ((23))) | (((b)) >> (32 - ((23)))));
    (b) += (c);
  };
  {
    (a) += (((b)) ^ ((c)) ^ ((d))) + (x[9]) + (unsigned long)(0xd9d4d039);
    (a) = ((((a)) << ((4))) | (((a)) >> (32 - ((4)))));
    (a) += (b);
  };
  {
    (d) += (((a)) ^ ((b)) ^ ((c))) + (x[12]) + (unsigned long)(0xe6db99e5);
    (d) = ((((d)) << ((11))) | (((d)) >> (32 - ((11)))));
    (d) += (a);
  };
  {
    (c) += (((d)) ^ ((a)) ^ ((b))) + (x[15]) + (unsigned long)(0x1fa27cf8);
    (c) = ((((c)) << ((16))) | (((c)) >> (32 - ((16)))));
    (c) += (d);
  };
  {
    (b) += (((c)) ^ ((d)) ^ ((a))) + (x[2]) + (unsigned long)(0xc4ac5665);
    (b) = ((((b)) << ((23))) | (((b)) >> (32 - ((23)))));
    (b) += (c);
  };
  {
    (a) += (((c)) ^ (((b)) | (~(d)))) + (x[0]) + (unsigned long)(0xf4292244);
    (a) = ((((a)) << ((6))) | (((a)) >> (32 - ((6)))));
    (a) += (b);
  };
  {
    (d) += (((b)) ^ (((a)) | (~(c)))) + (x[7]) + (unsigned long)(0x432aff97);
    (d) = ((((d)) << ((10))) | (((d)) >> (32 - ((10)))));
    (d) += (a);
  };
  {
    (c) += (((a)) ^ (((d)) | (~(b)))) + (x[14]) + (unsigned long)(0xab9423a7);
    (c) = ((((c)) << ((15))) | (((c)) >> (32 - ((15)))));
    (c) += (d);
  };
  {
    (b) += (((d)) ^ (((c)) | (~(a)))) + (x[5]) + (unsigned long)(0xfc93a039);
    (b) = ((((b)) << ((21))) | (((b)) >> (32 - ((21)))));
    (b) += (c);
  };
  {
    (a) += (((c)) ^ (((b)) | (~(d)))) + (x[12]) + (unsigned long)(0x655b59c3);
    (a) = ((((a)) << ((6))) | (((a)) >> (32 - ((6)))));
    (a) += (b);
  };
  {
    (d) += (((b)) ^ (((a)) | (~(c)))) + (x[3]) + (unsigned long)(0x8f0ccc92);
    (d) = ((((d)) << ((10))) | (((d)) >> (32 - ((10)))));
    (d) += (a);
  };
  {
    (c) += (((a)) ^ (((d)) | (~(b)))) + (x[10]) + (unsigned long)(0xffeff47d);
    (c) = ((((c)) << ((15))) | (((c)) >> (32 - ((15)))));
    (c) += (d);
  };
  {
    (b) += (((d)) ^ (((c)) | (~(a)))) + (x[1]) + (unsigned long)(0x85845dd1);
    (b) = ((((b)) << ((21))) | (((b)) >> (32 - ((21)))));
    (b) += (c);
  };
  {
    (a) += (((c)) ^ (((b)) | (~(d)))) + (x[8]) + (unsigned long)(0x6fa87e4f);
    (a) = ((((a)) << ((6))) | (((a)) >> (32 - ((6)))));
    (a) += (b);
  };
  {
    (d) += (((b)) ^ (((a)) | (~(c)))) + (x[15]) + (unsigned long)(0xfe2ce6e0);
    (d) = ((((d)) << ((10))) | (((d)) >> (32 - ((10)))));
    (d) += (a);
  };
  {
    (c) += (((a)) ^ (((d)) | (~(b)))) + (x[6]) + (unsigned long)(0xa3014314);
    (c) = ((((c)) << ((15))) | (((c)) >> (32 - ((15)))));
    (c) += (d);
  };
  {
    (b) += (((d)) ^ (((c)) | (~(a)))) + (x[13]) + (unsigned long)(0x4e0811a1);
    (b) = ((((b)) << ((21))) | (((b)) >> (32 - ((21)))));
    (b) += (c);
  };
  {
    (a) += (((c)) ^ (((b)) | (~(d)))) + (x[4]) + (unsigned long)(0xf7537e82);
    (a) = ((((a)) << ((6))) | (((a)) >> (32 - ((6)))));
    (a) += (b);
  };
  {
    (d) += (((b)) ^ (((a)) | (~(c)))) + (x[11]) + (unsigned long)(0xbd3af235);
    (d) = ((((d)) << ((10))) | (((d)) >> (32 - ((10)))));
    (d) += (a);
  };
  {
    (c) += (((a)) ^ (((d)) | (~(b)))) + (x[2]) + (unsigned long)(0x2ad7d2bb);
    (c) = ((((c)) << ((15))) | (((c)) >> (32 - ((15)))));
    (c) += (d);
  };
  {
    (b) += (((d)) ^ (((c)) | (~(a)))) + (x[9]) + (unsigned long)(0xeb86d391);
    (b) = ((((b)) << ((21))) | (((b)) >> (32 - ((21)))));
    (b) += (c);
  };
  state[0] += a;
  state[1] += b;
  state[2] += c;
  state[3] += d;
  MD5_memset((unsigned char *)x, 0, sizeof(x));
}
```