; LLVM IR from ABRG-Models/morphologica :: buildtools (incbin)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [62 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [16 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca [4096 x i8], align 16
  %12 = alloca [64 x [4096 x i8]], align 16
  %13 = alloca [4096 x i8], align 16
  %14 = alloca [1024 x [4096 x i8]], align 16
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i8, align 1
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  store i32 0, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4096, ptr %11) #9
  call void @llvm.memset.p0.i64(ptr align 16 %11, i8 0, i64 4096, i1 false)
  %33 = getelementptr inbounds [4096 x i8], ptr %11, i32 0, i32 0
  store i8 100, ptr %33, align 16
  %34 = getelementptr inbounds [4096 x i8], ptr %11, i32 0, i32 1
  store i8 97, ptr %34, align 1
  %35 = getelementptr inbounds [4096 x i8], ptr %11, i32 0, i32 2
  store i8 116, ptr %35, align 2
  %36 = getelementptr inbounds [4096 x i8], ptr %11, i32 0, i32 3
  store i8 97, ptr %36, align 1
  %37 = getelementptr inbounds [4096 x i8], ptr %11, i32 0, i32 4
  store i8 46, ptr %37, align 4
  %38 = getelementptr inbounds [4096 x i8], ptr %11, i32 0, i32 5
  store i8 99, ptr %38, align 1
  call void @llvm.lifetime.start.p0(i64 262144, ptr %12) #9
  call void @llvm.lifetime.start.p0(i64 4096, ptr %13) #9
  call void @llvm.memset.p0.i64(ptr align 16 %13, i8 0, i64 4096, i1 false)
  %39 = getelementptr inbounds [4096 x i8], ptr %13, i32 0, i32 0
  store i8 103, ptr %39, align 16
  call void @llvm.lifetime.start.p0(i64 4194304, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  store ptr null, ptr %15, align 8, !tbaa !9
  %40 = load i32, ptr %4, align 4, !tbaa !5
  %41 = add nsw i32 %40, -1
  store i32 %41, ptr %4, align 4, !tbaa !5
  %42 = load ptr, ptr %5, align 8, !tbaa !9
  %43 = getelementptr inbounds ptr, ptr %42, i32 1
  store ptr %43, ptr %5, align 8, !tbaa !9
  %44 = load i32, ptr %4, align 4, !tbaa !5
  %45 = icmp eq i32 %44, 0
  br i1 %45, label %46, label %76

46:                                               ; preds = %2
  br label %47

47:                                               ; preds = %278, %268, %46
  %48 = load ptr, ptr @stderr, align 8, !tbaa !9
  %49 = load ptr, ptr %5, align 8, !tbaa !9
  %50 = getelementptr inbounds ptr, ptr %49, i64 -1
  %51 = load ptr, ptr %50, align 8, !tbaa !9
  %52 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef @.str, ptr noundef %51) #9
  %53 = load ptr, ptr @stderr, align 8, !tbaa !9
  %54 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %53, ptr noundef @.str.1) #9
  %55 = load ptr, ptr @stderr, align 8, !tbaa !9
  %56 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %55, ptr noundef @.str.2) #9
  %57 = load ptr, ptr @stderr, align 8, !tbaa !9
  %58 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %57, ptr noundef @.str.3) #9
  %59 = load ptr, ptr @stderr, align 8, !tbaa !9
  %60 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %59, ptr noundef @.str.4) #9
  %61 = load ptr, ptr @stderr, align 8, !tbaa !9
  %62 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef @.str.5) #9
  %63 = load ptr, ptr @stderr, align 8, !tbaa !9
  %64 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %63, ptr noundef @.str.6) #9
  %65 = load ptr, ptr @stderr, align 8, !tbaa !9
  %66 = load ptr, ptr %5, align 8, !tbaa !9
  %67 = getelementptr inbounds ptr, ptr %66, i64 -1
  %68 = load ptr, ptr %67, align 8, !tbaa !9
  %69 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %65, ptr noundef @.str.7, ptr noundef %68) #9
  %70 = load ptr, ptr @stderr, align 8, !tbaa !9
  %71 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %70, ptr noundef @.str.8) #9
  %72 = load ptr, ptr @stderr, align 8, !tbaa !9
  %73 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef @.str.9) #9
  %74 = load ptr, ptr @stderr, align 8, !tbaa !9
  %75 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %74, ptr noundef @.str.10) #9
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %618

76:                                               ; preds = %2
  store i32 0, ptr %7, align 4, !tbaa !5
  store i32 0, ptr %8, align 4, !tbaa !5
  br label %77

77:                                               ; preds = %303, %76
  %78 = load i32, ptr %7, align 4, !tbaa !5
  %79 = load i32, ptr %4, align 4, !tbaa !5
  %80 = icmp slt i32 %78, %79
  br i1 %80, label %81, label %306

81:                                               ; preds = %77
  %82 = load ptr, ptr %5, align 8, !tbaa !9
  %83 = load i32, ptr %7, align 4, !tbaa !5
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds ptr, ptr %82, i64 %84
  %86 = load ptr, ptr %85, align 8, !tbaa !9
  %87 = call i32 @strcmp(ptr noundef %86, ptr noundef @.str.11) #10
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %122, label %89

89:                                               ; preds = %81
  %90 = load i32, ptr %7, align 4, !tbaa !5
  %91 = add nsw i32 %90, 1
  %92 = load i32, ptr %4, align 4, !tbaa !5
  %93 = icmp slt i32 %91, %92
  br i1 %93, label %94, label %121

94:                                               ; preds = %89
  %95 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %96 = load ptr, ptr %5, align 8, !tbaa !9
  %97 = load i32, ptr %7, align 4, !tbaa !5
  %98 = add nsw i32 %97, 1
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds ptr, ptr %96, i64 %99
  %101 = load ptr, ptr %100, align 8, !tbaa !9
  %102 = call ptr @strcpy(ptr noundef %95, ptr noundef %101) #9
  %103 = load ptr, ptr %5, align 8, !tbaa !9
  %104 = load i32, ptr %7, align 4, !tbaa !5
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds ptr, ptr %103, i64 %105
  %107 = getelementptr inbounds ptr, ptr %106, i64 1
  %108 = load ptr, ptr %5, align 8, !tbaa !9
  %109 = load i32, ptr %7, align 4, !tbaa !5
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds ptr, ptr %108, i64 %110
  %112 = getelementptr inbounds ptr, ptr %111, i64 2
  %113 = load i32, ptr %4, align 4, !tbaa !5
  %114 = load i32, ptr %7, align 4, !tbaa !5
  %115 = sub nsw i32 %113, %114
  %116 = sub nsw i32 %115, 2
  %117 = sext i32 %116 to i64
  %118 = mul i64 %117, 8
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %107, ptr align 8 %112, i64 %118, i1 false)
  %119 = load i32, ptr %4, align 4, !tbaa !5
  %120 = add nsw i32 %119, -1
  store i32 %120, ptr %4, align 4, !tbaa !5
  br label %303

121:                                              ; preds = %89
  br label %302

122:                                              ; preds = %81
  %123 = load ptr, ptr %5, align 8, !tbaa !9
  %124 = load i32, ptr %7, align 4, !tbaa !5
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds ptr, ptr %123, i64 %125
  %127 = load ptr, ptr %126, align 8, !tbaa !9
  %128 = call i32 @strcmp(ptr noundef %127, ptr noundef @.str.12) #10
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %203, label %130

130:                                              ; preds = %122
  %131 = load ptr, ptr %5, align 8, !tbaa !9
  %132 = load i32, ptr %7, align 4, !tbaa !5
  %133 = add nsw i32 %132, 1
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds ptr, ptr %131, i64 %134
  %136 = load ptr, ptr %135, align 8, !tbaa !9
  %137 = getelementptr inbounds i8, ptr %136, i64 0
  %138 = load i8, ptr %137, align 1, !tbaa !11
  %139 = sext i8 %138 to i32
  %140 = icmp eq i32 %139, 45
  br i1 %140, label %141, label %176

141:                                              ; preds = %130
  %142 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  store i8 0, ptr %142, align 16, !tbaa !11
  %143 = load i32, ptr %7, align 4, !tbaa !5
  %144 = add nsw i32 %143, 1
  %145 = load i32, ptr %4, align 4, !tbaa !5
  %146 = icmp slt i32 %144, %145
  br i1 %146, label %147, label %175

147:                                              ; preds = %141
  %148 = load ptr, ptr %5, align 8, !tbaa !9
  %149 = load i32, ptr %7, align 4, !tbaa !5
  %150 = add nsw i32 %149, 1
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds ptr, ptr %148, i64 %151
  %153 = load ptr, ptr %152, align 8, !tbaa !9
  %154 = call i32 @strcmp(ptr noundef %153, ptr noundef @.str.13) #10
  %155 = icmp ne i32 %154, 0
  br i1 %155, label %175, label %156

156:                                              ; preds = %147
  %157 = load ptr, ptr %5, align 8, !tbaa !9
  %158 = load i32, ptr %7, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds ptr, ptr %157, i64 %159
  %161 = getelementptr inbounds ptr, ptr %160, i64 1
  %162 = load ptr, ptr %5, align 8, !tbaa !9
  %163 = load i32, ptr %7, align 4, !tbaa !5
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds ptr, ptr %162, i64 %164
  %166 = getelementptr inbounds ptr, ptr %165, i64 2
  %167 = load i32, ptr %4, align 4, !tbaa !5
  %168 = load i32, ptr %7, align 4, !tbaa !5
  %169 = sub nsw i32 %167, %168
  %170 = sub nsw i32 %169, 2
  %171 = sext i32 %170 to i64
  %172 = mul i64 %171, 8
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %161, ptr align 8 %166, i64 %172, i1 false)
  %173 = load i32, ptr %4, align 4, !tbaa !5
  %174 = add nsw i32 %173, -1
  store i32 %174, ptr %4, align 4, !tbaa !5
  br label %175

175:                                              ; preds = %156, %147, %141
  br label %303

176:                                              ; preds = %130
  %177 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %178 = load ptr, ptr %5, align 8, !tbaa !9
  %179 = load i32, ptr %7, align 4, !tbaa !5
  %180 = add nsw i32 %179, 1
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds ptr, ptr %178, i64 %181
  %183 = load ptr, ptr %182, align 8, !tbaa !9
  %184 = call ptr @strcpy(ptr noundef %177, ptr noundef %183) #9
  %185 = load ptr, ptr %5, align 8, !tbaa !9
  %186 = load i32, ptr %7, align 4, !tbaa !5
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds ptr, ptr %185, i64 %187
  %189 = getelementptr inbounds ptr, ptr %188, i64 1
  %190 = load ptr, ptr %5, align 8, !tbaa !9
  %191 = load i32, ptr %7, align 4, !tbaa !5
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds ptr, ptr %190, i64 %192
  %194 = getelementptr inbounds ptr, ptr %193, i64 2
  %195 = load i32, ptr %4, align 4, !tbaa !5
  %196 = load i32, ptr %7, align 4, !tbaa !5
  %197 = sub nsw i32 %195, %196
  %198 = sub nsw i32 %197, 2
  %199 = sext i32 %198 to i64
  %200 = mul i64 %199, 8
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %189, ptr align 8 %194, i64 %200, i1 false)
  %201 = load i32, ptr %4, align 4, !tbaa !5
  %202 = add nsw i32 %201, -1
  store i32 %202, ptr %4, align 4, !tbaa !5
  br label %303

203:                                              ; preds = %122
  %204 = load ptr, ptr %5, align 8, !tbaa !9
  %205 = load i32, ptr %7, align 4, !tbaa !5
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds ptr, ptr %204, i64 %206
  %208 = load ptr, ptr %207, align 8, !tbaa !9
  %209 = call i32 @strncmp(ptr noundef %208, ptr noundef @.str.14, i64 noundef 2) #10
  %210 = icmp ne i32 %209, 0
  br i1 %210, label %233, label %211

211:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %212 = load ptr, ptr %5, align 8, !tbaa !9
  %213 = load i32, ptr %7, align 4, !tbaa !5
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds ptr, ptr %212, i64 %214
  %216 = load ptr, ptr %215, align 8, !tbaa !9
  %217 = getelementptr inbounds i8, ptr %216, i64 2
  store ptr %217, ptr %17, align 8, !tbaa !9
  %218 = load i32, ptr %8, align 4, !tbaa !5
  %219 = icmp sge i32 %218, 64
  br i1 %219, label %220, label %223

220:                                              ; preds = %211
  %221 = load ptr, ptr @stderr, align 8, !tbaa !9
  %222 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %221, ptr noundef @.str.15) #9
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %231

223:                                              ; preds = %211
  %224 = load i32, ptr %8, align 4, !tbaa !5
  %225 = add nsw i32 %224, 1
  store i32 %225, ptr %8, align 4, !tbaa !5
  %226 = sext i32 %224 to i64
  %227 = getelementptr inbounds [64 x [4096 x i8]], ptr %12, i64 0, i64 %226
  %228 = getelementptr inbounds [4096 x i8], ptr %227, i64 0, i64 0
  %229 = load ptr, ptr %17, align 8, !tbaa !9
  %230 = call ptr @strcpy(ptr noundef %228, ptr noundef %229) #9
  store i32 5, ptr %16, align 4
  br label %231

231:                                              ; preds = %223, %220
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  %232 = load i32, ptr %16, align 4
  switch i32 %232, label %618 [
    i32 5, label %303
  ]

233:                                              ; preds = %203
  %234 = load ptr, ptr %5, align 8, !tbaa !9
  %235 = load i32, ptr %7, align 4, !tbaa !5
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds ptr, ptr %234, i64 %236
  %238 = load ptr, ptr %237, align 8, !tbaa !9
  %239 = call i32 @strncmp(ptr noundef %238, ptr noundef @.str.16, i64 noundef 2) #10
  %240 = icmp ne i32 %239, 0
  br i1 %240, label %270, label %241

241:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %242 = load ptr, ptr %5, align 8, !tbaa !9
  %243 = load i32, ptr %7, align 4, !tbaa !5
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds ptr, ptr %242, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !9
  %247 = getelementptr inbounds i8, ptr %246, i64 2
  store ptr %247, ptr %18, align 8, !tbaa !9
  %248 = load ptr, ptr %18, align 8, !tbaa !9
  %249 = call i32 @strcicmp(ptr noundef %248, ptr noundef @.str.17)
  %250 = icmp ne i32 %249, 0
  br i1 %250, label %251, label %255

251:                                              ; preds = %241
  %252 = load ptr, ptr %18, align 8, !tbaa !9
  %253 = call i32 @strcicmp(ptr noundef %252, ptr noundef @.str.18)
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %256, label %255

255:                                              ; preds = %251, %241
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %267

256:                                              ; preds = %251
  %257 = load ptr, ptr %18, align 8, !tbaa !9
  %258 = call i32 @strcicmp(ptr noundef %257, ptr noundef @.str.19)
  %259 = icmp ne i32 %258, 0
  br i1 %259, label %260, label %264

260:                                              ; preds = %256
  %261 = load ptr, ptr %18, align 8, !tbaa !9
  %262 = call i32 @strcicmp(ptr noundef %261, ptr noundef @.str.20)
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %265, label %264

264:                                              ; preds = %260, %256
  store i32 1, ptr %10, align 4, !tbaa !5
  br label %266

265:                                              ; preds = %260
  store i32 2, ptr %16, align 4
  br label %268

266:                                              ; preds = %264
  br label %267

267:                                              ; preds = %266, %255
  store i32 5, ptr %16, align 4
  br label %268

268:                                              ; preds = %267, %265
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  %269 = load i32, ptr %16, align 4
  switch i32 %269, label %620 [
    i32 2, label %47
    i32 5, label %303
  ]

270:                                              ; preds = %233
  %271 = load ptr, ptr %5, align 8, !tbaa !9
  %272 = load i32, ptr %7, align 4, !tbaa !5
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds ptr, ptr %271, i64 %273
  %275 = load ptr, ptr %274, align 8, !tbaa !9
  %276 = call i32 @strcmp(ptr noundef %275, ptr noundef @.str.21) #10
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %279, label %278

278:                                              ; preds = %270
  br label %47

279:                                              ; preds = %270
  %280 = load i32, ptr %9, align 4, !tbaa !5
  %281 = sext i32 %280 to i64
  %282 = icmp uge i64 %281, 1024
  br i1 %282, label %283, label %286

283:                                              ; preds = %279
  %284 = load ptr, ptr @stderr, align 8, !tbaa !9
  %285 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %284, ptr noundef @.str.22) #9
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %618

286:                                              ; preds = %279
  %287 = load i32, ptr %9, align 4, !tbaa !5
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %9, align 4, !tbaa !5
  %289 = sext i32 %287 to i64
  %290 = getelementptr inbounds [1024 x [4096 x i8]], ptr %14, i64 0, i64 %289
  %291 = getelementptr inbounds [4096 x i8], ptr %290, i64 0, i64 0
  %292 = load ptr, ptr %5, align 8, !tbaa !9
  %293 = load i32, ptr %7, align 4, !tbaa !5
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds ptr, ptr %292, i64 %294
  %296 = load ptr, ptr %295, align 8, !tbaa !9
  %297 = call ptr @strcpy(ptr noundef %291, ptr noundef %296) #9
  br label %298

298:                                              ; preds = %286
  br label %299

299:                                              ; preds = %298
  br label %300

300:                                              ; preds = %299
  br label %301

301:                                              ; preds = %300
  br label %302

302:                                              ; preds = %301, %121
  br label %303

303:                                              ; preds = %302, %268, %231, %176, %175, %94
  %304 = load i32, ptr %7, align 4, !tbaa !5
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %7, align 4, !tbaa !5
  br label %77, !llvm.loop !12

306:                                              ; preds = %77
  %307 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %308 = call noalias ptr @fopen(ptr noundef %307, ptr noundef @.str.23)
  store ptr %308, ptr %15, align 8, !tbaa !9
  %309 = icmp ne ptr %308, null
  br i1 %309, label %314, label %310

310:                                              ; preds = %306
  %311 = load ptr, ptr @stderr, align 8, !tbaa !9
  %312 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %313 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %311, ptr noundef @.str.24, ptr noundef %312) #9
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %618

314:                                              ; preds = %306
  %315 = load ptr, ptr %15, align 8, !tbaa !9
  %316 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %315, ptr noundef @.str.25) #9
  %317 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %318 = call i32 @strcmp(ptr noundef %317, ptr noundef @.str.26) #10
  %319 = icmp ne i32 %318, 0
  br i1 %319, label %320, label %324

320:                                              ; preds = %314
  %321 = load ptr, ptr %15, align 8, !tbaa !9
  %322 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %323 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %321, ptr noundef @.str.27, ptr noundef %322) #9
  br label %324

324:                                              ; preds = %320, %314
  %325 = load i32, ptr %10, align 4, !tbaa !5
  %326 = icmp ne i32 %325, 0
  br i1 %326, label %327, label %330

327:                                              ; preds = %324
  %328 = load ptr, ptr %15, align 8, !tbaa !9
  %329 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %328, ptr noundef @.str.28) #9
  br label %330

330:                                              ; preds = %327, %324
  %331 = load ptr, ptr %15, align 8, !tbaa !9
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef @.str.29) #9
  %333 = load ptr, ptr %15, align 8, !tbaa !9
  %334 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %333, ptr noundef @.str.30) #9
  %335 = load ptr, ptr %15, align 8, !tbaa !9
  %336 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %335, ptr noundef @.str.31) #9
  %337 = load ptr, ptr %15, align 8, !tbaa !9
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %337, ptr noundef @.str.32) #9
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %339

339:                                              ; preds = %596, %330
  %340 = load i32, ptr %7, align 4, !tbaa !5
  %341 = load i32, ptr %9, align 4, !tbaa !5
  %342 = icmp slt i32 %340, %341
  br i1 %342, label %343, label %599

343:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %344 = load i32, ptr %7, align 4, !tbaa !5
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [1024 x [4096 x i8]], ptr %14, i64 0, i64 %345
  %347 = getelementptr inbounds [4096 x i8], ptr %346, i64 0, i64 0
  %348 = getelementptr inbounds [64 x [4096 x i8]], ptr %12, i64 0, i64 0
  %349 = load i32, ptr %8, align 4, !tbaa !5
  %350 = call ptr @open_file(ptr noundef %347, ptr noundef @.str.33, ptr noundef %348, i32 noundef %349)
  store ptr %350, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  store ptr null, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  store i64 0, ptr %21, align 8, !tbaa !14
  %351 = load ptr, ptr %19, align 8, !tbaa !9
  %352 = icmp ne ptr %351, null
  br i1 %352, label %362, label %353

353:                                              ; preds = %343
  %354 = load ptr, ptr @stderr, align 8, !tbaa !9
  %355 = load i32, ptr %7, align 4, !tbaa !5
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds [1024 x [4096 x i8]], ptr %14, i64 0, i64 %356
  %358 = getelementptr inbounds [4096 x i8], ptr %357, i64 0, i64 0
  %359 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %354, ptr noundef @.str.34, ptr noundef %358) #9
  %360 = load ptr, ptr %15, align 8, !tbaa !9
  %361 = call i32 @fclose(ptr noundef %360)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %593

362:                                              ; preds = %343
  br label %363

363:                                              ; preds = %582, %580, %362
  %364 = load ptr, ptr %19, align 8, !tbaa !9
  %365 = call i32 @fline(ptr noundef %20, ptr noundef %21, ptr noundef %364)
  %366 = icmp ne i32 %365, -1
  br i1 %366, label %367, label %583

367:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %368 = load ptr, ptr %20, align 8, !tbaa !9
  %369 = call ptr @strstr(ptr noundef %368, ptr noundef @.str.35) #10
  store ptr %369, ptr %22, align 8, !tbaa !9
  %370 = icmp ne ptr %369, null
  br i1 %370, label %372, label %371

371:                                              ; preds = %367
  store i32 9, ptr %16, align 4
  br label %580, !llvm.loop !16

372:                                              ; preds = %367
  %373 = load ptr, ptr %22, align 8, !tbaa !9
  %374 = call ptr @strchr(ptr noundef %373, i32 noundef 40) #10
  store ptr %374, ptr %23, align 8, !tbaa !9
  %375 = icmp ne ptr %374, null
  br i1 %375, label %377, label %376

376:                                              ; preds = %372
  store i32 9, ptr %16, align 4
  br label %580, !llvm.loop !16

377:                                              ; preds = %372
  %378 = load ptr, ptr %23, align 8, !tbaa !9
  %379 = call ptr @strchr(ptr noundef %378, i32 noundef 44) #10
  store ptr %379, ptr %24, align 8, !tbaa !9
  %380 = icmp ne ptr %379, null
  br i1 %380, label %382, label %381

381:                                              ; preds = %377
  store i32 9, ptr %16, align 4
  br label %580, !llvm.loop !16

382:                                              ; preds = %377
  %383 = load ptr, ptr %24, align 8, !tbaa !9
  %384 = call ptr @strchr(ptr noundef %383, i32 noundef 41) #10
  store ptr %384, ptr %25, align 8, !tbaa !9
  %385 = icmp ne ptr %384, null
  br i1 %385, label %387, label %386

386:                                              ; preds = %382
  store i32 9, ptr %16, align 4
  br label %580, !llvm.loop !16

387:                                              ; preds = %382
  %388 = load ptr, ptr %23, align 8, !tbaa !9
  %389 = getelementptr inbounds i8, ptr %388, i64 1
  store ptr %389, ptr %26, align 8, !tbaa !9
  %390 = load ptr, ptr %24, align 8, !tbaa !9
  %391 = getelementptr inbounds i8, ptr %390, i64 1
  store ptr %391, ptr %27, align 8, !tbaa !9
  br label %392

392:                                              ; preds = %404, %387
  %393 = call ptr @__ctype_b_loc() #11
  %394 = load ptr, ptr %393, align 8, !tbaa !9
  %395 = load ptr, ptr %26, align 8, !tbaa !9
  %396 = load i8, ptr %395, align 1, !tbaa !11
  %397 = sext i8 %396 to i32
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i16, ptr %394, i64 %398
  %400 = load i16, ptr %399, align 2, !tbaa !17
  %401 = zext i16 %400 to i32
  %402 = and i32 %401, 8192
  %403 = icmp ne i32 %402, 0
  br i1 %403, label %404, label %407

404:                                              ; preds = %392
  %405 = load ptr, ptr %26, align 8, !tbaa !9
  %406 = getelementptr inbounds i8, ptr %405, i32 1
  store ptr %406, ptr %26, align 8, !tbaa !9
  br label %392, !llvm.loop !19

407:                                              ; preds = %392
  br label %408

408:                                              ; preds = %420, %407
  %409 = call ptr @__ctype_b_loc() #11
  %410 = load ptr, ptr %409, align 8, !tbaa !9
  %411 = load ptr, ptr %27, align 8, !tbaa !9
  %412 = load i8, ptr %411, align 1, !tbaa !11
  %413 = sext i8 %412 to i32
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i16, ptr %410, i64 %414
  %416 = load i16, ptr %415, align 2, !tbaa !17
  %417 = zext i16 %416 to i32
  %418 = and i32 %417, 8192
  %419 = icmp ne i32 %418, 0
  br i1 %419, label %420, label %423

420:                                              ; preds = %408
  %421 = load ptr, ptr %27, align 8, !tbaa !9
  %422 = getelementptr inbounds i8, ptr %421, i32 1
  store ptr %422, ptr %27, align 8, !tbaa !9
  br label %408, !llvm.loop !20

423:                                              ; preds = %408
  %424 = load ptr, ptr %24, align 8, !tbaa !9
  %425 = getelementptr inbounds i8, ptr %424, i32 -1
  store ptr %425, ptr %24, align 8, !tbaa !9
  br label %426

426:                                              ; preds = %438, %423
  %427 = call ptr @__ctype_b_loc() #11
  %428 = load ptr, ptr %427, align 8, !tbaa !9
  %429 = load ptr, ptr %24, align 8, !tbaa !9
  %430 = load i8, ptr %429, align 1, !tbaa !11
  %431 = sext i8 %430 to i32
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds i16, ptr %428, i64 %432
  %434 = load i16, ptr %433, align 2, !tbaa !17
  %435 = zext i16 %434 to i32
  %436 = and i32 %435, 8192
  %437 = icmp ne i32 %436, 0
  br i1 %437, label %438, label %441

438:                                              ; preds = %426
  %439 = load ptr, ptr %24, align 8, !tbaa !9
  %440 = getelementptr inbounds i8, ptr %439, i32 -1
  store ptr %440, ptr %24, align 8, !tbaa !9
  br label %426, !llvm.loop !21

441:                                              ; preds = %426
  %442 = load ptr, ptr %24, align 8, !tbaa !9
  %443 = getelementptr inbounds i8, ptr %442, i32 1
  store ptr %443, ptr %24, align 8, !tbaa !9
  store i8 0, ptr %443, align 1, !tbaa !11
  %444 = load ptr, ptr %25, align 8, !tbaa !9
  %445 = getelementptr inbounds i8, ptr %444, i32 -1
  store ptr %445, ptr %25, align 8, !tbaa !9
  br label %446

446:                                              ; preds = %458, %441
  %447 = call ptr @__ctype_b_loc() #11
  %448 = load ptr, ptr %447, align 8, !tbaa !9
  %449 = load ptr, ptr %25, align 8, !tbaa !9
  %450 = load i8, ptr %449, align 1, !tbaa !11
  %451 = sext i8 %450 to i32
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i16, ptr %448, i64 %452
  %454 = load i16, ptr %453, align 2, !tbaa !17
  %455 = zext i16 %454 to i32
  %456 = and i32 %455, 8192
  %457 = icmp ne i32 %456, 0
  br i1 %457, label %458, label %461

458:                                              ; preds = %446
  %459 = load ptr, ptr %25, align 8, !tbaa !9
  %460 = getelementptr inbounds i8, ptr %459, i32 -1
  store ptr %460, ptr %25, align 8, !tbaa !9
  br label %446, !llvm.loop !22

461:                                              ; preds = %446
  %462 = load ptr, ptr %25, align 8, !tbaa !9
  %463 = getelementptr inbounds i8, ptr %462, i32 1
  store ptr %463, ptr %25, align 8, !tbaa !9
  store i8 0, ptr %463, align 1, !tbaa !11
  %464 = load ptr, ptr %15, align 8, !tbaa !9
  %465 = load ptr, ptr %26, align 8, !tbaa !9
  %466 = load ptr, ptr %27, align 8, !tbaa !9
  %467 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %464, ptr noundef @.str.36, ptr noundef %465, ptr noundef %466) #9
  %468 = load ptr, ptr %15, align 8, !tbaa !9
  %469 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %470 = load ptr, ptr %26, align 8, !tbaa !9
  %471 = load i32, ptr %10, align 4, !tbaa !5
  %472 = call ptr @styled(i32 noundef %471, i32 noundef 0)
  %473 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %468, ptr noundef @.str.37, ptr noundef %469, ptr noundef %470, ptr noundef %472) #9
  %474 = load ptr, ptr %25, align 8, !tbaa !9
  %475 = getelementptr inbounds i8, ptr %474, i32 -1
  store ptr %475, ptr %25, align 8, !tbaa !9
  store i8 0, ptr %475, align 1, !tbaa !11
  %476 = load ptr, ptr %27, align 8, !tbaa !9
  %477 = getelementptr inbounds i8, ptr %476, i32 1
  store ptr %477, ptr %27, align 8, !tbaa !9
  %478 = load ptr, ptr %27, align 8, !tbaa !9
  %479 = getelementptr inbounds [64 x [4096 x i8]], ptr %12, i64 0, i64 0
  %480 = load i32, ptr %8, align 4, !tbaa !5
  %481 = call ptr @open_file(ptr noundef %478, ptr noundef @.str.38, ptr noundef %479, i32 noundef %480)
  store ptr %481, ptr %28, align 8, !tbaa !9
  %482 = icmp ne ptr %481, null
  br i1 %482, label %487, label %483

483:                                              ; preds = %461
  %484 = load ptr, ptr @stderr, align 8, !tbaa !9
  %485 = load ptr, ptr %27, align 8, !tbaa !9
  %486 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %484, ptr noundef @.str.39, ptr noundef %485) #9
  store i32 1, ptr %6, align 4, !tbaa !5
  store i32 19, ptr %16, align 4
  br label %580

487:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #9
  store i8 0, ptr %32, align 1, !tbaa !11
  %488 = load ptr, ptr %28, align 8, !tbaa !9
  %489 = call i32 @fseek(ptr noundef %488, i64 noundef 0, i32 noundef 2)
  %490 = load ptr, ptr %28, align 8, !tbaa !9
  %491 = call i64 @ftell(ptr noundef %490)
  store i64 %491, ptr %29, align 8, !tbaa !14
  %492 = load ptr, ptr %28, align 8, !tbaa !9
  %493 = call i32 @fseek(ptr noundef %492, i64 noundef 0, i32 noundef 0)
  %494 = load i64, ptr %29, align 8, !tbaa !14
  %495 = call noalias ptr @malloc(i64 noundef %494) #12
  store ptr %495, ptr %31, align 8, !tbaa !9
  %496 = icmp ne ptr %495, null
  br i1 %496, label %502, label %497

497:                                              ; preds = %487
  %498 = load ptr, ptr @stderr, align 8, !tbaa !9
  %499 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %498, ptr noundef @.str.40) #9
  %500 = load ptr, ptr %28, align 8, !tbaa !9
  %501 = call i32 @fclose(ptr noundef %500)
  store i32 1, ptr %6, align 4, !tbaa !5
  store i32 19, ptr %16, align 4
  br label %550

502:                                              ; preds = %487
  %503 = load ptr, ptr %31, align 8, !tbaa !9
  %504 = load i64, ptr %29, align 8, !tbaa !14
  %505 = load ptr, ptr %28, align 8, !tbaa !9
  %506 = call i64 @fread(ptr noundef %503, i64 noundef %504, i64 noundef 1, ptr noundef %505)
  %507 = icmp ne i64 %506, 1
  br i1 %507, label %508, label %515

508:                                              ; preds = %502
  %509 = load ptr, ptr @stderr, align 8, !tbaa !9
  %510 = load ptr, ptr %27, align 8, !tbaa !9
  %511 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %509, ptr noundef @.str.41, ptr noundef %510) #9
  %512 = load ptr, ptr %31, align 8, !tbaa !9
  call void @free(ptr noundef %512) #9
  %513 = load ptr, ptr %28, align 8, !tbaa !9
  %514 = call i32 @fclose(ptr noundef %513)
  store i32 1, ptr %6, align 4, !tbaa !5
  store i32 19, ptr %16, align 4
  br label %550

515:                                              ; preds = %502
  store i64 0, ptr %30, align 8, !tbaa !14
  br label %516

516:                                              ; preds = %543, %515
  %517 = load i64, ptr %30, align 8, !tbaa !14
  %518 = load i64, ptr %29, align 8, !tbaa !14
  %519 = icmp slt i64 %517, %518
  br i1 %519, label %520, label %546

520:                                              ; preds = %516
  %521 = load i8, ptr %32, align 1, !tbaa !11
  %522 = zext i8 %521 to i32
  %523 = icmp eq i32 %522, 12
  br i1 %523, label %524, label %527

524:                                              ; preds = %520
  %525 = load ptr, ptr %15, align 8, !tbaa !9
  %526 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %525, ptr noundef @.str.42) #9
  store i8 0, ptr %32, align 1, !tbaa !11
  br label %527

527:                                              ; preds = %524, %520
  %528 = load ptr, ptr %15, align 8, !tbaa !9
  %529 = load i64, ptr %30, align 8, !tbaa !14
  %530 = load i64, ptr %29, align 8, !tbaa !14
  %531 = sub nsw i64 %530, 1
  %532 = icmp ne i64 %529, %531
  %533 = zext i1 %532 to i64
  %534 = select i1 %532, ptr @.str.43, ptr @.str.44
  %535 = load ptr, ptr %31, align 8, !tbaa !9
  %536 = load i64, ptr %30, align 8, !tbaa !14
  %537 = getelementptr inbounds i8, ptr %535, i64 %536
  %538 = load i8, ptr %537, align 1, !tbaa !11
  %539 = zext i8 %538 to i32
  %540 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %528, ptr noundef %534, i32 noundef %539) #9
  %541 = load i8, ptr %32, align 1, !tbaa !11
  %542 = add i8 %541, 1
  store i8 %542, ptr %32, align 1, !tbaa !11
  br label %543

543:                                              ; preds = %527
  %544 = load i64, ptr %30, align 8, !tbaa !14
  %545 = add nsw i64 %544, 1
  store i64 %545, ptr %30, align 8, !tbaa !14
  br label %516, !llvm.loop !23

546:                                              ; preds = %516
  %547 = load ptr, ptr %31, align 8, !tbaa !9
  call void @free(ptr noundef %547) #9
  %548 = load ptr, ptr %28, align 8, !tbaa !9
  %549 = call i32 @fclose(ptr noundef %548)
  store i32 0, ptr %16, align 4
  br label %550

550:                                              ; preds = %546, %508, %497
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  %551 = load i32, ptr %16, align 4
  switch i32 %551, label %580 [
    i32 0, label %552
  ]

552:                                              ; preds = %550
  br label %553

553:                                              ; preds = %552
  %554 = load ptr, ptr %15, align 8, !tbaa !9
  %555 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %554, ptr noundef @.str.45) #9
  %556 = load ptr, ptr %15, align 8, !tbaa !9
  %557 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %558 = load ptr, ptr %26, align 8, !tbaa !9
  %559 = load i32, ptr %10, align 4, !tbaa !5
  %560 = call ptr @styled(i32 noundef %559, i32 noundef 1)
  %561 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %562 = load ptr, ptr %26, align 8, !tbaa !9
  %563 = load i32, ptr %10, align 4, !tbaa !5
  %564 = call ptr @styled(i32 noundef %563, i32 noundef 0)
  %565 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %566 = load ptr, ptr %26, align 8, !tbaa !9
  %567 = load i32, ptr %10, align 4, !tbaa !5
  %568 = call ptr @styled(i32 noundef %567, i32 noundef 0)
  %569 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %556, ptr noundef @.str.46, ptr noundef %557, ptr noundef %558, ptr noundef %560, ptr noundef %561, ptr noundef %562, ptr noundef %564, ptr noundef %565, ptr noundef %566, ptr noundef %568) #9
  %570 = load ptr, ptr %15, align 8, !tbaa !9
  %571 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %572 = load ptr, ptr %26, align 8, !tbaa !9
  %573 = load i32, ptr %10, align 4, !tbaa !5
  %574 = call ptr @styled(i32 noundef %573, i32 noundef 2)
  %575 = getelementptr inbounds [4096 x i8], ptr %13, i64 0, i64 0
  %576 = load ptr, ptr %26, align 8, !tbaa !9
  %577 = load i32, ptr %10, align 4, !tbaa !5
  %578 = call ptr @styled(i32 noundef %577, i32 noundef 0)
  %579 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %570, ptr noundef @.str.47, ptr noundef %571, ptr noundef %572, ptr noundef %574, ptr noundef %575, ptr noundef %576, ptr noundef %578) #9
  store i32 0, ptr %16, align 4
  br label %580

580:                                              ; preds = %553, %550, %483, %386, %381, %376, %371
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  %581 = load i32, ptr %16, align 4
  switch i32 %581, label %593 [
    i32 0, label %582
    i32 9, label %363
    i32 19, label %584
  ]

582:                                              ; preds = %580
  br label %363, !llvm.loop !16

583:                                              ; preds = %363
  br label %584

584:                                              ; preds = %583, %580
  %585 = load ptr, ptr %20, align 8, !tbaa !9
  call void @free(ptr noundef %585) #9
  %586 = load ptr, ptr %19, align 8, !tbaa !9
  %587 = call i32 @fclose(ptr noundef %586)
  %588 = load i32, ptr %7, align 4, !tbaa !5
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds [1024 x [4096 x i8]], ptr %14, i64 0, i64 %589
  %591 = getelementptr inbounds [4096 x i8], ptr %590, i64 0, i64 0
  %592 = call i32 (ptr, ...) @printf(ptr noundef @.str.48, ptr noundef %591)
  store i32 0, ptr %16, align 4
  br label %593

593:                                              ; preds = %584, %580, %353
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  %594 = load i32, ptr %16, align 4
  switch i32 %594, label %618 [
    i32 0, label %595
  ]

595:                                              ; preds = %593
  br label %596

596:                                              ; preds = %595
  %597 = load i32, ptr %7, align 4, !tbaa !5
  %598 = add nsw i32 %597, 1
  store i32 %598, ptr %7, align 4, !tbaa !5
  br label %339, !llvm.loop !24

599:                                              ; preds = %339
  %600 = load i32, ptr %6, align 4, !tbaa !5
  %601 = icmp eq i32 %600, 0
  br i1 %601, label %602, label %613

602:                                              ; preds = %599
  %603 = load ptr, ptr %15, align 8, !tbaa !9
  %604 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %603, ptr noundef @.str.49) #9
  %605 = load ptr, ptr %15, align 8, !tbaa !9
  %606 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %605, ptr noundef @.str.50) #9
  %607 = load ptr, ptr %15, align 8, !tbaa !9
  %608 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %607, ptr noundef @.str.51) #9
  %609 = load ptr, ptr %15, align 8, !tbaa !9
  %610 = call i32 @fclose(ptr noundef %609)
  %611 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %612 = call i32 (ptr, ...) @printf(ptr noundef @.str.52, ptr noundef %611)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %618

613:                                              ; preds = %599
  %614 = load ptr, ptr %15, align 8, !tbaa !9
  %615 = call i32 @fclose(ptr noundef %614)
  %616 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %617 = call i32 @remove(ptr noundef %616) #9
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %618

618:                                              ; preds = %613, %602, %593, %310, %283, %231, %47
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4194304, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4096, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 262144, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4096, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  %619 = load i32, ptr %3, align 4
  ret i32 %619

620:                                              ; preds = %268
  unreachable
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #3

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #5

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strncmp(ptr noundef, ptr noundef, i64 noundef) #4

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
declare hidden i32 @strcicmp(ptr noundef, ptr noundef) #0

declare noalias ptr @fopen(ptr noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden ptr @open_file(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #0

declare i32 @fclose(ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fline(ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind willreturn memory(read)
declare ptr @strstr(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind willreturn memory(read)
declare ptr @strchr(ptr noundef, i32 noundef) #4

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() #7

; Function Attrs: nounwind uwtable
declare hidden ptr @styled(i32 noundef, i32 noundef) #0

declare i32 @fseek(ptr noundef, i64 noundef, i32 noundef) #6

declare i64 @ftell(ptr noundef) #6

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #8

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #6

; Function Attrs: nounwind
declare void @free(ptr noundef) #3

declare i32 @printf(ptr noundef, ...) #6

; Function Attrs: nounwind
declare i32 @remove(ptr noundef) #3

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { nounwind willreturn memory(none) }
attributes #12 = { nounwind allocsize(0) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !15, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = distinct !{!16, !13}
!17 = !{!18, !18, i64 0}
!18 = !{!"short", !7, i64 0}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}
!21 = distinct !{!21, !13}
!22 = distinct !{!22, !13}
!23 = distinct !{!23, !13}
!24 = distinct !{!24, !13}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [62 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [80 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [16 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef %1) local_unnamed_addr #0 {
  %3 = alloca [4096 x i8], align 16
  %4 = alloca [64 x [4096 x i8]], align 16
  %5 = alloca [4096 x i8], align 16
  %6 = alloca [1024 x [4096 x i8]], align 16
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %3) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(4096) %3, i8 0, i64 4096, i1 false)
  store <4 x i8> <i8 100, i8 97, i8 116, i8 97>, ptr %3, align 16
  %9 = getelementptr inbounds i8, ptr %3, i64 4
  store i8 46, ptr %9, align 4
  %10 = getelementptr inbounds i8, ptr %3, i64 5
  store i8 99, ptr %10, align 1
  call void @llvm.lifetime.start.p0(i64 262144, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %5) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(4096) %5, i8 0, i64 4096, i1 false)
  store i8 103, ptr %5, align 16
  call void @llvm.lifetime.start.p0(i64 4194304, ptr nonnull %6) #10
  %11 = add nsw i32 %0, -1
  %12 = getelementptr inbounds i8, ptr %1, i64 8
  %13 = icmp eq i32 %11, 0
  br i1 %13, label %.loopexit, label %.preheader262

.preheader262:                                    ; preds = %2
  %14 = icmp sgt i32 %0, 1
  br i1 %14, label %.lr.ph, label %._crit_edge

.loopexit:                                        ; preds = %108, %110, %2
  %15 = load ptr, ptr @stderr, align 8, !tbaa !5
  %16 = load ptr, ptr %1, align 8, !tbaa !5
  %17 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %15, ptr noundef nonnull @.str, ptr noundef %16) #11
  %18 = load ptr, ptr @stderr, align 8, !tbaa !5
  %19 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %18, ptr noundef nonnull @.str.1) #11
  %20 = load ptr, ptr @stderr, align 8, !tbaa !5
  %21 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef nonnull @.str.2) #11
  %22 = load ptr, ptr @stderr, align 8, !tbaa !5
  %23 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %22, ptr noundef nonnull @.str.3) #11
  %24 = load ptr, ptr @stderr, align 8, !tbaa !5
  %25 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %24, ptr noundef nonnull @.str.4) #11
  %26 = load ptr, ptr @stderr, align 8, !tbaa !5
  %27 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %26, ptr noundef nonnull @.str.5) #11
  %28 = load ptr, ptr @stderr, align 8, !tbaa !5
  %29 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %28, ptr noundef nonnull @.str.6) #11
  %30 = load ptr, ptr @stderr, align 8, !tbaa !5
  %31 = load ptr, ptr %1, align 8, !tbaa !5
  %32 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %30, ptr noundef nonnull @.str.7, ptr noundef %31) #11
  %33 = load ptr, ptr @stderr, align 8, !tbaa !5
  %34 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %33, ptr noundef nonnull @.str.8) #11
  %35 = load ptr, ptr @stderr, align 8, !tbaa !5
  %36 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %35, ptr noundef nonnull @.str.9) #11
  %37 = load ptr, ptr @stderr, align 8, !tbaa !5
  %38 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %37, ptr noundef nonnull @.str.10) #11
  br label %245

.lr.ph:                                           ; preds = %.preheader262, %.thread237
  %indvars.iv = phi i64 [ %indvars.iv.next, %.thread237 ], [ 0, %.preheader262 ]
  %.0178.neg288 = phi i32 [ %.0178.neg, %.thread237 ], [ 0, %.preheader262 ]
  %.0166287 = phi i32 [ %.1167, %.thread237 ], [ %11, %.preheader262 ]
  %.0180285 = phi i32 [ %.2182, %.thread237 ], [ 0, %.preheader262 ]
  %.0183284 = phi i32 [ %.1184, %.thread237 ], [ 0, %.preheader262 ]
  %.0185283 = phi i32 [ %.3188, %.thread237 ], [ 0, %.preheader262 ]
  %39 = getelementptr inbounds ptr, ptr %12, i64 %indvars.iv
  %40 = load ptr, ptr %39, align 8, !tbaa !5
  %41 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %40, ptr noundef nonnull dereferenceable(1) @.str.11) #12
  %.not224 = icmp eq i32 %41, 0
  br i1 %.not224, label %42, label %57

42:                                               ; preds = %.lr.ph
  %43 = add nuw nsw i64 %indvars.iv, 1
  %44 = sext i32 %.0166287 to i64
  %45 = icmp slt i64 %43, %44
  br i1 %45, label %46, label %.thread237

46:                                               ; preds = %42
  %47 = getelementptr inbounds ptr, ptr %12, i64 %43
  %48 = load ptr, ptr %47, align 8, !tbaa !5
  %49 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %3, ptr noundef nonnull dereferenceable(1) %48) #10
  %50 = getelementptr inbounds i8, ptr %39, i64 8
  %51 = getelementptr inbounds i8, ptr %39, i64 16
  %52 = add nsw i32 %.0178.neg288, -2
  %53 = add i32 %52, %.0166287
  %54 = sext i32 %53 to i64
  %55 = shl nsw i64 %54, 3
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %50, ptr nonnull align 8 %51, i64 %55, i1 false)
  %56 = add nsw i32 %.0166287, -1
  br label %.thread237

57:                                               ; preds = %.lr.ph
  %58 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %40, ptr noundef nonnull dereferenceable(1) @.str.12) #12
  %.not225 = icmp eq i32 %58, 0
  br i1 %.not225, label %59, label %87

59:                                               ; preds = %57
  %60 = add nuw nsw i64 %indvars.iv, 1
  %61 = getelementptr inbounds ptr, ptr %12, i64 %60
  %62 = load ptr, ptr %61, align 8, !tbaa !5
  %63 = load i8, ptr %62, align 1, !tbaa !9
  %64 = icmp eq i8 %63, 45
  br i1 %64, label %65, label %78

65:                                               ; preds = %59
  store i8 0, ptr %5, align 16, !tbaa !9
  %66 = sext i32 %.0166287 to i64
  %67 = icmp slt i64 %60, %66
  br i1 %67, label %68, label %.thread237

68:                                               ; preds = %65
  %69 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %62, ptr noundef nonnull dereferenceable(1) @.str.13) #12
  %.not226 = icmp eq i32 %69, 0
  br i1 %.not226, label %70, label %.thread237

70:                                               ; preds = %68
  %71 = getelementptr inbounds i8, ptr %39, i64 8
  %72 = getelementptr inbounds i8, ptr %39, i64 16
  %73 = add nsw i32 %.0178.neg288, -2
  %74 = add i32 %73, %.0166287
  %75 = sext i32 %74 to i64
  %76 = shl nsw i64 %75, 3
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %71, ptr nonnull align 8 %72, i64 %76, i1 false)
  %77 = add nsw i32 %.0166287, -1
  br label %.thread237

78:                                               ; preds = %59
  %79 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) %62) #10
  %80 = getelementptr inbounds i8, ptr %39, i64 8
  %81 = getelementptr inbounds i8, ptr %39, i64 16
  %82 = add nsw i32 %.0178.neg288, -2
  %83 = add i32 %82, %.0166287
  %84 = sext i32 %83 to i64
  %85 = shl nsw i64 %84, 3
  call void @llvm.memmove.p0.p0.i64(ptr nonnull align 8 %80, ptr nonnull align 8 %81, i64 %85, i1 false)
  %86 = add nsw i32 %.0166287, -1
  br label %.thread237

87:                                               ; preds = %57
  %88 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %40, ptr noundef nonnull dereferenceable(1) @.str.14, i64 noundef 2) #12
  %.not227 = icmp eq i32 %88, 0
  br i1 %.not227, label %89, label %99

89:                                               ; preds = %87
  %90 = icmp slt i32 %.0180285, 64
  br i1 %90, label %.thread, label %96

.thread:                                          ; preds = %89
  %91 = getelementptr inbounds i8, ptr %40, i64 2
  %92 = add nsw i32 %.0180285, 1
  %93 = sext i32 %.0180285 to i64
  %94 = getelementptr inbounds [64 x [4096 x i8]], ptr %4, i64 0, i64 %93
  %95 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %94, ptr noundef nonnull dereferenceable(1) %91) #10
  br label %.thread237

96:                                               ; preds = %89
  %97 = load ptr, ptr @stderr, align 8, !tbaa !5
  %98 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %97, ptr noundef nonnull @.str.15) #11
  br label %245

99:                                               ; preds = %87
  %100 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %40, ptr noundef nonnull dereferenceable(1) @.str.16, i64 noundef 2) #12
  %.not228 = icmp eq i32 %100, 0
  br i1 %.not228, label %101, label %110

101:                                              ; preds = %99
  %102 = getelementptr inbounds i8, ptr %40, i64 2
  %103 = call i32 @strcicmp(ptr noundef nonnull %102, ptr noundef nonnull @.str.17)
  %.not229 = icmp eq i32 %103, 0
  br i1 %.not229, label %.thread237, label %104

104:                                              ; preds = %101
  %105 = call i32 @strcicmp(ptr noundef nonnull %102, ptr noundef nonnull @.str.18)
  %.not230 = icmp eq i32 %105, 0
  br i1 %.not230, label %.thread237, label %106

106:                                              ; preds = %104
  %107 = call i32 @strcicmp(ptr noundef nonnull %102, ptr noundef nonnull @.str.19)
  %.not231 = icmp eq i32 %107, 0
  br i1 %.not231, label %.thread237, label %108

108:                                              ; preds = %106
  %109 = call i32 @strcicmp(ptr noundef nonnull %102, ptr noundef nonnull @.str.20)
  %.not232.not = icmp eq i32 %109, 0
  br i1 %.not232.not, label %.thread237, label %.loopexit

110:                                              ; preds = %99
  %111 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %40, ptr noundef nonnull dereferenceable(1) @.str.21) #12
  %.not233 = icmp eq i32 %111, 0
  br i1 %.not233, label %.loopexit, label %112

112:                                              ; preds = %110
  %113 = icmp ugt i32 %.0183284, 1023
  br i1 %113, label %114, label %117

114:                                              ; preds = %112
  %115 = load ptr, ptr @stderr, align 8, !tbaa !5
  %116 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %115, ptr noundef nonnull @.str.22) #11
  br label %245

117:                                              ; preds = %112
  %118 = zext nneg i32 %.0183284 to i64
  %119 = add nuw nsw i32 %.0183284, 1
  %120 = getelementptr inbounds [1024 x [4096 x i8]], ptr %6, i64 0, i64 %118
  %121 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %120, ptr noundef nonnull dereferenceable(1) %40) #10
  br label %.thread237

.thread237:                                       ; preds = %104, %101, %106, %.thread, %108, %117, %42, %65, %68, %70, %78, %46
  %.3188 = phi i32 [ %.0185283, %117 ], [ 1, %108 ], [ %.0185283, %68 ], [ %.0185283, %70 ], [ %.0185283, %65 ], [ %.0185283, %78 ], [ %.0185283, %46 ], [ %.0185283, %42 ], [ %.0185283, %.thread ], [ 1, %106 ], [ 0, %101 ], [ 0, %104 ]
  %.1184 = phi i32 [ %119, %117 ], [ %.0183284, %108 ], [ %.0183284, %68 ], [ %.0183284, %70 ], [ %.0183284, %65 ], [ %.0183284, %78 ], [ %.0183284, %46 ], [ %.0183284, %42 ], [ %.0183284, %.thread ], [ %.0183284, %106 ], [ %.0183284, %101 ], [ %.0183284, %104 ]
  %.2182 = phi i32 [ %.0180285, %117 ], [ %.0180285, %108 ], [ %.0180285, %68 ], [ %.0180285, %70 ], [ %.0180285, %65 ], [ %.0180285, %78 ], [ %.0180285, %46 ], [ %.0180285, %42 ], [ %92, %.thread ], [ %.0180285, %106 ], [ %.0180285, %101 ], [ %.0180285, %104 ]
  %.1167 = phi i32 [ %.0166287, %117 ], [ %.0166287, %108 ], [ %.0166287, %68 ], [ %77, %70 ], [ %.0166287, %65 ], [ %86, %78 ], [ %56, %46 ], [ %.0166287, %42 ], [ %.0166287, %.thread ], [ %.0166287, %106 ], [ %.0166287, %101 ], [ %.0166287, %104 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %122 = trunc nuw nsw i64 %indvars.iv to i32
  %.0178.neg = xor i32 %122, -1
  %123 = sext i32 %.1167 to i64
  %124 = icmp slt i64 %indvars.iv.next, %123
  br i1 %124, label %.lr.ph, label %._crit_edge, !llvm.loop !10

._crit_edge:                                      ; preds = %.thread237, %.preheader262
  %.0185.lcssa = phi i32 [ 0, %.preheader262 ], [ %.3188, %.thread237 ]
  %.0183.lcssa = phi i32 [ 0, %.preheader262 ], [ %.1184, %.thread237 ]
  %.0180.lcssa = phi i32 [ 0, %.preheader262 ], [ %.2182, %.thread237 ]
  %125 = call noalias ptr @fopen(ptr noundef nonnull %3, ptr noundef nonnull @.str.23)
  %.not = icmp eq ptr %125, null
  br i1 %.not, label %126, label %129

126:                                              ; preds = %._crit_edge
  %127 = load ptr, ptr @stderr, align 8, !tbaa !5
  %128 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %127, ptr noundef nonnull @.str.24, ptr noundef nonnull %3) #11
  br label %245

129:                                              ; preds = %._crit_edge
  %130 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %125, ptr noundef nonnull @.str.25) #10
  %131 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.26) #12
  %.not205 = icmp eq i32 %131, 0
  br i1 %.not205, label %134, label %132

132:                                              ; preds = %129
  %133 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %125, ptr noundef nonnull @.str.27, ptr noundef nonnull %5) #10
  br label %134

134:                                              ; preds = %132, %129
  %.not206 = icmp eq i32 %.0185.lcssa, 0
  br i1 %.not206, label %137, label %135

135:                                              ; preds = %134
  %136 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %125, ptr noundef nonnull @.str.28) #10
  br label %137

137:                                              ; preds = %135, %134
  %138 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %125, ptr noundef nonnull @.str.29) #10
  %139 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %125, ptr noundef nonnull @.str.30) #10
  %140 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %125, ptr noundef nonnull @.str.31) #10
  %141 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %125, ptr noundef nonnull @.str.32) #10
  %142 = icmp sgt i32 %.0183.lcssa, 0
  br i1 %142, label %.lr.ph300.preheader, label %._crit_edge301.thread

.lr.ph300.preheader:                              ; preds = %137
  %wide.trip.count = zext nneg i32 %.0183.lcssa to i64
  br label %.lr.ph300

.lr.ph300:                                        ; preds = %.lr.ph300.preheader, %.thread248
  %indvars.iv313 = phi i64 [ 0, %.lr.ph300.preheader ], [ %indvars.iv.next314, %.thread248 ]
  %.0172298 = phi i32 [ 0, %.lr.ph300.preheader ], [ %.4176, %.thread248 ]
  %143 = getelementptr inbounds [1024 x [4096 x i8]], ptr %6, i64 0, i64 %indvars.iv313
  %144 = call ptr @open_file(ptr noundef nonnull %143, ptr noundef nonnull @.str.33, ptr noundef nonnull %4, i32 noundef %.0180.lcssa)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  store i64 0, ptr %8, align 8, !tbaa !12
  %.not207 = icmp eq ptr %144, null
  br i1 %.not207, label %229, label %.preheader261

.preheader261:                                    ; preds = %.lr.ph300
  %145 = call i32 @fline(ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %144)
  %.not208295 = icmp eq i32 %145, -1
  br i1 %.not208295, label %.thread248, label %.lr.ph296

.lr.ph296:                                        ; preds = %.preheader261, %227
  %146 = load ptr, ptr %7, align 8, !tbaa !5
  %147 = call ptr @strstr(ptr noundef nonnull dereferenceable(1) %146, ptr noundef nonnull dereferenceable(1) @.str.35) #12
  %.not209 = icmp eq ptr %147, null
  br i1 %.not209, label %227, label %148, !llvm.loop !14

148:                                              ; preds = %.lr.ph296
  %149 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %147, i32 noundef 40) #12
  %.not210 = icmp eq ptr %149, null
  br i1 %.not210, label %227, label %150, !llvm.loop !14

150:                                              ; preds = %148
  %151 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %149, i32 noundef 44) #12
  %.not211 = icmp eq ptr %151, null
  br i1 %.not211, label %227, label %152, !llvm.loop !14

152:                                              ; preds = %150
  %153 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %151, i32 noundef 41) #12
  %.not212 = icmp eq ptr %153, null
  br i1 %.not212, label %227, label %.preheader260, !llvm.loop !14

.preheader260:                                    ; preds = %152
  %154 = tail call ptr @__ctype_b_loc() #13
  %155 = load ptr, ptr %154, align 8, !tbaa !5
  br label %156

156:                                              ; preds = %.preheader260, %156
  %.pn223 = phi ptr [ %.0169, %156 ], [ %149, %.preheader260 ]
  %.0169 = getelementptr inbounds i8, ptr %.pn223, i64 1
  %157 = load i8, ptr %.0169, align 1, !tbaa !9
  %158 = sext i8 %157 to i64
  %159 = getelementptr inbounds i16, ptr %155, i64 %158
  %160 = load i16, ptr %159, align 2, !tbaa !15
  %161 = and i16 %160, 8192
  %.not213 = icmp eq i16 %161, 0
  br i1 %.not213, label %.preheader259, label %156, !llvm.loop !17

.preheader259:                                    ; preds = %156, %.preheader259
  %.pn222 = phi ptr [ %.0168, %.preheader259 ], [ %151, %156 ]
  %.0168 = getelementptr inbounds i8, ptr %.pn222, i64 1
  %162 = load i8, ptr %.0168, align 1, !tbaa !9
  %163 = sext i8 %162 to i64
  %164 = getelementptr inbounds i16, ptr %155, i64 %163
  %165 = load i16, ptr %164, align 2, !tbaa !15
  %166 = and i16 %165, 8192
  %.not214 = icmp eq i16 %166, 0
  br i1 %.not214, label %.preheader258, label %.preheader259, !llvm.loop !18

.preheader258:                                    ; preds = %.preheader259, %.preheader258
  %.pn221 = phi ptr [ %.0171, %.preheader258 ], [ %151, %.preheader259 ]
  %.0171 = getelementptr inbounds i8, ptr %.pn221, i64 -1
  %167 = load i8, ptr %.0171, align 1, !tbaa !9
  %168 = sext i8 %167 to i64
  %169 = getelementptr inbounds i16, ptr %155, i64 %168
  %170 = load i16, ptr %169, align 2, !tbaa !15
  %171 = and i16 %170, 8192
  %.not215 = icmp eq i16 %171, 0
  br i1 %.not215, label %172, label %.preheader258, !llvm.loop !19

172:                                              ; preds = %.preheader258
  store i8 0, ptr %.pn221, align 1, !tbaa !9
  %173 = load ptr, ptr %154, align 8, !tbaa !5
  br label %174

174:                                              ; preds = %174, %172
  %.pn = phi ptr [ %153, %172 ], [ %.0170, %174 ]
  %.0170 = getelementptr inbounds i8, ptr %.pn, i64 -1
  %175 = load i8, ptr %.0170, align 1, !tbaa !9
  %176 = sext i8 %175 to i64
  %177 = getelementptr inbounds i16, ptr %173, i64 %176
  %178 = load i16, ptr %177, align 2, !tbaa !15
  %179 = and i16 %178, 8192
  %.not216 = icmp eq i16 %179, 0
  br i1 %.not216, label %180, label %174, !llvm.loop !20

180:                                              ; preds = %174
  store i8 0, ptr %.pn, align 1, !tbaa !9
  %181 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.36, ptr noundef nonnull %.0169, ptr noundef nonnull %.0168) #10
  %182 = call ptr @styled(i32 noundef %.0185.lcssa, i32 noundef 0)
  %183 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.37, ptr noundef nonnull %5, ptr noundef nonnull %.0169, ptr noundef %182) #10
  store i8 0, ptr %.0170, align 1, !tbaa !9
  %184 = getelementptr inbounds i8, ptr %.pn222, i64 2
  %185 = call ptr @open_file(ptr noundef nonnull %184, ptr noundef nonnull @.str.38, ptr noundef nonnull %4, i32 noundef %.0180.lcssa)
  %.not217 = icmp eq ptr %185, null
  br i1 %.not217, label %186, label %189

186:                                              ; preds = %180
  %187 = load ptr, ptr @stderr, align 8, !tbaa !5
  %188 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %187, ptr noundef nonnull @.str.39, ptr noundef nonnull %184) #11
  br label %.thread248

189:                                              ; preds = %180
  %190 = call i32 @fseek(ptr noundef nonnull %185, i64 noundef 0, i32 noundef 2)
  %191 = call i64 @ftell(ptr noundef nonnull %185)
  %192 = call i32 @fseek(ptr noundef nonnull %185, i64 noundef 0, i32 noundef 0)
  %193 = call noalias ptr @malloc(i64 noundef %191) #14
  %.not218 = icmp eq ptr %193, null
  br i1 %.not218, label %194, label %198

194:                                              ; preds = %189
  %195 = load ptr, ptr @stderr, align 8, !tbaa !5
  %196 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %195, ptr noundef nonnull @.str.40) #11
  %197 = call i32 @fclose(ptr noundef nonnull %185)
  br label %.thread248

198:                                              ; preds = %189
  %199 = call i64 @fread(ptr noundef nonnull %193, i64 noundef %191, i64 noundef 1, ptr noundef nonnull %185)
  %.not219 = icmp eq i64 %199, 1
  br i1 %.not219, label %.preheader, label %202

.preheader:                                       ; preds = %198
  %200 = icmp sgt i64 %191, 0
  br i1 %200, label %.lr.ph293, label %._crit_edge294

.lr.ph293:                                        ; preds = %.preheader
  %201 = add nsw i64 %191, -1
  br label %206

202:                                              ; preds = %198
  %203 = load ptr, ptr @stderr, align 8, !tbaa !5
  %204 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %203, ptr noundef nonnull @.str.41, ptr noundef nonnull %184) #11
  call void @free(ptr noundef nonnull %193) #10
  %205 = call i32 @fclose(ptr noundef nonnull %185)
  br label %.thread248

206:                                              ; preds = %.lr.ph293, %210
  %.0292 = phi i8 [ 0, %.lr.ph293 ], [ %216, %210 ]
  %.0165291 = phi i64 [ 0, %.lr.ph293 ], [ %217, %210 ]
  %207 = icmp eq i8 %.0292, 12
  br i1 %207, label %208, label %210

208:                                              ; preds = %206
  %209 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.42) #10
  br label %210

210:                                              ; preds = %208, %206
  %.1 = phi i8 [ 0, %208 ], [ %.0292, %206 ]
  %.not220 = icmp eq i64 %.0165291, %201
  %211 = select i1 %.not220, ptr @.str.44, ptr @.str.43
  %212 = getelementptr inbounds i8, ptr %193, i64 %.0165291
  %213 = load i8, ptr %212, align 1, !tbaa !9
  %214 = zext i8 %213 to i32
  %215 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull %211, i32 noundef %214) #10
  %216 = add i8 %.1, 1
  %217 = add nuw nsw i64 %.0165291, 1
  %exitcond.not = icmp eq i64 %217, %191
  br i1 %exitcond.not, label %._crit_edge294, label %206, !llvm.loop !21

._crit_edge294:                                   ; preds = %210, %.preheader
  call void @free(ptr noundef nonnull %193) #10
  %218 = call i32 @fclose(ptr noundef nonnull %185)
  %219 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.45) #10
  %220 = call ptr @styled(i32 noundef %.0185.lcssa, i32 noundef 1)
  %221 = call ptr @styled(i32 noundef %.0185.lcssa, i32 noundef 0)
  %222 = call ptr @styled(i32 noundef %.0185.lcssa, i32 noundef 0)
  %223 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.46, ptr noundef nonnull %5, ptr noundef nonnull %.0169, ptr noundef %220, ptr noundef nonnull %5, ptr noundef nonnull %.0169, ptr noundef %221, ptr noundef nonnull %5, ptr noundef nonnull %.0169, ptr noundef %222) #10
  %224 = call ptr @styled(i32 noundef %.0185.lcssa, i32 noundef 2)
  %225 = call ptr @styled(i32 noundef %.0185.lcssa, i32 noundef 0)
  %226 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.47, ptr noundef nonnull %5, ptr noundef nonnull %.0169, ptr noundef %224, ptr noundef nonnull %5, ptr noundef nonnull %.0169, ptr noundef %225) #10
  br label %227

227:                                              ; preds = %152, %150, %148, %.lr.ph296, %._crit_edge294
  %228 = call i32 @fline(ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %144)
  %.not208 = icmp eq i32 %228, -1
  br i1 %.not208, label %.thread248, label %.lr.ph296

229:                                              ; preds = %.lr.ph300
  %230 = load ptr, ptr @stderr, align 8, !tbaa !5
  %231 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %230, ptr noundef nonnull @.str.34, ptr noundef nonnull %143) #11
  %232 = call i32 @fclose(ptr noundef %125)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  br label %245

.thread248:                                       ; preds = %227, %.preheader261, %194, %202, %186
  %.4176 = phi i32 [ 1, %186 ], [ 1, %202 ], [ 1, %194 ], [ %.0172298, %.preheader261 ], [ %.0172298, %227 ]
  %233 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %233) #10
  %234 = call i32 @fclose(ptr noundef nonnull %144)
  %235 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.48, ptr noundef nonnull %143)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  %indvars.iv.next314 = add nuw nsw i64 %indvars.iv313, 1
  %exitcond316.not = icmp eq i64 %indvars.iv.next314, %wide.trip.count
  br i1 %exitcond316.not, label %._crit_edge301, label %.lr.ph300, !llvm.loop !22

._crit_edge301:                                   ; preds = %.thread248
  %236 = icmp eq i32 %.4176, 0
  br i1 %236, label %._crit_edge301.thread, label %242

._crit_edge301.thread:                            ; preds = %137, %._crit_edge301
  %237 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.49) #10
  %238 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.50) #10
  %239 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef nonnull @.str.51) #10
  %240 = call i32 @fclose(ptr noundef %125)
  %241 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52, ptr noundef nonnull %3)
  br label %245

242:                                              ; preds = %._crit_edge301
  %243 = call i32 @fclose(ptr noundef %125)
  %244 = call i32 @remove(ptr noundef nonnull %3) #10
  br label %245

245:                                              ; preds = %229, %96, %242, %._crit_edge301.thread, %126, %114, %.loopexit
  %.5 = phi i32 [ 1, %.loopexit ], [ 1, %114 ], [ 1, %96 ], [ 1, %229 ], [ 0, %._crit_edge301.thread ], [ 1, %242 ], [ 1, %126 ]
  call void @llvm.lifetime.end.p0(i64 4194304, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 262144, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %3) #10
  ret i32 %.5
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strncmp(ptr nocapture noundef, ptr nocapture noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
declare hidden i32 @strcicmp(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden ptr @open_file(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @fline(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare ptr @strstr(ptr noundef, ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare ptr @strchr(ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare hidden ptr @styled(i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @fseek(ptr nocapture noundef, i64 noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i64 @ftell(ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #8

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #9

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @remove(ptr nocapture noundef readonly) local_unnamed_addr #3

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { mustprogress nofree nosync nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { cold nounwind }
attributes #12 = { nounwind willreturn memory(read) }
attributes #13 = { nounwind willreturn memory(none) }
attributes #14 = { nounwind allocsize(0) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!13, !13, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = distinct !{!14, !11}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}
!19 = distinct !{!19, !11}
!20 = distinct !{!20, !11}
!21 = distinct !{!21, !11}
!22 = distinct !{!22, !11}


; Effective O3 passes: ADCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass