user: What is the c source code of the assembly code below?

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x28,%rsp
  mov    %edi,-0x34(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x28(%rbp)
  xor    %eax,%eax
  movl   $0xb,-0x30(%rbp)
  movl   $0x2,-0x2c(%rbp)
  lea    -0x2c(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  lea    D28(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <initgraph@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    $0x0,%r8d
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setviewport@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <rectangle@plt>
  lea    D21(%rip),%rax
  mov    %rax,%rdx
  mov    $0xa,%esi
  mov    $0x113,%edi
  call   <outtextxy@plt>
  mov    $0x3,%ecx
  mov    $0x7,%edx
  mov    $0x2,%esi
  mov    $0x5,%edi
  call   <setusercharsize@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    $0x0,%r8d
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setviewport@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <line@plt>
  mov    $0x0,%eax
  call   <getch@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%r12d
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%r13d
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    $0x1,%r8d
  mov    %r12d,%ecx
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %eax,%edi
  call   <setviewport@plt>
  mov    $0x3,%edx
  mov    $0x0,%esi
  mov    $0x3,%edi
  call   <setlinestyle@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <line@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    $0x1,%r8d
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setviewport@plt>
  mov    $0xc8,%edx
  mov    $0x96,%esi
  mov    $0x96,%edi
  call   <circle@plt>
  mov    $0x1,%r8d
  mov    $0x12c,%ecx
  mov    $0x12c,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setviewport@plt>
  mov    $0x1,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setlinestyle@plt>
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    $0x0,%ecx
  mov    %ebx,%edx
  mov    %eax,%esi
  mov    $0x0,%edi
  call   <line@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    $0x1,%r8d
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setviewport@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %edx,%ebx
  sub    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <bar@plt>
  mov    $0x4,%edi
  call   <setcolor@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdx
  mov    $0xa,%esi
  mov    $0xa,%edi
  call   <outtextxy@plt>
  mov    $0x0,%eax
  call   <cleardevice@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %edx,%ebx
  sub    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %ebx,%ecx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <bar@plt>
  mov    $0x1,%edi
  call   <setcolor@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdx
  mov    $0x14,%esi
  mov    $0x32,%edi
  call   <outtextxy@plt>
  mov    $0x0,%eax
  call   <graphdefaults@plt>
  mov    $0x64,%edx
  mov    $0xf0,%esi
  mov    $0x140,%edi
  call   <circle@plt>
  mov    $0x1,%r9d
  mov    $0x14,%r8d
  mov    $0x64,%ecx
  mov    $0x1e,%edx
  mov    $0x32,%esi
  mov    $0xa,%edi
  call   <bar3d@plt>
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%r12d
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%ebx
  mov    $0x0,%eax
  call   <getmaxy@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%r13d
  mov    $0x0,%eax
  call   <getmaxx@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    $0x0,%r8d
  mov    %r12d,%ecx
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %eax,%edi
  call   <setviewport@plt>
  mov    $0x14,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <circle@plt>
  mov    $0x1,%r8d
  mov    $0x78,%ecx
  mov    $0xa0,%edx
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <setviewport@plt>
  mov    $0x2,%edi
  call   <setcolor@plt>
  lea    D19(%rip),%rax
  mov    %rax,%rdx
  mov    $0x64,%esi
  mov    $0x32,%edi
  call   <outtextxy@plt>
  mov    $0x0,%eax
  call   <getch@plt>
  nop
  mov    -0x28(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L8
  call   <__stack_chk_fail@plt>
L8:
  add    $0x28,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D28
data_type: string
name: retrieve_data
arguments: tag: D21
data_type: string
name: retrieve_data
arguments: tag: D7
data_type: string
name: retrieve_data
arguments: tag: D19
data_type: string

tool: 

tool: D21: ABCDEFGHIJKLMNOPQRSTUVWXYZ

tool: D7: HELLO WORLD

tool: D19: ABCDEFGHIJKLMONPQRSTUVWXYZ

assistant: ```c
void main(int argc, char **argv) {
  int graphdriver, graphmode;
  graphdriver = 11;
  graphmode = 2;
  initgraph(&graphdriver, &graphmode, "");
  setviewport(0, 0, getmaxx() / 2, getmaxy() / 2, 0);
  rectangle(0, 0, getmaxx() / 2, getmaxy() / 2);
  outtextxy(275, 10, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  setusercharsize(5, 2, 7, 3);
  setviewport(0, 0, getmaxx() / 2, getmaxy() / 2, 0);
  line(0, 0, getmaxx(), getmaxy());
  getch();
  setviewport(getmaxx() / 2, getmaxy() / 2, getmaxx(), getmaxy(), 1);
  setlinestyle(3, 0, 3);
  line(0, 0, getmaxx(), getmaxy());
  setviewport(0, 0, getmaxx(), getmaxy(), 1);
  circle(150, 150, 200);
  setviewport(0, 0, 300, 300, 1);
  setlinestyle(0, 0, 1);
  line(0, getmaxy(), getmaxx(), 0);
  setviewport(0, 0, getmaxx(), getmaxy(), 1);
  bar(0, 0, getmaxx(), getmaxy() / 10);
  setcolor(4);
  outtextxy(10, 10, "HELLO WORLD");
  cleardevice();
  bar(0, 0, getmaxx(), getmaxy() / 10);
  setcolor(1);
  outtextxy(50, 20, "HELLO WORLD");
  graphdefaults();
  circle(320, 240, 100);
  bar3d(10, 50, 30, 100, 20, 1);
  setviewport(getmaxx() / 2, getmaxy() / 2, getmaxx(), getmaxy(), 0);
  circle(0, 0, 20);
  setviewport(0, 0, 160, 120, 1);
  setcolor(2);
  outtextxy(50, 100, "ABCDEFGHIJKLMONPQRSTUVWXYZ");
  getch();
}
```