user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %r15
  lea    D27(%rip),%rdi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  lea    D50(%rip),%rbp
  push   %rbx
  sub    $0x238,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x228(%rsp)
  xor    %eax,%eax
  call   <puts@plt>
  lea    0x2c(%rsp),%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  lea    D41(%rip),%rdi
  call   <puts@plt>
  mov    0x2c(%rsp),%esi
  test   %esi,%esi
  jle    L653
  lea    0x90(%rsp),%rax
  xor    %r13d,%r13d
  xor    %r12d,%r12d
  mov    %rax,(%rsp)
  lea    D1(%rip),%r14
  nopl   0x0(%rax)
L39:
  add    $0x1,%r12d
  mov    %r14,%rdi
  xor    %eax,%eax
  mov    %r12d,%esi
  call   <printf@plt>
  mov    0x2c(%rsp),%ecx
  test   %ecx,%ecx
  jle    L653
  mov    (%rsp),%rax
  xor    %ebx,%ebx
  lea    (%rax,%r13,4),%r15
  nopw   0x0(%rax,%rax,1)
L561:
  mov    %r15,%rsi
  mov    %rbp,%rdi
  add    $0x1,%ebx
  add    $0x4,%r15
  call   <scanf@plt>
  mov    0x2c(%rsp),%ecx
  cmp    %ebx,%ecx
  jg     L561
  add    $0xa,%r13
  cmp    %ecx,%r12d
  jl     L39
  test   %ecx,%ecx
  jle    L653
  mov    %ecx,%r12d
  lea    0x30(%rsp),%rax
  xor    %esi,%esi
  mov    %ecx,(%rsp)
  shl    $0x2,%r12
  mov    %rax,%rdi
  mov    %r12,%rdx
  call   <memset@plt>
  lea    0x60(%rsp),%rax
  mov    %r12,%rdx
  xor    %esi,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    (%rsp),%ecx
  lea    -0x1(%rcx),%eax
  cmp    $0x2,%eax
  jbe    L568
  movdqa 0x30(%rsp),%xmm0
  mov    %ecx,%eax
  paddd  0x90(%rsp),%xmm0
  movdqu 0xb8(%rsp),%xmm1
  shr    $0x2,%eax
  movdqu 0x108(%rsp),%xmm2
  paddd  %xmm1,%xmm0
  paddd  0xe0(%rsp),%xmm0
  paddd  %xmm2,%xmm0
  cmp    $0x4,%ecx
  je     L734
  paddd  0x130(%rsp),%xmm0
  cmp    $0x5,%ecx
  je     L734
  movdqu 0x158(%rsp),%xmm3
  paddd  %xmm3,%xmm0
  cmp    $0x6,%ecx
  je     L734
  paddd  0x180(%rsp),%xmm0
  cmp    $0x7,%ecx
  je     L734
  movdqu 0x1a8(%rsp),%xmm4
  paddd  %xmm4,%xmm0
  cmp    $0x8,%ecx
  je     L734
  paddd  0x1d0(%rsp),%xmm0
  cmp    $0x9,%ecx
  je     L734
  movdqu 0x1f8(%rsp),%xmm5
  paddd  %xmm5,%xmm0
L734:
  movaps %xmm0,0x30(%rsp)
  cmp    $0x1,%eax
  je     L294
  movdqu 0xc8(%rsp),%xmm7
  movdqa 0x40(%rsp),%xmm0
  paddd  0xa0(%rsp),%xmm0
  movdqu 0x118(%rsp),%xmm1
  paddd  %xmm7,%xmm0
  paddd  0xf0(%rsp),%xmm0
  paddd  %xmm1,%xmm0
  cmp    $0x4,%ecx
  je     L398
  paddd  0x140(%rsp),%xmm0
  cmp    $0x5,%ecx
  je     L398
  movdqu 0x168(%rsp),%xmm2
  paddd  %xmm2,%xmm0
  cmp    $0x6,%ecx
  je     L398
  paddd  0x190(%rsp),%xmm0
  cmp    $0x7,%ecx
  je     L398
  movdqu 0x1b8(%rsp),%xmm3
  paddd  %xmm3,%xmm0
  cmp    $0x8,%ecx
  je     L398
  paddd  0x1e0(%rsp),%xmm0
  cmp    $0x9,%ecx
  je     L398
  movdqu 0x208(%rsp),%xmm6
  paddd  %xmm6,%xmm0
L398:
  movaps %xmm0,0x40(%rsp)
L294:
  mov    %ecx,%edx
  and    $0xfffffffc,%edx
  test   $0x3,%cl
  je     L653
  movslq %edx,%rsi
  mov    0x90(%rsp,%rsi,4),%eax
  add    0x30(%rsp,%rsi,4),%eax
L95:
  movslq %edx,%rsi
  add    0xb8(%rsp,%rsi,4),%eax
  cmp    $0x2,%ecx
  jle    L519
  add    0xe0(%rsp,%rsi,4),%eax
  cmp    $0x3,%ecx
  je     L519
  add    0x108(%rsp,%rsi,4),%eax
  cmp    $0x4,%ecx
  je     L519
  add    0x130(%rsp,%rsi,4),%eax
  cmp    $0x5,%ecx
  je     L519
  add    0x158(%rsp,%rsi,4),%eax
  cmp    $0x6,%ecx
  je     L519
  add    0x180(%rsp,%rsi,4),%eax
  cmp    $0x7,%ecx
  je     L519
  add    0x1a8(%rsp,%rsi,4),%eax
  cmp    $0x8,%ecx
  je     L519
  add    0x1d0(%rsp,%rsi,4),%eax
  cmp    $0x9,%ecx
  je     L519
  add    0x1f8(%rsp,%rsi,4),%eax
L519:
  mov    %eax,0x30(%rsp,%rsi,4)
  lea    0x1(%rdx),%esi
  cmp    %esi,%ecx
  jle    L653
  movslq %esi,%rsi
  mov    0x90(%rsp,%rsi,4),%eax
  add    0x30(%rsp,%rsi,4),%eax
  add    0xb8(%rsp,%rsi,4),%eax
  cmp    $0x2,%ecx
  je     L72
  add    0xe0(%rsp,%rsi,4),%eax
  cmp    $0x3,%ecx
  je     L72
  add    0x108(%rsp,%rsi,4),%eax
  cmp    $0x4,%ecx
  je     L72
  add    0x130(%rsp,%rsi,4),%eax
  cmp    $0x5,%ecx
  je     L72
  add    0x158(%rsp,%rsi,4),%eax
  cmp    $0x6,%ecx
  je     L72
  add    0x180(%rsp,%rsi,4),%eax
  cmp    $0x7,%ecx
  je     L72
  add    0x1a8(%rsp,%rsi,4),%eax
  cmp    $0x8,%ecx
  je     L72
  add    0x1d0(%rsp,%rsi,4),%eax
  cmp    $0x9,%ecx
  je     L72
  add    0x1f8(%rsp,%rsi,4),%eax
L72:
  mov    %eax,0x30(%rsp,%rsi,4)
  lea    0x2(%rdx),%eax
  cmp    %eax,%ecx
  jle    L653
  cltq
  mov    0x90(%rsp,%rax,4),%edx
  add    0x30(%rsp,%rax,4),%edx
  add    0xb8(%rsp,%rax,4),%edx
  add    0xe0(%rsp,%rax,4),%edx
  cmp    $0x3,%ecx
  je     L575
  add    0x108(%rsp,%rax,4),%edx
  cmp    $0x4,%ecx
  je     L575
  add    0x130(%rsp,%rax,4),%edx
  cmp    $0x5,%ecx
  je     L575
  add    0x158(%rsp,%rax,4),%edx
  cmp    $0x6,%ecx
  je     L575
  add    0x180(%rsp,%rax,4),%edx
  cmp    $0x7,%ecx
  je     L575
  add    0x1a8(%rsp,%rax,4),%edx
  cmp    $0x8,%ecx
  je     L575
  add    0x1d0(%rsp,%rax,4),%edx
  cmp    $0x9,%ecx
  je     L575
  add    0x1f8(%rsp,%rax,4),%edx
L575:
  mov    %edx,0x30(%rsp,%rax,4)
L653:
  lea    D13(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x2c(%rsp),%eax
  test   %eax,%eax
  jle    L8
  lea    0x90(%rsp),%rdx
  movl   $0x0,(%rsp)
  lea    D37(%rip),%r12
  mov    %rdx,0x8(%rsp)
  lea    0x30(%rsp),%rdx
  mov    %rdx,0x10(%rsp)
  lea    0x60(%rsp),%rdx
  mov    %rdx,0x18(%rsp)
  nopl   (%rax)
L156:
  mov    0x10(%rsp),%r14
  mov    0x8(%rsp),%rbx
  xor    %r15d,%r15d
  mov    0x18(%rsp),%r13
  jmp    L323
  nop
L633:
  cmpl   $0x1,(%rbx)
  jne    L720
  lea    -0x1(%rbp),%r8d
  mov    %r8d,(%r14)
L720:
  cmp    $0x1,%eax
  je     L746
  cmpl   $0x1,0x28(%rbx)
  jne    L28
  subl   $0x1,(%r14)
L28:
  cmp    $0x2,%eax
  je     L746
  cmpl   $0x1,0x50(%rbx)
  jne    L452
  subl   $0x1,(%r14)
L452:
  cmp    $0x3,%eax
  je     L746
  cmpl   $0x1,0x78(%rbx)
  jne    L550
  subl   $0x1,(%r14)
L550:
  cmp    $0x4,%eax
  je     L746
  cmpl   $0x1,0xa0(%rbx)
  jne    L351
  subl   $0x1,(%r14)
L351:
  cmp    $0x5,%eax
  je     L746
  cmpl   $0x1,0xc8(%rbx)
  jne    L475
  subl   $0x1,(%r14)
L475:
  cmp    $0x6,%eax
  je     L746
  cmpl   $0x1,0xf0(%rbx)
  jne    L620
  subl   $0x1,(%r14)
L620:
  cmp    $0x7,%eax
  je     L746
  cmpl   $0x1,0x118(%rbx)
  jne    L526
  subl   $0x1,(%r14)
L526:
  cmp    $0x8,%eax
  je     L746
  cmpl   $0x1,0x140(%rbx)
  jne    L328
  subl   $0x1,(%r14)
L328:
  cmp    $0x9,%eax
  je     L746
  cmpl   $0x1,0x168(%rbx)
  jne    L746
  subl   $0x1,(%r14)
  nopl   (%rax)
L746:
  add    $0x4,%r14
  add    $0x4,%rbx
  add    $0x4,%r13
  cmp    %eax,%r15d
  jge    L265
L323:
  mov    (%r14),%ebp
  add    $0x1,%r15d
  test   %ebp,%ebp
  jne    L633
  mov    0x0(%r13),%edx
  test   %edx,%edx
  jne    L633
  mov    %r15d,%esi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x2c(%rsp),%eax
  movl   $0x1,0x0(%r13)
  test   %eax,%eax
  jg     L633
L265:
  addl   $0x1,(%rsp)
  mov    (%rsp),%edx
  cmp    %eax,%edx
  jl     L156
L8:
  mov    0x228(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L272
  add    $0x238,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L568:
  mov    0x90(%rsp),%eax
  add    0x30(%rsp),%eax
  cmp    $0x1,%ecx
  jne    L440
  mov    %eax,0x30(%rsp)
  jmp    L653
L272:
  call   <__stack_chk_fail@plt>
L440:
  xor    %edx,%edx
  jmp    L95
```

tool_calls: name: parse_data
arguments: data_label: D27
datatype: string
name: parse_data
arguments: data_label: D50
datatype: string
name: parse_data
arguments: data_label: D41
datatype: string
name: parse_data
arguments: data_label: D1
datatype: string
name: parse_data
arguments: data_label: D13
datatype: string
name: parse_data
arguments: data_label: D37
datatype: string

tool: D27: Enter the no of vertices:

tool: D50: %d

tool: D41: Enter the adjacency matrix:

tool: D1: Enter row %d


tool: D13: 
The topological order is:

tool: D37: %d 

assistant: ```c
int main() {
  int i, j, k, n, a[10][10], indeg[10], flag[10], count = 0;
  printf("Enter the no of vertices:\n");
  scanf("%d", &n);
  printf("Enter the adjacency matrix:\n");
  for (i = 0; i < n; i++) {
    printf("Enter row %d\n", i + 1);
    for (j = 0; j < n; j++)
      scanf("%d", &a[i][j]);
  }
  for (i = 0; i < n; i++) {
    indeg[i] = 0;
    flag[i] = 0;
  }
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
      indeg[i] = indeg[i] + a[j][i];
  printf("\nThe topological order is:");
  while (count < n) {
    for (k = 0; k < n; k++) {
      if ((indeg[k] == 0) && (flag[k] == 0)) {
        printf("%d ", (k + 1));
        flag[k] = 1;
      }
      for (i = 0; i < n; i++) {
        if (a[i][k] == 1)
          indeg[k]--;
      }
    }
    count++;
  }
  return 0;
}
```