user: Translate the below assembly code into C programming language:

```asm
<testQSort>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1c0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x5,-0x140(%rbp)
  movl   $0x6,-0x13c(%rbp)
  movl   $0x0,-0x138(%rbp)
  movl   $0x4,-0x134(%rbp)
  movl   $0x2,-0x130(%rbp)
  movl   $0x7,-0x12c(%rbp)
  movl   $0x8,-0x128(%rbp)
  movl   $0x1,-0x124(%rbp)
  movl   $0x3,-0x120(%rbp)
  lea    D191(%rip),%rax
  mov    %rax,-0xb0(%rbp)
  lea    D297(%rip),%rax
  mov    %rax,-0xa8(%rbp)
  lea    D58(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  lea    D203(%rip),%rax
  mov    %rax,-0x98(%rbp)
  lea    D247(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D211(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D211(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D132(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D328(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    -0x140(%rbp),%rcx
  lea    -0xb0(%rbp),%rax
  mov    $0x9,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <testQSort_@plt>
  movl   $0x0,-0x1a0(%rbp)
  movl   $0x1,-0x19c(%rbp)
  movl   $0x3,-0x198(%rbp)
  movl   $0x4,-0x194(%rbp)
  movl   $0x2,-0x190(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x110(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x108(%rbp)
  lea    D9(%rip),%rax
  mov    %rax,-0x100(%rbp)
  lea    D238(%rip),%rax
  mov    %rax,-0xf8(%rbp)
  lea    D321(%rip),%rax
  mov    %rax,-0xf0(%rbp)
  lea    -0x1a0(%rbp),%rcx
  lea    -0x110(%rbp),%rax
  mov    $0x5,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <testQSort_@plt>
  movl   $0x3,-0x1c0(%rbp)
  movl   $0x1,-0x1bc(%rbp)
  movl   $0x2,-0x1b8(%rbp)
  movl   $0x0,-0x1b4(%rbp)
  lea    D321(%rip),%rax
  mov    %rax,-0x180(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x178(%rbp)
  lea    D238(%rip),%rax
  mov    %rax,-0x170(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x168(%rbp)
  lea    -0x1c0(%rbp),%rcx
  lea    -0x180(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <testQSort_@plt>
  movl   $0x0,-0x1b0(%rbp)
  movl   $0x2,-0x1ac(%rbp)
  movl   $0x3,-0x1a8(%rbp)
  movl   $0x1,-0x1a4(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x160(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x158(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x150(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x148(%rbp)
  lea    -0x1b0(%rbp),%rcx
  lea    -0x160(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <testQSort_@plt>
  movl   $0x0,-0xe0(%rbp)
  movl   $0x2,-0xdc(%rbp)
  movl   $0x3,-0xd8(%rbp)
  movl   $0x5,-0xd4(%rbp)
  movl   $0x8,-0xd0(%rbp)
  movl   $0x9,-0xcc(%rbp)
  movl   $0x1,-0xc8(%rbp)
  movl   $0x4,-0xc4(%rbp)
  movl   $0x6,-0xc0(%rbp)
  movl   $0x7,-0xbc(%rbp)
  movl   $0xa,-0xb8(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D325(%rip),%rax
  mov    %rax,-0x18(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x10(%rbp)
  lea    -0xe0(%rbp),%rcx
  lea    -0x60(%rbp),%rax
  mov    $0xb,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <testQSort_@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L8
  call   <__stack_chk_fail@plt>
L8:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D191
type_infered: string
name: retrieve_data
arguments: tag: D297
type_infered: string
name: retrieve_data
arguments: tag: D58
type_infered: string
name: retrieve_data
arguments: tag: D203
type_infered: string
name: retrieve_data
arguments: tag: D247
type_infered: string
name: retrieve_data
arguments: tag: D211
type_infered: string
name: retrieve_data
arguments: tag: D132
type_infered: string
name: retrieve_data
arguments: tag: D328
type_infered: string
name: retrieve_data
arguments: tag: D325
type_infered: string
name: retrieve_data
arguments: tag: D169
type_infered: string
name: retrieve_data
arguments: tag: D9
type_infered: string
name: retrieve_data
arguments: tag: D238
type_infered: string
name: retrieve_data
arguments: tag: D321
type_infered: string

tool: D191: asdfd);

tool: D297: tabloid

tool: D58: elapid

tool: D203: venomous

tool: D247: curtain

tool: D211: applicable

tool: D132: innovative

tool: D328: nest

tool: D325: 1

tool: D169: 2

tool: D9: 5

tool: D238: 3

tool: D321: 4

assistant: ```c
void testQSort() {
  testQSort_((char *[]){"asdfd);", "tabloid", "elapid", "venomous", "curtain", "applicable", "applicable", "innovative", "nest"}, (int[]){5, 6, 0, 4, 2, 7, 8, 1, 3}, 9);
  testQSort_((char *[]){"1", "2", "5", "3", "4"}, (int[]){0, 1, 3, 4, 2}, 5);
  testQSort_((char *[]){"4", "2", "3", "1"}, (int[]){3, 1, 2, 0}, 4);
  testQSort_((char *[]){"1", "2", "1", "1"}, (int[]){0, 2, 3, 1}, 4);
  testQSort_((char *[]){"1", "2", "1", "1", "2", "1", "2", "2", "1", "1", "2"}, (int[]){0, 2, 3, 5, 8, 9, 1, 4, 6, 7, 10}, 11);
}
```