user: What is the c source code of the assembly code below?

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  xor    %ebp,%ebp
  push   %rbx
  sub    $0x1a0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x198(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbx
  nopl   0x0(%rax,%rax,1)
L31:
  mov    %ebp,%edi
  call   <switch1@plt>
  mov    %eax,(%rbx,%rbp,4)
  add    $0x1,%rbp
  cmp    $0x64,%rbp
  jne    L31
  xor    %ebp,%ebp
  cs nopw 0x0(%rax,%rax,1)
L11:
  mov    (%rbx,%rbp,4),%r12d
  mov    %ebp,%edi
  call   <switch1@plt>
  xor    %edi,%edi
  cmp    %eax,%r12d
  sete   %dil
  add    $0x1,%rbp
  call   <assert@plt>
  cmp    $0x64,%rbp
  jne    L11
  xor    %ebp,%ebp
  nopl   (%rax)
L79:
  mov    %ebp,%edi
  call   <switch2@plt>
  mov    %eax,(%rbx,%rbp,4)
  add    $0x1,%rbp
  cmp    $0x64,%rbp
  jne    L79
  xor    %ebp,%ebp
  xchg   %ax,%ax
L107:
  mov    (%rbx,%rbp,4),%r12d
  mov    %ebp,%edi
  call   <switch2@plt>
  xor    %edi,%edi
  cmp    %eax,%r12d
  sete   %dil
  add    $0x1,%rbp
  call   <assert@plt>
  cmp    $0x64,%rbp
  jne    L107
  xor    %ebp,%ebp
  nopl   (%rax)
L26:
  mov    %ebp,%edi
  call   <switch3@plt>
  mov    %eax,(%rbx,%rbp,4)
  add    $0x1,%rbp
  cmp    $0x64,%rbp
  jne    L26
  xor    %ebp,%ebp
  xchg   %ax,%ax
L59:
  mov    (%rbx,%rbp,4),%r12d
  mov    %ebp,%edi
  call   <switch3@plt>
  xor    %edi,%edi
  cmp    %eax,%r12d
  sete   %dil
  add    $0x1,%rbp
  call   <assert@plt>
  cmp    $0x64,%rbp
  jne    L59
  mov    %rbx,%r12
  mov    %rbx,%r13
  xor    %ebp,%ebp
  nopl   0x0(%rax,%rax,1)
L83:
  mov    %ebp,%edi
  add    $0x1,%ebp
  add    $0x4,%r13
  mov    %ebp,%esi
  call   <switch4@plt>
  mov    %eax,-0x4(%r13)
  cmp    $0x64,%ebp
  jne    L83
  mov    %rbx,%r13
  xor    %ebp,%ebp
  xchg   %ax,%ax
L102:
  mov    %ebp,%edi
  add    $0x1,%ebp
  mov    0x0(%r13),%r14d
  mov    %ebp,%esi
  call   <switch4@plt>
  xor    %edi,%edi
  cmp    %eax,%r14d
  sete   %dil
  add    $0x4,%r13
  call   <assert@plt>
  cmp    $0x64,%ebp
  jne    L102
  xor    %ebp,%ebp
  nopl   0x0(%rax)
L4:
  mov    %ebp,%edi
  add    $0x1,%ebp
  add    $0x4,%rbx
  mov    %ebp,%esi
  call   <switch5@plt>
  mov    %eax,-0x4(%rbx)
  cmp    $0x64,%ebp
  jne    L4
  xor    %ebx,%ebx
  nopw   0x0(%rax,%rax,1)
L18:
  mov    %ebx,%edi
  add    $0x1,%ebx
  mov    (%r12),%ebp
  mov    %ebx,%esi
  call   <switch5@plt>
  xor    %edi,%edi
  cmp    %eax,%ebp
  sete   %dil
  add    $0x4,%r12
  call   <assert@plt>
  cmp    $0x64,%ebx
  jne    L18
  mov    0x198(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L57
  add    $0x1a0,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L57:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int main(int argc) {
  int array[100];
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch1(i);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch1(i));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch2(i);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch2(i));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch3(i);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch3(i));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch4(i, i + 1);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch4(i, i + 1));
#pragma omp target map(tofrom : array[:s])
  {
    for (int i = 0; i < 100; i++)
      array[i] = switch5(i, i + 1);
  }
  for (int i = 0; i < 100; i++)
    assert(array[i] == switch5(i, i + 1));
}
```