user: 请从给定的汇编指令推导出C源代码：

```asm
<getZip>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  lea    D42(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <InputHandler@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <checkNullity@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0xc(%rbp)
  movl   $0x0,-0x14(%rbp)
  cmpl   $0xb,-0xc(%rbp)
  je     L95
  cmpl   $0x6,-0xc(%rbp)
  je     L95
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x14,%edi
  call   <exit@plt>
L95:
  movl   $0x0,-0x10(%rbp)
  jmp    L16
L3:
  cmpl   $0x6,-0xc(%rbp)
  je     L108
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L108
  addl   $0x1,-0x14(%rbp)
  jmp    L44
L108:
  cmpl   $0x1,-0x14(%rbp)
  jle    L97
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x15,%edi
  call   <exit@plt>
L97:
  mov    -0xc(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x10(%rbp)
  jne    L134
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L34
L134:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %eax,%eax
  jne    L44
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x16,%edi
  call   <exit@plt>
  jmp    L44
L34:
  nop
L44:
  addl   $0x1,-0x10(%rbp)
L16:
  mov    -0x10(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jl     L3
  cmpl   $0xb,-0xc(%rbp)
  jne    L79
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L79
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0x17,%edi
  call   <exit@plt>
L79:
  mov    -0x8(%rbp),%rax
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D42
type_infered: string
name: parse_data
arguments: tag: D26
type_infered: string
name: parse_data
arguments: tag: D27
type_infered: string
name: parse_data
arguments: tag: D72
type_infered: string
name: parse_data
arguments: tag: D13
type_infered: string
name: parse_data
arguments: tag: D0
type_infered: string

tool: D42: Enter a valid zip code: 

tool: D26: Invalid zip length


tool: D27: Invalid Input: only 1 hyphen '-' allowed in Zip Code


tool: D72: Enter a Zip Code in format "12345" or "12345-6789"


tool: D13: Invalid Input: Numbers only in Zip Code. 


tool: D0: Invalid Input: 10 digit Zip Code missing '-' 


assistant: ```c
char *getZip(void) {
  printf("Enter a valid zip code: ");
  char *zip = InputHandler();
  checkNullity(zip);
  int len = strlen(zip);
  int numHyph = 0;
  if (len != 11) {
    if (len != 6) {
      printf("Invalid zip length\n");
      free(zip);
      exit(20);
    }
  }
  for (int i = 0; i < len; i++) {
    if (len != 6 && zip[i] == '-') {
      numHyph++;
      continue;
    }
    if (numHyph > 1) {
      printf("Invalid Input: only 1 hyphen '-' allowed in Zip Code\n");
      printf("Enter a Zip Code in format \"12345\" or \"12345-6789\"\n");
      free(zip);
      exit(21);
    }
    if (i == len - 1 && zip[i] == '\n') {
      continue;
    }
    if (!isdigit(zip[i])) {
      printf("Invalid Input: Numbers only in Zip Code. \n");
      printf("Enter a Zip Code in format \"12345\" or \"12345-6789\"\n");
      free(zip);
      exit(22);
    }
  }
  if ((len == 11) && zip[5] != '-') {
    printf("Invalid Input: 10 digit Zip Code missing '-' \n");
    printf("Enter a Zip Code in format \"12345\" or \"12345-6789\"\n");
    free(zip);
    exit(23);
  }
  return zip;
}
```