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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  lea    D125(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%r12d
  mov    $0x0,%ebx
  movabs $0x4000000001ffb,%r14
  lea    D99(%rip),%r13
  lea    D36(%rip),%r15
  jmp    L261
L235:
  cmp    $0xff,%r12d
  jg     L176
L45:
  add    $0x1,%ebx
  add    $0x1,%r12d
L261:
  mov    %ebx,%ebp
  mov    %ebx,%eax
  and    $0xffffffdf,%eax
  sub    $0x41,%eax
  mov    $0x1,%esi
  cmp    $0x19,%eax
  jbe    L287
  lea    -0x2d(%rbx),%eax
  cmp    $0x32,%eax
  ja     L314
  bt     %rax,%r14
  jb     L287
L314:
  mov    %ebp,%esi
  lea    D112(%rip),%rdi
  call   <strchr@plt>
  test   %rax,%rax
  setne  %sil
  movzbl %sil,%esi
L287:
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebp,%edx
  sar    $0x1f,%edx
  shr    $0x1c,%edx
  lea    0x0(%rbp,%rdx,1),%eax
  and    $0xf,%eax
  sub    %edx,%eax
  cmp    $0xf,%eax
  jne    L235
  cmp    $0xfe,%ebp
  jg     L235
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L45
L176:
  lea    D3(%rip),%rdi
  call   <puts@plt>
  lea    D44(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%r12d
  mov    $0x0,%ebx
  lea    D99(%rip),%r14
  mov    $0x1,%r13d
  mov    $0x0,%r15d
  jmp    L41
L84:
  mov    %r15d,%esi
  cmp    $0x2d,%ebx
  jne    L30
  mov    %r13d,%esi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L289:
  cmp    $0xff,%r12d
  jg     L78
L274:
  add    $0x1,%ebx
  add    $0x1,%r12d
L41:
  mov    %ebx,%ebp
  mov    %ebx,%eax
  and    $0xffffffdf,%eax
  sub    $0x41,%eax
  cmp    $0x19,%eax
  jbe    L134
  cmp    $0x2e,%ebx
  je     L18
  cmp    $0x2e,%ebx
  jle    L84
  cmp    $0x39,%ebx
  jg     L246
  mov    %r15d,%esi
  cmp    $0x2f,%ebx
  jle    L142
  mov    %r13d,%esi
  jmp    L30
L246:
  mov    %r13d,%esi
  cmp    $0x5f,%ebx
  jne    L400
L142:
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L402:
  lea    D36(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L274
L400:
  mov    %r15d,%esi
  jmp    L30
L134:
  mov    %r13d,%esi
L30:
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebp,%edx
  sar    $0x1f,%edx
  shr    $0x1c,%edx
  lea    0x0(%rbp,%rdx,1),%eax
  and    $0xf,%eax
  sub    %edx,%eax
  cmp    $0xf,%eax
  jne    L289
  cmp    $0xfe,%ebp
  jg     L289
  jmp    L402
L78:
  lea    D3(%rip),%rdi
  call   <puts@plt>
  lea    D120(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%r12d
  mov    $0x0,%ebx
  lea    D99(%rip),%r13
  lea    D36(%rip),%r15
  movabs $0x4000000001ffb,%r14
  jmp    L398
L247:
  cmp    $0x21,%ebx
  jne    L260
L88:
  mov    $0x1,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L200:
  cmp    $0xff,%r12d
  jg     L111
L341:
  add    $0x1,%ebx
  add    $0x1,%r12d
L398:
  mov    %ebx,%ebp
  mov    %ebx,%eax
  and    $0xffffffdf,%eax
  sub    $0x41,%eax
  cmp    $0x19,%eax
  jbe    L212
  lea    -0x2d(%rbx),%eax
  cmp    $0x32,%eax
  ja     L247
  bt     %rax,%r14
  jb     L89
L260:
  cmp    $0x40,%ebp
  jg     L49
  mov    $0x0,%esi
  cmp    $0x23,%ebp
  jle    L395
  lea    -0x24(%rbx),%ecx
  mov    $0x1,%eax
  shl    %cl,%rax
  test   $0x1ac009dd,%eax
  jne    L125
  cmp    $0x29,%ebx
  je     L88
  mov    $0x0,%esi
  jmp    L395
L49:
  lea    -0x5b(%rbx),%edx
  mov    %edx,%ecx
  movabs $0x800000005,%rax
  shr    %cl,%rax
  mov    %eax,%ecx
  and    $0x1,%ecx
  cmp    $0x24,%edx
  mov    $0x0,%esi
  cmovb  %ecx,%esi
  jmp    L395
L212:
  mov    $0x1,%esi
L395:
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebp,%edx
  sar    $0x1f,%edx
  shr    $0x1c,%edx
  lea    0x0(%rbp,%rdx,1),%eax
  and    $0xf,%eax
  sub    %edx,%eax
  cmp    $0xf,%eax
  jne    L200
  cmp    $0xfe,%ebp
  jg     L200
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L341
L89:
  mov    $0x1,%esi
  jmp    L395
L125:
  mov    $0x1,%esi
  jmp    L395
L18:
  mov    %r13d,%esi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L289
L111:
  lea    D5(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D125
datatype: string
name: retrieve_data
arguments: data_label: D99
datatype: string
name: retrieve_data
arguments: data_label: D36
datatype: string
name: retrieve_data
arguments: data_label: D112
datatype: string
name: retrieve_data
arguments: data_label: D3
datatype: string
name: retrieve_data
arguments: data_label: D44
datatype: string
name: retrieve_data
arguments: data_label: D120
datatype: string
name: retrieve_data
arguments: data_label: D5
datatype: string

tool: D125: static const char HREF_SAFE[] = {
	

tool: D99: %d, 

tool: D36: 
	

tool: D112: -_.+!*(),%#@?=;:/,+$

tool: D3: };


tool: D44: static const char URL_SAFE[] = {
	

tool: D120: static const char URI_SAFE[] = {
	

tool: D5: };

assistant: ```c
int main(void) {
  int i;
  printf("static const char HREF_SAFE[] = {\n\t");
  for (i = 0; i < 256; ++i) {
    printf("%d, ", ((((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9')) || i == '-' || i == '_' || i == '.') || strchr("-_.+!*(),%#@?=;:/,+$", i) != NULL));
    if (i % 16 == 15 && i < 255)
      printf("\n\t");
  }
  printf("};\n\n");
  printf("static const char URL_SAFE[] = {\n\t");
  for (i = 0; i < 256; ++i) {
    printf("%d, ", (((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9')) || i == '-' || i == '_' || i == '.'));
    if (i % 16 == 15 && i < 255)
      printf("\n\t");
  }
  printf("};\n\n");
  printf("static const char URI_SAFE[] = {\n\t");
  for (i = 0; i < 256; ++i) {
    printf("%d, ", ((((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9')) || i == '-' || i == '_' || i == '.') || (((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z') || (i >= '0' && i <= '9')) || i == '-' || i == '_' || i == '.' || i == '!' || i == '~' || i == '*' || i == '\'' || i == '(' || i == ')') || (i == ';' || i == '/' || i == '?' || i == ':' || i == '@' || i == '&' || i == '=' || i == '+' || i == '$' || i == ',' || i == '[' || i == ']')));
    if (i % 16 == 15 && i < 255)
      printf("\n\t");
  }
  printf("};\n");
  return 0;
}
```