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

```asm
<main>:
  endbr64
  push   %r15
  lea    D275(%rip),%rdi
  lea    D370(%rip),%r15
  push   %r14
  lea    D192(%rip),%r14
  push   %r13
  lea    D43(%rip),%r13
  push   %r12
  lea    D116(%rip),%r12
  push   %rbp
  lea    D45(%rip),%rbp
  push   %rbx
  lea    D148(%rip),%rbx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  call   <puts@plt>
  lea    D162(%rip),%rdi
  call   <puts@plt>
  lea    D261(%rip),%rdi
  call   <puts@plt>
  lea    D277(%rip),%rdi
  call   <puts@plt>
  lea    D1(%rip),%rdi
  call   <puts@plt>
  lea    D241(%rip),%rdi
  call   <puts@plt>
  lea    0x20(%rsp),%rax
  mov    %rax,0x8(%rsp)
  xchg   %ax,%ax
L217:
  mov    %r15,%rdi
  call   <puts@plt>
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %r13,%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D147(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x8(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    0x20(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0x4,%edx
  ja     L76
  cmp    $0x3,%eax
  je     L8
  jg     L115
  cmp    $0x1,%eax
  je     L165
  cmp    $0x2,%eax
  jne    L213
  lea    D255(%rip),%rdi
  xor    %eax,%eax
  movl   $0x0,0x24(%rsp)
  call   <printf@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    0x24(%rsp),%edx
  test   %edx,%edx
  jle    L40
  movss  0x18(%rsp),%xmm0
  movss  (%rsp),%xmm5
  xor    %eax,%eax
  movq   D197(%rip),%xmm1
  unpcklps %xmm5,%xmm0
  nopw   0x0(%rax,%rax,1)
L159:
  add    $0x1,%eax
  addps  %xmm1,%xmm0
  cmp    %eax,%edx
  jne    L159
  movss  %xmm0,0x18(%rsp)
  shufps $0xe5,%xmm0,%xmm0
  movss  %xmm0,(%rsp)
L40:
  pxor   %xmm0,%xmm0
  lea    D319(%rip),%rdi
  mov    $0x1,%eax
  cvtss2sd (%rsp),%xmm0
  call   <printf@plt>
  jmp    L217
  nopl   0x0(%rax,%rax,1)
L115:
  cmp    $0x4,%eax
  jne    L213
  lea    D188(%rip),%rdi
  xor    %eax,%eax
  movl   $0x0,0x24(%rsp)
  call   <printf@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    0x24(%rsp),%edx
  test   %edx,%edx
  jle    L40
  movss  0x10(%rsp),%xmm0
  movss  (%rsp),%xmm7
  xor    %eax,%eax
  movq   D330(%rip),%xmm1
  unpcklps %xmm7,%xmm0
  nopl   0x0(%rax)
L134:
  add    $0x1,%eax
  addps  %xmm1,%xmm0
  cmp    %edx,%eax
  jne    L134
  movss  %xmm0,0x10(%rsp)
  shufps $0xe5,%xmm0,%xmm0
  movss  %xmm0,(%rsp)
  jmp    L40
  xchg   %ax,%ax
L76:
  lea    D130(%rip),%rdi
  call   <puts@plt>
  jmp    L217
  nopl   0x0(%rax)
L8:
  lea    D187(%rip),%rdi
  xor    %eax,%eax
  movl   $0x0,0x24(%rsp)
  call   <printf@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    0x24(%rsp),%edx
  test   %edx,%edx
  jle    L40
  movss  0x14(%rsp),%xmm0
  movss  (%rsp),%xmm6
  xor    %eax,%eax
  unpcklps %xmm6,%xmm0
  nopw   0x0(%rax,%rax,1)
L79:
  movq   D359(%rip),%xmm2
  add    $0x1,%eax
  addps  %xmm2,%xmm0
  cmp    %edx,%eax
  jne    L79
  movss  %xmm0,0x14(%rsp)
  shufps $0xe5,%xmm0,%xmm0
  movss  %xmm0,(%rsp)
  jmp    L40
  cs nopw 0x0(%rax,%rax,1)
L213:
  lea    D127(%rip),%rbp
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D234(%rip),%rdi
  call   <puts@plt>
  lea    D49(%rip),%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd 0x1c(%rsp),%xmm0
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  lea    D258(%rip),%rdi
  mov    $0x1,%eax
  cvtss2sd 0x18(%rsp),%xmm0
  call   <printf@plt>
  lea    D223(%rip),%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd 0x14(%rsp),%xmm0
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  lea    D285(%rip),%rdi
  mov    $0x1,%eax
  cvtss2sd 0x10(%rsp),%xmm0
  call   <printf@plt>
  pxor   %xmm1,%xmm1
  mov    $0x1,%eax
  lea    D126(%rip),%rdi
  cvtss2sd (%rsp),%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <printf@plt>
  movss  (%rsp),%xmm3
  movsd  0x8(%rsp),%xmm1
  comiss D184(%rip),%xmm3
  ja     L209
L211:
  lea    D46(%rip),%rdi
  xor    %eax,%eax
  movsd  %xmm1,(%rsp)
  call   <printf@plt>
  lea    D140(%rip),%rdi
  call   <puts@plt>
  movsd  (%rsp),%xmm1
  mov    $0x1,%eax
  movsd  D47(%rip),%xmm0
  lea    D21(%rip),%rdi
  mulsd  %xmm1,%xmm0
  addsd  %xmm1,%xmm0
  addsd  D30(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L161
  add    $0x38,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L165:
  lea    D104(%rip),%rdi
  xor    %eax,%eax
  movl   $0x0,0x24(%rsp)
  call   <printf@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    0x24(%rsp),%edx
  test   %edx,%edx
  jle    L40
  movss  0x1c(%rsp),%xmm0
  movss  (%rsp),%xmm4
  xor    %eax,%eax
  movq   D283(%rip),%xmm1
  unpcklps %xmm4,%xmm0
  nop
L144:
  add    $0x1,%eax
  addps  %xmm1,%xmm0
  cmp    %eax,%edx
  jne    L144
  movss  %xmm0,0x1c(%rsp)
  shufps $0xe5,%xmm0,%xmm0
  movss  %xmm0,(%rsp)
  jmp    L40
L209:
  lea    D246(%rip),%rdi
  xor    %eax,%eax
  movsd  %xmm1,(%rsp)
  call   <printf@plt>
  movsd  (%rsp),%xmm1
  movsd  D167(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  cvtss2sd %xmm1,%xmm1
  jmp    L211
L161:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D275
datatype: string
name: unpack_data
arguments: tag: D370
datatype: string
name: unpack_data
arguments: tag: D192
datatype: string
name: unpack_data
arguments: tag: D43
datatype: string
name: unpack_data
arguments: tag: D116
datatype: string
name: unpack_data
arguments: tag: D45
datatype: string
name: unpack_data
arguments: tag: D148
datatype: string
name: unpack_data
arguments: tag: D162
datatype: string
name: unpack_data
arguments: tag: D261
datatype: string
name: unpack_data
arguments: tag: D277
datatype: string
name: unpack_data
arguments: tag: D1
datatype: string
name: unpack_data
arguments: tag: D241
datatype: string
name: unpack_data
arguments: tag: D147
datatype: string
name: unpack_data
arguments: tag: D255
datatype: string
name: unpack_data
arguments: tag: D197
datatype: f32[2]
name: unpack_data
arguments: tag: D319
datatype: string
name: unpack_data
arguments: tag: D188
datatype: string
name: unpack_data
arguments: tag: D330
datatype: f32[2]
name: unpack_data
arguments: tag: D130
datatype: string
name: unpack_data
arguments: tag: D187
datatype: string
name: unpack_data
arguments: tag: D359
datatype: f32[2]
name: unpack_data
arguments: tag: D127
datatype: string
name: unpack_data
arguments: tag: D234
datatype: string
name: unpack_data
arguments: tag: D49
datatype: string
name: unpack_data
arguments: tag: D258
datatype: string
name: unpack_data
arguments: tag: D223
datatype: string
name: unpack_data
arguments: tag: D285
datatype: string
name: unpack_data
arguments: tag: D126
datatype: string
name: unpack_data
arguments: tag: D184
datatype: byte[4]
name: unpack_data
arguments: tag: D46
datatype: string
name: unpack_data
arguments: tag: D140
datatype: string
name: unpack_data
arguments: tag: D47
datatype: byte[8]
name: unpack_data
arguments: tag: D21
datatype: string
name: unpack_data
arguments: tag: D30
datatype: f64
name: unpack_data
arguments: tag: D104
datatype: string
name: unpack_data
arguments: tag: D283
datatype: f32[2]
name: unpack_data
arguments: tag: D246
datatype: string
name: unpack_data
arguments: tag: D167
datatype: byte[8]

tool: D275: 
CSCE 1030.001

tool: D370: 1:	Office Chairs	$59.99 each

tool: D192: 2:	File Cabinets	$29.99 each

tool: D43: 3:	Desks        	$99.99 each

tool: D116: 4:	Bookcases    	$44.99 each

tool: D45: 5:	Checkout

tool: D148: %d

tool: D162: Homework #3

tool: D261: Alan Hodgson

tool: D277: ajh0213

tool: D1: alanhodgson@my.unt.edu


tool: D241: Welcome to the online office store!!


tool: D147: Enter the number of the product you wish to purchase: 

tool: D255: Enter the number of File Cabinets to purchase: 

tool: {"D197": [29.989999771118164,29.989999771118164]}

tool: D319: Current subtotal: %.02f



tool: D188: Enter the number of Bookcases to purchase: 

tool: {"D330": [44.9900016784668,44.9900016784668]}

tool: D130: 
Invalid Input! Returning to the menu


tool: D187: Enter the number of Desks to purchase: 

tool: {"D359": [99.98999786376953,99.98999786376953]}

tool: D127: 
**************************************

tool: D234: 
Thank you for purchasing from the online store!!

tool: D49: 
Subtotal for Office Chairs: %.02f

tool: D258: 
Subtotal for File Cabinets: %.02f

tool: D223: 
Subtotal for Desks: %.02f

tool: D285: 
Subtotal for Bookcases: %.02f


tool: D126: 
Grand Subtotal is: $%.02f


tool: {"D184": [0x00,0x00,0xfa,0x43]}

tool: D46: Tax rate: + 8.25%%


tool: D140: Shipping cost: + $25

tool: {"D47": [0x1f,0x85,0xeb,0x51,0xb8,0x1e,0xb5,0x3f]}

tool: D21: 
GRAND TOTAL(tax and shipping included): $%.02f



tool: D30: 25

tool: D104: Enter the number of Office Chairs to purchase: 

tool: {"D283": [59.9900016784668,59.9900016784668]}

tool: D246: Discount Added: - 10%%


tool: {"D167": [0x9a,0x99,0x99,0x99,0x99,0x99,0xb9,0x3f]}

assistant: ```c
int main(void) {
  float officeChair, fileCab, desk, bookcase, subtotal, total;
  float subtot1, subtot2, subtot3, subtot4;
  int orderInput;
  printf("\nCSCE 1030.001\n");
  printf("Homework #3\n");
  printf("Alan Hodgson\n");
  printf("ajh0213\n");
  printf("alanhodgson@my.unt.edu\n\n");
  officeChair = 59.99;
  fileCab = 29.99;
  desk = 99.99;
  bookcase = 44.99;
  printf("Welcome to the online office store!!\n\n");
menu:
  printf("1:\tOffice Chairs\t$59.99 each\n");
  printf("2:\tFile Cabinets\t$29.99 each\n");
  printf("3:\tDesks        \t$99.99 each\n");
  printf("4:\tBookcases    \t$44.99 each\n");
  printf("5:\tCheckout\n");
  printf("Enter the number of the product you wish to purchase: ");
  scanf("%d", &orderInput);
  if (orderInput > 0 && orderInput < 6) {
    switch (orderInput) {
    case 1: {
      int p = 0, i;
      printf("Enter the number of Office Chairs to purchase: ");
      scanf("%d", &p);
      for (i = 0; i < p; i++) {
        subtotal += officeChair;
        subtot1 += officeChair;
      }
      printf("Current subtotal: %.02f\n\n", subtotal);
      goto menu;
    }
    case 2: {
      int p = 0, i;
      printf("Enter the number of File Cabinets to purchase: ");
      scanf("%d", &p);
      for (i = 0; i < p; i++) {
        subtotal += fileCab;
        subtot2 += fileCab;
      }
      printf("Current subtotal: %.02f\n\n", subtotal);
      goto menu;
    }
    case 3: {
      int p = 0, i;
      printf("Enter the number of Desks to purchase: ");
      scanf("%d", &p);
      for (i = 0; i < p; i++) {
        subtotal += desk;
        subtot3 += desk;
      }
      printf("Current subtotal: %.02f\n\n", subtotal);
      goto menu;
    }
    case 4: {
      int p = 0, i;
      printf("Enter the number of Bookcases to purchase: ");
      scanf("%d", &p);
      for (i = 0; i < p; i++) {
        subtotal += bookcase;
        subtot4 += bookcase;
      }
      printf("Current subtotal: %.02f\n\n", subtotal);
      goto menu;
    }
    default: {
      printf("\n**************************************\n");
      break;
    }
    }
  } else {
    printf("\nInvalid Input! Returning to the menu\n\n");
    goto menu;
  }
  printf("\nThank you for purchasing from the online store!!\n");
  printf("\nSubtotal for Office Chairs: %.02f", subtot1);
  printf("\nSubtotal for File Cabinets: %.02f", subtot2);
  printf("\nSubtotal for Desks: %.02f", subtot3);
  printf("\nSubtotal for Bookcases: %.02f\n", subtot4);
  printf("\nGrand Subtotal is: $%.02f\n", subtotal);
  if (subtotal > 500) {
    printf("Discount Added: - 10%%\n");
    subtotal -= (subtotal * .10);
  } else {
    subtotal = subtotal;
  }
  total = subtotal + (subtotal * .0825) + 25.00;
  printf("Tax rate: + 8.25%%\n");
  printf("Shipping cost: + $25\n");
  printf("\nGRAND TOTAL(tax and shipping included): $%.02f\n\n", total);
  printf("\n**************************************\n");
  return 0;
}
```