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

```asm
<cookey>:
  endbr64
  mov    %rdi,%rax
  sub    $0x98,%rsp
  mov    %rsi,%rdi
  movdqa D39(%rip),%xmm6
  movdqu (%rax),%xmm2
  movdqu 0x10(%rax),%xmm3
  mov    %rsp,%rsi
  movdqa D24(%rip),%xmm7
  movdqa D20(%rip),%xmm4
  mov    %fs:0x28,%rdx
  mov    %rdx,0x88(%rsp)
  xor    %edx,%edx
  movdqa %xmm2,%xmm5
  shufps $0xdd,%xmm3,%xmm2
  movdqa %xmm2,%xmm8
  shufps $0x88,%xmm3,%xmm5
  movdqa %xmm5,%xmm0
  movdqa %xmm5,%xmm1
  movdqa D12(%rip),%xmm3
  pslld  $0x6,%xmm0
  pslld  $0xa,%xmm1
  mov    $0x80,%edx
  pand   %xmm7,%xmm1
  psrad  $0x6,%xmm8
  pand   %xmm6,%xmm0
  por    %xmm1,%xmm0
  movdqa %xmm2,%xmm1
  pand   %xmm3,%xmm8
  psrad  $0xa,%xmm1
  pand   %xmm4,%xmm1
  por    %xmm8,%xmm1
  por    %xmm1,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0xc,%xmm1
  pslld  $0x10,%xmm5
  pand   %xmm7,%xmm5
  pand   %xmm6,%xmm1
  por    %xmm5,%xmm1
  movdqa %xmm2,%xmm5
  pand   %xmm3,%xmm2
  psrad  $0x4,%xmm5
  pand   %xmm4,%xmm5
  por    %xmm5,%xmm2
  por    %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  punpckldq %xmm2,%xmm1
  punpckhdq %xmm2,%xmm0
  movdqu 0x20(%rax),%xmm2
  movaps %xmm0,0x10(%rsp)
  movdqu 0x30(%rax),%xmm0
  movdqa %xmm2,%xmm5
  movaps %xmm1,(%rsp)
  shufps $0xdd,%xmm0,%xmm2
  shufps $0x88,%xmm0,%xmm5
  movdqa %xmm5,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0x6,%xmm0
  pslld  $0xa,%xmm1
  movdqa %xmm2,%xmm8
  pand   %xmm7,%xmm1
  psrad  $0x6,%xmm8
  pand   %xmm6,%xmm0
  por    %xmm1,%xmm0
  movdqa %xmm2,%xmm1
  pand   %xmm3,%xmm8
  psrad  $0xa,%xmm1
  pand   %xmm4,%xmm1
  por    %xmm8,%xmm1
  por    %xmm1,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0xc,%xmm1
  pslld  $0x10,%xmm5
  pand   %xmm7,%xmm5
  pand   %xmm6,%xmm1
  por    %xmm5,%xmm1
  movdqa %xmm2,%xmm5
  pand   %xmm3,%xmm2
  psrad  $0x4,%xmm5
  pand   %xmm4,%xmm5
  por    %xmm5,%xmm2
  por    %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  punpckldq %xmm2,%xmm1
  punpckhdq %xmm2,%xmm0
  movdqu 0x40(%rax),%xmm2
  movaps %xmm0,0x30(%rsp)
  movdqu 0x50(%rax),%xmm0
  movdqa %xmm2,%xmm5
  movaps %xmm1,0x20(%rsp)
  shufps $0xdd,%xmm0,%xmm2
  shufps $0x88,%xmm0,%xmm5
  movdqa %xmm5,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0x6,%xmm0
  pslld  $0xa,%xmm1
  movdqa %xmm2,%xmm8
  pand   %xmm7,%xmm1
  psrad  $0x6,%xmm8
  pand   %xmm6,%xmm0
  por    %xmm1,%xmm0
  movdqa %xmm2,%xmm1
  pand   %xmm3,%xmm8
  psrad  $0xa,%xmm1
  pand   %xmm4,%xmm1
  por    %xmm8,%xmm1
  por    %xmm1,%xmm0
  movdqa %xmm5,%xmm1
  pslld  $0xc,%xmm1
  pslld  $0x10,%xmm5
  pand   %xmm7,%xmm5
  pand   %xmm6,%xmm1
  por    %xmm5,%xmm1
  movdqa %xmm2,%xmm5
  pand   %xmm3,%xmm2
  psrad  $0x4,%xmm5
  pand   %xmm4,%xmm5
  por    %xmm5,%xmm2
  por    %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  punpckldq %xmm2,%xmm1
  punpckhdq %xmm2,%xmm0
  movaps %xmm1,0x40(%rsp)
  movdqu 0x60(%rax),%xmm1
  movaps %xmm0,0x50(%rsp)
  movdqu 0x70(%rax),%xmm0
  movdqa %xmm1,%xmm5
  shufps $0x88,%xmm0,%xmm5
  shufps $0xdd,%xmm0,%xmm1
  movdqa %xmm1,%xmm0
  movdqa %xmm1,%xmm2
  psrad  $0x6,%xmm0
  psrad  $0xa,%xmm2
  movdqa %xmm5,%xmm8
  pand   %xmm4,%xmm2
  pslld  $0x6,%xmm8
  pand   %xmm3,%xmm0
  por    %xmm2,%xmm0
  movdqa %xmm5,%xmm2
  pand   %xmm6,%xmm8
  pslld  $0xa,%xmm2
  pand   %xmm7,%xmm2
  por    %xmm8,%xmm2
  por    %xmm2,%xmm0
  movdqa %xmm5,%xmm2
  pslld  $0x10,%xmm2
  pslld  $0xc,%xmm5
  pand   %xmm6,%xmm5
  pand   %xmm7,%xmm2
  por    %xmm5,%xmm2
  movdqa %xmm1,%xmm5
  pand   %xmm3,%xmm1
  psrad  $0x4,%xmm5
  pand   %xmm5,%xmm4
  por    %xmm4,%xmm1
  por    %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  punpckldq %xmm1,%xmm2
  punpckhdq %xmm1,%xmm0
  movaps %xmm2,0x60(%rsp)
  movaps %xmm0,0x70(%rsp)
  call   <memcpy@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L3
  add    $0x98,%rsp
  ret
L3:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D39
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D24
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D20
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D12
data_type: byte[16]

tool: {"D39": [0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f]}

tool: {"D24": [0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00]}

tool: {"D20": [0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00]}

tool: {"D12": [0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x00,0x00,0x00]}

assistant: ```c
void cookey(const uint32_t *raw1, uint32_t *keyout) {
  uint32_t *cook;
  uint32_t dough[32];
  int i;
  cook = dough;
  for (i = 0; i < 16; i++, raw1++) {
    const uint32_t *raw0 = raw1++;
    *cook = (*raw0 & 0x00fc0000L) << 6;
    *cook |= (*raw0 & 0x00000fc0L) << 10;
    *cook |= (*raw1 & 0x00fc0000L) >> 10;
    *cook++ |= (*raw1 & 0x00000fc0L) >> 6;
    *cook = (*raw0 & 0x0003f000L) << 12;
    *cook |= (*raw0 & 0x0000003fL) << 16;
    *cook |= (*raw1 & 0x0003f000L) >> 4;
    *cook++ |= (*raw1 & 0x0000003fL);
  }
  memcpy(keyout, dough, sizeof(dough));
}
```