#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
char *next_input(char **line, int first, int last) {
  char *cp = *line;
  char *result;
  while (*cp == ' ' || *cp == '\t')
    ++cp;
  if (first && *cp == '#')
    return NULL;
  if (*cp == '"') {
    char *wp;
    result = ++cp;
    wp = cp;
    while (*cp != '"' && *cp != '\0' && *cp != '\n')
      if (*cp == '\\') {
        if (cp[1] == '\n' || cp[1] == '\0')
          return NULL;
        ++cp;
        if (*cp == 't')
          *wp++ = '\t';
        else if (*cp == 'n')
          *wp++ = '\n';
        else
          *wp++ = *cp;
        ++cp;
      } else
        *wp++ = *cp++;
    if (*cp != '"')
      return NULL;
    if (wp != cp)
      *wp = '\0';
  } else {
    result = cp;
    while (*cp != '\0' && *cp != '\n' && *cp != ' ' && *cp != '\t')
      ++cp;
    if (cp == result && !last)
      return NULL;
  }
  *cp++ = '\0';
  *line = cp;
  return result;
}


x86 assembly (clang, -O0):
<next_input>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x31(%rbp)
je     113e <next_input+0x3e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    114e <next_input+0x4e>
jmp    115f <next_input+0x5f>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1119 <next_input+0x19>
cmpl   $0x0,-0x14(%rbp)
je     1186 <next_input+0x86>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    1186 <next_input+0x86>
movq   $0x0,-0x8(%rbp)
jmp    13e3 <next_input+0x2e3>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    131c <next_input+0x21c>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x22,%ecx
mov    %al,-0x32(%rbp)
je     11e8 <next_input+0xe8>
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x32(%rbp)
je     11e8 <next_input+0xe8>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x32(%rbp)
mov    -0x32(%rbp),%al
test   $0x1,%al
jne    11f8 <next_input+0xf8>
jmp    12e5 <next_input+0x1e5>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    12be <next_input+0x1be>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xa,%eax
je     122a <next_input+0x12a>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    1237 <next_input+0x137>
movq   $0x0,-0x8(%rbp)
jmp    13e3 <next_input+0x2e3>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
jne    126a <next_input+0x16a>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x9,(%rax)
jmp    12ad <next_input+0x1ad>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x6e,%eax
jne    1291 <next_input+0x191>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0xa,(%rax)
jmp    12a8 <next_input+0x1a8>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    12ad <next_input+0x1ad>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    12e0 <next_input+0x1e0>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
jmp    11ae <next_input+0xae>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
je     1302 <next_input+0x202>
movq   $0x0,-0x8(%rbp)
jmp    13e3 <next_input+0x2e3>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
je     1317 <next_input+0x217>
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
jmp    13be <next_input+0x2be>
mov    -0x20(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x33(%rbp)
je     1373 <next_input+0x273>
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x33(%rbp)
je     1373 <next_input+0x273>
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x33(%rbp)
je     1373 <next_input+0x273>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
setne  %al
mov    %al,-0x33(%rbp)
mov    -0x33(%rbp),%al
test   $0x1,%al
jne    1383 <next_input+0x283>
jmp    1394 <next_input+0x294>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1324 <next_input+0x224>
mov    -0x20(%rbp),%rax
cmp    -0x28(%rbp),%rax
jne    13b9 <next_input+0x2b9>
cmpl   $0x0,-0x18(%rbp)
jne    13b9 <next_input+0x2b9>
movq   $0x0,-0x8(%rbp)
jmp    13e3 <next_input+0x2e3>
jmp    13be <next_input+0x2be>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x0,(%rax)
mov    -0x20(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<next_input>:
mov    (%rdi),%rcx
jmp    1114 <next_input+0x14>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rcx
movzbl (%rcx),%eax
cmp    $0x20,%al
je     1110 <next_input+0x10>
cmp    $0x9,%al
je     1110 <next_input+0x10>
test   %esi,%esi
je     112b <next_input+0x2b>
cmp    $0x23,%al
je     11f4 <next_input+0xf4>
cmp    $0x22,%al
jne    11b5 <next_input+0xb5>
add    $0x1,%rcx
mov    %rcx,%r9
mov    %rcx,%rsi
jmp    114a <next_input+0x4a>
nop
add    $0x1,%r9
mov    %dl,(%rsi)
add    $0x1,%rsi
movzbl (%r9),%edx
cmp    $0x5b,%dl
jle    1170 <next_input+0x70>
cmp    $0x5c,%dl
jne    1140 <next_input+0x40>
movzbl 0x1(%r9),%edx
cmp    $0x73,%dl
jg     1190 <next_input+0x90>
cmp    $0x6e,%dl
jne    1199 <next_input+0x99>
mov    $0xa,%al
jmp    11a9 <next_input+0xa9>
nopl   0x0(%rax,%rax,1)
test   %dl,%dl
je     11f4 <next_input+0xf4>
mov    $0x0,%eax
cmp    $0xa,%dl
je     11f6 <next_input+0xf6>
cmp    $0x22,%dl
jne    1140 <next_input+0x40>
jmp    11f7 <next_input+0xf7>
nopl   0x0(%rax)
mov    $0x9,%al
cmp    $0x74,%dl
je     11a9 <next_input+0xa9>
jmp    11a7 <next_input+0xa7>
test   %dl,%dl
je     11f4 <next_input+0xf4>
mov    $0x0,%eax
cmp    $0xa,%dl
je     11f6 <next_input+0xf6>
mov    %edx,%eax
mov    %al,(%rsi)
add    $0x2,%r9
add    $0x1,%rsi
jmp    114a <next_input+0x4a>
xor    %r8d,%r8d
movabs $0x100000601,%rsi
jmp    11da <next_input+0xda>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl 0x1(%rcx,%r8,1),%eax
add    $0x1,%r8
cmp    $0x20,%al
ja     11d0 <next_input+0xd0>
movzbl %al,%eax
bt     %rax,%rsi
jae    11d0 <next_input+0xd0>
lea    (%rcx,%r8,1),%r9
test   %edx,%edx
jne    11ff <next_input+0xff>
test   %r8,%r8
jne    11ff <next_input+0xff>
xor    %eax,%eax
ret
cmp    %r9,%rsi
je     11ff <next_input+0xff>
movb   $0x0,(%rsi)
movb   $0x0,(%r9)
add    $0x1,%r9
mov    %r9,(%rdi)
mov    %rcx,%rax
ret

LLVM IR (-O0):
define i8* @next_input(i8** %0, i32 %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i8**
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i8*
store i8** %0, i8*** %5
store i32 %1, i32* %6
store i32 %2, i32* %7
%11 = load i8**, i8*** %5
%12 = load i8*, i8** %11
store i8* %12, i8** %8
br label %13
13: ; preds = %25, %3
%14 = load i8*, i8** %8
%15 = load i8, i8* %14
%16 = sext i8 %15 to i32
%17 = icmp eq i32 %16, 32
br i1 %17, label %23, label %18
18: ; preds = %13
%19 = load i8*, i8** %8
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp eq i32 %21, 9
br label %23
23: ; preds = %18, %13
%24 = phi i1 [ true, %13 ], [ %22, %18 ]
br i1 %24, label %25, label %28
25: ; preds = %23
%26 = load i8*, i8** %8
%27 = getelementptr inbounds i8, i8* %26, i32 1
store i8* %27, i8** %8
br label %13
28: ; preds = %23
%29 = load i32, i32* %6
%30 = icmp ne i32 %29, 0
br i1 %30, label %31, label %37
31: ; preds = %28
%32 = load i8*, i8** %8
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp eq i32 %34, 35
br i1 %35, label %36, label %37
36: ; preds = %31
store i8* null, i8** %4
br label %170
37: ; preds = %31, %28
%38 = load i8*, i8** %8
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %40, 34
br i1 %41, label %42, label %128
42: ; preds = %37
%43 = load i8*, i8** %8
%44 = getelementptr inbounds i8, i8* %43, i32 1
store i8* %44, i8** %8
store i8* %44, i8** %9
%45 = load i8*, i8** %8
store i8* %45, i8** %10
br label %46
46: ; preds = %114, %42
%47 = load i8*, i8** %8
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = icmp ne i32 %49, 34
br i1 %50, label %51, label %61
51: ; preds = %46
%52 = load i8*, i8** %8
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = icmp ne i32 %54, 0
br i1 %55, label %56, label %61
56: ; preds = %51
%57 = load i8*, i8** %8
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = icmp ne i32 %59, 10
br label %61
61: ; preds = %56, %51, %46
%62 = phi i1 [ false, %51 ], [ false, %46 ], [ %60, %56 ]
br i1 %62, label %63, label %115
63: ; preds = %61
%64 = load i8*, i8** %8
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = icmp eq i32 %66, 92
br i1 %67, label %68, label %108
68: ; preds = %63
%69 = load i8*, i8** %8
%70 = getelementptr inbounds i8, i8* %69, i64 1
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = icmp eq i32 %72, 10
br i1 %73, label %80, label %74
74: ; preds = %68
%75 = load i8*, i8** %8
%76 = getelementptr inbounds i8, i8* %75, i64 1
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = icmp eq i32 %78, 0
br i1 %79, label %80, label %81
80: ; preds = %74, %68
store i8* null, i8** %4
br label %170
81: ; preds = %74
%82 = load i8*, i8** %8
%83 = getelementptr inbounds i8, i8* %82, i32 1
store i8* %83, i8** %8
%84 = load i8*, i8** %8
%85 = load i8, i8* %84
%86 = sext i8 %85 to i32
%87 = icmp eq i32 %86, 116
br i1 %87, label %88, label %91
88: ; preds = %81
%89 = load i8*, i8** %10
%90 = getelementptr inbounds i8, i8* %89, i32 1
store i8* %90, i8** %10
store i8 9, i8* %89
br label %105
91: ; preds = %81
%92 = load i8*, i8** %8
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = icmp eq i32 %94, 110
br i1 %95, label %96, label %99
96: ; preds = %91
%97 = load i8*, i8** %10
%98 = getelementptr inbounds i8, i8* %97, i32 1
store i8* %98, i8** %10
store i8 10, i8* %97
br label %104
99: ; preds = %91
%100 = load i8*, i8** %8
%101 = load i8, i8* %100
%102 = load i8*, i8** %10
%103 = getelementptr inbounds i8, i8* %102, i32 1
store i8* %103, i8** %10
store i8 %101, i8* %102
br label %104
104: ; preds = %99, %96
br label %105
105: ; preds = %104, %88
%106 = load i8*, i8** %8
%107 = getelementptr inbounds i8, i8* %106, i32 1
store i8* %107, i8** %8
br label %114
108: ; preds = %63
%109 = load i8*, i8** %8
%110 = getelementptr inbounds i8, i8* %109, i32 1
store i8* %110, i8** %8
%111 = load i8, i8* %109
%112 = load i8*, i8** %10
%113 = getelementptr inbounds i8, i8* %112, i32 1
store i8* %113, i8** %10
store i8 %111, i8* %112
br label %114
114: ; preds = %108, %105
br label %46
115: ; preds = %61
%116 = load i8*, i8** %8
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = icmp ne i32 %118, 34
br i1 %119, label %120, label %121
120: ; preds = %115
store i8* null, i8** %4
br label %170
121: ; preds = %115
%122 = load i8*, i8** %10
%123 = load i8*, i8** %8
%124 = icmp ne i8* %122, %123
br i1 %124, label %125, label %127
125: ; preds = %121
%126 = load i8*, i8** %10
store i8 0, i8* %126
br label %127
127: ; preds = %125, %121
br label %164
128: ; preds = %37
%129 = load i8*, i8** %8
store i8* %129, i8** %9
br label %130
130: ; preds = %152, %128
%131 = load i8*, i8** %8
%132 = load i8, i8* %131
%133 = sext i8 %132 to i32
%134 = icmp ne i32 %133, 0
br i1 %134, label %135, label %150
135: ; preds = %130
%136 = load i8*, i8** %8
%137 = load i8, i8* %136
%138 = sext i8 %137 to i32
%139 = icmp ne i32 %138, 10
br i1 %139, label %140, label %150
140: ; preds = %135
%141 = load i8*, i8** %8
%142 = load i8, i8* %141
%143 = sext i8 %142 to i32
%144 = icmp ne i32 %143, 32
br i1 %144, label %145, label %150
145: ; preds = %140
%146 = load i8*, i8** %8
%147 = load i8, i8* %146
%148 = sext i8 %147 to i32
%149 = icmp ne i32 %148, 9
br label %150
150: ; preds = %145, %140, %135, %130
%151 = phi i1 [ false, %140 ], [ false, %135 ], [ false, %130 ], [ %149, %145 ]
br i1 %151, label %152, label %155
152: ; preds = %150
%153 = load i8*, i8** %8
%154 = getelementptr inbounds i8, i8* %153, i32 1
store i8* %154, i8** %8
br label %130
155: ; preds = %150
%156 = load i8*, i8** %8
%157 = load i8*, i8** %9
%158 = icmp eq i8* %156, %157
br i1 %158, label %159, label %163
159: ; preds = %155
%160 = load i32, i32* %7
%161 = icmp ne i32 %160, 0
br i1 %161, label %163, label %162
162: ; preds = %159
store i8* null, i8** %4
br label %170
163: ; preds = %159, %155
br label %164
164: ; preds = %163, %127
%165 = load i8*, i8** %8
%166 = getelementptr inbounds i8, i8* %165, i32 1
store i8* %166, i8** %8
store i8 0, i8* %165
%167 = load i8*, i8** %8
%168 = load i8**, i8*** %5
store i8* %167, i8** %168
%169 = load i8*, i8** %9
store i8* %169, i8** %4
br label %170
170: ; preds = %164, %162, %120, %80, %36
%171 = load i8*, i8** %4
ret i8* %171
}

LLVM IR (-O2):
define i8* @next_input(i8** nocapture %0, i32 %1, i32 %2) {
%4 = load i8*, i8** %0
br label %5
5: ; preds = %8, %3
%6 = phi i8* [ %4, %3 ], [ %9, %8 ]
%7 = load i8, i8* %6
switch i8 %7, label %10 [
i8 32, label %8
i8 9, label %8
]
8: ; preds = %5, %5
%9 = getelementptr inbounds i8, i8* %6, i64 1
br label %5
10: ; preds = %5
%11 = icmp ne i32 %1, 0
%12 = icmp eq i8 %7, 35
%13 = select i1 %11, i1 %12, i1 false
br i1 %13, label %52, label %14
14: ; preds = %10
%15 = icmp eq i8 %7, 34
br i1 %15, label %16, label %38
16: ; preds = %14
%17 = getelementptr inbounds i8, i8* %6, i64 1
br label %18
18: ; preds = %32, %16
%19 = phi i8* [ %17, %16 ], [ %33, %32 ]
%20 = phi i8* [ %17, %16 ], [ %34, %32 ]
%21 = load i8, i8* %19
switch i8 %21, label %30 [
i8 92, label %22
i8 34, label %35
i8 0, label %52
i8 10, label %52
]
22: ; preds = %18
%23 = getelementptr inbounds i8, i8* %19, i64 1
%24 = load i8, i8* %23
switch i8 %24, label %26 [
i8 10, label %52
i8 0, label %52
i8 116, label %27
i8 110, label %25
]
25: ; preds = %22
br label %27
26: ; preds = %22
br label %27
27: ; preds = %22, %25, %26
%28 = phi i8 [ 10, %25 ], [ %24, %26 ], [ 9, %22 ]
store i8 %28, i8* %20
%29 = getelementptr inbounds i8, i8* %19, i64 2
br label %32
30: ; preds = %18
%31 = getelementptr inbounds i8, i8* %19, i64 1
store i8 %21, i8* %20
br label %32
32: ; preds = %30, %27
%33 = phi i8* [ %29, %27 ], [ %31, %30 ]
%34 = getelementptr inbounds i8, i8* %20, i64 1
br label %18
35: ; preds = %18
%36 = icmp eq i8* %20, %19
br i1 %36, label %48, label %37
37: ; preds = %35
store i8 0, i8* %20
br label %48
38: ; preds = %14, %41
%39 = phi i8 [ %43, %41 ], [ %7, %14 ]
%40 = phi i8* [ %42, %41 ], [ %6, %14 ]
switch i8 %39, label %41 [
i8 0, label %44
i8 10, label %44
i8 32, label %44
i8 9, label %44
]
41: ; preds = %38
%42 = getelementptr inbounds i8, i8* %40, i64 1
%43 = load i8, i8* %42
br label %38
44: ; preds = %38, %38, %38, %38
%45 = icmp ne i8* %40, %6
%46 = icmp ne i32 %2, 0
%47 = or i1 %46, %45
br i1 %47, label %48, label %52
48: ; preds = %37, %35, %44
%49 = phi i8* [ %40, %44 ], [ %19, %35 ], [ %19, %37 ]
%50 = phi i8* [ %6, %44 ], [ %17, %35 ], [ %17, %37 ]
%51 = getelementptr inbounds i8, i8* %49, i64 1
store i8 0, i8* %49
store i8* %51, i8** %0
br label %52
52: ; preds = %18, %18, %22, %22, %44, %10, %48
%53 = phi i8* [ %50, %48 ], [ null, %10 ], [ null, %44 ], [ null, %22 ], [ null, %22 ], [ null, %18 ], [ null, %18 ]
ret i8* %53
}