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

```asm
<thirteen>:
  endbr64
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    D1(%rip),%rdi
  call   <printf@plt>
  lea    0x10(%rsp),%rcx
  lea    0x8(%rsp),%rsi
  lea    0xc(%rsp),%rdx
  lea    0x14(%rsp),%r8
  lea    D6(%rip),%rdi
  call   <scanf@plt>
  movss  0xc(%rsp),%xmm1
  addss  0x14(%rsp),%xmm1
  movss  0x8(%rsp),%xmm0
  addss  0x10(%rsp),%xmm0
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm1
  lea    D33(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movss  0xc(%rsp),%xmm1
  subss  0x14(%rsp),%xmm1
  movss  0x8(%rsp),%xmm0
  subss  0x10(%rsp),%xmm0
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm1
  lea    D20(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movss  0x8(%rsp),%xmm0
  movss  0x14(%rsp),%xmm2
  movss  0xc(%rsp),%xmm3
  movss  0x10(%rsp),%xmm4
  movaps %xmm0,%xmm1
  mulss  %xmm2,%xmm1
  movaps %xmm3,%xmm5
  mulss  %xmm4,%xmm5
  addss  %xmm5,%xmm1
  mulss  %xmm4,%xmm0
  mulss  %xmm3,%xmm2
  subss  %xmm2,%xmm0
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm1
  lea    D69(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movss  0x8(%rsp),%xmm2
  movss  0x14(%rsp),%xmm0
  movss  0xc(%rsp),%xmm5
  movss  0x10(%rsp),%xmm4
  movaps %xmm4,%xmm3
  mulss  %xmm4,%xmm3
  movaps %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  addss  %xmm1,%xmm3
  movaps %xmm2,%xmm6
  mulss  %xmm0,%xmm6
  movaps %xmm5,%xmm1
  mulss  %xmm4,%xmm1
  subss  %xmm6,%xmm1
  divss  %xmm3,%xmm1
  mulss  %xmm4,%xmm2
  mulss  %xmm5,%xmm0
  addss  %xmm0,%xmm2
  divss  %xmm3,%xmm2
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm2,%xmm0
  cvtss2sd %xmm1,%xmm1
  lea    D52(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D42(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0x28,%rsp
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D1
type: string
name: retrieve_data
arguments: data_label: D6
type: string
name: retrieve_data
arguments: data_label: D33
type: string
name: retrieve_data
arguments: data_label: D20
type: string
name: retrieve_data
arguments: data_label: D69
type: string
name: retrieve_data
arguments: data_label: D52
type: string
name: retrieve_data
arguments: data_label: D42
type: string

tool: D1: enter real, imaginary coefficients of 2 complex numbers (float): 

tool: D6: %f%f%f%f

tool: D33: 
generated sum		= % 09.2f %+09.2f i


tool: D20: generated difference	= % 09.2f %+09.2f i


tool: D69: generated product	= % 09.2f %+09.2f i


tool: D52: generated quotient	= % 09.2f %+09.2f i


tool: D42: 
returning to menu. press Enter...

assistant: ```c
void thirteen() {
  struct complex {
    float x, y;
  } z1, z2;
  printf("enter real, imaginary coefficients of 2 complex numbers (float): ");
  scanf("%f%f%f%f", &z1.x, &z1.y, &z2.x, &z2.y);
  printf("\ngenerated sum\t\t= % 09.2f %+09.2f i\n", (z1.x + z2.x), (z1.y + z2.y));
  printf("generated difference\t= % 09.2f %+09.2f i\n", (z1.x - z2.x), (z1.y - z2.y));
  printf("generated product\t= % 09.2f %+09.2f i\n", (z1.x * z2.x - z1.y * z2.y), (z1.x * z2.y + z1.y * z2.x));
  printf("generated quotient\t= % 09.2f %+09.2f i\n", (z1.x * z2.x + z1.y * z2.y) / (z2.x * z2.x + z2.y * z2.y), (-z1.x * z2.y + z1.y * z2.x) / (z2.x * z2.x + z2.y * z2.y));
  getchar();
  printf("\nreturning to menu. press Enter...");
  getchar();
}
```