user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x8(%rsp)
  movl   $0x0,0xc(%rsp)
  movl   $0x0,0x10(%rsp)
  movl   $0x0,0x14(%rsp)
  lea    D29(%rip),%rdi
  call   <printf@plt>
  call   <getOp@plt>
  cmp    $0x1,%eax
  je     L100
  cmp    $0x2,%eax
  je     L72
  cmp    $0x3,%eax
  je     L52
  cmp    $0x4,%eax
  je     L40
  cmp    $0x5,%eax
  je     L2
  call   <help@plt>
L84:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L97
  mov    $0x0,%eax
  add    $0x28,%rsp
  ret
L100:
  lea    D71(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x10(%rsp),%rcx
  lea    0xc(%rsp),%rdx
  lea    0x8(%rsp),%rsi
  lea    D52(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  0x10(%rsp),%xmm2
  movss  0xc(%rsp),%xmm1
  movss  0x8(%rsp),%xmm0
  call   <calcRectVol@plt>
  lea    D111(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L84
L72:
  lea    D42(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x8(%rsp),%rsi
  lea    D125(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  0x8(%rsp),%xmm0
  call   <calcBoxVol@plt>
  lea    D111(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L84
L52:
  lea    D17(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x14(%rsp),%rsi
  lea    D125(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  0x14(%rsp),%xmm0
  call   <calcSphereVol@plt>
  lea    D111(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L84
L40:
  lea    D82(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x10(%rsp),%rdx
  lea    0x14(%rsp),%rsi
  lea    D91(%rip),%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movss  0x10(%rsp),%xmm1
  movss  0x14(%rsp),%xmm0
  call   <calcCCPVol@plt>
  lea    D111(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L84
L2:
  call   <help@plt>
  jmp    L84
L97:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D29
type: string
name: unpack_data
arguments: tag: D71
type: string
name: unpack_data
arguments: tag: D52
type: string
name: unpack_data
arguments: tag: D111
type: string
name: unpack_data
arguments: tag: D42
type: string
name: unpack_data
arguments: tag: D125
type: string
name: unpack_data
arguments: tag: D17
type: string
name: unpack_data
arguments: tag: D82
type: string
name: unpack_data
arguments: tag: D91
type: string

tool: D29: Enter the opertation type: 

tool: D71: Enter Length, Breadth, Height: 

tool: D52: %f, %f, %f

tool: D111: Volume = %f


tool: D42: Enter Side: 

tool: D125: %f

tool: D17: Enter radius: 

tool: D82: Enter radius, height: 

tool: D91: %f, %f

assistant: ```c
int main(void) {
  int getOp(void);
  void help(void);
  float v, l, b, h, r;
  int opType;
  v = 0;
  l = 0;
  b = 0;
  h = 0;
  r = 0;
  opType = 0;
  printf("Enter the opertation type: ");
  opType = getOp();
  if (opType == 1) {
    printf("Enter Length, Breadth, Height: ");
    scanf("%f, %f, %f", &l, &b, &h);
    printf("Volume = %f\n", calcRectVol(l, b, h));
    return 0;
  } else if (opType == 2) {
    printf("Enter Side: ");
    scanf("%f", &l);
    printf("Volume = %f\n", calcBoxVol(l));
    return 0;
  } else if (opType == 3) {
    printf("Enter radius: ");
    scanf("%f", &r);
    printf("Volume = %f\n", calcSphereVol(r));
    return 0;
  } else if (opType == 4) {
    printf("Enter radius, height: ");
    scanf("%f, %f", &r, &h);
    printf("Volume = %f\n", calcCCPVol(r, h));
    return 0;
  } else if (opType == 5) {
    help();
    return 0;
  } else {
    help();
    return 0;
  }
}
```