user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<functionF>:
  endbr64
  sub    $0x118,%rsp
  mov    %edi,%ecx
  mov    %edi,%edx
  movdqa D70(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x108(%rsp)
  xor    %eax,%eax
  sar    %ecx
  mov    %edi,%eax
  sar    $0x3,%edx
  movaps %xmm0,(%rsp)
  shl    $0x4,%eax
  and    $0x1,%ecx
  and    $0x1,%edx
  movdqa D37(%rip),%xmm0
  and    $0x10,%eax
  and    $0x4,%edi
  or     %ecx,%eax
  shl    $0x3,%ecx
  movaps %xmm0,0x10(%rsp)
  movdqa D62(%rip),%xmm0
  or     %edi,%eax
  mov    %edx,%edi
  shl    $0x5,%edi
  add    %edx,%edx
  movaps %xmm0,0x20(%rsp)
  movdqa D34(%rip),%xmm0
  or     %edi,%eax
  or     %ecx,%eax
  movaps %xmm0,0x30(%rsp)
  movdqa D61(%rip),%xmm0
  or     %edx,%eax
  xor    %esi,%eax
  movaps %xmm0,0x40(%rsp)
  movdqa D159(%rip),%xmm0
  mov    %eax,%ecx
  mov    %eax,%edx
  shr    %ecx
  shr    %edx
  movaps %xmm0,0x50(%rsp)
  movdqa D96(%rip),%xmm0
  and    $0x4,%edx
  and    $0x8,%ecx
  or     %edx,%ecx
  mov    %eax,%edx
  movaps %xmm0,0x60(%rsp)
  movdqa D117(%rip),%xmm0
  shr    %edx
  and    $0x1,%edx
  movaps %xmm0,0x70(%rsp)
  movdqa D128(%rip),%xmm0
  or     %edx,%ecx
  mov    %eax,%edx
  shr    %edx
  movaps %xmm0,0x80(%rsp)
  movdqa D108(%rip),%xmm0
  and    $0x2,%edx
  or     %edx,%ecx
  lea    (%rax,%rax,1),%edx
  shr    $0x5,%eax
  movaps %xmm0,0x90(%rsp)
  and    $0x2,%edx
  and    $0x1,%eax
  movdqa D45(%rip),%xmm0
  or     %edx,%eax
  movaps %xmm0,0xa0(%rsp)
  movdqa D133(%rip),%xmm0
  shl    $0x4,%rax
  add    %rcx,%rax
  movaps %xmm0,0xb0(%rsp)
  movdqa D124(%rip),%xmm0
  movaps %xmm0,0xc0(%rsp)
  movdqa D53(%rip),%xmm0
  movaps %xmm0,0xd0(%rsp)
  movdqa D56(%rip),%xmm0
  movaps %xmm0,0xe0(%rsp)
  movdqa D39(%rip),%xmm0
  movaps %xmm0,0xf0(%rsp)
  mov    (%rsp,%rax,4),%edx
  mov    %edx,%ecx
  lea    (%rdx,%rdx,1),%eax
  shr    $0x3,%ecx
  and    $0x2,%eax
  and    $0x1,%ecx
  or     %ecx,%eax
  lea    (%rdx,%rdx,1),%ecx
  add    %edx,%edx
  and    $0x8,%ecx
  and    $0x4,%edx
  or     %ecx,%eax
  or     %edx,%eax
  mov    0x108(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L6
  add    $0x118,%rsp
  ret
L6:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D70
type_infered: byte[16]
name: unpack_data
arguments: data_label: D37
type_infered: byte[16]
name: unpack_data
arguments: data_label: D62
type_infered: byte[16]
name: unpack_data
arguments: data_label: D34
type_infered: byte[16]
name: unpack_data
arguments: data_label: D61
type_infered: byte[16]
name: unpack_data
arguments: data_label: D159
type_infered: byte[16]
name: unpack_data
arguments: data_label: D96
type_infered: byte[16]
name: unpack_data
arguments: data_label: D117
type_infered: byte[16]
name: unpack_data
arguments: data_label: D128
type_infered: byte[16]
name: unpack_data
arguments: data_label: D108
type_infered: byte[16]
name: unpack_data
arguments: data_label: D45
type_infered: byte[16]
name: unpack_data
arguments: data_label: D133
type_infered: byte[16]
name: unpack_data
arguments: data_label: D124
type_infered: byte[16]
name: unpack_data
arguments: data_label: D53
type_infered: byte[16]
name: unpack_data
arguments: data_label: D56
type_infered: byte[16]
name: unpack_data
arguments: data_label: D39
type_infered: byte[16]

tool: {"D70": [0x0e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D37": [0x02,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x08,0x00,0x00,0x00]}

tool: {"D62": [0x03,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00]}

tool: {"D34": [0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: {"D61": [0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D159": [0x0e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

tool: {"D96": [0x0a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00]}

tool: {"D117": [0x09,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x00]}

tool: {"D128": [0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x08,0x00,0x00,0x00]}

tool: {"D108": [0x0d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0b,0x00,0x00,0x00]}

tool: {"D45": [0x0f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: {"D133": [0x03,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D124": [0x0f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00]}

tool: {"D53": [0x04,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00]}

tool: {"D56": [0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0e,0x00,0x00,0x00]}

tool: {"D39": [0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0d,0x00,0x00,0x00]}

assistant: ```c
unsigned int functionF(int rightSidePlaintext, int key) {
  int a[4][16] = {{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}};
  int part0 = rightSidePlaintext & 0x1;
  int part1 = (rightSidePlaintext & 0x2) >> 1;
  int part2 = (rightSidePlaintext & 0x4) >> 2;
  int part3 = (rightSidePlaintext & 0x8) >> 3;
  unsigned int combined = (part3 << 5) | (part0 << 4) | (part1 << 3) | (part2 << 2) | (part3 << 1) | part1;
  combined = combined ^ key;
  int combinedPart0 = combined & 0x1;
  int combinedPart1 = (combined & 0x2) >> 1;
  int combinedPart2 = (combined & 0x4) >> 2;
  int combinedPart3 = (combined & 0x8) >> 3;
  int combinedPart4 = (combined & 0x16) >> 4;
  int combinedPart5 = (combined & 0x32) >> 5;
  unsigned int column = (combinedPart4 << 3) | (combinedPart3 << 2) | (combinedPart2 << 1) | combinedPart1;
  unsigned int row = (combinedPart0 << 1) | combinedPart5;
  unsigned int output = a[row][column];
  int outputPart0 = output & 0x1;
  int outputPart1 = (output & 0x2) >> 1;
  int outputPart2 = (output & 0x4) >> 2;
  int outputPart3 = (output & 0x8) >> 3;
  int final = (outputPart2 << 3) | (outputPart1 << 2) | (outputPart0 << 1) | outputPart3;
  return final;
}
```