user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  sub    $0x8,%rsp
  lea    D10(%rip),%rdi
  call   <puts@plt>
  mov    $0x14,%esi
  mov    $0xa,%edi
  call   <init@plt>
  mov    $0xf,%esi
  mov    $0x1,%edi
  call   <insrt@plt>
  mov    $0x1e,%edi
  call   <addLast@plt>
  mov    $0x28,%edi
  call   <addLast@plt>
  mov    $0x5,%edi
  call   <addFirst@plt>
  xor    %edi,%edi
  call   <addFirst@plt>
  mov    $0x2,%esi
  mov    $0x1,%edi
  call   <insrt@plt>
  mov    $0x23,%esi
  mov    $0x7,%edi
  call   <insrt@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  mov    $0x6,%edi
  call   <rmv@plt>
  mov    $0x3,%edi
  call   <rmv@plt>
  xor    %edi,%edi
  call   <rmv@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  mov    $0x5,%edi
  call   <rmv@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  xor    %edi,%edi
  mov    $0x2,%esi
  call   <rmvS@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  mov    $0x50,%r9d
  mov    $0x46,%r8d
  mov    $0x3c,%ecx
  mov    $0x32,%edx
  mov    $0x4,%esi
  mov    $0x1e,%edi
  xor    %eax,%eax
  call   <insrtS@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  mov    $0x2,%esi
  mov    $0x4,%edi
  call   <rmvS@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  mov    $0x5,%esi
  mov    $0x3,%edi
  call   <rmvS@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  sub    $0x8,%rsp
  mov    $0x1b,%ecx
  xor    %eax,%eax
  push   $0x1e
  mov    $0x1d,%r9d
  mov    $0x1c,%r8d
  mov    $0x1a,%edx
  mov    $0x5,%esi
  mov    $0x2,%edi
  call   <insrtS@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  mov    $0x4,%ecx
  xor    %edx,%edx
  xor    %edi,%edi
  mov    $0x2,%esi
  xor    %eax,%eax
  call   <insrtS@plt>
  xor    %eax,%eax
  call   <printAll@plt>
  lea    D26(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x8,%edi
  call   <printNode@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D12(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x3,%esi
  xor    %edi,%edi
  call   <printNodeS@plt>
  mov    $0x1e,%edi
  call   <getNodeValue@plt>
  lea    D11(%rip),%rdi
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  add    $0x18,%rsp
  ret
```

tool_calls: name: read_data
arguments: data_tag: D10
data_type: string
name: read_data
arguments: data_tag: D26
data_type: string
name: read_data
arguments: data_tag: D12
data_type: string
name: read_data
arguments: data_tag: D11
data_type: string

tool: D10: Hello world!

tool: D26: The 5. element is: 

tool: D12: The first three elements are: 

tool: D11: The last element is %d


assistant: ```c
int main() {
  printf("Hello world!\n");
  init(10, 20);
  insrt(1, 15);
  addLast(30);
  addLast(40);
  addFirst(5);
  addFirst(0);
  insrt(1, 2);
  insrt(7, 35);
  printAll();
  rmv(6);
  rmv(3);
  rmv(0);
  printAll();
  rmv(5);
  printAll();
  rmvS(0, 2);
  printAll();
  insrtS(30, 4, 50, 60, 70, 80);
  printAll();
  rmvS(4, 2);
  printAll();
  rmvS(3, 5);
  printAll();
  insrtS(2, 5, 26, 27, 28, 29, 30);
  printAll();
  insrtS(0, 2, 0, 4);
  printAll();
  printf("The 5. element is: ");
  printNode(8);
  printf("\n");
  printf("The first three elements are: ");
  printNodeS(0, 3);
  printf("The last element is %d\n", getNodeValue(30));
  return 0;
}
```