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

```asm
<ieee_p_2592010699_sub_13966210122879502714_503743352>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x78,%rsp
  mov    %rdi,%r13
  mov    %rsi,-0x98(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,%r12
  mov    %r8,-0x80(%rbp)
  mov    %r9,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  mov    0xc(%rcx),%eax
  mov    %eax,-0x60(%rbp)
  mov    0xc(%r9),%ecx
  mov    %ecx,-0x6c(%rbp)
  movl   $0x1,-0x50(%rbp)
  mov    %eax,-0x4c(%rbp)
  movl   $0x1,-0x48(%rbp)
  mov    %eax,-0x44(%rbp)
  mov    %eax,%eax
  add    $0x17,%rax
  shr    $0x4,%rax
  shl    $0x4,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L27:
  cmp    %rdx,%rsp
  je     L12
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L27
L12:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  test   %rdx,%rdx
  je     L84
  orq    $0x0,-0x8(%rsp,%rdx,1)
L84:
  lea    0xf(%rsp),%rax
  and    $0xfffffffffffffff0,%rax
  mov    %rax,-0x68(%rbp)
  lea    -0x50(%rbp),%rdx
  lea    0xf38(%r13),%rdi
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <xsi_type_set_default_value@plt>
  mov    0xc(%rbx),%eax
  cmp    %eax,0xc(%r12)
  jne    L47
  mov    -0x48(%rbp),%edi
  mov    %edi,-0x84(%rbp)
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x70(%rbp)
  mov    -0x50(%rbp),%ebx
  mov    %edi,%ecx
  imul   %eax,%ecx
  mov    %ecx,-0x88(%rbp)
  mov    %edi,%eax
  imul   %ebx,%eax
  cmp    %eax,%ecx
  jl     L54
  mov    %edi,%eax
  imul   %edi,%eax
  mov    %eax,-0x8c(%rbp)
  lea    (%rdi,%rbx,1),%eax
  imul   %edi,%eax
  mov    %eax,%r15d
L82:
  mov    0x670(%r13),%r14
  mov    0x508(%r13),%rax
  mov    %rax,-0x58(%rbp)
  mov    %ebx,%ecx
  mov    $0x1,%edx
  mov    -0x60(%rbp),%esi
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <xsi_vhdl_check_range_of_index@plt>
  lea    -0x1(%rbx),%r12d
  mov    -0x78(%rbp),%rcx
  movzbl (%rcx,%r12,1),%eax
  lea    (%rax,%rax,8),%ecx
  mov    %ecx,-0x5c(%rbp)
  mov    %ebx,%ecx
  mov    $0x1,%edx
  mov    -0x6c(%rbp),%esi
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <xsi_vhdl_check_range_of_index@plt>
  mov    -0x80(%rbp),%rsi
  movzbl (%rsi,%r12,1),%eax
  add    -0x5c(%rbp),%eax
  mov    %eax,%eax
  mov    -0x58(%rbp),%rdi
  movzbl (%rdi,%rax,1),%eax
  movzbl (%r14,%rax,1),%edx
  mov    %ebx,%eax
  sub    -0x50(%rbp),%eax
  imul   -0x48(%rbp),%eax
  mov    -0x68(%rbp),%rdi
  mov    %dl,(%rdi,%rax,1)
  cmp    %ebx,-0x70(%rbp)
  je     L54
  add    -0x84(%rbp),%ebx
  mov    -0x8c(%rbp),%esi
  add    %esi,%r15d
  mov    %r15d,%eax
  sub    %esi,%eax
  cmp    %eax,-0x88(%rbp)
  jge    L82
  jmp    L54
L47:
  lea    0x1edc(%r13),%rdi
  mov    $0x3,%edx
  mov    $0x42,%esi
  mov    $0x0,%eax
  call   <xsi_report@plt>
L54:
  mov    -0x44(%rbp),%r12d
  mov    %r12d,%edi
  mov    $0x0,%eax
  call   <xsi_get_transient_memory@plt>
  movslq %eax,%rbx
  mov    %r12d,%edx
  mov    -0x68(%rbp),%rsi
  mov    %rbx,%rdi
  call   <memcpy@plt>
  mov    -0x50(%rbp),%ecx
  mov    -0x4c(%rbp),%eax
  mov    -0x48(%rbp),%edx
  mov    -0x98(%rbp),%rsi
  mov    %ecx,(%rsi)
  mov    %eax,0x4(%rsi)
  mov    %edx,0x8(%rsi)
  sub    %ecx,%eax
  imul   %edx,%eax
  add    $0x1,%eax
  mov    %eax,0xc(%rsi)
  mov    -0x38(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L60
  mov    %rbx,%rax
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
L60:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
char *ieee_p_2592010699_sub_13966210122879502714_503743352(char *t1, char *t2, char *t3, char *t4, char *t5, char *t6) {
  char t7[128];
  char t8[40];
  char t9[16];
  char t16[16];
  char t23[16];
  char *t0;
  char *t10;
  unsigned int t11;
  char *t12;
  char *t13;
  int t14;
  unsigned int t15;
  char *t17;
  char *t18;
  int t19;
  unsigned int t20;
  int t21;
  unsigned int t22;
  char *t24;
  unsigned int t25;
  char *t26;
  char *t27;
  int t28;
  unsigned int t29;
  char *t30;
  char *t31;
  char *t32;
  char *t33;
  char *t34;
  char *t35;
  char *t36;
  unsigned char t37;
  char *t38;
  char *t39;
  unsigned char t40;
  char *t41;
  char *t42;
  char *t43;
  unsigned int t44;
  unsigned char t45;
  char *t46;
  char *t47;
  int t48;
  int t49;
  int t50;
  int t51;
  int t52;
  int t53;
  int t54;
  int t55;
  int t56;
  int t57;
  int t58;
  int t59;
  unsigned int t60;
  int t61;
  unsigned int t62;
  unsigned int t63;
  unsigned int t64;
  unsigned int t65;
  int t66;
  unsigned int t67;
  unsigned int t68;
  unsigned int t69;
  char *t70;
  unsigned char t71;
  char *t72;
  char *t73;
  int t74;
  char *t75;
  int t76;
  int t77;
  unsigned int t78;
  unsigned int t79;
  unsigned int t80;
  char *t81;
LAB0:
  t10 = (t4 + 12U);
  t11 = *((unsigned int *)t10);
  t12 = (t9 + 0U);
  t13 = (t12 + 0U);
  *((int *)t13) = 1;
  t13 = (t12 + 4U);
  *((unsigned int *)t13) = t11;
  t13 = (t12 + 8U);
  *((int *)t13) = 1;
  t14 = (t11 - 1);
  t15 = (t14 * 1);
  t15 = (t15 + 1);
  t13 = (t12 + 12U);
  *((unsigned int *)t13) = t15;
  t13 = (t6 + 12U);
  t15 = *((unsigned int *)t13);
  t17 = (t16 + 0U);
  t18 = (t17 + 0U);
  *((int *)t18) = 1;
  t18 = (t17 + 4U);
  *((unsigned int *)t18) = t15;
  t18 = (t17 + 8U);
  *((int *)t18) = 1;
  t19 = (t15 - 1);
  t20 = (t19 * 1);
  t20 = (t20 + 1);
  t18 = (t17 + 12U);
  *((unsigned int *)t18) = t20;
  t18 = (t4 + 12U);
  t20 = *((unsigned int *)t18);
  t21 = (t20 - 1);
  t22 = (t21 * 1);
  t22 = (t22 + 1);
  t22 = (t22 * 1U);
  t24 = (t4 + 12U);
  t25 = *((unsigned int *)t24);
  t26 = (t23 + 0U);
  t27 = (t26 + 0U);
  *((int *)t27) = 1;
  t27 = (t26 + 4U);
  *((unsigned int *)t27) = t25;
  t27 = (t26 + 8U);
  *((int *)t27) = 1;
  t28 = (t25 - 1);
  t29 = (t28 * 1);
  t29 = (t29 + 1);
  t27 = (t26 + 12U);
  *((unsigned int *)t27) = t29;
  t27 = (t7 + 4U);
  t30 = (t1 + 3896);
  t31 = (t27 + 88U);
  *((char **)t31) = t30;
  t32 = (char *)alloca(t22);
  t33 = (t27 + 56U);
  *((char **)t33) = t32;
  xsi_type_set_default_value(t30, t32, t23);
  t34 = (t27 + 64U);
  *((char **)t34) = t23;
  t35 = (t27 + 80U);
  *((unsigned int *)t35) = t22;
  t36 = (t8 + 4U);
  t37 = (t3 != 0);
  if (t37 == 1)
    goto LAB3;
LAB2:
  t38 = (t8 + 12U);
  *((char **)t38) = t4;
  t39 = (t8 + 20U);
  t40 = (t5 != 0);
  if (t40 == 1)
    goto LAB5;
LAB4:
  t41 = (t8 + 28U);
  *((char **)t41) = t6;
  t42 = (t4 + 12U);
  t29 = *((unsigned int *)t42);
  t43 = (t6 + 12U);
  t44 = *((unsigned int *)t43);
  t45 = (t29 != t44);
  if (t45 != 0)
    goto LAB6;
LAB8:
  t10 = (t23 + 8U);
  t14 = *((int *)t10);
  t12 = (t23 + 4U);
  t19 = *((int *)t12);
  t13 = (t23 + 0U);
  t21 = *((int *)t13);
  t28 = t21;
  t48 = t19;
LAB11:
  t49 = (t48 * t14);
  t50 = (t28 * t14);
  if (t50 <= t49)
    goto LAB12;
LAB14:
LAB7:
  t10 = (t27 + 56U);
  t12 = *((char **)t10);
  t10 = (t23 + 12U);
  t11 = *((unsigned int *)t10);
  t11 = (t11 * 1U);
  t0 = xsi_get_transient_memory(t11);
  memcpy(t0, t12, t11);
  t13 = (t23 + 0U);
  t14 = *((int *)t13);
  t17 = (t23 + 4U);
  t19 = *((int *)t17);
  t18 = (t23 + 8U);
  t21 = *((int *)t18);
  t24 = (t2 + 0U);
  t26 = (t24 + 0U);
  *((int *)t26) = t14;
  t26 = (t24 + 4U);
  *((int *)t26) = t19;
  t26 = (t24 + 8U);
  *((int *)t26) = t21;
  t28 = (t19 - t14);
  t15 = (t28 * t21);
  t15 = (t15 + 1);
  t26 = (t24 + 12U);
  *((unsigned int *)t26) = t15;
LAB1:
  return t0;
LAB3:
  *((char **)t36) = t3;
  goto LAB2;
LAB5:
  *((char **)t39) = t5;
  goto LAB4;
LAB6:
  if ((unsigned char)0 == 0)
    goto LAB9;
LAB10:
  goto LAB7;
LAB9:
  t46 = (t1 + 7900);
  xsi_report(t46, 66U, (unsigned char)3);
  goto LAB10;
LAB12:
  t17 = (t1 + 1648U);
  t18 = *((char **)t17);
  t17 = (t1 + 1288U);
  t24 = *((char **)t17);
  t17 = (t3 + 0);
  t26 = (t9 + 0U);
  t51 = *((int *)t26);
  t30 = (t9 + 8U);
  t52 = *((int *)t30);
  t53 = (t28 - t51);
  t11 = (t53 * t52);
  t31 = (t9 + 4U);
  t54 = *((int *)t31);
  xsi_vhdl_check_range_of_index(t51, t54, t52, t28);
  t15 = (1U * t11);
  t20 = (0 + t15);
  t33 = (t17 + t20);
  t37 = *((unsigned char *)t33);
  t55 = (t37 - 0);
  t22 = (t55 * 1);
  t25 = (t22 * 9U);
  t34 = (t5 + 0);
  t35 = (t16 + 0U);
  t56 = *((int *)t35);
  t42 = (t16 + 8U);
  t57 = *((int *)t42);
  t58 = (t28 - t56);
  t29 = (t58 * t57);
  t43 = (t16 + 4U);
  t59 = *((int *)t43);
  xsi_vhdl_check_range_of_index(t56, t59, t57, t28);
  t44 = (1U * t29);
  t60 = (0 + t44);
  t46 = (t34 + t60);
  t40 = *((unsigned char *)t46);
  t61 = (t40 - 0);
  t62 = (t61 * 1);
  t63 = (t25 + t62);
  t64 = (1U * t63);
  t65 = (0 + t64);
  t47 = (t24 + t65);
  t45 = *((unsigned char *)t47);
  t66 = (t45 - 0);
  t67 = (t66 * 1);
  t68 = (1U * t67);
  t69 = (0 + t68);
  t70 = (t18 + t69);
  t71 = *((unsigned char *)t70);
  t72 = (t27 + 56U);
  t73 = *((char **)t72);
  t72 = (t23 + 0U);
  t74 = *((int *)t72);
  t75 = (t23 + 8U);
  t76 = *((int *)t75);
  t77 = (t28 - t74);
  t78 = (t77 * t76);
  t79 = (1U * t78);
  t80 = (0 + t79);
  t81 = (t73 + t80);
  *((unsigned char *)t81) = t71;
LAB13:
  if (t28 == t48)
    goto LAB14;
LAB15:
  t19 = (t28 + t14);
  t28 = t19;
  goto LAB11;
LAB16:;
}
```