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

```asm
<executeExternalCommand>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x150,%rsp
  mov    %rdi,-0x148(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  nop
  movl   $0x0,-0x138(%rbp)
  movl   $0x0,-0x134(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movl   $0x0,-0x10(%rbp)
  lea    -0x70(%rbp),%rax
  mov    %rax,-0x128(%rbp)
  mov    -0x148(%rbp),%rax
  mov    (%rax),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x70(%rbp),%rax
  mov    $0x7b,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x120(%rbp)
  lea    -0x70(%rbp),%rax
  mov    $0x7d,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x118(%rbp)
  cmpq   $0x0,-0x120(%rbp)
  je     L81
  cmpq   $0x0,-0x118(%rbp)
  je     L81
  mov    -0x120(%rbp),%rax
  cmp    -0x118(%rbp),%rax
  jae    L81
  addq   $0x1,-0x120(%rbp)
  mov    -0x120(%rbp),%rax
  mov    %rax,-0x128(%rbp)
  mov    -0x118(%rbp),%rax
  movb   $0x0,(%rax)
L81:
  nop
  lea    -0x110(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x14,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  mov    -0x128(%rbp),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtok@plt>
  mov    %rax,-0x130(%rbp)
  movl   $0x0,-0x140(%rbp)
  movl   $0x1,-0x13c(%rbp)
  jmp    L41
L46:
  mov    -0x140(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x140(%rbp)
  cltq
  mov    -0x130(%rbp),%rdx
  mov    %rdx,-0x110(%rbp,%rax,8)
  lea    D0(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  mov    %rax,-0x130(%rbp)
L58:
  cmpq   $0x0,-0x130(%rbp)
  jne    L46
  mov    -0x13c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x148(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x130(%rbp)
  addl   $0x1,-0x13c(%rbp)
L41:
  cmpl   $0x7,-0x13c(%rbp)
  jle    L58
  nop
  call   <fork@plt>
  mov    %eax,-0x138(%rbp)
  cmpl   $0x0,-0x138(%rbp)
  jne    L0
  nop
  mov    -0x110(%rbp),%rax
  lea    -0x110(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <execvp@plt>
  mov    %eax,-0x138(%rbp)
  cmpl   $0xffffffff,-0x138(%rbp)
  jne    L87
  mov    -0x110(%rbp),%rax
  mov    %rax,%rsi
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L87
L0:
  mov    $0x0,%edi
  call   <wait@plt>
  mov    %eax,-0x134(%rbp)
L87:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L25
  call   <__stack_chk_fail@plt>
L25:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D0
type_guessed: string
name: read_data
arguments: label: D7
type_guessed: string

tool: D0:  

tool: D7: %s failed to run


assistant: ```c
void executeExternalCommand(char **givenData) {
  for (; 0;)
    printf("executeExternalCommand() called\n");
  int i = 0, j = 0;
  char tempData[100] = {0};
  char *dataHere = tempData;
  strcpy(tempData, givenData[0]);
  char *complexStringStart = strchr(tempData, '{');
  char *complexStringEnd = strchr(tempData, '}');
  if (complexStringStart != NULL && complexStringEnd != NULL) {
    if (complexStringStart < complexStringEnd) {
      complexStringStart++;
      dataHere = complexStringStart;
      *(complexStringEnd) = 0;
    }
  }
  for (; 0;)
    printf("Given : %s\n", dataHere);
  char *commandSplit[20] = {NULL};
  char *temp = strtok(dataHere, " ");
  int cmdChunks = 0;
  int z;
  for (z = 1; z < 8; z++) {
    while (temp != NULL) {
      commandSplit[cmdChunks++] = temp;
      temp = strtok(NULL, " ");
    }
    temp = givenData[z];
  }
  for (; 0;)
    printf("After TOK : %s, %s, %s, %s, %s\n", commandSplit[0], commandSplit[1], commandSplit[2], commandSplit[3], commandSplit[4]);
  i = fork();
  if (i == 0) {
    for (; 0;)
      printf("execvp(%s,double pointer to givenData)\n", givenData[0]);
    i = execvp(commandSplit[0], commandSplit);
    if (i == -1) {
      printf("%s failed to run\n", commandSplit[0]);
      exit(1);
    }
  } else {
    j = wait(NULL);
  }
}
```