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

```asm
<mgh_umck>:
  endbr64
  mov    %rdi,%r8
  cmp    $0x12,%edx
  ja     L13
  lea    D298(%rip),%rcx
  mov    %edx,%edx
  movslq (%rcx,%rdx,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
  sub    $0x1,%esi
  xor    %edi,%edi
  lea    D350(%rip),%rcx
  cmp    $0x31,%esi
  lea    D340(%rip),%rdx
  mov    %r8,%rsi
  setbe  %dil
  jmp    1050 <check@plt>
  nopw   0x0(%rax,%rax,1)
  xor    %edi,%edi
  cmp    $0x3,%esi
  lea    D253(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D372(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  cmp    $0x6,%esi
  lea    D155(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D181(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  cmp    $0x3,%esi
  lea    D256(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D250(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  cmp    $0x2,%esi
  lea    D262(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D271(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  cmp    $0x3,%esi
  lea    D4(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D0(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  test   %esi,%esi
  lea    D272(%rip),%rcx
  mov    %r8,%rsi
  setg   %dil
  lea    D315(%rip),%rdx
  jmp    1050 <check@plt>
  xchg   %ax,%ax
  xor    %edi,%edi
  cmp    $0x1,%esi
  lea    D379(%rip),%rcx
  mov    %r8,%rsi
  setg   %dil
  lea    D142(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  test   %esi,%esi
  lea    D151(%rip),%rcx
  mov    %r8,%rsi
  setg   %dil
  lea    D150(%rip),%rdx
  jmp    1050 <check@plt>
  xchg   %ax,%ax
  xor    %edi,%edi
  test   %esi,%esi
  lea    D184(%rip),%rcx
  mov    %r8,%rsi
  setg   %dil
  lea    D143(%rip),%rdx
  jmp    1050 <check@plt>
  xchg   %ax,%ax
  xor    %edi,%edi
  cmp    $0x2,%esi
  lea    D15(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D352(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  cmp    $0x4,%esi
  lea    D213(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D247(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  cmp    $0x3,%esi
  lea    D105(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D87(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  test   %esi,%esi
  lea    D376(%rip),%rcx
  mov    %r8,%rsi
  setg   %dil
  lea    D165(%rip),%rdx
  jmp    1050 <check@plt>
  xchg   %ax,%ax
  mov    %esi,%edi
  xor    %eax,%eax
  lea    D220(%rip),%rcx
  not    %edi
  lea    D279(%rip),%rdx
  and    $0x1,%edi
  test   %esi,%esi
  mov    %r8,%rsi
  cmovle %eax,%edi
  jmp    1050 <check@plt>
  nopl   0x0(%rax)
  xor    %edi,%edi
  test   %esi,%esi
  jle    L19
  xor    %edi,%edi
  and    $0x3,%esi
  sete   %dil
L19:
  lea    D190(%rip),%rcx
  lea    D164(%rip),%rdx
  mov    %r8,%rsi
  jmp    1050 <check@plt>
  nopl   (%rax)
  xor    %edi,%edi
  cmp    $0x2,%esi
  lea    D346(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D215(%rip),%rdx
  jmp    1050 <check@plt>
  nop
  xor    %edi,%edi
  cmp    $0x4,%esi
  lea    D159(%rip),%rcx
  mov    %r8,%rsi
  sete   %dil
  lea    D152(%rip),%rdx
  jmp    1050 <check@plt>
L13:
  test   %r8,%r8
  je     L7
  lea    D124(%rip),%rax
  mov    %rax,(%r8)
L7:
  mov    $0xffffffff,%eax
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D350
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D340
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D253
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D372
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D155
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D181
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D256
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D250
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D262
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D271
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D4
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D0
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D272
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D315
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D379
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D142
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D151
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D150
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D184
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D143
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D15
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D352
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D213
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D247
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D105
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D87
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D376
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D165
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D220
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D279
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D190
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D164
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D346
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D215
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D159
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D152
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D124
type_guessed: string

tool: D350: N must be <= 50 for problem #18

tool: D340: Chebyquad function.

tool: D253: N must be 3 for problem #1

tool: D372: Helical valley function.

tool: D155: N must be 6 for problem #2

tool: D181: Biggs exp6 function.

tool: D256: N must be 3 for problem #3

tool: D250: Gaussian function.

tool: D262: N must be 2 for problem #4

tool: D271: Powell badly scaled function.

tool: D4: N must be 3 for problem #5

tool: D0: Box 3-dimensional function.

tool: D272: N must be >= 1 in problem #6

tool: D315: Variably dimensioned function.

tool: D379: N may be 2 or greater but is usually 6 or 9 for problem #7

tool: D142: Watson function.

tool: D151: N must be >= 1 in problem #8

tool: D150: Penalty function I.

tool: D184: N must be >= 1 in problem #9

tool: D143: Penalty function II.

tool: D15: N must be 2 for problem #10

tool: D352: Brown badly scaled function.

tool: D213: N must be 4 for problem #11

tool: D247: Brown and Dennis function.

tool: D105: N must be 3 for problem #12

tool: D87: Gulf research and development function.

tool: D376: N must be >= 1 in problem #13

tool: D165: Trigonometric function.

tool: D220: N must be a multiple of 2 in problem #14

tool: D279: Extended Rosenbrock function.

tool: D190: N must be a multiple of 4 in problem #15

tool: D164: Extended Powell function.

tool: D346: N must be 2 for problem #16

tool: D215: Beale function.

tool: D159: N must be 4 for problem #17

tool: D152: Wood function.

tool: D124: PROB must be an integer between 1 and 18

assistant: ```c
int mgh_umck(const char **str, int n, int prob) {
  int status = (0);
  switch (prob) {
  case 1:
    status = check(n == 3, str, "Helical valley function.", "N must be 3 for problem #1");
    break;
  case 2:
    status = check(n == 6, str, "Biggs exp6 function.", "N must be 6 for problem #2");
    break;
  case 3:
    status = check(n == 3, str, "Gaussian function.", "N must be 3 for problem #3");
    break;
  case 4:
    status = check(n == 2, str, "Powell badly scaled function.", "N must be 2 for problem #4");
    break;
  case 5:
    status = check(n == 3, str, "Box 3-dimensional function.", "N must be 3 for problem #5");
    break;
  case 6:
    status = check(n >= 1, str, "Variably dimensioned function.", "N must be >= 1 in problem #6");
    break;
  case 7:
    status = check(n >= 2, str, "Watson function.", "N may be 2 or greater but is usually 6 or 9 for problem #7");
    break;
  case 8:
    status = check(n >= 1, str, "Penalty function I.", "N must be >= 1 in problem #8");
    break;
  case 9:
    status = check(n >= 1, str, "Penalty function II.", "N must be >= 1 in problem #9");
    break;
  case 10:
    status = check(n == 2, str, "Brown badly scaled function.", "N must be 2 for problem #10");
    break;
  case 11:
    status = check(n == 4, str, "Brown and Dennis function.", "N must be 4 for problem #11");
    break;
  case 12:
    status = check(n == 3, str, "Gulf research and development function.", "N must be 3 for problem #12");
    break;
  case 13:
    status = check(n >= 1, str, "Trigonometric function.", "N must be >= 1 in problem #13");
    break;
  case 14:
    status = check(n >= 1 && n % 2 == 0, str, "Extended Rosenbrock function.", "N must be a multiple of 2 in problem #14");
    break;
  case 15:
    status = check(n >= 1 && n % 4 == 0, str, "Extended Powell function.", "N must be a multiple of 4 in problem #15");
    break;
  case 16:
    status = check(n == 2, str, "Beale function.", "N must be 2 for problem #16");
    break;
  case 17:
    status = check(n == 4, str, "Wood function.", "N must be 4 for problem #17");
    break;
  case 18:
    status = check(n >= 1 && n <= 50, str, "Chebyquad function.",
                   "N must be <= "
                   "50"
                   " for problem #18");
    break;
  default:
    status = (-1);
    if (str != NULL) {
      *str = "PROB must be an integer between 1 and 18";
    }
  }
  return status;
}
```