user: What would the C source look like for the assembly code provided here?

```asm
<return_javascript_body_len>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x8,%rsp
  call   <custom_strlen@plt>
  test   %eax,%eax
  je     L305
  mov    %eax,%ebp
  xor    %r13d,%r13d
  lea    D10(%rip),%r12
  lea    D8(%rip),%r14
  jmp    L361
  nopw   0x0(%rax,%rax,1)
L34:
  add    $0x1,%r13d
  sub    $0x1,%ebp
  add    $0x1,%rbx
L164:
  test   %ebp,%ebp
  je     L379
L361:
  movzbl (%rbx),%eax
  cmp    $0x3c,%al
  je     L275
  ja     L10
  cmp    $0x2f,%al
  je     L163
  ja     L34
  cmp    $0x22,%al
  je     L371
  cmp    $0x27,%al
  jne    L34
L371:
  lea    0x1(%r13),%r15d
  add    $0x1,%rbx
  sub    $0x1,%ebp
  jne    L104
  jmp    L160
  nopl   0x0(%rax)
L277:
  add    $0x1,%r15d
  add    $0x1,%rbx
  sub    $0x1,%ebp
  je     L108
  test   %ecx,%ecx
  jne    L108
L104:
  movzbl (%rbx),%edx
  xor    %ecx,%ecx
  cmp    %al,%dl
  sete   %cl
  cmp    $0x5c,%dl
  jne    L277
  add    $0x1,%r15d
  add    $0x1,%rbx
  sub    $0x1,%ebp
  jne    L38
L160:
  add    $0x8,%rsp
  mov    %r15d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L10:
  cmp    $0x5b,%al
  je     L313
  cmp    $0x5c,%al
  jne    L34
  cmp    $0x1,%ebp
  jle    L330
  add    $0x2,%r13d
  add    $0x2,%rbx
  sub    $0x2,%ebp
  jmp    L164
  nopl   0x0(%rax)
L163:
  cmpb   $0x28,0x1(%rbx)
  jne    L34
  mov    %ebp,%eax
  lea    0x2(%r13),%r15d
  add    $0x2,%rbx
  sub    $0x2,%eax
  je     L160
  lea    0x1(%rbp,%r13,1),%esi
  jmp    L397
  nopl   0x0(%rax,%rax,1)
L303:
  cmp    $0x29,%dl
  je     L96
L397:
  mov    %esi,%ecx
  movzbl (%rbx),%edx
  add    $0x1,%rbx
  sub    %eax,%ecx
  sub    $0x1,%eax
  jne    L303
L96:
  mov    %eax,%ebp
  mov    %ecx,%r13d
  jmp    L164
  nop
L275:
  cmpb   $0x2f,0x1(%rbx)
  je     L74
  cmp    $0x8,%ebp
  jle    L34
  mov    $0x9,%edx
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <custom_strncmp@plt>
  test   %eax,%eax
  jne    L34
  lea    0x9(%r13),%r15d
  add    $0x9,%rbx
  sub    $0x9,%ebp
  jne    L326
  jmp    L160
  nopl   (%rax)
L403:
  add    $0x1,%r15d
  add    $0x1,%rbx
  sub    $0x1,%ebp
  je     L160
L326:
  cmpb   $0x5d,(%rbx)
  jne    L403
  mov    $0x3,%edx
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   <custom_strncmp@plt>
  test   %eax,%eax
  jne    L403
  lea    0x3(%r15),%r13d
  sub    $0x3,%ebp
  add    $0x3,%rbx
  jmp    L164
  nopw   0x0(%rax,%rax,1)
L313:
  mov    $0x5d,%eax
  jmp    L371
  nopw   0x0(%rax,%rax,1)
L330:
  add    $0x1,%r13d
  add    $0x1,%rbx
  sub    $0x1,%ebp
  jmp    L164
L74:
  lea    0x2(%rbx),%rdi
  mov    $0x6,%edx
  lea    D18(%rip),%rsi
  call   <compare_tag@plt>
  test   %eax,%eax
  jne    L34
L379:
  mov    %r13d,%r15d
  jmp    L160
L305:
  xor    %r15d,%r15d
  jmp    L160
L108:
  mov    %r15d,%r13d
  jmp    L164
L38:
  xor    %ecx,%ecx
  jmp    L277
```

tool_calls: name: unpack_data
arguments: data_label: D10
datatype: string
name: unpack_data
arguments: data_label: D8
datatype: string
name: unpack_data
arguments: data_label: D18
datatype: string

tool: D10: <![CDATA[

tool: D8: ]]>

tool: D18: SCRIPT

assistant: ```c
int return_javascript_body_len(const unsigned char *src) {
  const unsigned char *rpos = src;
  int srclen;
  int junklen = 0;
  int count;
  unsigned char close_quote_char;
  int break_loop;
  srclen = custom_strlen(src);
  count = srclen;
  while (count) {
    switch (*rpos) {
    case '<':
      if (*(rpos + 1) == '/') {
        if (compare_tag(rpos + 2, "SCRIPT", 6) == 0) {
          return (junklen);
        }
      } else if (count >= 9) {
        if (!custom_strncmp("<![CDATA[", rpos, 9)) {
          junklen += 9;
          count -= 9;
          rpos += 9;
          while (count) {
            if (*rpos == ']') {
              if (!custom_strncmp("]]>", rpos, 3)) {
                junklen += 3;
                count -= 3;
                rpos += 3;
                break;
              }
            }
            junklen++;
            count--;
            rpos++;
          }
          break;
        }
      }
      junklen++;
      count--;
      rpos++;
      break;
    case '"':
    case '\'':
    case '[':
      switch (*rpos) {
      case '"':
      case '\'':
        close_quote_char = *rpos;
        break;
      case '[':
        close_quote_char = ']';
        break;
      }
      break_loop = 0;
      junklen++;
      count--;
      rpos++;
      while ((count) && (!break_loop)) {
        if (*rpos == '\\') {
          junklen++;
          count--;
          rpos++;
        } else if (*rpos == close_quote_char) {
          break_loop = 1;
        }
        if (count) {
          junklen++;
          count--;
          rpos++;
        }
      }
      break;
    case '\\':
      if (count > 1) {
        junklen += 2;
        rpos += 2;
        count -= 2;
      } else {
        junklen++;
        rpos++;
        count--;
      }
      break;
    case '/':
      if (*(rpos + 1) == '(') {
        break_loop = 0;
        junklen += 2;
        count -= 2;
        rpos += 2;
        while ((count) && (!break_loop)) {
          if (*rpos == ')')
            break_loop = 1;
          junklen++;
          count--;
          rpos++;
        }
      } else {
        junklen++;
        count--;
        rpos++;
      }
      break;
    default:
      junklen++;
      count--;
      rpos++;
    }
  }
  return (junklen);
}
```