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

```asm
<auton>:
  endbr64
  sub    $0x8,%rsp
  cmp    $0x3,%edi
  je     L39
  jg     L31
  cmp    $0x1,%edi
  je     L16
  cmp    $0x2,%edi
  jne    L26
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D31(%rip),%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>
  xor    %edi,%edi
  call   <setLift@plt>
  mov    $0x7d,%esi
  mov    $0x1f,%edi
  call   <pointTurnRight@plt>
L55:
  mov    $0x44c,%edx
  xor    %esi,%esi
  mov    $0x1f,%edi
  call   <DriveTime@plt>
  mov    $0xffffffc1,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  xor    %edi,%edi
  call   <setLift@plt>
  mov    $0xffffffe1,%edi
  call   <setClaw@plt>
  mov    $0x1f4,%edi
  call   <wait1Msec@plt>
  xor    %edi,%edi
  call   <setClaw@plt>
  mov    $0x2ee,%edx
  xor    %esi,%esi
  mov    $0xffffffe1,%edi
  call   <DriveTime@plt>
  xor    %eax,%eax
  add    $0x8,%rsp
  jmp    1120 <allMotorsOff@plt>
  nopl   0x0(%rax)
L31:
  cmp    $0x4,%edi
  jne    L26
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D10(%rip),%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>
  xor    %edi,%edi
  call   <setLift@plt>
  mov    $0x7d,%esi
  mov    $0x1f,%edi
  call   <pointTurnLeft@plt>
  jmp    L55
  nopl   0x0(%rax,%rax,1)
L39:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D46(%rip),%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0x38,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  xor    %edi,%edi
  call   <setLift@plt>
  mov    $0x1a4,%esi
  mov    $0x32,%edi
  call   <driveDegreesLeft@plt>
  xor    %esi,%esi
  mov    $0x96,%edx
  mov    $0x19,%edi
  call   <DriveTime@plt>
  mov    $0x96,%edx
  xor    %esi,%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>
  xor    %edi,%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>
  xor    %esi,%esi
  mov    $0x4e2,%edx
  mov    $0x24,%edi
  call   <DriveTime@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0xffffff81,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  xor    %edi,%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
  xor    %esi,%esi
  mov    $0xffffffe1,%edi
  call   <DriveTime@plt>
  xor    %eax,%eax
  add    $0x8,%rsp
  jmp    1120 <allMotorsOff@plt>
  nopl   (%rax)
L26:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D14(%rip),%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0x168,%esi
  mov    $0x2a,%edi
  call   <DriveDistance@plt>
  xor    %eax,%eax
  add    $0x8,%rsp
  jmp    1120 <allMotorsOff@plt>
  nopl   (%rax)
L16:
  mov    $0x1,%edi
  call   <clearLCDLine@plt>
  lea    D11(%rip),%rsi
  mov    $0x1,%edi
  call   <displayLCDCenteredString@plt>
  mov    $0x3b,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  xor    %edi,%edi
  call   <setLift@plt>
  mov    $0x168,%esi
  mov    $0x32,%edi
  call   <driveDegreesRight@plt>
  mov    $0x96,%edx
  xor    %esi,%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>
  xor    %edi,%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>
  xor    %esi,%esi
  mov    $0x2ee,%edx
  mov    $0x1f,%edi
  call   <DriveTime@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0xffffff81,%edi
  call   <setLift@plt>
  mov    $0x3e8,%edi
  call   <wait1Msec@plt>
  xor    %edi,%edi
  call   <setLift@plt>
  mov    $0x2a,%edi
  call   <setClaw@plt>
  mov    $0x2ee,%edi
  call   <wait1Msec@plt>
  mov    $0x15,%edi
  call   <setClaw@plt>
  xor    %esi,%esi
  mov    $0x1a9,%edx
  mov    $0xffffffe1,%edi
  call   <DriveTime@plt>
  xor    %eax,%eax
  add    $0x8,%rsp
  jmp    1120 <allMotorsOff@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D31
type_infered: string
name: unpack_data
arguments: data_tag: D10
type_infered: string
name: unpack_data
arguments: data_tag: D46
type_infered: string
name: unpack_data
arguments: data_tag: D14
type_infered: string
name: unpack_data
arguments: data_tag: D11
type_infered: string

tool: D31: BLUE BOX

tool: D10: RED BOX

tool: D46: RED SKY

tool: D14: DEFAULT

tool: D11: BLUE SKY 1

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();
}
```