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

```asm
<md_is_unicode_punct__>:
  endbr64
  cmp    $0x7f,%edi
  ja     L20
  lea    -0x21(%rdi),%eax
  cmp    $0x3f,%eax
  ja     L25
  movabs $0xfc000000fe007fff,%rdx
  bt     %rax,%rdx
  jae    L25
  mov    $0x1,%eax
  ret
L25:
  sub    $0x7b,%edi
  cmp    $0x3,%edi
  setbe  %al
  movzbl %al,%eax
  ret
L20:
  sub    $0x8,%rsp
  mov    $0x12a,%edx
  lea    D0(%rip),%rsi
  call   <md_unicode_bsearch__@plt>
  not    %rax
  shr    $0x3f,%rax
  add    $0x8,%rsp
  ret
```

tool_calls: name: parse_data
arguments: tag: D0
type_infered: string

tool: D0: !

assistant: ```c
int md_is_unicode_punct__(unsigned codepoint) {
  static const unsigned PUNCT_MAP[] = {((0x0021) | 0x40000000), ((0x0023) | 0x80000000), ((0x0025) | 0x40000000), ((0x002a) | 0x80000000), ((0x002c) | 0x40000000), ((0x002f) | 0x80000000), ((0x003a) | 0x40000000), ((0x003b) | 0x80000000), ((0x003f) | 0x40000000), ((0x0040) | 0x80000000), ((0x005b) | 0x40000000), ((0x005d) | 0x80000000), (0x005f), (0x007b), (0x007d), (0x00a1), (0x00a7), (0x00ab), ((0x00b6) | 0x40000000), ((0x00b7) | 0x80000000), (0x00bb), (0x00bf), (0x037e), (0x0387), ((0x055a) | 0x40000000), ((0x055f) | 0x80000000), ((0x0589) | 0x40000000), ((0x058a) | 0x80000000), (0x05be), (0x05c0), (0x05c3), (0x05c6), ((0x05f3) | 0x40000000), ((0x05f4) | 0x80000000), ((0x0609) | 0x40000000), ((0x060a) | 0x80000000), ((0x060c) | 0x40000000), ((0x060d) | 0x80000000), (0x061b), ((0x061e) | 0x40000000), ((0x061f) | 0x80000000), ((0x066a) | 0x40000000), ((0x066d) | 0x80000000), (0x06d4), ((0x0700) | 0x40000000), ((0x070d) | 0x80000000), ((0x07f7) | 0x40000000), ((0x07f9) | 0x80000000), ((0x0830) | 0x40000000), ((0x083e) | 0x80000000), (0x085e), ((0x0964) | 0x40000000), ((0x0965) | 0x80000000), (0x0970), (0x09fd), (0x0a76), (0x0af0), (0x0c77), (0x0c84), (0x0df4), (0x0e4f), ((0x0e5a) | 0x40000000), ((0x0e5b) | 0x80000000), ((0x0f04) | 0x40000000), ((0x0f12) | 0x80000000), (0x0f14), ((0x0f3a) | 0x40000000), ((0x0f3d) | 0x80000000), (0x0f85), ((0x0fd0) | 0x40000000), ((0x0fd4) | 0x80000000), ((0x0fd9) | 0x40000000), ((0x0fda) | 0x80000000), ((0x104a) | 0x40000000), ((0x104f) | 0x80000000), (0x10fb), ((0x1360) | 0x40000000), ((0x1368) | 0x80000000), (0x1400), (0x166e), ((0x169b) | 0x40000000), ((0x169c) | 0x80000000), ((0x16eb) | 0x40000000), ((0x16ed) | 0x80000000), ((0x1735) | 0x40000000), ((0x1736) | 0x80000000), ((0x17d4) | 0x40000000), ((0x17d6) | 0x80000000), ((0x17d8) | 0x40000000), ((0x17da) | 0x80000000), ((0x1800) | 0x40000000), ((0x180a) | 0x80000000), ((0x1944) | 0x40000000), ((0x1945) | 0x80000000), ((0x1a1e) | 0x40000000), ((0x1a1f) | 0x80000000), ((0x1aa0) | 0x40000000), ((0x1aa6) | 0x80000000), ((0x1aa8) | 0x40000000), ((0x1aad) | 0x80000000), ((0x1b5a) | 0x40000000), ((0x1b60) | 0x80000000), ((0x1bfc) | 0x40000000), ((0x1bff) | 0x80000000), ((0x1c3b) | 0x40000000), ((0x1c3f) | 0x80000000), ((0x1c7e) | 0x40000000), ((0x1c7f) | 0x80000000), ((0x1cc0) | 0x40000000), ((0x1cc7) | 0x80000000), (0x1cd3), ((0x2010) | 0x40000000), ((0x2027) | 0x80000000), ((0x2030) | 0x40000000), ((0x2043) | 0x80000000), ((0x2045) | 0x40000000), ((0x2051) | 0x80000000), ((0x2053) | 0x40000000), ((0x205e) | 0x80000000), ((0x207d) | 0x40000000), ((0x207e) | 0x80000000), ((0x208d) | 0x40000000), ((0x208e) | 0x80000000), ((0x2308) | 0x40000000), ((0x230b) | 0x80000000), ((0x2329) | 0x40000000), ((0x232a) | 0x80000000), ((0x2768) | 0x40000000), ((0x2775) | 0x80000000), ((0x27c5) | 0x40000000), ((0x27c6) | 0x80000000), ((0x27e6) | 0x40000000), ((0x27ef) | 0x80000000), ((0x2983) | 0x40000000), ((0x2998) | 0x80000000), ((0x29d8) | 0x40000000), ((0x29db) | 0x80000000), ((0x29fc) | 0x40000000), ((0x29fd) | 0x80000000), ((0x2cf9) | 0x40000000), ((0x2cfc) | 0x80000000), ((0x2cfe) | 0x40000000), ((0x2cff) | 0x80000000), (0x2d70), ((0x2e00) | 0x40000000), ((0x2e2e) | 0x80000000), ((0x2e30) | 0x40000000), ((0x2e4f) | 0x80000000), ((0x3001) | 0x40000000), ((0x3003) | 0x80000000), ((0x3008) | 0x40000000), ((0x3011) | 0x80000000), ((0x3014) | 0x40000000), ((0x301f) | 0x80000000), (0x3030), (0x303d), (0x30a0), (0x30fb), ((0xa4fe) | 0x40000000), ((0xa4ff) | 0x80000000), ((0xa60d) | 0x40000000), ((0xa60f) | 0x80000000), (0xa673), (0xa67e), ((0xa6f2) | 0x40000000), ((0xa6f7) | 0x80000000), ((0xa874) | 0x40000000), ((0xa877) | 0x80000000), ((0xa8ce) | 0x40000000), ((0xa8cf) | 0x80000000), ((0xa8f8) | 0x40000000), ((0xa8fa) | 0x80000000), (0xa8fc), ((0xa92e) | 0x40000000), ((0xa92f) | 0x80000000), (0xa95f), ((0xa9c1) | 0x40000000), ((0xa9cd) | 0x80000000), ((0xa9de) | 0x40000000), ((0xa9df) | 0x80000000), ((0xaa5c) | 0x40000000), ((0xaa5f) | 0x80000000), ((0xaade) | 0x40000000), ((0xaadf) | 0x80000000), ((0xaaf0) | 0x40000000), ((0xaaf1) | 0x80000000), (0xabeb), ((0xfd3e) | 0x40000000), ((0xfd3f) | 0x80000000), ((0xfe10) | 0x40000000), ((0xfe19) | 0x80000000), ((0xfe30) | 0x40000000), ((0xfe52) | 0x80000000), ((0xfe54) | 0x40000000), ((0xfe61) | 0x80000000), (0xfe63), (0xfe68), ((0xfe6a) | 0x40000000), ((0xfe6b) | 0x80000000), ((0xff01) | 0x40000000), ((0xff03) | 0x80000000), ((0xff05) | 0x40000000), ((0xff0a) | 0x80000000), ((0xff0c) | 0x40000000), ((0xff0f) | 0x80000000), ((0xff1a) | 0x40000000), ((0xff1b) | 0x80000000), ((0xff1f) | 0x40000000), ((0xff20) | 0x80000000), ((0xff3b) | 0x40000000), ((0xff3d) | 0x80000000), (0xff3f), (0xff5b), (0xff5d), ((0xff5f) | 0x40000000), ((0xff65) | 0x80000000), ((0x10100) | 0x40000000), ((0x10102) | 0x80000000), (0x1039f), (0x103d0), (0x1056f), (0x10857), (0x1091f), (0x1093f), ((0x10a50) | 0x40000000), ((0x10a58) | 0x80000000), (0x10a7f), ((0x10af0) | 0x40000000), ((0x10af6) | 0x80000000), ((0x10b39) | 0x40000000), ((0x10b3f) | 0x80000000), ((0x10b99) | 0x40000000), ((0x10b9c) | 0x80000000), ((0x10f55) | 0x40000000), ((0x10f59) | 0x80000000), ((0x11047) | 0x40000000), ((0x1104d) | 0x80000000), ((0x110bb) | 0x40000000), ((0x110bc) | 0x80000000), ((0x110be) | 0x40000000), ((0x110c1) | 0x80000000), ((0x11140) | 0x40000000), ((0x11143) | 0x80000000), ((0x11174) | 0x40000000), ((0x11175) | 0x80000000), ((0x111c5) | 0x40000000), ((0x111c8) | 0x80000000), (0x111cd), (0x111db), ((0x111dd) | 0x40000000), ((0x111df) | 0x80000000), ((0x11238) | 0x40000000), ((0x1123d) | 0x80000000), (0x112a9), ((0x1144b) | 0x40000000), ((0x1144f) | 0x80000000), (0x1145b), (0x1145d), (0x114c6), ((0x115c1) | 0x40000000), ((0x115d7) | 0x80000000), ((0x11641) | 0x40000000), ((0x11643) | 0x80000000), ((0x11660) | 0x40000000), ((0x1166c) | 0x80000000), ((0x1173c) | 0x40000000), ((0x1173e) | 0x80000000), (0x1183b), (0x119e2), ((0x11a3f) | 0x40000000), ((0x11a46) | 0x80000000), ((0x11a9a) | 0x40000000), ((0x11a9c) | 0x80000000), ((0x11a9e) | 0x40000000), ((0x11aa2) | 0x80000000), ((0x11c41) | 0x40000000), ((0x11c45) | 0x80000000), ((0x11c70) | 0x40000000), ((0x11c71) | 0x80000000), ((0x11ef7) | 0x40000000), ((0x11ef8) | 0x80000000), (0x11fff), ((0x12470) | 0x40000000), ((0x12474) | 0x80000000), ((0x16a6e) | 0x40000000), ((0x16a6f) | 0x80000000), (0x16af5), ((0x16b37) | 0x40000000), ((0x16b3b) | 0x80000000), (0x16b44), ((0x16e97) | 0x40000000), ((0x16e9a) | 0x80000000), (0x16fe2), (0x1bc9f), ((0x1da87) | 0x40000000), ((0x1da8b) | 0x80000000), ((0x1e95e) | 0x40000000), ((0x1e95f) | 0x80000000)};
  if (codepoint <= 0x7f)
    return (((33) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (47)) || ((58) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (64)) || ((91) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (96)) || ((123) <= (unsigned)(codepoint) && (unsigned)(codepoint) <= (126)));
  return (md_unicode_bsearch__(codepoint, PUNCT_MAP, (sizeof(PUNCT_MAP) / sizeof(PUNCT_MAP[0]))) >= 0);
}
```