#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 */
int /*<<< orphan*/ NJ_is_number(char);
int strlen(char *);
int NJ_is_distance(char *token) {
  int i;
  char c;
  int exponent_state;
  int expsign_state;
  int dpoint_state;
  if (!token) {
    return (0);
  }
  exponent_state = 0;
  expsign_state = 0;
  dpoint_state = 0;
  c = token[0];
  if (!NJ_is_number(c) && c != '.' && c != '-' && c != '+') {
    goto BAD;
  }
  if (strlen(token) == 1) {
    if (!NJ_is_number(c)) {
      goto BAD;
    }
  }
  for (i = 0; i < strlen(token); i++) {
    c = token[i];
    if (!NJ_is_number(c) && c != '.' && c != '-' && c != '+' && c != 'e' &&
        c != 'E') {
      goto BAD;
    }
    if (i > 0 && !exponent_state) {
      if (c == '-' || c == '+') {
        goto BAD;
      }
    }
    if (exponent_state && expsign_state) {
      if (c == '-' || c == '+') {
        goto BAD;
      }
    }
    if (exponent_state) {
      if (c == '.') {
        goto BAD;
      }
    }
    if (exponent_state) {
      if (c == 'e' || c == 'E') {
        goto BAD;
      }
    }
    if (dpoint_state) {
      if (c == '.') {
        goto BAD;
      }
    }
    if (!exponent_state) {
      if (c == 'e' || c == 'E') {
        exponent_state = 1;
      }
    }
    if (exponent_state && !expsign_state) {
      if (c == '-' || c == '+') {
        expsign_state = 1;
      }
    }
    if (!dpoint_state) {
      if (c == '.') {
        dpoint_state = 1;
      }
    }
  }
  if (!NJ_is_number(token[strlen(token) - 1])) {
    goto BAD;
  }
  return (1);
BAD:
  return (0);
}


x86 assembly (clang, -O0):
<NJ_is_distance>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1143 <NJ_is_distance+0x23>
movl   $0x0,-0x4(%rbp)
jmp    141d <NJ_is_distance+0x2fd>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x15(%rbp)
movsbl -0x15(%rbp),%edi
call   1030 <NJ_is_number@plt>
cmp    $0x0,%eax
jne    119f <NJ_is_distance+0x7f>
movsbl -0x15(%rbp),%eax
cmp    $0x2e,%eax
je     119f <NJ_is_distance+0x7f>
movsbl -0x15(%rbp),%eax
cmp    $0x2d,%eax
je     119f <NJ_is_distance+0x7f>
movsbl -0x15(%rbp),%eax
cmp    $0x2b,%eax
je     119f <NJ_is_distance+0x7f>
jmp    1416 <NJ_is_distance+0x2f6>
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
cmp    $0x1,%eax
jne    11cd <NJ_is_distance+0xad>
movsbl -0x15(%rbp),%edi
call   1030 <NJ_is_number@plt>
cmp    $0x0,%eax
jne    11c8 <NJ_is_distance+0xa8>
jmp    1416 <NJ_is_distance+0x2f6>
jmp    11cd <NJ_is_distance+0xad>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x28(%rbp),%eax
cmp    %ecx,%eax
jge    13d6 <NJ_is_distance+0x2b6>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x15(%rbp)
movsbl -0x15(%rbp),%edi
call   1030 <NJ_is_number@plt>
cmp    $0x0,%eax
jne    1256 <NJ_is_distance+0x136>
movsbl -0x15(%rbp),%eax
cmp    $0x2e,%eax
je     1256 <NJ_is_distance+0x136>
movsbl -0x15(%rbp),%eax
cmp    $0x2d,%eax
je     1256 <NJ_is_distance+0x136>
movsbl -0x15(%rbp),%eax
cmp    $0x2b,%eax
je     1256 <NJ_is_distance+0x136>
movsbl -0x15(%rbp),%eax
cmp    $0x65,%eax
je     1256 <NJ_is_distance+0x136>
movsbl -0x15(%rbp),%eax
cmp    $0x45,%eax
je     1256 <NJ_is_distance+0x136>
jmp    1416 <NJ_is_distance+0x2f6>
cmpl   $0x0,-0x14(%rbp)
jle    128e <NJ_is_distance+0x16e>
cmpl   $0x0,-0x1c(%rbp)
jne    128e <NJ_is_distance+0x16e>
movsbl -0x15(%rbp),%eax
cmp    $0x2d,%eax
je     1284 <NJ_is_distance+0x164>
movsbl -0x15(%rbp),%eax
cmp    $0x2b,%eax
jne    1289 <NJ_is_distance+0x169>
jmp    1416 <NJ_is_distance+0x2f6>
jmp    128e <NJ_is_distance+0x16e>
cmpl   $0x0,-0x1c(%rbp)
je     12c6 <NJ_is_distance+0x1a6>
cmpl   $0x0,-0x20(%rbp)
je     12c6 <NJ_is_distance+0x1a6>
movsbl -0x15(%rbp),%eax
cmp    $0x2d,%eax
je     12bc <NJ_is_distance+0x19c>
movsbl -0x15(%rbp),%eax
cmp    $0x2b,%eax
jne    12c1 <NJ_is_distance+0x1a1>
jmp    1416 <NJ_is_distance+0x2f6>
jmp    12c6 <NJ_is_distance+0x1a6>
cmpl   $0x0,-0x1c(%rbp)
je     12e7 <NJ_is_distance+0x1c7>
movsbl -0x15(%rbp),%eax
cmp    $0x2e,%eax
jne    12e2 <NJ_is_distance+0x1c2>
jmp    1416 <NJ_is_distance+0x2f6>
jmp    12e7 <NJ_is_distance+0x1c7>
cmpl   $0x0,-0x1c(%rbp)
je     1315 <NJ_is_distance+0x1f5>
movsbl -0x15(%rbp),%eax
cmp    $0x65,%eax
je     130b <NJ_is_distance+0x1eb>
movsbl -0x15(%rbp),%eax
cmp    $0x45,%eax
jne    1310 <NJ_is_distance+0x1f0>
jmp    1416 <NJ_is_distance+0x2f6>
jmp    1315 <NJ_is_distance+0x1f5>
cmpl   $0x0,-0x24(%rbp)
je     1336 <NJ_is_distance+0x216>
movsbl -0x15(%rbp),%eax
cmp    $0x2e,%eax
jne    1331 <NJ_is_distance+0x211>
jmp    1416 <NJ_is_distance+0x2f6>
jmp    1336 <NJ_is_distance+0x216>
cmpl   $0x0,-0x1c(%rbp)
jne    1366 <NJ_is_distance+0x246>
movsbl -0x15(%rbp),%eax
cmp    $0x65,%eax
je     135a <NJ_is_distance+0x23a>
movsbl -0x15(%rbp),%eax
cmp    $0x45,%eax
jne    1361 <NJ_is_distance+0x241>
movl   $0x1,-0x1c(%rbp)
jmp    1366 <NJ_is_distance+0x246>
cmpl   $0x0,-0x1c(%rbp)
je     13a0 <NJ_is_distance+0x280>
cmpl   $0x0,-0x20(%rbp)
jne    13a0 <NJ_is_distance+0x280>
movsbl -0x15(%rbp),%eax
cmp    $0x2d,%eax
je     1394 <NJ_is_distance+0x274>
movsbl -0x15(%rbp),%eax
cmp    $0x2b,%eax
jne    139b <NJ_is_distance+0x27b>
movl   $0x1,-0x20(%rbp)
jmp    13a0 <NJ_is_distance+0x280>
cmpl   $0x0,-0x24(%rbp)
jne    13c3 <NJ_is_distance+0x2a3>
movsbl -0x15(%rbp),%eax
cmp    $0x2e,%eax
jne    13be <NJ_is_distance+0x29e>
movl   $0x1,-0x24(%rbp)
jmp    13c3 <NJ_is_distance+0x2a3>
jmp    13c8 <NJ_is_distance+0x2a8>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11d4 <NJ_is_distance+0xb4>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x30(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <NJ_is_number@plt>
cmp    $0x0,%eax
jne    140a <NJ_is_distance+0x2ea>
jmp    1416 <NJ_is_distance+0x2f6>
movl   $0x1,-0x4(%rbp)
jmp    141d <NJ_is_distance+0x2fd>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<NJ_is_distance>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %eax,%eax
test   %rdi,%rdi
je     12ef <NJ_is_distance+0x1cf>
mov    %rdi,%r12
mov    (%rdi),%bl
movsbl %bl,%ebp
mov    %ebp,%edi
call   1030 <NJ_is_number@plt>
test   %eax,%eax
jne    1169 <NJ_is_distance+0x49>
cmp    $0x2e,%bl
ja     12ed <NJ_is_distance+0x1cd>
movzbl %bl,%eax
movabs $0x680000000000,%rcx
bt     %rax,%rcx
jae    12ed <NJ_is_distance+0x1cd>
mov    %r12,%rdi
call   1040 <strlen@plt>
cmp    $0x1,%eax
jne    1185 <NJ_is_distance+0x65>
mov    %ebp,%edi
call   1030 <NJ_is_number@plt>
test   %eax,%eax
je     12ed <NJ_is_distance+0x1cd>
mov    %r12,%rdi
call   1040 <strlen@plt>
test   %eax,%eax
jle    12cd <NJ_is_distance+0x1ad>
xor    %ebp,%ebp
xor    %r13d,%r13d
xor    %ebx,%ebx
xor    %r14d,%r14d
jmp    11dd <NJ_is_distance+0xbd>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    $0x2e,%r15b
mov    %r13d,%eax
mov    $0x1,%ecx
cmove  %ecx,%eax
test   %r13d,%r13d
cmove  %eax,%r13d
add    $0x1,%rbp
mov    %r12,%rdi
call   1040 <strlen@plt>
cltq
cmp    %rax,%rbp
jge    12cd <NJ_is_distance+0x1ad>
movzbl (%r12,%rbp,1),%r15d
movsbl %r15b,%edi
call   1030 <NJ_is_number@plt>
test   %eax,%eax
jne    1212 <NJ_is_distance+0xf2>
lea    -0x2b(%r15),%eax
cmp    $0x3a,%al
ja     12ed <NJ_is_distance+0x1cd>
movzbl %al,%eax
movabs $0x40000000400000d,%rcx
bt     %rax,%rcx
jae    12ed <NJ_is_distance+0x1cd>
test   %rbp,%rbp
je     1230 <NJ_is_distance+0x110>
test   %r14d,%r14d
jne    1230 <NJ_is_distance+0x110>
cmp    $0x2b,%r15b
je     12ed <NJ_is_distance+0x1cd>
cmp    $0x2d,%r15b
je     12ed <NJ_is_distance+0x1cd>
test   %ebx,%ebx
setne  %r8b
test   %r14d,%r14d
je     1253 <NJ_is_distance+0x133>
test   %ebx,%ebx
je     1253 <NJ_is_distance+0x133>
cmp    $0x2b,%r15b
je     12ed <NJ_is_distance+0x1cd>
cmp    $0x2d,%r15b
je     12ed <NJ_is_distance+0x1cd>
test   %r14d,%r14d
je     1262 <NJ_is_distance+0x142>
cmp    $0x2e,%r15b
je     12ed <NJ_is_distance+0x1cd>
cmp    $0x2e,%r15b
sete   %dl
test   %r14d,%r14d
setne  %dil
mov    %r15d,%ecx
and    $0xdf,%cl
cmp    $0x45,%cl
mov    %ebx,%esi
sete   %bl
test   %r13d,%r13d
setne  %al
test   %bl,%dil
jne    12ed <NJ_is_distance+0x1cd>
and    %dl,%al
jne    12ed <NJ_is_distance+0x1cd>
mov    %esi,%ebx
test   %r14d,%r14d
mov    $0x1,%r14d
jne    12b0 <NJ_is_distance+0x190>
xor    %r14d,%r14d
cmp    $0x45,%cl
sete   %r14b
setne  %al
test   %ebx,%ebx
setne  %r8b
or     %al,%r8b
lea    -0x2b(%r15),%eax
xor    %ecx,%ecx
test   $0xfd,%al
sete   %al
test   %r8b,%r8b
jne    11b0 <NJ_is_distance+0x90>
mov    %al,%cl
mov    %ecx,%ebx
jmp    11b0 <NJ_is_distance+0x90>
mov    %r12,%rdi
call   1040 <strlen@plt>
cltq
movsbl -0x1(%rax,%r12,1),%edi
call   1030 <NJ_is_number@plt>
mov    %eax,%ecx
mov    $0x1,%eax
test   %ecx,%ecx
jne    12ef <NJ_is_distance+0x1cf>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @NJ_is_distance(i8* %0) {
%2 = icmp eq i8* %0, null
br i1 %2, label %77, label %3
3: ; preds = %1
%4 = load i8, i8* %0
%5 = tail call i32 @NJ_is_number(i8 signext %4)
%6 = freeze i32 %5
%7 = icmp eq i32 %6, 0
br i1 %7, label %8, label %9
8: ; preds = %3
switch i8 %4, label %76 [
i8 46, label %9
i8 45, label %9
i8 43, label %9
]
9: ; preds = %8, %8, %8, %3
%10 = tail call i32 @strlen(i8* %0)
%11 = icmp eq i32 %10, 1
br i1 %11, label %12, label %15
12: ; preds = %9
%13 = tail call i32 @NJ_is_number(i8 signext %4)
%14 = icmp eq i32 %13, 0
br i1 %14, label %76, label %15
15: ; preds = %12, %9
%16 = tail call i32 @strlen(i8* %0)
%17 = icmp sgt i32 %16, 0
br i1 %17, label %18, label %68
18: ; preds = %15, %53
%19 = phi i64 [ %64, %53 ], [ 0, %15 ]
%20 = phi i32 [ %63, %53 ], [ 0, %15 ]
%21 = phi i32 [ %60, %53 ], [ 0, %15 ]
%22 = phi i32 [ %55, %53 ], [ 0, %15 ]
%23 = getelementptr inbounds i8, i8* %0, i64 %19
%24 = load i8, i8* %23
%25 = tail call i32 @NJ_is_number(i8 signext %24)
%26 = freeze i32 %25
%27 = icmp eq i32 %26, 0
br i1 %27, label %28, label %29
28: ; preds = %18
switch i8 %24, label %76 [
i8 101, label %29
i8 69, label %29
i8 46, label %29
i8 45, label %29
i8 43, label %29
]
29: ; preds = %28, %28, %28, %28, %28, %18
%30 = icmp eq i64 %19, 0
%31 = icmp ne i32 %22, 0
%32 = or i1 %30, %31
br i1 %32, label %34, label %33
33: ; preds = %29
switch i8 %24, label %34 [
i8 45, label %76
i8 43, label %76
]
34: ; preds = %33, %29
%35 = icmp ne i32 %21, 0
%36 = select i1 %31, i1 %35, i1 false
br i1 %36, label %37, label %38
37: ; preds = %34
switch i8 %24, label %38 [
i8 45, label %76
i8 43, label %76
]
38: ; preds = %37, %34
%39 = icmp eq i8 %24, 46
%40 = and i1 %31, %39
br i1 %40, label %76, label %41
41: ; preds = %38
%42 = and i8 %24, -33
%43 = icmp eq i8 %42, 69
%44 = and i1 %31, %43
%45 = icmp ne i32 %20, 0
%46 = and i1 %45, %39
%47 = select i1 %44, i1 true, i1 %46
br i1 %47, label %76, label %48
48: ; preds = %41
br i1 %31, label %53, label %49
49: ; preds = %48
%50 = xor i1 %43, true
%51 = select i1 %50, i1 true, i1 %35
%52 = zext i1 %43 to i32
br label %53
53: ; preds = %49, %48
%54 = phi i1 [ %35, %48 ], [ %51, %49 ]
%55 = phi i32 [ 1, %48 ], [ %52, %49 ]
%56 = icmp eq i8 %24, 45
%57 = icmp eq i8 %24, 43
%58 = or i1 %56, %57
%59 = zext i1 %58 to i32
%60 = select i1 %54, i32 %21, i32 %59
%61 = icmp eq i32 %20, 0
%62 = and i1 %61, %39
%63 = select i1 %62, i32 1, i32 %20
%64 = add nuw nsw i64 %19, 1
%65 = tail call i32 @strlen(i8* %0)
%66 = sext i32 %65 to i64
%67 = icmp slt i64 %64, %66
br i1 %67, label %18, label %68
68: ; preds = %53, %15
%69 = tail call i32 @strlen(i8* %0)
%70 = add nsw i32 %69, -1
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i8, i8* %0, i64 %71
%73 = load i8, i8* %72
%74 = tail call i32 @NJ_is_number(i8 signext %73)
%75 = icmp eq i32 %74, 0
br i1 %75, label %76, label %77
76: ; preds = %41, %37, %37, %33, %33, %28, %38, %8, %68, %12
br label %77
77: ; preds = %68, %1, %76
%78 = phi i32 [ 0, %76 ], [ 0, %1 ], [ 1, %68 ]
ret i32 %78
}