user: Converte this assembly snippet into its equivalent C code:

```asm
<OC_mkTySkelRef>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,-0x58(%rbp)
  lea    D35(%rip),%rax
  mov    %rax,%rsi
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  call   <OC_mkDotStr@plt>
  mov    %rax,-0x48(%rbp)
  lea    D74(%rip),%rax
  mov    %rax,%rdi
  call   <OC_mkRef@plt>
  mov    %rax,-0x40(%rbp)
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <OC_mkRef@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%ebx
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  add    %eax,%ebx
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  add    %ebx,%eax
  add    $0xf,%eax
  cltq
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,%rdi
  call   <UTIL_mallocStr@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  lea    D45(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x48(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x28(%rbp),%rax
  lea    D45(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x58(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x28(%rbp),%rax
  lea    D80(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x40(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x28(%rbp),%rax
  lea    D80(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x28(%rbp),%rax
  lea    D48(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <OC_mkSome@plt>
  mov    %rax,-0x20(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <OC_mkRef@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D35
type_infered: string
name: retrieve_data
arguments: data_tag: D52
type_infered: string
name: retrieve_data
arguments: data_tag: D74
type_infered: string
name: retrieve_data
arguments: data_tag: D29
type_infered: string
name: retrieve_data
arguments: data_tag: D45
type_infered: string
name: retrieve_data
arguments: data_tag: D80
type_infered: string
name: retrieve_data
arguments: data_tag: D48
type_infered: string

tool: D35: Skeleton

tool: D52: Absyn

tool: D74: None

tool: D29: false

tool: D45: (

tool: D80: , 

tool: D48: ))

assistant: ```c
char *OC_mkTySkelRef(char *tySkel) {
  char *ctr = OC_mkDotStr("Absyn", "Skeleton");
  char *index = OC_mkRef("None");
  char *adjust = OC_mkRef("false");
  size_t length = strlen(ctr) + strlen(index) + strlen(adjust) + strlen(tySkel) + 15;
  char *def = UTIL_mallocStr(length + 1);
  char *somedef;
  char *ref;
  strcpy(def, "(");
  strcat(def, ctr);
  free(ctr);
  strcat(def, "(");
  strcat(def, tySkel);
  strcat(def, ", ");
  strcat(def, index);
  free(index);
  strcat(def, ", ");
  strcat(def, adjust);
  free(adjust);
  strcat(def, "))");
  somedef = OC_mkSome(def);
  free(def);
  ref = OC_mkRef(somedef);
  free(somedef);
  return ref;
}
```