user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<source>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  test   %esi,%esi
  jle    L17
  mov    %esi,%ebx
  lea    0x54(%rdi),%rdx
  lea    0x44(%rsp),%rsi
  lea    -0x1(%rbx),%r13d
  mov    %ebx,%r10d
  mov    %ebx,%edi
  mov    %r13,%r9
  and    $0xfffffffc,%r10d
  shl    $0x2,%r13
  lea    0x48(%rsp,%r13,1),%r11
  shr    $0x2,%edi
  lea    0x1(%r10),%ebp
  nopl   0x0(%rax,%rax,1)
L477:
  lea    -0x4(%rdx),%r8
  cmp    $0x2,%r9d
  jbe    L244
  movdqu (%rdx),%xmm0
  cmp    $0x1,%edi
  jbe    L313
  movdqu 0x10(%rdx),%xmm2
  paddd  %xmm2,%xmm0
  cmp    $0x2,%edi
  je     L313
  movdqu 0x20(%rdx),%xmm3
  paddd  %xmm3,%xmm0
  cmp    $0x3,%edi
  je     L313
  movdqu 0x30(%rdx),%xmm4
  paddd  %xmm4,%xmm0
  cmp    $0x4,%edi
  je     L313
  movdqu 0x40(%rdx),%xmm5
  xor    %eax,%eax
  paddd  %xmm5,%xmm0
  cmp    $0x5,%edi
  je     L313
L31:
  mov    %rax,%rcx
  add    $0x1,%rax
  shl    $0x4,%rcx
  movdqu 0x50(%rdx,%rcx,1),%xmm1
  lea    0x5(%rax),%ecx
  paddd  %xmm1,%xmm0
  cmp    %ecx,%edi
  ja     L31
  nopl   (%rax)
L313:
  movdqa %xmm0,%xmm1
  mov    %ebp,%ecx
  psrldq $0x8,%xmm1
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  cmp    %ebx,%r10d
  je     L571
L673:
  movslq %ecx,%r12
  lea    (%r8,%r12,4),%r8
  lea    0x1(%rcx),%r12d
  add    (%r8),%eax
  cmp    %r12d,%ebx
  jl     L571
  add    $0x2,%ecx
  add    0x4(%r8),%eax
  cmp    %ecx,%ebx
  jl     L571
  add    0x8(%r8),%eax
L571:
  mov    %eax,(%rsi)
  add    $0x4,%rsi
  add    $0x50,%rdx
  cmp    %r11,%rsi
  jne    L477
  mov    0x44(%rsp),%ecx
  test   %ecx,%ecx
  je     L634
  mov    $0xffffffff,%edx
  cmp    $0x1,%ebx
  je     L93
L402:
  mov    0x48(%rsp),%ebp
  test   %ebp,%ebp
  jne    L626
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x2,0x10(%rsp,%rdi,4)
  cmp    $0x2,%ebx
  je     L330
L389:
  mov    0x4c(%rsp),%r11d
  test   %r11d,%r11d
  jne    L567
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x3,0x10(%rsp,%rdi,4)
  cmp    $0x3,%ebx
  je     L330
  mov    0x50(%rsp),%r10d
  test   %r10d,%r10d
  jne    L98
L688:
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x4,0x10(%rsp,%rdi,4)
  cmp    $0x4,%ebx
  je     L330
  mov    0x54(%rsp),%r9d
  test   %r9d,%r9d
  jne    L658
L437:
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x5,0x10(%rsp,%rdi,4)
  cmp    $0x5,%ebx
  je     L330
  mov    0x58(%rsp),%r8d
  test   %r8d,%r8d
  jne    L334
L111:
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x6,0x10(%rsp,%rdi,4)
  cmp    $0x6,%ebx
  je     L330
  mov    0x5c(%rsp),%edi
  test   %edi,%edi
  jne    L154
L22:
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x7,0x10(%rsp,%rdi,4)
  cmp    $0x7,%ebx
  je     L330
  mov    0x60(%rsp),%esi
  test   %esi,%esi
  je     L71
L432:
  cmp    $0x8,%ebx
  je     L50
L249:
  mov    0x64(%rsp),%eax
  test   %eax,%eax
  jne    L50
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x9,0x10(%rsp,%rdi,4)
L330:
  mov    %r13,0x8(%rsp)
  mov    0x48(%rsp),%r8d
  lea    0x74(%rsp),%rsi
  mov    0x4c(%rsp),%r9d
  mov    0x50(%rsp),%r10d
  mov    0x54(%rsp),%r11d
  mov    0x58(%rsp),%ebp
  mov    0x5c(%rsp),%r12d
  mov    0x60(%rsp),%r14d
  mov    0x64(%rsp),%r15d
  jmp    L452
  nopl   0x0(%rax)
L430:
  movslq %eax,%rdi
L452:
  mov    0x10(%rsp,%rdi,4),%r13d
  lea    -0x1(%rdx),%eax
  mov    %r13d,(%rsi)
  sub    $0x1,%ecx
  jne    L68
  movl   $0x1,0x10(%rsp,%rdi,4)
  mov    %edx,%eax
L68:
  cmp    $0x1,%ebx
  je     L354
  sub    $0x1,%r8d
  jne    L36
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x2,0x10(%rsp,%rdx,4)
L36:
  cmp    $0x2,%ebx
  je     L354
  sub    $0x1,%r9d
  jne    L38
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x3,0x10(%rsp,%rdx,4)
L38:
  cmp    $0x3,%ebx
  je     L354
  sub    $0x1,%r10d
  jne    L283
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x4,0x10(%rsp,%rdx,4)
L283:
  cmp    $0x4,%ebx
  je     L354
  sub    $0x1,%r11d
  jne    L654
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x5,0x10(%rsp,%rdx,4)
L654:
  cmp    $0x5,%ebx
  je     L354
  sub    $0x1,%ebp
  jne    L349
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x6,0x10(%rsp,%rdx,4)
L349:
  cmp    $0x6,%ebx
  je     L354
  sub    $0x1,%r12d
  jne    L650
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x7,0x10(%rsp,%rdx,4)
L650:
  cmp    $0x7,%ebx
  je     L354
  sub    $0x1,%r14d
  jne    L628
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x8,0x10(%rsp,%rdx,4)
L628:
  cmp    $0x8,%ebx
  je     L354
  sub    $0x1,%r15d
  jne    L354
  add    $0x1,%eax
  movslq %eax,%rdx
  movl   $0x9,0x10(%rsp,%rdx,4)
  nopl   0x0(%rax,%rax,1)
L354:
  mov    %eax,%edx
  add    $0x4,%rsi
  cmp    $0xffffffff,%eax
  jne    L430
  mov    0x8(%rsp),%r13
L93:
  lea    D25(%rip),%rdi
  xor    %eax,%eax
  lea    D19(%rip),%r12
  call   <printf@plt>
  movslq %ebx,%rax
  shl    $0x2,%rax
  lea    0x6c(%rsp,%rax,1),%rbp
  lea    0x70(%rsp,%rax,1),%rbx
  sub    %r13,%rbp
  nopl   (%rax)
L305:
  mov    (%rbx),%esi
  mov    %r12,%rdi
  xor    %eax,%eax
  sub    $0x4,%rbx
  call   <printf@plt>
  cmp    %rbp,%rbx
  jne    L305
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L519
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L244:
  mov    $0x1,%ecx
  xor    %eax,%eax
  jmp    L673
L634:
  movl   $0x1,0x10(%rsp)
  xor    %edx,%edx
  cmp    $0x1,%ebx
  jne    L402
  xor    %edi,%edi
  jmp    L330
L626:
  cmp    $0x2,%ebx
  jne    L389
L50:
  cmp    $0xffffffff,%edx
  je     L93
  movslq %edx,%rdi
  jmp    L330
L567:
  cmp    $0x3,%ebx
  je     L50
  mov    0x50(%rsp),%r10d
  test   %r10d,%r10d
  je     L688
L98:
  cmp    $0x4,%ebx
  je     L50
  mov    0x54(%rsp),%r9d
  test   %r9d,%r9d
  je     L437
L658:
  cmp    $0x5,%ebx
  je     L50
  mov    0x58(%rsp),%r8d
  test   %r8d,%r8d
  je     L111
L334:
  cmp    $0x6,%ebx
  je     L50
  mov    0x5c(%rsp),%edi
  test   %edi,%edi
  je     L22
L154:
  cmp    $0x7,%ebx
  je     L50
  mov    0x60(%rsp),%esi
  test   %esi,%esi
  jne    L432
L71:
  add    $0x1,%edx
  movslq %edx,%rdi
  movl   $0x8,0x10(%rsp,%rdi,4)
  cmp    $0x8,%ebx
  jne    L249
  jmp    L330
L17:
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L519
  add    $0xa8,%rsp
  lea    D25(%rip),%rdi
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1070 <printf@plt>
L519:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D25
type_infered: string
name: retrieve_data
arguments: label: D19
type_infered: string

tool: D25: 
Order:

tool: D19: %d	

assistant: ```c
void source(int a[20][20], int n) {
  int sum, s[10], indegree[10], u, v, i, j, t[10];
  int top = -1, k = 1;
  for (j = 1; j <= n; j++) {
    sum = 0;
    for (i = 1; i <= n; i++) {
      sum = a[j][i] + sum;
    }
    indegree[j] = sum;
  }
  for (i = 1; i <= n; i++) {
    if (indegree[i] == 0)
      s[++top] = i;
  }
  while (top != -1) {
    u = s[top--];
    t[k++] = u;
    for (v = 1; v <= n; v++) {
      indegree[v] -= 1;
      if (indegree[v] == 0)
        s[++top] = v;
    }
  }
  printf("\nOrder:");
  for (i = n; i > 0; i--) {
    printf("%d\t", t[i]);
  }
}
```