user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x50,%rsp
  cmp    $0x4,%edi
  je     L1
  lea    D133(%rip),%rdi
  call   <puts@plt>
  lea    D106(%rip),%rdi
  call   <puts@plt>
  lea    D149(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L1:
  mov    0x8(%rbx),%rdi
  call   <atof@plt>
  mov    0x10(%rbx),%rdi
  movd   %xmm0,%r14d
  call   <atof@plt>
  mov    0x18(%rbx),%rdi
  movd   %xmm0,%r15d
  call   <atof@plt>
  movd   %r14d,%xmm1
  mov    $0x1,%eax
  lea    D34(%rip),%rdi
  movss  %xmm0,0x8(%rsp)
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm0
  call   <printf@plt>
  movd   %r15d,%xmm6
  lea    D170(%rip),%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd %xmm6,%xmm0
  call   <printf@plt>
  lea    D128(%rip),%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd 0x8(%rsp),%xmm0
  call   <printf@plt>
  movd   %r14d,%xmm6
  movd   %r15d,%xmm2
  movss  D119(%rip),%xmm0
  mulss  %xmm0,%xmm2
  mulss  %xmm0,%xmm6
  mulss  0x8(%rsp),%xmm0
  movss  %xmm2,0x18(%rsp)
  movss  %xmm6,0x40(%rsp)
  movss  %xmm0,0x8(%rsp)
  movaps %xmm2,%xmm0
  call   <sin@plt>
  movsd  %xmm0,0x10(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <cos@plt>
  movss  0x40(%rsp),%xmm5
  movsd  0x10(%rsp),%xmm3
  mulsd  %xmm0,%xmm3
  movaps %xmm5,%xmm6
  addss  %xmm5,%xmm6
  movaps %xmm6,%xmm0
  movss  %xmm6,0x28(%rsp)
  movsd  %xmm3,0x10(%rsp)
  call   <sin@plt>
  movss  0x18(%rsp),%xmm2
  mulsd  0x10(%rsp),%xmm0
  movaps %xmm2,%xmm4
  movss  %xmm2,0x20(%rsp)
  addss  %xmm2,%xmm4
  movsd  %xmm0,0x10(%rsp)
  movaps %xmm4,%xmm0
  movss  %xmm4,0x38(%rsp)
  call   <sin@plt>
  movsd  %xmm0,0x18(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  0x18(%rsp),%xmm1
  mulsd  %xmm0,%xmm1
  movss  0x40(%rsp),%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <sin@plt>
  movsd  0x18(%rsp),%xmm7
  mulsd  %xmm0,%xmm7
  movss  0x40(%rsp),%xmm0
  movsd  %xmm7,0x18(%rsp)
  call   <sin@plt>
  movsd  0x18(%rsp),%xmm3
  movss  0x20(%rsp),%xmm2
  mulsd  %xmm0,%xmm3
  movaps %xmm2,%xmm0
  movss  %xmm2,0x30(%rsp)
  addsd  0x10(%rsp),%xmm3
  cvtsd2ss %xmm3,%xmm3
  movss  %xmm3,0x4c(%rsp)
  call   <sin@plt>
  movsd  %xmm0,0x10(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <cos@plt>
  movsd  0x10(%rsp),%xmm7
  movss  0x28(%rsp),%xmm6
  mulsd  %xmm0,%xmm7
  movaps %xmm6,%xmm0
  movsd  %xmm7,0x10(%rsp)
  call   <sin@plt>
  movsd  0x10(%rsp),%xmm1
  movss  0x38(%rsp),%xmm4
  mulsd  %xmm0,%xmm1
  movaps %xmm4,%xmm0
  movss  %xmm4,0x18(%rsp)
  movsd  %xmm1,0x20(%rsp)
  call   <sin@plt>
  movsd  %xmm0,0x10(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  0x10(%rsp),%xmm7
  mulsd  %xmm0,%xmm7
  movss  0x40(%rsp),%xmm0
  movsd  %xmm7,0x10(%rsp)
  call   <cos@plt>
  movsd  0x10(%rsp),%xmm6
  mulsd  %xmm0,%xmm6
  movss  0x40(%rsp),%xmm0
  movsd  %xmm6,0x10(%rsp)
  call   <cos@plt>
  mulsd  0x10(%rsp),%xmm0
  movsd  0x20(%rsp),%xmm1
  movss  0x30(%rsp),%xmm2
  subsd  %xmm0,%xmm1
  movaps %xmm2,%xmm0
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0x48(%rsp)
  call   <sin@plt>
  movsd  %xmm0,0x10(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <cos@plt>
  movsd  0x10(%rsp),%xmm3
  movss  0x28(%rsp),%xmm6
  mulsd  %xmm0,%xmm3
  movaps %xmm6,%xmm0
  movsd  %xmm3,0x10(%rsp)
  call   <cos@plt>
  movsd  0x10(%rsp),%xmm1
  movss  0x18(%rsp),%xmm4
  mulsd  %xmm0,%xmm1
  movaps %xmm4,%xmm0
  movss  %xmm4,0x20(%rsp)
  movsd  %xmm1,0x10(%rsp)
  call   <sin@plt>
  movsd  %xmm0,0x18(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  0x18(%rsp),%xmm5
  mulsd  D71(%rip),%xmm5
  movapd %xmm5,%xmm6
  mulsd  %xmm0,%xmm6
  movsd  %xmm6,0x18(%rsp)
  movss  0x28(%rsp),%xmm6
  movaps %xmm6,%xmm0
  call   <sin@plt>
  mulsd  0x18(%rsp),%xmm0
  movss  0x30(%rsp),%xmm2
  pxor   %xmm7,%xmm7
  addsd  0x10(%rsp),%xmm0
  cvtsd2ss %xmm0,%xmm7
  movaps %xmm2,%xmm0
  movss  %xmm7,0x10(%rsp)
  call   <cos@plt>
  movsd  %xmm0,0x18(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <cos@plt>
  movsd  0x18(%rsp),%xmm3
  mulsd  %xmm0,%xmm3
  movss  0x40(%rsp),%xmm0
  movsd  %xmm3,0x18(%rsp)
  call   <cos@plt>
  movsd  0x18(%rsp),%xmm1
  movss  0x20(%rsp),%xmm4
  mulsd  %xmm0,%xmm1
  movaps %xmm4,%xmm0
  movss  %xmm4,0x44(%rsp)
  movsd  %xmm1,0x18(%rsp)
  call   <cos@plt>
  movsd  %xmm0,0x20(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  0x20(%rsp),%xmm3
  mulsd  %xmm0,%xmm3
  movss  0x40(%rsp),%xmm0
  movsd  %xmm3,0x20(%rsp)
  call   <sin@plt>
  movss  0x30(%rsp),%xmm2
  movsd  %xmm0,0x28(%rsp)
  movaps %xmm2,%xmm0
  call   <cos@plt>
  movsd  %xmm0,0x30(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <cos@plt>
  movsd  0x30(%rsp),%xmm5
  mulsd  %xmm0,%xmm5
  movss  0x40(%rsp),%xmm0
  movsd  %xmm5,0x30(%rsp)
  call   <sin@plt>
  movsd  0x30(%rsp),%xmm2
  movss  0x44(%rsp),%xmm4
  mulsd  %xmm0,%xmm2
  movaps %xmm4,%xmm0
  movsd  %xmm2,0x38(%rsp)
  call   <cos@plt>
  movsd  %xmm0,0x30(%rsp)
  movss  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  0x30(%rsp),%xmm5
  mulsd  %xmm0,%xmm5
  movss  0x40(%rsp),%xmm0
  movsd  %xmm5,0x8(%rsp)
  call   <cos@plt>
  mulsd  0x8(%rsp),%xmm0
  movsd  0x38(%rsp),%xmm2
  lea    D114(%rip),%rdi
  pxor   %xmm5,%xmm5
  subsd  %xmm0,%xmm2
  cvtsd2ss %xmm2,%xmm5
  movss  %xmm5,0x40(%rsp)
  call   <puts@plt>
  movss  0x48(%rsp),%xmm1
  movss  0x4c(%rsp),%xmm3
  movss  D6(%rip),%xmm7
  movsd  0x20(%rsp),%xmm4
  pxor   %xmm6,%xmm6
  movss  0x40(%rsp),%xmm5
  lea    D132(%rip),%rdi
  mulsd  0x28(%rsp),%xmm4
  movaps %xmm1,%xmm2
  mov    $0x6,%eax
  cvtss2sd %xmm1,%xmm1
  addsd  0x18(%rsp),%xmm4
  subss  %xmm3,%xmm2
  xorps  %xmm7,%xmm3
  movsd  %xmm1,0x18(%rsp)
  xorps  %xmm7,%xmm5
  cvtss2sd %xmm3,%xmm6
  pxor   %xmm3,%xmm3
  movapd %xmm6,%xmm0
  cvtss2sd 0x10(%rsp),%xmm3
  cvtss2sd %xmm5,%xmm5
  movsd  %xmm6,0x8(%rsp)
  xorps  %xmm7,%xmm2
  cvtsd2ss %xmm4,%xmm4
  xorps  %xmm7,%xmm4
  cvtss2sd %xmm4,%xmm4
  cvtss2sd %xmm2,%xmm2
  movsd  %xmm4,0x28(%rsp)
  movsd  %xmm2,0x20(%rsp)
  call   <printf@plt>
  lea    D124(%rip),%rdi
  call   <puts@plt>
  movsd  0x20(%rsp),%xmm2
  mov    $0x1,%eax
  lea    D69(%rip),%rdi
  movapd %xmm2,%xmm0
  call   <printf@plt>
  movsd  0x8(%rsp),%xmm6
  mov    $0x1,%eax
  lea    D185(%rip),%rdi
  movapd %xmm6,%xmm0
  call   <printf@plt>
  movsd  0x18(%rsp),%xmm1
  mov    $0x1,%eax
  lea    D153(%rip),%rdi
  movapd %xmm1,%xmm0
  call   <printf@plt>
  movsd  0x28(%rsp),%xmm4
  mov    $0x1,%eax
  lea    D24(%rip),%rdi
  movapd %xmm4,%xmm0
  call   <printf@plt>
  lea    D47(%rip),%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd 0x40(%rsp),%xmm0
  call   <printf@plt>
  mov    $0x1,%eax
  movss  0x10(%rsp),%xmm0
  movss  D6(%rip),%xmm7
  lea    D22(%rip),%rdi
  xorps  %xmm7,%xmm0
  cvtss2sd %xmm0,%xmm0
  call   <printf@plt>
  add    $0x50,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: data_label: D133
type_guessed: string
name: read_data
arguments: data_label: D106
type_guessed: string
name: read_data
arguments: data_label: D149
type_guessed: string
name: read_data
arguments: data_label: D34
type_guessed: string
name: read_data
arguments: data_label: D170
type_guessed: string
name: read_data
arguments: data_label: D128
type_guessed: string
name: read_data
arguments: data_label: D119
type_guessed: f32
name: read_data
arguments: data_label: D71
type_guessed: f64
name: read_data
arguments: data_label: D114
type_guessed: string
name: read_data
arguments: data_label: D6
type_guessed: byte[4]
name: read_data
arguments: data_label: D132
type_guessed: string
name: read_data
arguments: data_label: D124
type_guessed: string
name: read_data
arguments: data_label: D69
type_guessed: string
name: read_data
arguments: data_label: D185
type_guessed: string
name: read_data
arguments: data_label: D153
type_guessed: string
name: read_data
arguments: data_label: D24
type_guessed: string
name: read_data
arguments: data_label: D47
type_guessed: string
name: read_data
arguments: data_label: D22
type_guessed: string

tool: D133: 
Double Couple - Moment Tensor Converter (by Onur TAN)

tool: D106: Usage : dc2mt Strike Dip Rake (in degrees)

tool: D149: Output Aki&Richards1980:  Mxx  Myy  Mzz  Mxy  Mxz  Myz 


tool: D34: 
Strike = %9.5f degrees


tool: D170: Dip = %9.5f degrees


tool: D128: Rake/Slip = %9.5f degrees


tool: D119: 0.017453293

tool: D71: 0.5

tool: D114: 
Output Aki&Richards1980:  Mxx  Myy  Mzz  Mxy  Mxz  Myz 

tool: {"D6": [0x00,0x00,0x00,0x80]}

tool: D132: %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f


tool: D124: 
Output Harvard CMTSOLUTION:  Mrr Mtt Mpp Mrt Mrp Mtp

tool: D69: Mrr: %9.5f


tool: D185: Mtt: %9.5f


tool: D153: Mpp: %9.5f


tool: D24: Mrt: %9.5f


tool: D47: Mrp: %9.5f


tool: D22: Mtp: %9.5f



assistant: ```c
int main(int argc, char *argv[]) {
  float S, D, R, d2r;
  float Mxx, Myy, Mzz, Mxy, Mxz, Myz;
  float Mrr, Mtt, Mpp, Mrt, Mrp, Mtp;
  if (argc != 4) {
    printf("\nDouble Couple - Moment Tensor Converter (by Onur TAN)\n");
    printf("Usage : dc2mt Strike Dip Rake (in degrees)\n");
    printf("Output Aki&Richards1980:  Mxx  Myy  Mzz  Mxy  Mxz  Myz \n\n");
    exit(1);
  }
  d2r = 0.017453293;
  S = atof(argv[1]);
  D = atof(argv[2]);
  R = atof(argv[3]);
  printf("\nStrike = %9.5f degrees\n", S);
  printf("Dip = %9.5f degrees\n", D);
  printf("Rake/Slip = %9.5f degrees\n", R);
  S *= d2r;
  D *= d2r;
  R *= d2r;
  Mxx = -1.0 * (sin(D) * cos(R) * sin(2 * S) + sin(2 * D) * sin(R) * sin(S) * sin(S));
  Myy = (sin(D) * cos(R) * sin(2 * S) - sin(2 * D) * sin(R) * cos(S) * cos(S));
  Mzz = -1.0 * (Mxx + Myy);
  Mxy = (sin(D) * cos(R) * cos(2 * S) + 0.5 * sin(2 * D) * sin(R) * sin(2 * S));
  Mxz = -1.0 * (cos(D) * cos(R) * cos(S) + cos(2 * D) * sin(R) * sin(S));
  Myz = -1.0 * (cos(D) * cos(R) * sin(S) - cos(2 * D) * sin(R) * cos(S));
  printf("\nOutput Aki&Richards1980:  Mxx  Myy  Mzz  Mxy  Mxz  Myz \n");
  printf("%9.5f %9.5f %9.5f %9.5f %9.5f %9.5f\n", Mxx, Myy, Mzz, Mxy, Mxz, Myz);
  Mtt = Mxx;
  Mpp = Myy;
  Mrr = Mzz;
  Mtp = Mxy * -1.;
  Mrt = Mxz;
  Mrp = Myz * -1.;
  printf("\nOutput Harvard CMTSOLUTION:  Mrr Mtt Mpp Mrt Mrp Mtp\n");
  printf("Mrr: %9.5f\n", Mrr);
  printf("Mtt: %9.5f\n", Mtt);
  printf("Mpp: %9.5f\n", Mpp);
  printf("Mrt: %9.5f\n", Mrt);
  printf("Mrp: %9.5f\n", Mrp);
  printf("Mtp: %9.5f\n\n", Mtp);
}
```