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

```asm
<Get_var_units>:
  endbr64
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rsi,%rbp
  lea    D60(%rip),%rsi
  mov    %rbp,%rdi
  sub    $0x8,%rsp
  call   <strcmp@plt>
  test   %rax,%rax
  je     L50
  lea    D97(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L50
  lea    D82(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L8
  lea    D144(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L67
  lea    D13(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L122
  lea    D112(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L122
  lea    D27(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L107
  lea    D124(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L107
  lea    D140(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L8
  lea    D109(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L8
  movb   $0x0,(%r12)
  mov    $0x1,%eax
  jmp    L126
  nopl   (%rax)
L50:
  mov    $0x800,%edx
  lea    D59(%rip),%rsi
  mov    %r12,%rdi
  call   <strncpy@plt>
  xor    %eax,%eax
L126:
  add    $0x8,%rsp
  pop    %rbp
  pop    %r12
  ret
  cs nopw 0x0(%rax,%rax,1)
L67:
  mov    $0x800,%edx
  lea    D84(%rip),%rsi
  mov    %r12,%rdi
  call   <strncpy@plt>
  xor    %eax,%eax
  jmp    L126
  nopl   0x0(%rax,%rax,1)
L8:
  mov    %r12,%rdi
  mov    $0x800,%edx
  lea    D134(%rip),%rsi
  call   <strncpy@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L122:
  mov    %r12,%rdi
  mov    $0x800,%edx
  lea    D98(%rip),%rsi
  call   <strncpy@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L107:
  mov    $0x800,%edx
  lea    D103(%rip),%rsi
  mov    %r12,%rdi
  call   <strncpy@plt>
  xor    %eax,%eax
  jmp    L126
```

tool_calls: name: unpack_data
arguments: data_label: D60
type_infered: string
name: unpack_data
arguments: data_label: D97
type_infered: string
name: unpack_data
arguments: data_label: D82
type_infered: string
name: unpack_data
arguments: data_label: D144
type_infered: string
name: unpack_data
arguments: data_label: D13
type_infered: string
name: unpack_data
arguments: data_label: D112
type_infered: string
name: unpack_data
arguments: data_label: D27
type_infered: string
name: unpack_data
arguments: data_label: D124
type_infered: string
name: unpack_data
arguments: data_label: D140
type_infered: string
name: unpack_data
arguments: data_label: D109
type_infered: string
name: unpack_data
arguments: data_label: D59
type_infered: string
name: unpack_data
arguments: data_label: D84
type_infered: string
name: unpack_data
arguments: data_label: D134
type_infered: string
name: unpack_data
arguments: data_label: D98
type_infered: string
name: unpack_data
arguments: data_label: D103
type_infered: string

tool: D60: model_grid_cell__row_index

tool: D97: model_grid_cell__column_index

tool: D82: cyclone__magnitude_of_velocity

tool: D144: cyclone__azimuth_angle_of_velocity

tool: D13: atmosphere_bottom_air__pressure

tool: D112: atmosphere_bottom_air__reference_pressure

tool: D27: cyclone_air_flow_max_speed__radius

tool: D124: cyclone__radius

tool: D140: atmosphere_air_flow__east_component_of_velocity

tool: D109: atmosphere_air_flow__north_component_of_velocity

tool: D59: count

tool: D84: degrees

tool: D134: meters second-1

tool: D98: pascals

tool: D103: meters

assistant: ```c
int Get_var_units(void *self, const char *name, char *units) {
  if (strcmp(name, "model_grid_cell__row_index") == 0) {
    strncpy(units, "count", (2048));
    return (0);
  } else if (strcmp(name, "model_grid_cell__column_index") == 0) {
    strncpy(units, "count", (2048));
    return (0);
  } else if (strcmp(name, "cyclone__magnitude_of_velocity") == 0) {
    strncpy(units, "meters second-1", (2048));
    return (0);
  } else if (strcmp(name, "cyclone__azimuth_angle_of_velocity") == 0) {
    strncpy(units, "degrees", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_bottom_air__pressure") == 0) {
    strncpy(units, "pascals", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_bottom_air__reference_pressure") == 0) {
    strncpy(units, "pascals", (2048));
    return (0);
  } else if (strcmp(name, "cyclone_air_flow_max_speed__radius") == 0) {
    strncpy(units, "meters", (2048));
    return (0);
  } else if (strcmp(name, "cyclone__radius") == 0) {
    strncpy(units, "meters", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_air_flow__east_component_of_velocity") == 0) {
    strncpy(units, "meters second-1", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_air_flow__north_component_of_velocity") == 0) {
    strncpy(units, "meters second-1", (2048));
    return (0);
  } else {
    units[0] = '\0';
    return (1);
  }
}
```