user: Please show me the C implementation that matches the assembly code listed below:

```asm
<auton>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  cmpl   $0x4,-0x4(%rbp)
  je     L87
  cmpl   $0x4,-0x4(%rbp)
  jg     L18
  cmpl   $0x3,-0x4(%rbp)
  je     L27
  cmpl   $0x3,-0x4(%rbp)
  jg     L18
  cmpl   $0x1,-0x4(%rbp)
  je     L92
  cmpl   $0x2,-0x4(%rbp)
  je     L68
  jmp    L18
L92:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0x3b,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0x168,%esi
  mov    $0x32,%edi
  call   <driveDegreesRight@plt>
  mov    $0x96,%edx
  mov    $0x0,%esi
  mov    $0xfffffff6,%edi
  call   <DriveTime@plt>
  mov    $0xffffffce,%edi
  call   <setClaw@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x48,%edi
  call   <setLift@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0xffffffe2,%edi
  call   <setClaw@plt>
  mov    $0x14,%esi
  mov    $0x32,%edi
  call   <pointTurnRight@plt>
  mov    $0xb4,%esi
  mov    $0xffffffd6,%edi
  call   <DriveDistance@plt>
  mov    $0xa5,%esi
  mov    $0x2a,%edi
  call   <pointTurnRight@plt>
  mov    $0x2ee,%edx
  mov    $0x0,%esi
  mov    $0x1f,%edi
  call   <DriveTime@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0xffffff81,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0x2a,%edi
  call   <setClaw@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0x15,%edi
  call   <setClaw@plt>
  mov    $0x1a9,%edx
  mov    $0x0,%esi
  mov    $0xffffffe1,%edi
  call   <DriveTime@plt>
  jmp    L8
L68:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D29(%rip),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0xffffffeb,%edi
  call   <setClaw@plt>
  mov    $0x5a,%esi
  mov    $0xffffffe1,%edi
  call   <DriveDistance@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x6e,%esi
  mov    $0x1f,%edi
  call   <DriveDistance@plt>
  mov    $0x2a,%edi
  call   <setClaw@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x15,%edi
  call   <setClaw@plt>
  mov    $0x7f,%edi
  call   <setLift@plt>
  mov    $0xa28,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0x7d,%esi
  mov    $0x1f,%edi
  call   <pointTurnRight@plt>
  mov    $0x44c,%edx
  mov    $0x0,%esi
  mov    $0x1f,%edi
  call   <DriveTime@plt>
  mov    $0xffffffc1,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0xffffffe1,%edi
  call   <setClaw@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setClaw@plt>
  mov    $0x2ee,%edx
  mov    $0x0,%esi
  mov    $0xffffffe1,%edi
  call   <DriveTime@plt>
  jmp    L8
L27:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0x38,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0x1a4,%esi
  mov    $0x32,%edi
  call   <driveDegreesLeft@plt>
  mov    $0x96,%edx
  mov    $0x0,%esi
  mov    $0x19,%edi
  call   <DriveTime@plt>
  mov    $0x96,%edx
  mov    $0x0,%esi
  mov    $0xfffffff6,%edi
  call   <DriveTime@plt>
  mov    $0xffffffce,%edi
  call   <setClaw@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x4a,%edi
  call   <setLift@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0xffffffe2,%edi
  call   <setClaw@plt>
  mov    $0x28,%esi
  mov    $0x3f,%edi
  call   <pointTurnLeft@plt>
  mov    $0xb4,%esi
  mov    $0xffffffd6,%edi
  call   <DriveDistance@plt>
  mov    $0xd2,%esi
  mov    $0x2a,%edi
  call   <pointTurnLeft@plt>
  mov    $0x4e2,%edx
  mov    $0x0,%esi
  mov    $0x24,%edi
  call   <DriveTime@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0xffffff81,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0x2a,%edi
  call   <setClaw@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0x15,%edi
  call   <setClaw@plt>
  mov    $0x177,%edx
  mov    $0x0,%esi
  mov    $0xffffffe1,%edi
  call   <DriveTime@plt>
  jmp    L8
L87:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D35(%rip),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0xffffffeb,%edi
  call   <setClaw@plt>
  mov    $0x5a,%esi
  mov    $0xffffffe1,%edi
  call   <DriveDistance@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x6e,%esi
  mov    $0x1f,%edi
  call   <DriveDistance@plt>
  mov    $0x2a,%edi
  call   <setClaw@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x15,%edi
  call   <setClaw@plt>
  mov    $0x7f,%edi
  call   <setLift@plt>
  mov    $0xa28,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0x7d,%esi
  mov    $0x1f,%edi
  call   <pointTurnLeft@plt>
  mov    $0x44c,%edx
  mov    $0x0,%esi
  mov    $0x1f,%edi
  call   <DriveTime@plt>
  mov    $0xffffffc1,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setLift@plt>
  mov    $0xffffffe1,%edi
  call   <setClaw@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  mov    $0x0,%edi
  call   <setClaw@plt>
  mov    $0x2ee,%edx
  mov    $0x0,%esi
  mov    $0xffffffe1,%edi
  call   <DriveTime@plt>
  jmp    L8
L18:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D6(%rip),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0x168,%esi
  mov    $0x2a,%edi
  call   <DriveDistance@plt>
  nop
L8:
  mov    $0x0,%eax
  call   <allMotorsOff@plt>
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D3
type_infered: string
name: read_data
arguments: data_label: D29
type_infered: string
name: read_data
arguments: data_label: D23
type_infered: string
name: read_data
arguments: data_label: D35
type_infered: string
name: read_data
arguments: data_label: D6
type_infered: string

tool: D3: BLUE SKY 1

tool: D29: BLUE BOX

tool: D23: RED SKY

tool: D35: RED BOX

tool: D6: DEFAULT

assistant: ```c
void auton(int field) {
  switch (field) {
  case 1:
    clearLCDLine(1);
    displayLCDCenteredString(1, "BLUE SKY 1");
    setLift(127 / 2.15);
    wait1Msec(1000);
    setLift(0);
    driveDegreesRight(50, 360);
    DriveTime(-10, 0, 150);
    setClaw(-127 / 2.5);
    wait1Msec(500);
    setLift(127 / 1.75);
    wait1Msec(500);
    setLift(0);
    setClaw(-30);
    pointTurnRight(50, 20);
    DriveDistance(-128 / 3, 360 / 2);
    pointTurnRight(127 / 3, 165);
    DriveTime(127 / 4, 0, 750);
    wait1Msec(750);
    setLift(-127);
    wait1Msec(1000);
    setLift(0);
    setClaw(127 / 3);
    wait1Msec(750);
    setClaw(127 / 6);
    DriveTime(-127 / 4, 0, 750 / 2 + 50);
    break;
  case 2:
    clearLCDLine(1);
    displayLCDCenteredString(1, "BLUE BOX");
    setClaw(-127 / 6);
    DriveDistance(-127 / 4, 90);
    wait1Msec(500);
    DriveDistance(127 / 4, 110);
    setClaw(127 / 3);
    wait1Msec(500);
    setClaw(127 / 6);
    setLift(127);
    wait1Msec(2600);
    setLift(0);
    pointTurnRight(127 / 4, 125);
    DriveTime(127 / 4, 0, 1100);
    setLift(-127 / 2);
    wait1Msec(1000);
    setLift(0);
    setClaw(-127 / 4);
    wait1Msec(500);
    setClaw(0);
    DriveTime(-127 / 4, 0, 750);
    break;
  case 3:
    clearLCDLine(1);
    displayLCDCenteredString(1, "RED SKY");
    setLift(127 / 2.25);
    wait1Msec(1000);
    setLift(0);
    driveDegreesLeft(50, 420);
    DriveTime(127 / 5, 0, 150);
    DriveTime(-10, 0, 150);
    setClaw(-127 / 2.5);
    wait1Msec(500);
    setLift(127 / 1.7);
    wait1Msec(750);
    setLift(0);
    setClaw(-30);
    pointTurnLeft(127 / 2, 40);
    DriveDistance(-128 / 3, 360 / 2);
    pointTurnLeft(127 / 3, 210);
    DriveTime(127 / 3.5, 0, 1250);
    wait1Msec(750);
    setLift(-127);
    wait1Msec(1000);
    setLift(0);
    setClaw(127 / 3);
    wait1Msec(750);
    setClaw(127 / 6);
    DriveTime(-127 / 4, 0, 750 / 2);
    break;
  case 4:
    clearLCDLine(1);
    displayLCDCenteredString(1, "RED BOX");
    setClaw(-127 / 6);
    DriveDistance(-127 / 4, 90);
    wait1Msec(500);
    DriveDistance(127 / 4, 110);
    setClaw(127 / 3);
    wait1Msec(500);
    setClaw(127 / 6);
    setLift(127);
    wait1Msec(2600);
    setLift(0);
    pointTurnLeft(127 / 4, 125);
    DriveTime(127 / 4, 0, 1100);
    setLift(-127 / 2);
    wait1Msec(1000);
    setLift(0);
    setClaw(-127 / 4);
    wait1Msec(500);
    setClaw(0);
    DriveTime(-127 / 4, 0, 750);
    break;
  default:
    clearLCDLine(1);
    displayLCDCenteredString(1, "DEFAULT");
    DriveDistance(127 / 3, 360);
    break;
  }
  allMotorsOff();
}
```