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

```asm
<ServerPacket>:
  endbr64
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x98,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  movzbl (%rdi),%eax
  test   %al,%al
  js     L317
  cmp    $0x20,%al
  ja     L245
  movabs $0x100002601,%rdx
  bt     %rax,%rdx
  jb     L298
L245:
  mov    %rsp,%r12
  lea    D61(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r12,%rdx
  call   <sscanf@plt>
  lea    D176(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L412
  lea    D127(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L58
  lea    D36(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L354
  lea    D68(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L349
  lea    D87(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L94
  lea    D49(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L76
  lea    D134(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L387
  lea    D63(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L15
  lea    D0(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L11
  lea    D196(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L129
  lea    D122(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L401
  lea    D204(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L269
  lea    D91(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L338
  lea    D19(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L376
  lea    D89(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L350
  lea    D46(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L382
  lea    D48(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L194
  lea    D172(%rip),%rsi
  mov    %r12,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L78
  mov    %rbp,%rdi
  call   <ServerResetPlanets@plt>
  jmp    L12
  cs nopw 0x0(%rax,%rax,1)
L298:
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L214
  add    $0x98,%rsp
  mov    %rdi,%rsi
  xor    %eax,%eax
  pop    %rbp
  lea    D126(%rip),%rdi
  pop    %r12
  jmp    12a0 <Log@plt>
  nopw   0x0(%rax,%rax,1)
L412:
  mov    %rbp,%rdi
  call   <ServerPositionShort@plt>
L12:
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L214
  add    $0x98,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L317:
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L214
  add    $0x98,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  jmp    1300 <ServerBinaryPacket@plt>
L58:
  mov    %rbp,%rdi
  call   <ServerPositionLong@plt>
  jmp    L12
  nopw   0x0(%rax,%rax,1)
L354:
  mov    %rbp,%rdi
  call   <ServerPing@plt>
  jmp    L12
  nopw   0x0(%rax,%rax,1)
L349:
  mov    %rbp,%rdi
  call   <ServerFire@plt>
  jmp    L12
  nopw   0x0(%rax,%rax,1)
L94:
  mov    %rbp,%rdi
  call   <ServerMHit@plt>
  jmp    L12
  nopl   (%rax)
L401:
  mov    %rbp,%rdi
  call   <ServerFlag@plt>
  jmp    L12
  nopl   (%rax)
L76:
  mov    %rbp,%rdi
  call   <ServerMDie@plt>
  jmp    L12
  nopl   (%rax)
L387:
  mov    %rbp,%rdi
  call   <ServerMessage@plt>
  jmp    L12
  nopl   (%rax)
L15:
  mov    %rbp,%rdi
  call   <ServerName@plt>
  jmp    L12
  nopl   (%rax)
L11:
  mov    %rbp,%rdi
  call   <ServerVacant@plt>
  jmp    L12
  nopl   (%rax)
L129:
  mov    %rbp,%rdi
  call   <ServerModel@plt>
  jmp    L12
L269:
  mov    %rbp,%rdi
  call   <ServerCrater@plt>
  jmp    L12
L338:
  mov    %rbp,%rdi
  call   <ServerCMSG@plt>
  jmp    L12
L376:
  mov    %rbp,%rdi
  call   <ServerHelo@plt>
  jmp    L12
L78:
  mov    %r12,%rsi
  lea    D70(%rip),%rdi
  xor    %eax,%eax
  call   <Log@plt>
  jmp    L12
L350:
  mov    %rbp,%rdi
  call   <ServerGbye@plt>
  jmp    L12
L382:
  mov    %rbp,%rdi
  call   <ServerWelcome@plt>
  jmp    L12
L194:
  mov    %rbp,%rdi
  call   <ServerPlanet@plt>
  jmp    L12
L214:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: label: D61
data_type: string
name: unpack_data
arguments: label: D176
data_type: string
name: unpack_data
arguments: label: D127
data_type: string
name: unpack_data
arguments: label: D36
data_type: string
name: unpack_data
arguments: label: D68
data_type: string
name: unpack_data
arguments: label: D87
data_type: string
name: unpack_data
arguments: label: D49
data_type: string
name: unpack_data
arguments: label: D134
data_type: string
name: unpack_data
arguments: label: D63
data_type: string
name: unpack_data
arguments: label: D0
data_type: string
name: unpack_data
arguments: label: D196
data_type: string
name: unpack_data
arguments: label: D122
data_type: string
name: unpack_data
arguments: label: D204
data_type: string
name: unpack_data
arguments: label: D91
data_type: string
name: unpack_data
arguments: label: D19
data_type: string
name: unpack_data
arguments: label: D89
data_type: string
name: unpack_data
arguments: label: D46
data_type: string
name: unpack_data
arguments: label: D48
data_type: string
name: unpack_data
arguments: label: D172
data_type: string
name: unpack_data
arguments: label: D126
data_type: string
name: unpack_data
arguments: label: D70
data_type: string

tool: D61: %s

tool: D176: poss

tool: D127: posl

tool: D36: ping

tool: D68: fire

tool: D87: mhit

tool: D49: mdie

tool: D134: mesg

tool: D63: name

tool: D0: vcnt

tool: D196: modl

tool: D122: flag

tool: D204: crat

tool: D91: cmsg

tool: D19: helo

tool: D89: gbye

tool: D46: welc

tool: D48: plan

tool: D172: rpln

tool: D126: ServerPacket: Insane packet: %s

tool: D70: ServerPacket: Unrecongized command: %s

assistant: ```c
ServerPacket(pkt) char *pkt;
{
  char cmd[128];
  if (0x80 & pkt[0]) {
    ServerBinaryPacket(pkt);
    return;
  }
  if ((strlen(pkt) == 0) || (pkt[0] == ' ') || (pkt[0] == '\r') || (pkt[0] == '\n') || (pkt[0] == '\t')) {
    Log("ServerPacket: Insane packet: %s", pkt);
    return;
  }
  sscanf(pkt, "%s", cmd);
  if (!strcasecmp(cmd, "poss")) {
    ServerPositionShort(pkt);
    return;
  } else if (!strcasecmp(cmd, "posl")) {
    ServerPositionLong(pkt);
    return;
  } else if (!strcasecmp(cmd, "ping")) {
    ServerPing(pkt);
    return;
  } else if (!strcasecmp(cmd, "fire")) {
    ServerFire(pkt);
    return;
  } else if (!strcasecmp(cmd, "mhit")) {
    ServerMHit(pkt);
    return;
  } else if (!strcasecmp(cmd, "mdie")) {
    ServerMDie(pkt);
    return;
  } else if (!strcasecmp(cmd, "mesg")) {
    ServerMessage(pkt);
    return;
  } else if (!strcasecmp(cmd, "name")) {
    ServerName(pkt);
    return;
  } else if (!strcasecmp(cmd, "vcnt")) {
    ServerVacant(pkt);
    return;
  } else if (!strcasecmp(cmd, "modl")) {
    ServerModel(pkt);
    return;
  } else if (!strcasecmp(cmd, "flag")) {
    ServerFlag(pkt);
    return;
  } else if (!strcasecmp(cmd, "crat")) {
    ServerCrater(pkt);
    return;
  } else if (!strcasecmp(cmd, "cmsg")) {
    ServerCMSG(pkt);
    return;
  } else if (!strcasecmp(cmd, "helo")) {
    ServerHelo(pkt);
    return;
  } else if (!strcasecmp(cmd, "gbye")) {
    ServerGbye(pkt);
    return;
  } else if (!strcasecmp(cmd, "welc")) {
    ServerWelcome(pkt);
    return;
  } else if (!strcasecmp(cmd, "plan")) {
    ServerPlanet(pkt);
    return;
  } else if (!strcasecmp(cmd, "rpln")) {
    ServerResetPlanets(pkt);
    return;
  } else {
    Log("ServerPacket: Unrecongized command: %s", cmd);
    return;
  }
}
```