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

```asm
<main>:
  endbr64
  push   %r15
  mov    $0x3130,%edx
  lea    D10(%rip),%rdi
  push   %r14
  push   %r13
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  lea    0x30(%rsp),%r14
  mov    $0x3634,%eax
  mov    %dx,0x1f(%rsp)
  mov    %r14,%rsi
  movl   $0x33333339,0x2a(%rsp)
  mov    %ax,0x2e(%rsp)
  movl   $0x38353535,0x25(%rsp)
  movb   $0x33,0x29(%rsp)
  movl   $0x30313234,0x21(%rsp)
  call   <scanf@plt>
  mov    %r14,%rdi
  call   <strlen@plt>
  movl   $0x0,0xc(%rsp)
  cmp    $0x11,%eax
  sete   %r12b
  xor    %ebx,%ebx
  xor    %r15d,%r15d
  xor    %r13d,%r13d
  xor    %ebp,%ebp
  jmp    L418
  nopl   (%rax)
L156:
  cmp    $0x2,%ebp
  jne    L641
  test   %dil,%dil
  cmovne %esi,%r15d
L641:
  lea    -0x30(%rax),%esi
  cmp    $0x9,%sil
  jbe    L269
  cmp    $0x20,%al
  je     L362
  cmp    $0xa,%al
  mov    $0x0,%eax
  cmovne %eax,%r12d
L362:
  add    $0x1,%rbx
L418:
  mov    %r14,%rdi
  call   <strlen@plt>
  cmp    %ebx,%eax
  jle    L453
  movzbl (%r14,%rbx,1),%eax
  test   %r15d,%r15d
  lea    0x1(%rbx),%esi
  sete   %dil
  cmp    $0x2d,%al
  jne    L156
  add    $0x1,%ebp
  cmp    $0x2,%ebp
  jne    L362
  test   %dil,%dil
  cmovne %esi,%r15d
  jmp    L362
  nopl   0x0(%rax,%rax,1)
L269:
  add    $0x1,%r13d
  cmp    $0xc,%r13d
  jg     L362
  movsbl %sil,%esi
  test   $0x1,%r13b
  je     L265
  add    %esi,0xc(%rsp)
  jmp    L362
  nopw   0x0(%rax,%rax,1)
L453:
  cmp    $0x4,%ebp
  je     L680
  xor    %r12d,%r12d
L563:
  xor    %eax,%eax
  cmpb   $0x39,0x30(%rsp)
  cmovne %eax,%r12d
  cmpb   $0x37,0x31(%rsp)
  cmovne %eax,%r12d
  movzbl 0x32(%rsp),%eax
  sub    $0x38,%eax
  cmp    $0x1,%al
  jbe    L473
L21:
  lea    D59(%rip),%rdi
  call   <printf@plt>
L326:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L499
  add    $0x58,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L265:
  lea    (%rsi,%rsi,2),%eax
  add    %eax,0xc(%rsp)
  jmp    L362
L473:
  cmpb   $0x2d,0x33(%rsp)
  jne    L21
  test   %r12d,%r12d
  je     L21
  lea    D57(%rip),%rdi
  call   <printf@plt>
  movslq %r15d,%rax
  movzbl 0x30(%rsp,%rax,1),%eax
  cmp    $0x2d,%al
  je     L289
  cmp    $0x39,%al
  je     L651
  cmp    $0x35,%al
  je     L528
  cmp    $0x34,%al
  je     L520
  cmp    $0x30,%al
  je     L129
  lea    0x1(%r15),%esi
  movslq %esi,%rax
  movzbl 0x30(%rsp,%rax,1),%edx
  cmp    $0x2d,%dl
  je     L326
  xor    %r8d,%r8d
  xor    %r9d,%r9d
  xor    %edi,%edi
  xor    %r12d,%r12d
  jmp    L304
L680:
  mov    0xc(%rsp),%eax
  mov    $0xa,%esi
  cltd
  idiv   %esi
  test   %edx,%edx
  je     L637
  sub    %edx,%esi
  mov    %esi,%edx
L637:
  movsbl 0x40(%rsp),%eax
  sub    $0x30,%eax
  cmp    %edx,%eax
  mov    $0x0,%eax
  cmovne %eax,%r12d
  jmp    L563
L528:
  lea    0x1(%r15),%esi
  movslq %esi,%rax
  movzbl 0x30(%rsp,%rax,1),%edx
  cmp    $0x2d,%dl
  je     L410
  mov    %r12d,%edi
  xor    %r8d,%r8d
  xor    %r9d,%r9d
  xor    %r12d,%r12d
  jmp    L304
L410:
  lea    D54(%rip),%rdi
  call   <printf@plt>
  jmp    L326
L651:
  lea    0x1(%r15),%eax
  movslq %eax,%rdx
  movzbl 0x30(%rsp,%rdx,1),%edx
  cmp    $0x2d,%dl
  je     L486
  mov    %eax,%esi
  xor    %r8d,%r8d
  xor    %r9d,%r9d
  xor    %edi,%edi
L304:
  cmp    $0x33,%dl
  je     L471
  cmp    $0x35,%dl
  je     L556
  cmp    $0x32,%dl
  je     L346
  cmp    $0x31,%dl
  je     L719
L171:
  lea    0x1(%rsi),%eax
  movslq %eax,%rdx
  movzbl 0x30(%rsp,%rdx,1),%edx
  cmp    $0x2d,%dl
  je     L25
  sub    %r15d,%eax
  cltq
  cmp    0x2a(%rsp,%rax,1),%dl
  je     L102
  cmp    0x25(%rsp,%rax,1),%dl
  je     L551
  cmp    0x21(%rsp,%rax,1),%dl
  je     L491
  cmp    0x1f(%rsp,%rax,1),%dl
  jne    L174
  add    $0x1,%r9d
  jmp    L174
L102:
  add    $0x1,%r12d
L174:
  lea    0x2(%rsi),%eax
  movslq %eax,%rdx
  movzbl 0x30(%rsp,%rdx,1),%edx
  cmp    $0x2d,%dl
  je     L25
  sub    %r15d,%eax
  cltq
  cmp    0x2a(%rsp,%rax,1),%dl
  je     L404
  cmp    0x25(%rsp,%rax,1),%dl
  je     L697
  cmp    0x21(%rsp,%rax,1),%dl
  je     L649
  cmp    0x1f(%rsp,%rax,1),%dl
  jne    L405
  add    $0x1,%r9d
L405:
  lea    0x3(%rsi),%eax
  movslq %eax,%rdx
  movzbl 0x30(%rsp,%rdx,1),%edx
  cmp    $0x2d,%dl
  je     L25
  sub    %r15d,%eax
  cltq
  cmp    0x2a(%rsp,%rax,1),%dl
  je     L590
  cmp    0x25(%rsp,%rax,1),%dl
  je     L435
  cmp    0x21(%rsp,%rax,1),%dl
  je     L654
  cmp    0x1f(%rsp,%rax,1),%dl
  jne    L192
  add    $0x1,%r9d
L192:
  lea    0x4(%rsi),%eax
  movslq %eax,%rdx
  cmpb   $0x2d,0x30(%rsp,%rdx,1)
  je     L25
  add    $0x1,%r12d
  lea    0x5(%rsi),%eax
L25:
  sub    %r15d,%eax
  cmp    %eax,%r12d
  je     L289
  cmp    %eax,%edi
  je     L410
  cmp    %r8d,%eax
  je     L286
  cmp    %eax,%r9d
  jne    L326
L517:
  lea    D18(%rip),%rdi
  call   <printf@plt>
  jmp    L326
L289:
  lea    D25(%rip),%rdi
  call   <printf@plt>
  jmp    L326
L471:
  add    $0x1,%r12d
  jmp    L171
L286:
  lea    D0(%rip),%rdi
  call   <printf@plt>
  jmp    L326
L697:
  add    $0x1,%edi
  jmp    L405
L491:
  add    $0x1,%r8d
  jmp    L174
L719:
  add    $0x1,%r9d
  jmp    L171
L556:
  add    $0x1,%edi
  jmp    L171
L520:
  lea    0x1(%r15),%esi
  movslq %esi,%rax
  movzbl 0x30(%rsp,%rax,1),%edx
  cmp    $0x2d,%dl
  je     L286
  mov    %r12d,%r8d
  xor    %r9d,%r9d
  xor    %edi,%edi
  xor    %r12d,%r12d
  jmp    L304
L486:
  xor    %r9d,%r9d
  xor    %r8d,%r8d
  xor    %edi,%edi
  jmp    L25
L551:
  add    $0x1,%edi
  jmp    L174
L404:
  add    $0x1,%r12d
  jmp    L405
L346:
  add    $0x1,%r8d
  jmp    L171
L129:
  lea    0x1(%r15),%esi
  movslq %esi,%rax
  movzbl 0x30(%rsp,%rax,1),%edx
  cmp    $0x2d,%dl
  je     L517
  mov    %r12d,%r9d
  xor    %r8d,%r8d
  xor    %edi,%edi
  xor    %r12d,%r12d
  jmp    L304
L590:
  add    $0x1,%r12d
  jmp    L192
L649:
  add    $0x1,%r8d
  jmp    L405
L435:
  add    $0x1,%edi
  jmp    L192
L654:
  add    $0x1,%r8d
  jmp    L192
L499:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D10
type: string
name: read_data
arguments: data_tag: D59
type: string
name: read_data
arguments: data_tag: D57
type: string
name: read_data
arguments: data_tag: D54
type: string
name: read_data
arguments: data_tag: D18
type: string
name: read_data
arguments: data_tag: D25
type: string
name: read_data
arguments: data_tag: D0
type: string

tool: D10: %s

tool: D59: 0

tool: D57: 1

tool: D54: 
Alyson Books

tool: D18: 
Pyramid Books

tool: D25: 
Bluebridge

tool: D0: 
FUNimation Productions, Ltd.

assistant: ```c
int main() {
  char ISBN[20];
  int v = 1, d = 0, i = 0, count = 0, digit_check = 0, pub_ptr = 0;
  char pub1[6] = "933346", pub2[5] = "55583", pub3[4] = "4210", pub4[2] = "01";
  char ex1[4] = "978-", ex2[4] = "979-";
  int pub1_result, pub2_result, pub3_result, pub4_result;
  scanf("%s", ISBN);
  if (strlen(ISBN) != 17)
    v = 0;
  for (i = 0; i < strlen(ISBN); i++) {
    if (ISBN[i] == '-')
      d++;
    if (d == 2 && pub_ptr == 0)
      pub_ptr = i + 1;
    if ((ISBN[i] < '0' || ISBN[i] > '9') && ISBN[i] != '-' && ISBN[i] != '\n' && ISBN[i] != ' ')
      v = 0;
    else if (ISBN[i] >= '0' && ISBN[i] <= '9') {
      count++;
      if (count <= 12) {
        if (count % 2)
          digit_check = digit_check + (ISBN[i] - '0');
        else
          digit_check = digit_check + (ISBN[i] - '0') * 3;
      }
    }
  }
  if (d != 4)
    v = 0;
  else {
    digit_check = digit_check % 10;
    if (digit_check)
      digit_check = 10 - digit_check;
    if ((ISBN[16] - '0') != digit_check)
      v = 0;
  }
  for (i = 0; i < 4; i++) {
    if (ISBN[i] != ex1[i] && ISBN[i] != ex2[i])
      v = 0;
  }
  pub1_result = 0;
  pub2_result = 0;
  pub3_result = 0;
  pub4_result = 0;
  if (v) {
    printf("1");
    for (i = pub_ptr; ISBN[i] != '-'; i++) {
      if (ISBN[i] == pub1[i - pub_ptr]) {
        pub1_result++;
      } else if (ISBN[i] == pub2[i - pub_ptr]) {
        pub2_result++;
      } else if (ISBN[i] == pub3[i - pub_ptr]) {
        pub3_result++;
      } else if (ISBN[i] == pub4[i - pub_ptr]) {
        pub4_result++;
      }
    }
    if (i - pub_ptr == pub1_result) {
      printf("\nBluebridge");
    } else if (i - pub_ptr == pub2_result) {
      printf("\nAlyson Books");
    } else if (i - pub_ptr == pub3_result) {
      printf("\nFUNimation Productions, Ltd.");
    } else if (i - pub_ptr == pub4_result) {
      printf("\nPyramid Books");
    }
  } else
    printf("0");
}
```