user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %rbx
  mov    $0x0,%eax
  call   <testinverse@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  jne    L559
L133:
  mov    $0x0,%eax
  call   <testdirect@plt>
  test   %eax,%eax
  jne    L548
L257:
  mov    $0x0,%eax
  call   <testarcdirect@plt>
  test   %eax,%eax
  jne    L352
L248:
  mov    $0x0,%eax
  call   <GeodSolve0@plt>
  test   %eax,%eax
  jne    L357
L508:
  mov    $0x0,%eax
  call   <GeodSolve1@plt>
  test   %eax,%eax
  jne    L59
L225:
  mov    $0x0,%eax
  call   <GeodSolve2@plt>
  test   %eax,%eax
  jne    L552
L372:
  mov    $0x0,%eax
  call   <GeodSolve4@plt>
  test   %eax,%eax
  jne    L433
L510:
  mov    $0x0,%eax
  call   <GeodSolve5@plt>
  test   %eax,%eax
  jne    L63
L140:
  mov    $0x0,%eax
  call   <GeodSolve6@plt>
  test   %eax,%eax
  jne    L584
L70:
  mov    $0x0,%eax
  call   <GeodSolve9@plt>
  test   %eax,%eax
  jne    L509
L30:
  mov    $0x0,%eax
  call   <GeodSolve10@plt>
  test   %eax,%eax
  jne    L99
L603:
  mov    $0x0,%eax
  call   <GeodSolve11@plt>
  test   %eax,%eax
  jne    L369
L185:
  mov    $0x0,%eax
  call   <GeodSolve12@plt>
  test   %eax,%eax
  jne    L36
L468:
  mov    $0x0,%eax
  call   <GeodSolve14@plt>
  test   %eax,%eax
  jne    L7
L19:
  mov    $0x0,%eax
  call   <GeodSolve15@plt>
  test   %eax,%eax
  jne    L113
L529:
  mov    $0x0,%eax
  call   <GeodSolve17@plt>
  test   %eax,%eax
  jne    L563
L608:
  mov    $0x0,%eax
  call   <GeodSolve26@plt>
  test   %eax,%eax
  jne    L410
L617:
  mov    $0x0,%eax
  call   <GeodSolve28@plt>
  test   %eax,%eax
  jne    L485
L348:
  mov    $0x0,%eax
  call   <GeodSolve33@plt>
  test   %eax,%eax
  jne    L44
L339:
  mov    $0x0,%eax
  call   <GeodSolve55@plt>
  test   %eax,%eax
  jne    L633
L569:
  mov    $0x0,%eax
  call   <GeodSolve59@plt>
  test   %eax,%eax
  jne    L22
L296:
  mov    $0x0,%eax
  call   <GeodSolve61@plt>
  test   %eax,%eax
  jne    L17
L591:
  mov    $0x0,%eax
  call   <GeodSolve65@plt>
  test   %eax,%eax
  jne    L442
L93:
  mov    $0x0,%eax
  call   <GeodSolve67@plt>
  test   %eax,%eax
  jne    L242
L198:
  mov    $0x0,%eax
  call   <GeodSolve71@plt>
  test   %eax,%eax
  jne    L556
L304:
  mov    $0x0,%eax
  call   <GeodSolve73@plt>
  test   %eax,%eax
  jne    L24
L278:
  mov    $0x0,%eax
  call   <GeodSolve74@plt>
  test   %eax,%eax
  jne    L501
L464:
  mov    $0x0,%eax
  call   <Planimeter0@plt>
  test   %eax,%eax
  jne    L55
L62:
  mov    $0x0,%eax
  call   <Planimeter5@plt>
  test   %eax,%eax
  jne    L323
L233:
  mov    $0x0,%eax
  call   <Planimeter6@plt>
  test   %eax,%eax
  jne    L400
L555:
  mov    $0x0,%eax
  call   <Planimeter12@plt>
  test   %eax,%eax
  jne    L455
L575:
  mov    $0x0,%eax
  call   <Planimeter13@plt>
  test   %eax,%eax
  jne    L196
L15:
  mov    %ebx,%eax
  pop    %rbx
  ret
L559:
  mov    %eax,%esi
  lea    D88(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%ebx
  jmp    L133
L548:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D268(%rip),%rdi
  call   <printf@plt>
  jmp    L257
L352:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D147(%rip),%rdi
  call   <printf@plt>
  jmp    L248
L357:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D206(%rip),%rdi
  call   <printf@plt>
  jmp    L508
L59:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D303(%rip),%rdi
  call   <printf@plt>
  jmp    L225
L552:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D171(%rip),%rdi
  call   <printf@plt>
  jmp    L372
L433:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D76(%rip),%rdi
  call   <printf@plt>
  jmp    L510
L63:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D224(%rip),%rdi
  call   <printf@plt>
  jmp    L140
L584:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D130(%rip),%rdi
  call   <printf@plt>
  jmp    L70
L509:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D220(%rip),%rdi
  call   <printf@plt>
  jmp    L30
L99:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D265(%rip),%rdi
  call   <printf@plt>
  jmp    L603
L369:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D176(%rip),%rdi
  call   <printf@plt>
  jmp    L185
L36:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D259(%rip),%rdi
  call   <printf@plt>
  jmp    L468
L7:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D17(%rip),%rdi
  call   <printf@plt>
  jmp    L19
L113:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D81(%rip),%rdi
  call   <printf@plt>
  jmp    L529
L563:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D36(%rip),%rdi
  call   <printf@plt>
  jmp    L608
L410:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D33(%rip),%rdi
  call   <printf@plt>
  jmp    L617
L485:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D37(%rip),%rdi
  call   <printf@plt>
  jmp    L348
L44:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D294(%rip),%rdi
  call   <printf@plt>
  jmp    L339
L633:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D11(%rip),%rdi
  call   <printf@plt>
  jmp    L569
L22:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D292(%rip),%rdi
  call   <printf@plt>
  jmp    L296
L17:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D311(%rip),%rdi
  call   <printf@plt>
  jmp    L591
L442:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D106(%rip),%rdi
  call   <printf@plt>
  jmp    L93
L242:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D285(%rip),%rdi
  call   <printf@plt>
  jmp    L198
L556:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D172(%rip),%rdi
  call   <printf@plt>
  jmp    L304
L24:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D223(%rip),%rdi
  call   <printf@plt>
  jmp    L278
L501:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D101(%rip),%rdi
  call   <printf@plt>
  jmp    L464
L55:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D260(%rip),%rdi
  call   <printf@plt>
  jmp    L62
L323:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D15(%rip),%rdi
  call   <printf@plt>
  jmp    L233
L400:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D204(%rip),%rdi
  call   <printf@plt>
  jmp    L555
L455:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D164(%rip),%rdi
  call   <printf@plt>
  jmp    L575
L196:
  add    $0x1,%ebx
  mov    %eax,%esi
  lea    D293(%rip),%rdi
  call   <printf@plt>
  jmp    L15
```

tool_calls: name: unpack_data
arguments: label: D88
data_type: string
name: unpack_data
arguments: label: D268
data_type: string
name: unpack_data
arguments: label: D147
data_type: string
name: unpack_data
arguments: label: D206
data_type: string
name: unpack_data
arguments: label: D303
data_type: string
name: unpack_data
arguments: label: D171
data_type: string
name: unpack_data
arguments: label: D76
data_type: string
name: unpack_data
arguments: label: D224
data_type: string
name: unpack_data
arguments: label: D130
data_type: string
name: unpack_data
arguments: label: D220
data_type: string
name: unpack_data
arguments: label: D265
data_type: string
name: unpack_data
arguments: label: D176
data_type: string
name: unpack_data
arguments: label: D259
data_type: string
name: unpack_data
arguments: label: D17
data_type: string
name: unpack_data
arguments: label: D81
data_type: string
name: unpack_data
arguments: label: D36
data_type: string
name: unpack_data
arguments: label: D33
data_type: string
name: unpack_data
arguments: label: D37
data_type: string
name: unpack_data
arguments: label: D294
data_type: string
name: unpack_data
arguments: label: D11
data_type: string
name: unpack_data
arguments: label: D292
data_type: string
name: unpack_data
arguments: label: D311
data_type: string
name: unpack_data
arguments: label: D106
data_type: string
name: unpack_data
arguments: label: D285
data_type: string
name: unpack_data
arguments: label: D172
data_type: string
name: unpack_data
arguments: label: D223
data_type: string
name: unpack_data
arguments: label: D101
data_type: string
name: unpack_data
arguments: label: D260
data_type: string
name: unpack_data
arguments: label: D15
data_type: string
name: unpack_data
arguments: label: D204
data_type: string
name: unpack_data
arguments: label: D164
data_type: string
name: unpack_data
arguments: label: D293
data_type: string

tool: D88: testinverse fail: %d


tool: D268: testdirect fail: %d


tool: D147: testarcdirect fail: %d


tool: D206: GeodSolve0 fail: %d


tool: D303: GeodSolve1 fail: %d


tool: D171: GeodSolve2 fail: %d


tool: D76: GeodSolve4 fail: %d


tool: D224: GeodSolve5 fail: %d


tool: D130: GeodSolve6 fail: %d


tool: D220: GeodSolve9 fail: %d


tool: D265: GeodSolve10 fail: %d


tool: D176: GeodSolve11 fail: %d


tool: D259: GeodSolve12 fail: %d


tool: D17: GeodSolve14 fail: %d


tool: D81: GeodSolve15 fail: %d


tool: D36: GeodSolve17 fail: %d


tool: D33: GeodSolve26 fail: %d


tool: D37: GeodSolve28 fail: %d


tool: D294: GeodSolve33 fail: %d


tool: D11: GeodSolve55 fail: %d


tool: D292: GeodSolve59 fail: %d


tool: D311: GeodSolve61 fail: %d


tool: D106: GeodSolve65 fail: %d


tool: D285: GeodSolve67 fail: %d


tool: D172: GeodSolve71 fail: %d


tool: D223: GeodSolve73 fail: %d


tool: D101: GeodSolve74 fail: %d


tool: D260: Planimeter0 fail: %d


tool: D15: Planimeter5 fail: %d


tool: D204: Planimeter6 fail: %d


tool: D164: Planimeter12 fail: %d


tool: D293: Planimeter13 fail: %d


assistant: ```c
int main() {
  int n = 0, i;
  if ((i = testinverse())) {
    ++n;
    printf("testinverse fail: %d\n", i);
  }
  if ((i = testdirect())) {
    ++n;
    printf("testdirect fail: %d\n", i);
  }
  if ((i = testarcdirect())) {
    ++n;
    printf("testarcdirect fail: %d\n", i);
  }
  if ((i = GeodSolve0())) {
    ++n;
    printf("GeodSolve0 fail: %d\n", i);
  }
  if ((i = GeodSolve1())) {
    ++n;
    printf("GeodSolve1 fail: %d\n", i);
  }
  if ((i = GeodSolve2())) {
    ++n;
    printf("GeodSolve2 fail: %d\n", i);
  }
  if ((i = GeodSolve4())) {
    ++n;
    printf("GeodSolve4 fail: %d\n", i);
  }
  if ((i = GeodSolve5())) {
    ++n;
    printf("GeodSolve5 fail: %d\n", i);
  }
  if ((i = GeodSolve6())) {
    ++n;
    printf("GeodSolve6 fail: %d\n", i);
  }
  if ((i = GeodSolve9())) {
    ++n;
    printf("GeodSolve9 fail: %d\n", i);
  }
  if ((i = GeodSolve10())) {
    ++n;
    printf("GeodSolve10 fail: %d\n", i);
  }
  if ((i = GeodSolve11())) {
    ++n;
    printf("GeodSolve11 fail: %d\n", i);
  }
  if ((i = GeodSolve12())) {
    ++n;
    printf("GeodSolve12 fail: %d\n", i);
  }
  if ((i = GeodSolve14())) {
    ++n;
    printf("GeodSolve14 fail: %d\n", i);
  }
  if ((i = GeodSolve15())) {
    ++n;
    printf("GeodSolve15 fail: %d\n", i);
  }
  if ((i = GeodSolve17())) {
    ++n;
    printf("GeodSolve17 fail: %d\n", i);
  }
  if ((i = GeodSolve26())) {
    ++n;
    printf("GeodSolve26 fail: %d\n", i);
  }
  if ((i = GeodSolve28())) {
    ++n;
    printf("GeodSolve28 fail: %d\n", i);
  }
  if ((i = GeodSolve33())) {
    ++n;
    printf("GeodSolve33 fail: %d\n", i);
  }
  if ((i = GeodSolve55())) {
    ++n;
    printf("GeodSolve55 fail: %d\n", i);
  }
  if ((i = GeodSolve59())) {
    ++n;
    printf("GeodSolve59 fail: %d\n", i);
  }
  if ((i = GeodSolve61())) {
    ++n;
    printf("GeodSolve61 fail: %d\n", i);
  }
  if ((i = GeodSolve65())) {
    ++n;
    printf("GeodSolve65 fail: %d\n", i);
  }
  if ((i = GeodSolve67())) {
    ++n;
    printf("GeodSolve67 fail: %d\n", i);
  }
  if ((i = GeodSolve71())) {
    ++n;
    printf("GeodSolve71 fail: %d\n", i);
  }
  if ((i = GeodSolve73())) {
    ++n;
    printf("GeodSolve73 fail: %d\n", i);
  }
  if ((i = GeodSolve74())) {
    ++n;
    printf("GeodSolve74 fail: %d\n", i);
  }
  if ((i = Planimeter0())) {
    ++n;
    printf("Planimeter0 fail: %d\n", i);
  }
  if ((i = Planimeter5())) {
    ++n;
    printf("Planimeter5 fail: %d\n", i);
  }
  if ((i = Planimeter6())) {
    ++n;
    printf("Planimeter6 fail: %d\n", i);
  }
  if ((i = Planimeter12())) {
    ++n;
    printf("Planimeter12 fail: %d\n", i);
  }
  if ((i = Planimeter13())) {
    ++n;
    printf("Planimeter13 fail: %d\n", i);
  }
  return n;
}
```