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

```asm
<_scan_open_code_fence>:
  endbr64
  mov    %rdi,%rax
  movzbl (%rdi),%edx
  mov    $0x0,%ecx
  cmp    $0x5f,%dl
  jbe    L214
  cmp    $0x60,%dl
  jbe    L43
  mov    $0x0,%ecx
  cmp    $0x7e,%dl
  je     L51
L214:
  mov    %ecx,%eax
  ret
L43:
  cmpb   $0x60,0x1(%rdi)
  jne    L214
  movzbl 0x2(%rdi),%edx
  lea    D14(%rip),%rcx
  testb  $0x40,(%rcx,%rdx,1)
  jne    L151
  mov    $0x0,%ecx
  jmp    L214
L51:
  cmpb   $0x7e,0x1(%rdi)
  jne    L214
  movzbl 0x2(%rdi),%edx
  mov    $0x0,%ecx
  lea    D14(%rip),%rsi
  testb  $0x10,(%rsi,%rdx,1)
  je     L214
  lea    0x2(%rdi),%rsi
  lea    D14(%rip),%rdi
L108:
  add    $0x1,%rsi
  movzbl (%rsi),%edx
  movzbl %dl,%ecx
  testb  $0x20,(%rdi,%rcx,1)
  jne    L203
  test   %dl,%dl
  je     L18
  cmp    $0x7d,%dl
  ja     L108
L156:
  mov    %esi,%ecx
  sub    %eax,%ecx
  jmp    L214
L203:
  mov    %rsi,%rdx
  lea    D14(%rip),%r8
L94:
  add    $0x1,%rdx
  movzbl (%rdx),%ecx
  movzbl %cl,%edi
  testb  $0x20,(%r8,%rdi,1)
  jne    L94
  lea    -0x1(%rcx),%edx
  mov    $0x0,%ecx
  cmp    $0x7c,%dl
  ja     L214
  jmp    L156
L151:
  lea    0x2(%rdi),%rsi
  lea    D14(%rip),%rdi
L209:
  add    $0x1,%rsi
  movzbl (%rsi),%edx
  movzbl %dl,%ecx
  cmpb   $0x0,(%rdi,%rcx,1)
  js     L225
  test   %dl,%dl
  je     L202
  cmp    $0x5f,%dl
  ja     L209
L130:
  mov    %esi,%ecx
  sub    %eax,%ecx
  jmp    L214
L225:
  mov    %rsi,%rdx
  lea    D14(%rip),%r8
L34:
  add    $0x1,%rdx
  movzbl (%rdx),%ecx
  movzbl %cl,%edi
  cmpb   $0x0,(%r8,%rdi,1)
  js     L34
  lea    -0x1(%rcx),%edx
  mov    $0x0,%ecx
  cmp    $0x5e,%dl
  ja     L214
  jmp    L130
L18:
  mov    $0x0,%ecx
  jmp    L214
L202:
  mov    $0x0,%ecx
  jmp    L214
```

tool_calls: name: disassemble_data
arguments: label: D14
type_guessed: string

tool: 

assistant: ```c
extern int _scan_open_code_fence(const unsigned char *p) {
  const unsigned char *marker = NULL;
  const unsigned char *start = p;
  {
    unsigned char yych;
    static const unsigned char yybm[] = {
        0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 96, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 144, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
    };
    yych = *p;
    if (yych <= '_') {
      if (yych != '\n')
        goto yy1253;
    } else {
      if (yych <= '`')
        goto yy1251;
      if (yych == '~')
        goto yy1252;
      goto yy1253;
    }
  yy1250 : { return 0; }
  yy1251:
    yych = *(marker = ++p);
    if (yych == '`')
      goto yy1262;
    goto yy1250;
  yy1252:
    yych = *(marker = ++p);
    if (yych == '~')
      goto yy1254;
    goto yy1250;
  yy1253:
    yych = *++p;
    goto yy1250;
  yy1254:
    yych = *++p;
    if (yybm[0 + yych] & 16) {
      goto yy1256;
    }
  yy1255:
    p = marker;
    goto yy1250;
  yy1256:
    marker = p + 1;
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 32) {
      goto yy1258;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych <= '}')
      goto yy1260;
    goto yy1256;
  yy1258:
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 32) {
      goto yy1258;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych >= '~')
      goto yy1255;
  yy1260:
    ++p;
    p = marker;
    { return (p - start); }
  yy1262:
    yych = *++p;
    if (yybm[0 + yych] & 64) {
      goto yy1263;
    }
    goto yy1255;
  yy1263:
    marker = p + 1;
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 128) {
      goto yy1265;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych <= '_')
      goto yy1267;
    goto yy1263;
  yy1265:
    ++p;
    yych = *p;
    if (yybm[0 + yych] & 128) {
      goto yy1265;
    }
    if (yych <= 0x00)
      goto yy1255;
    if (yych >= '`')
      goto yy1255;
  yy1267:
    ++p;
    p = marker;
    { return (p - start); }
  }
}
```