; LLVM IR from sylefeb/Silixel :: src/fstapi (fstapi)

; 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"

%struct.fstReaderContext = type { ptr, ptr, i64, i64, i64, i64, i64, i32, i64, i64, ptr, ptr, ptr, i32, ptr, i8, i8, i8, [129 x i8], [120 x i8], i64, ptr, ptr, i64, i32, ptr, ptr, i64, i64, i8, ptr, i64, i64, ptr, i64, ptr, ptr, i64, i64, ptr, i32, i32, ptr, i32, i32, i32, i64, i8, %struct.fstHier, ptr, i32, ptr, i32, i8, [513 x i8], [513 x i8], ptr, i8, i32, i32, [65536 x i8], ptr, ptr }
%struct.fstHier = type { i8, %union.anon }
%union.anon = type { %struct.fstHierAttr }
%struct.fstHierAttr = type { i8, i8, ptr, i64, i64, i32 }

@.str.19 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [19 x i8], align 1
@modtypes = external hidden global [22 x ptr], align 16
@.str.25 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [30 x i8], align 1
@attrtypes = external hidden global [4 x ptr], align 16
@arraytypes = external hidden global [4 x ptr], align 16
@enumvaluetypes = external hidden global [14 x ptr], align 16
@packtypes = external hidden global [4 x ptr], align 16
@.str.28 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [23 x i8], align 1
@vartypes = external hidden global [30 x ptr], align 16
@.str.33 = external hidden unnamed_addr constant [22 x i8], align 1

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

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #1

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

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

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

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

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #2

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

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

; Function Attrs: nounwind allocsize(1)
declare ptr @realloc(ptr noundef, i64 noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @fstReaderFseeko(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstReaderRecreateHierFile(ptr noundef) #6

; Function Attrs: nounwind
declare i32 @feof(ptr noundef) #2

declare i32 @fgetc(ptr noundef) #7

; Function Attrs: nounwind uwtable
declare hidden i64 @fstReaderVarint64(ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i64 @fstGetVarint64(ptr noundef, ptr noundef) #6

; Function Attrs: nounwind uwtable
declare hidden i32 @fstReaderVarint32(ptr noundef) #6

; Function Attrs: nounwind uwtable
define dso_local i32 @fstReaderProcessHier(ptr noundef %0, ptr noundef %1) #6 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca [2 x i8], align 1
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i64, align 8
  %26 = alloca [16 x i8], align 16
  %27 = alloca i32, align 4
  %28 = alloca [16 x i8], align 16
  %29 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 65536, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 0, ptr %19, align 4, !tbaa !9
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = icmp ne ptr %30, null
  br i1 %31, label %33, label %32

32:                                               ; preds = %2
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %687

33:                                               ; preds = %2
  %34 = load ptr, ptr %4, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.fstReaderContext, ptr %34, i32 0, i32 13
  store i32 32, ptr %35, align 8, !tbaa !11
  %36 = load ptr, ptr %4, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.fstReaderContext, ptr %36, i32 0, i32 1
  %38 = load ptr, ptr %37, align 8, !tbaa !15
  %39 = icmp ne ptr %38, null
  br i1 %39, label %46, label %40

40:                                               ; preds = %33
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = call i32 @fstReaderRecreateHierFile(ptr noundef %41)
  %43 = icmp ne i32 %42, 0
  br i1 %43, label %45, label %44

44:                                               ; preds = %40
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %687

45:                                               ; preds = %40
  br label %46

46:                                               ; preds = %45, %33
  %47 = call noalias ptr @malloc(i64 noundef 69633) #9
  store ptr %47, ptr %6, align 8, !tbaa !5
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = icmp ne ptr %48, null
  br i1 %49, label %50, label %126

50:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #8
  call void @llvm.memset.p0.i64(ptr align 1 %21, i8 0, i64 2, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 1, ptr %22, align 4, !tbaa !9
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.fstReaderContext, ptr %52, i32 0, i32 19
  %54 = getelementptr inbounds [120 x i8], ptr %53, i64 0, i64 0
  %55 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %51, ptr noundef @.str.20, ptr noundef %54) #8
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.fstReaderContext, ptr %57, i32 0, i32 18
  %59 = getelementptr inbounds [129 x i8], ptr %58, i64 0, i64 0
  %60 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef @.str.21, ptr noundef %59) #8
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.fstReaderContext, ptr %61, i32 0, i32 20
  %63 = load i64, ptr %62, align 8, !tbaa !16
  %64 = icmp ne i64 %63, 0
  br i1 %64, label %65, label %71

65:                                               ; preds = %50
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.fstReaderContext, ptr %67, i32 0, i32 20
  %69 = load i64, ptr %68, align 8, !tbaa !16
  %70 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef @.str.22, i64 noundef %69) #8
  br label %71

71:                                               ; preds = %65, %50
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.fstReaderContext, ptr %72, i32 0, i32 15
  %74 = load i8, ptr %73, align 8, !tbaa !17
  %75 = sext i8 %74 to i32
  switch i32 %75, label %115 [
    i32 2, label %76
    i32 1, label %78
    i32 0, label %79
    i32 -1, label %81
    i32 -2, label %83
    i32 -3, label %84
    i32 -4, label %86
    i32 -5, label %88
    i32 -6, label %89
    i32 -10, label %91
    i32 -11, label %93
    i32 -12, label %94
    i32 -13, label %96
    i32 -14, label %98
    i32 -15, label %99
    i32 -16, label %101
    i32 -17, label %103
    i32 -18, label %104
    i32 -19, label %106
    i32 -20, label %108
    i32 -21, label %109
    i32 -7, label %111
    i32 -8, label %113
    i32 -9, label %114
  ]

76:                                               ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %77 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 0, ptr %77, align 1, !tbaa !18
  br label %117

78:                                               ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %79

79:                                               ; preds = %78, %71
  %80 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 0, ptr %80, align 1, !tbaa !18
  br label %117

81:                                               ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %82 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 109, ptr %82, align 1, !tbaa !18
  br label %117

83:                                               ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %84

84:                                               ; preds = %83, %71
  %85 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 109, ptr %85, align 1, !tbaa !18
  br label %117

86:                                               ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %87 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 117, ptr %87, align 1, !tbaa !18
  br label %117

88:                                               ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %89

89:                                               ; preds = %88, %71
  %90 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 117, ptr %90, align 1, !tbaa !18
  br label %117

91:                                               ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %92 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 112, ptr %92, align 1, !tbaa !18
  br label %117

93:                                               ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %94

94:                                               ; preds = %93, %71
  %95 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 112, ptr %95, align 1, !tbaa !18
  br label %117

96:                                               ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %97 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 102, ptr %97, align 1, !tbaa !18
  br label %117

98:                                               ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %98, %71
  %100 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 102, ptr %100, align 1, !tbaa !18
  br label %117

101:                                              ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %102 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 97, ptr %102, align 1, !tbaa !18
  br label %117

103:                                              ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %103, %71
  %105 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 97, ptr %105, align 1, !tbaa !18
  br label %117

106:                                              ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %107 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 122, ptr %107, align 1, !tbaa !18
  br label %117

108:                                              ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %109

109:                                              ; preds = %108, %71
  %110 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 122, ptr %110, align 1, !tbaa !18
  br label %117

111:                                              ; preds = %71
  store i32 100, ptr %22, align 4, !tbaa !9
  %112 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 110, ptr %112, align 1, !tbaa !18
  br label %117

113:                                              ; preds = %71
  store i32 10, ptr %22, align 4, !tbaa !9
  br label %114

114:                                              ; preds = %113, %71
  br label %115

115:                                              ; preds = %114, %71
  %116 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  store i8 110, ptr %116, align 1, !tbaa !18
  br label %117

117:                                              ; preds = %115, %111, %109, %106, %104, %101, %99, %96, %94, %91, %89, %86, %84, %81, %79, %76
  %118 = load ptr, ptr %5, align 8, !tbaa !5
  %119 = icmp ne ptr %118, null
  br i1 %119, label %120, label %125

120:                                              ; preds = %117
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = load i32, ptr %22, align 4, !tbaa !9
  %123 = getelementptr inbounds [2 x i8], ptr %21, i64 0, i64 0
  %124 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %121, ptr noundef @.str.23, i32 noundef %122, ptr noundef %123) #8
  br label %125

125:                                              ; preds = %120, %117
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #8
  br label %126

126:                                              ; preds = %125, %46
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.fstReaderContext, ptr %127, i32 0, i32 7
  store i32 0, ptr %128, align 8, !tbaa !19
  %129 = load ptr, ptr %4, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.fstReaderContext, ptr %129, i32 0, i32 8
  store i64 0, ptr %130, align 8, !tbaa !20
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.fstReaderContext, ptr %131, i32 0, i32 10
  %133 = load ptr, ptr %132, align 8, !tbaa !21
  call void @free(ptr noundef %133) #8
  %134 = load i32, ptr %13, align 4, !tbaa !9
  %135 = zext i32 %134 to i64
  %136 = mul i64 %135, 4
  %137 = call noalias ptr @malloc(i64 noundef %136) #9
  %138 = load ptr, ptr %4, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.fstReaderContext, ptr %138, i32 0, i32 10
  store ptr %137, ptr %139, align 8, !tbaa !21
  %140 = load ptr, ptr %4, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.fstReaderContext, ptr %140, i32 0, i32 11
  %142 = load ptr, ptr %141, align 8, !tbaa !22
  call void @free(ptr noundef %142) #8
  %143 = load i32, ptr %13, align 4, !tbaa !9
  %144 = zext i32 %143 to i64
  %145 = mul i64 %144, 1
  %146 = call noalias ptr @malloc(i64 noundef %145) #9
  %147 = load ptr, ptr %4, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.fstReaderContext, ptr %147, i32 0, i32 11
  store ptr %146, ptr %148, align 8, !tbaa !22
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.fstReaderContext, ptr %150, i32 0, i32 1
  %152 = load ptr, ptr %151, align 8, !tbaa !15
  %153 = call i32 @fstReaderFseeko(ptr noundef %149, ptr noundef %152, i64 noundef 0, i32 noundef 0)
  br label %154

154:                                              ; preds = %618, %126
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.fstReaderContext, ptr %155, i32 0, i32 1
  %157 = load ptr, ptr %156, align 8, !tbaa !15
  %158 = call i32 @feof(ptr noundef %157) #8
  %159 = icmp ne i32 %158, 0
  %160 = xor i1 %159, true
  br i1 %160, label %161, label %619

161:                                              ; preds = %154
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %162 = load ptr, ptr %4, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.fstReaderContext, ptr %162, i32 0, i32 1
  %164 = load ptr, ptr %163, align 8, !tbaa !15
  %165 = call i32 @fgetc(ptr noundef %164)
  store i32 %165, ptr %23, align 4, !tbaa !9
  %166 = load i32, ptr %23, align 4, !tbaa !9
  switch i32 %166, label %617 [
    i32 254, label %167
    i32 255, label %230
    i32 252, label %237
    i32 253, label %393
    i32 0, label %407
    i32 1, label %407
    i32 2, label %407
    i32 3, label %407
    i32 4, label %407
    i32 5, label %407
    i32 6, label %407
    i32 7, label %407
    i32 8, label %407
    i32 9, label %407
    i32 10, label %407
    i32 11, label %407
    i32 12, label %407
    i32 13, label %407
    i32 14, label %407
    i32 15, label %407
    i32 16, label %407
    i32 17, label %407
    i32 18, label %407
    i32 19, label %407
    i32 20, label %407
    i32 21, label %407
    i32 22, label %407
    i32 23, label %407
    i32 24, label %407
    i32 25, label %407
    i32 26, label %407
    i32 27, label %407
    i32 28, label %407
    i32 29, label %407
  ]

167:                                              ; preds = %161
  %168 = load ptr, ptr %4, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.fstReaderContext, ptr %168, i32 0, i32 1
  %170 = load ptr, ptr %169, align 8, !tbaa !15
  %171 = call i32 @fgetc(ptr noundef %170)
  store i32 %171, ptr %9, align 4, !tbaa !9
  %172 = load i32, ptr %9, align 4, !tbaa !9
  %173 = icmp slt i32 %172, 0
  br i1 %173, label %177, label %174

174:                                              ; preds = %167
  %175 = load i32, ptr %9, align 4, !tbaa !9
  %176 = icmp sgt i32 %175, 21
  br i1 %176, label %177, label %178

177:                                              ; preds = %174, %167
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %177, %174
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %179, ptr %7, align 8, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %197, %178
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.fstReaderContext, ptr %181, i32 0, i32 1
  %183 = load ptr, ptr %182, align 8, !tbaa !15
  %184 = call i32 @fgetc(ptr noundef %183)
  store i32 %184, ptr %8, align 4, !tbaa !9
  %185 = icmp ne i32 %184, 0
  br i1 %185, label %186, label %198

186:                                              ; preds = %180
  %187 = load i32, ptr %18, align 4, !tbaa !9
  %188 = icmp slt i32 %187, 69632
  br i1 %188, label %189, label %197

189:                                              ; preds = %186
  %190 = load i32, ptr %8, align 4, !tbaa !9
  %191 = trunc i32 %190 to i8
  %192 = load ptr, ptr %7, align 8, !tbaa !5
  %193 = load i32, ptr %18, align 4, !tbaa !9
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %18, align 4, !tbaa !9
  %195 = sext i32 %193 to i64
  %196 = getelementptr inbounds i8, ptr %192, i64 %195
  store i8 %191, ptr %196, align 1, !tbaa !18
  br label %197

197:                                              ; preds = %189, %186
  br label %180, !llvm.loop !23

198:                                              ; preds = %180
  %199 = load i32, ptr %18, align 4, !tbaa !9
  %200 = icmp ne i32 %199, 0
  br i1 %200, label %206, label %201

201:                                              ; preds = %198
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = load i32, ptr %19, align 4, !tbaa !9
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %19, align 4, !tbaa !9
  %205 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %202, i64 noundef 512, ptr noundef @.str.19, i32 noundef %203) #8
  store i32 %205, ptr %18, align 4, !tbaa !9
  br label %206

206:                                              ; preds = %201, %198
  %207 = load ptr, ptr %7, align 8, !tbaa !5
  %208 = load i32, ptr %18, align 4, !tbaa !9
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i8, ptr %207, i64 %209
  store i8 0, ptr %210, align 1, !tbaa !18
  br label %211

211:                                              ; preds = %217, %206
  %212 = load ptr, ptr %4, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.fstReaderContext, ptr %212, i32 0, i32 1
  %214 = load ptr, ptr %213, align 8, !tbaa !15
  %215 = call i32 @fgetc(ptr noundef %214)
  %216 = icmp ne i32 %215, 0
  br i1 %216, label %217, label %218

217:                                              ; preds = %211
  br label %211, !llvm.loop !25

218:                                              ; preds = %211
  %219 = load ptr, ptr %5, align 8, !tbaa !5
  %220 = icmp ne ptr %219, null
  br i1 %220, label %221, label %229

221:                                              ; preds = %218
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = load i32, ptr %9, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds [22 x ptr], ptr @modtypes, i64 0, i64 %224
  %226 = load ptr, ptr %225, align 8, !tbaa !5
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %222, ptr noundef @.str.24, ptr noundef %226, ptr noundef %227) #8
  br label %229

229:                                              ; preds = %221, %218
  br label %618

230:                                              ; preds = %161
  %231 = load ptr, ptr %5, align 8, !tbaa !5
  %232 = icmp ne ptr %231, null
  br i1 %232, label %233, label %236

233:                                              ; preds = %230
  %234 = load ptr, ptr %5, align 8, !tbaa !5
  %235 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %234, ptr noundef @.str.25) #8
  br label %236

236:                                              ; preds = %233, %230
  br label %618

237:                                              ; preds = %161
  %238 = load ptr, ptr %4, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.fstReaderContext, ptr %238, i32 0, i32 1
  %240 = load ptr, ptr %239, align 8, !tbaa !15
  %241 = call i32 @fgetc(ptr noundef %240)
  store i32 %241, ptr %14, align 4, !tbaa !9
  %242 = load ptr, ptr %4, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.fstReaderContext, ptr %242, i32 0, i32 1
  %244 = load ptr, ptr %243, align 8, !tbaa !15
  %245 = call i32 @fgetc(ptr noundef %244)
  store i32 %245, ptr %15, align 4, !tbaa !9
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %246, ptr %7, align 8, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %247

247:                                              ; preds = %264, %237
  %248 = load ptr, ptr %4, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.fstReaderContext, ptr %248, i32 0, i32 1
  %250 = load ptr, ptr %249, align 8, !tbaa !15
  %251 = call i32 @fgetc(ptr noundef %250)
  store i32 %251, ptr %8, align 4, !tbaa !9
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %253, label %265

253:                                              ; preds = %247
  %254 = load i32, ptr %18, align 4, !tbaa !9
  %255 = icmp slt i32 %254, 69632
  br i1 %255, label %256, label %264

256:                                              ; preds = %253
  %257 = load i32, ptr %8, align 4, !tbaa !9
  %258 = trunc i32 %257 to i8
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = load i32, ptr %18, align 4, !tbaa !9
  %261 = add nsw i32 %260, 1
  store i32 %261, ptr %18, align 4, !tbaa !9
  %262 = sext i32 %260 to i64
  %263 = getelementptr inbounds i8, ptr %259, i64 %262
  store i8 %258, ptr %263, align 1, !tbaa !18
  br label %264

264:                                              ; preds = %256, %253
  br label %247, !llvm.loop !26

265:                                              ; preds = %247
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  %267 = load i32, ptr %18, align 4, !tbaa !9
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds i8, ptr %266, i64 %268
  store i8 0, ptr %269, align 1, !tbaa !18
  %270 = load ptr, ptr %6, align 8, !tbaa !5
  %271 = getelementptr inbounds i8, ptr %270, i64 0
  %272 = load i8, ptr %271, align 1, !tbaa !18
  %273 = icmp ne i8 %272, 0
  br i1 %273, label %277, label %274

274:                                              ; preds = %265
  %275 = load ptr, ptr %6, align 8, !tbaa !5
  %276 = call ptr @strcpy(ptr noundef %275, ptr noundef @.str.26) #8
  br label %277

277:                                              ; preds = %274, %265
  %278 = load ptr, ptr %4, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.fstReaderContext, ptr %278, i32 0, i32 1
  %280 = load ptr, ptr %279, align 8, !tbaa !15
  %281 = call i64 @fstReaderVarint64(ptr noundef %280)
  store i64 %281, ptr %16, align 8, !tbaa !27
  %282 = load ptr, ptr %5, align 8, !tbaa !5
  %283 = icmp ne ptr %282, null
  br i1 %283, label %284, label %392

284:                                              ; preds = %277
  %285 = load ptr, ptr %4, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.fstReaderContext, ptr %285, i32 0, i32 17
  %287 = load i8, ptr %286, align 2
  %288 = and i8 %287, 1
  %289 = zext i8 %288 to i32
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %392

291:                                              ; preds = %284
  %292 = load i32, ptr %14, align 4, !tbaa !9
  switch i32 %292, label %354 [
    i32 1, label %293
    i32 2, label %313
    i32 3, label %333
    i32 0, label %353
  ]

293:                                              ; preds = %291
  %294 = load i32, ptr %15, align 4, !tbaa !9
  %295 = icmp slt i32 %294, 0
  br i1 %295, label %299, label %296

296:                                              ; preds = %293
  %297 = load i32, ptr %15, align 4, !tbaa !9
  %298 = icmp sgt i32 %297, 3
  br i1 %298, label %299, label %300

299:                                              ; preds = %296, %293
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %300

300:                                              ; preds = %299, %296
  %301 = load ptr, ptr %5, align 8, !tbaa !5
  %302 = load i32, ptr %14, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds [4 x ptr], ptr @attrtypes, i64 0, i64 %303
  %305 = load ptr, ptr %304, align 8, !tbaa !5
  %306 = load i32, ptr %15, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds [4 x ptr], ptr @arraytypes, i64 0, i64 %307
  %309 = load ptr, ptr %308, align 8, !tbaa !5
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  %311 = load i64, ptr %16, align 8, !tbaa !27
  %312 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %301, ptr noundef @.str.27, ptr noundef %305, ptr noundef %309, ptr noundef %310, i64 noundef %311) #8
  br label %391

313:                                              ; preds = %291
  %314 = load i32, ptr %15, align 4, !tbaa !9
  %315 = icmp slt i32 %314, 0
  br i1 %315, label %319, label %316

316:                                              ; preds = %313
  %317 = load i32, ptr %15, align 4, !tbaa !9
  %318 = icmp sgt i32 %317, 15
  br i1 %318, label %319, label %320

319:                                              ; preds = %316, %313
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %320

320:                                              ; preds = %319, %316
  %321 = load ptr, ptr %5, align 8, !tbaa !5
  %322 = load i32, ptr %14, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds [4 x ptr], ptr @attrtypes, i64 0, i64 %323
  %325 = load ptr, ptr %324, align 8, !tbaa !5
  %326 = load i32, ptr %15, align 4, !tbaa !9
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds [14 x ptr], ptr @enumvaluetypes, i64 0, i64 %327
  %329 = load ptr, ptr %328, align 8, !tbaa !5
  %330 = load ptr, ptr %6, align 8, !tbaa !5
  %331 = load i64, ptr %16, align 8, !tbaa !27
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %321, ptr noundef @.str.27, ptr noundef %325, ptr noundef %329, ptr noundef %330, i64 noundef %331) #8
  br label %391

333:                                              ; preds = %291
  %334 = load i32, ptr %15, align 4, !tbaa !9
  %335 = icmp slt i32 %334, 0
  br i1 %335, label %339, label %336

336:                                              ; preds = %333
  %337 = load i32, ptr %15, align 4, !tbaa !9
  %338 = icmp sgt i32 %337, 3
  br i1 %338, label %339, label %340

339:                                              ; preds = %336, %333
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %340

340:                                              ; preds = %339, %336
  %341 = load ptr, ptr %5, align 8, !tbaa !5
  %342 = load i32, ptr %14, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [4 x ptr], ptr @attrtypes, i64 0, i64 %343
  %345 = load ptr, ptr %344, align 8, !tbaa !5
  %346 = load i32, ptr %15, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds [4 x ptr], ptr @packtypes, i64 0, i64 %347
  %349 = load ptr, ptr %348, align 8, !tbaa !5
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = load i64, ptr %16, align 8, !tbaa !27
  %352 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %341, ptr noundef @.str.27, ptr noundef %345, ptr noundef %349, ptr noundef %350, i64 noundef %351) #8
  br label %391

353:                                              ; preds = %291
  br label %354

354:                                              ; preds = %353, %291
  store i32 0, ptr %14, align 4, !tbaa !9
  %355 = load i32, ptr %15, align 4, !tbaa !9
  %356 = icmp eq i32 %355, 0
  br i1 %356, label %357, label %361

357:                                              ; preds = %354
  %358 = load ptr, ptr %5, align 8, !tbaa !5
  %359 = load ptr, ptr %6, align 8, !tbaa !5
  %360 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %358, ptr noundef @.str.28, ptr noundef %359) #8
  br label %390

361:                                              ; preds = %354
  %362 = load i32, ptr %15, align 4, !tbaa !9
  %363 = icmp eq i32 %362, 4
  br i1 %363, label %367, label %364

364:                                              ; preds = %361
  %365 = load i32, ptr %15, align 4, !tbaa !9
  %366 = icmp eq i32 %365, 5
  br i1 %366, label %367, label %379

367:                                              ; preds = %364, %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %368 = load ptr, ptr %6, align 8, !tbaa !5
  %369 = call i64 @fstGetVarint64(ptr noundef %368, ptr noundef %24)
  store i64 %369, ptr %25, align 8, !tbaa !27
  %370 = load ptr, ptr %5, align 8, !tbaa !5
  %371 = load i32, ptr %14, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [4 x ptr], ptr @attrtypes, i64 0, i64 %372
  %374 = load ptr, ptr %373, align 8, !tbaa !5
  %375 = load i32, ptr %15, align 4, !tbaa !9
  %376 = load i64, ptr %25, align 8, !tbaa !27
  %377 = load i64, ptr %16, align 8, !tbaa !27
  %378 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %370, ptr noundef @.str.29, ptr noundef %374, i32 noundef %375, i64 noundef %376, i64 noundef %377) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  br label %389

379:                                              ; preds = %364
  %380 = load ptr, ptr %5, align 8, !tbaa !5
  %381 = load i32, ptr %14, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds [4 x ptr], ptr @attrtypes, i64 0, i64 %382
  %384 = load ptr, ptr %383, align 8, !tbaa !5
  %385 = load i32, ptr %15, align 4, !tbaa !9
  %386 = load ptr, ptr %6, align 8, !tbaa !5
  %387 = load i64, ptr %16, align 8, !tbaa !27
  %388 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %380, ptr noundef @.str.30, ptr noundef %384, i32 noundef %385, ptr noundef %386, i64 noundef %387) #8
  br label %389

389:                                              ; preds = %379, %367
  br label %390

390:                                              ; preds = %389, %357
  br label %391

391:                                              ; preds = %390, %340, %320, %300
  br label %392

392:                                              ; preds = %391, %284, %277
  br label %618

393:                                              ; preds = %161
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = icmp ne ptr %394, null
  br i1 %395, label %396, label %406

396:                                              ; preds = %393
  %397 = load ptr, ptr %4, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.fstReaderContext, ptr %397, i32 0, i32 17
  %399 = load i8, ptr %398, align 2
  %400 = and i8 %399, 1
  %401 = zext i8 %400 to i32
  %402 = icmp ne i32 %401, 0
  br i1 %402, label %403, label %406

403:                                              ; preds = %396
  %404 = load ptr, ptr %5, align 8, !tbaa !5
  %405 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %404, ptr noundef @.str.31) #8
  br label %406

406:                                              ; preds = %403, %396, %393
  br label %618

407:                                              ; preds = %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161, %161
  %408 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %408, ptr %10, align 4, !tbaa !9
  %409 = load ptr, ptr %4, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.fstReaderContext, ptr %409, i32 0, i32 1
  %411 = load ptr, ptr %410, align 8, !tbaa !15
  %412 = call i32 @fgetc(ptr noundef %411)
  %413 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %413, ptr %7, align 8, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %414

414:                                              ; preds = %431, %407
  %415 = load ptr, ptr %4, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.fstReaderContext, ptr %415, i32 0, i32 1
  %417 = load ptr, ptr %416, align 8, !tbaa !15
  %418 = call i32 @fgetc(ptr noundef %417)
  store i32 %418, ptr %8, align 4, !tbaa !9
  %419 = icmp ne i32 %418, 0
  br i1 %419, label %420, label %432

420:                                              ; preds = %414
  %421 = load i32, ptr %18, align 4, !tbaa !9
  %422 = icmp slt i32 %421, 69632
  br i1 %422, label %423, label %431

423:                                              ; preds = %420
  %424 = load i32, ptr %8, align 4, !tbaa !9
  %425 = trunc i32 %424 to i8
  %426 = load ptr, ptr %7, align 8, !tbaa !5
  %427 = load i32, ptr %18, align 4, !tbaa !9
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %18, align 4, !tbaa !9
  %429 = sext i32 %427 to i64
  %430 = getelementptr inbounds i8, ptr %426, i64 %429
  store i8 %425, ptr %430, align 1, !tbaa !18
  br label %431

431:                                              ; preds = %423, %420
  br label %414, !llvm.loop !28

432:                                              ; preds = %414
  %433 = load ptr, ptr %7, align 8, !tbaa !5
  %434 = load i32, ptr %18, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i8, ptr %433, i64 %435
  store i8 0, ptr %436, align 1, !tbaa !18
  %437 = load ptr, ptr %4, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.fstReaderContext, ptr %437, i32 0, i32 1
  %439 = load ptr, ptr %438, align 8, !tbaa !15
  %440 = call i32 @fstReaderVarint32(ptr noundef %439)
  store i32 %440, ptr %11, align 4, !tbaa !9
  %441 = load ptr, ptr %4, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.fstReaderContext, ptr %441, i32 0, i32 1
  %443 = load ptr, ptr %442, align 8, !tbaa !15
  %444 = call i32 @fstReaderVarint32(ptr noundef %443)
  store i32 %444, ptr %12, align 4, !tbaa !9
  %445 = load i32, ptr %12, align 4, !tbaa !9
  %446 = icmp ne i32 %445, 0
  br i1 %446, label %561, label %447

447:                                              ; preds = %432
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.fstReaderContext, ptr %448, i32 0, i32 7
  %450 = load i32, ptr %449, align 8, !tbaa !19
  %451 = load i32, ptr %13, align 4, !tbaa !9
  %452 = icmp eq i32 %450, %451
  br i1 %452, label %453, label %474

453:                                              ; preds = %447
  %454 = load i32, ptr %13, align 4, !tbaa !9
  %455 = mul i32 %454, 2
  store i32 %455, ptr %13, align 4, !tbaa !9
  %456 = load ptr, ptr %4, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.fstReaderContext, ptr %456, i32 0, i32 10
  %458 = load ptr, ptr %457, align 8, !tbaa !21
  %459 = load i32, ptr %13, align 4, !tbaa !9
  %460 = zext i32 %459 to i64
  %461 = mul i64 %460, 4
  %462 = call ptr @realloc(ptr noundef %458, i64 noundef %461) #10
  %463 = load ptr, ptr %4, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.fstReaderContext, ptr %463, i32 0, i32 10
  store ptr %462, ptr %464, align 8, !tbaa !21
  %465 = load ptr, ptr %4, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.fstReaderContext, ptr %465, i32 0, i32 11
  %467 = load ptr, ptr %466, align 8, !tbaa !22
  %468 = load i32, ptr %13, align 4, !tbaa !9
  %469 = zext i32 %468 to i64
  %470 = mul i64 %469, 1
  %471 = call ptr @realloc(ptr noundef %467, i64 noundef %470) #10
  %472 = load ptr, ptr %4, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.fstReaderContext, ptr %472, i32 0, i32 11
  store ptr %471, ptr %473, align 8, !tbaa !22
  br label %474

474:                                              ; preds = %453, %447
  %475 = load i32, ptr %11, align 4, !tbaa !9
  %476 = load ptr, ptr %4, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.fstReaderContext, ptr %476, i32 0, i32 10
  %478 = load ptr, ptr %477, align 8, !tbaa !21
  %479 = load ptr, ptr %4, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.fstReaderContext, ptr %479, i32 0, i32 7
  %481 = load i32, ptr %480, align 8, !tbaa !19
  %482 = zext i32 %481 to i64
  %483 = getelementptr inbounds i32, ptr %478, i64 %482
  store i32 %475, ptr %483, align 4, !tbaa !9
  %484 = load i32, ptr %10, align 4, !tbaa !9
  %485 = trunc i32 %484 to i8
  %486 = load ptr, ptr %4, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.fstReaderContext, ptr %486, i32 0, i32 11
  %488 = load ptr, ptr %487, align 8, !tbaa !22
  %489 = load ptr, ptr %4, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.fstReaderContext, ptr %489, i32 0, i32 7
  %491 = load i32, ptr %490, align 8, !tbaa !19
  %492 = zext i32 %491 to i64
  %493 = getelementptr inbounds i8, ptr %488, i64 %492
  store i8 %485, ptr %493, align 1, !tbaa !18
  %494 = load i32, ptr %11, align 4, !tbaa !9
  %495 = load ptr, ptr %4, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.fstReaderContext, ptr %495, i32 0, i32 13
  %497 = load i32, ptr %496, align 8, !tbaa !11
  %498 = icmp ugt i32 %494, %497
  br i1 %498, label %499, label %503

499:                                              ; preds = %474
  %500 = load i32, ptr %11, align 4, !tbaa !9
  %501 = load ptr, ptr %4, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.fstReaderContext, ptr %501, i32 0, i32 13
  store i32 %500, ptr %502, align 8, !tbaa !11
  br label %503

503:                                              ; preds = %499, %474
  %504 = load i32, ptr %10, align 4, !tbaa !9
  %505 = icmp eq i32 %504, 3
  br i1 %505, label %515, label %506

506:                                              ; preds = %503
  %507 = load i32, ptr %10, align 4, !tbaa !9
  %508 = icmp eq i32 %507, 4
  br i1 %508, label %515, label %509

509:                                              ; preds = %506
  %510 = load i32, ptr %10, align 4, !tbaa !9
  %511 = icmp eq i32 %510, 20
  br i1 %511, label %515, label %512

512:                                              ; preds = %509
  %513 = load i32, ptr %10, align 4, !tbaa !9
  %514 = icmp eq i32 %513, 29
  br i1 %514, label %515, label %528

515:                                              ; preds = %512, %509, %506, %503
  %516 = load i32, ptr %10, align 4, !tbaa !9
  %517 = icmp ne i32 %516, 29
  %518 = zext i1 %517 to i64
  %519 = select i1 %517, i32 64, i32 32
  store i32 %519, ptr %11, align 4, !tbaa !9
  %520 = load ptr, ptr %4, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.fstReaderContext, ptr %520, i32 0, i32 11
  %522 = load ptr, ptr %521, align 8, !tbaa !22
  %523 = load ptr, ptr %4, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.fstReaderContext, ptr %523, i32 0, i32 7
  %525 = load i32, ptr %524, align 8, !tbaa !19
  %526 = zext i32 %525 to i64
  %527 = getelementptr inbounds i8, ptr %522, i64 %526
  store i8 3, ptr %527, align 1, !tbaa !18
  br label %528

528:                                              ; preds = %515, %512
  %529 = load ptr, ptr %5, align 8, !tbaa !5
  %530 = icmp ne ptr %529, null
  br i1 %530, label %531, label %556

531:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %532 = load i32, ptr %10, align 4, !tbaa !9
  %533 = icmp ne i32 %532, 18
  br i1 %533, label %534, label %536

534:                                              ; preds = %531
  %535 = load i32, ptr %11, align 4, !tbaa !9
  br label %540

536:                                              ; preds = %531
  %537 = load i32, ptr %11, align 4, !tbaa !9
  %538 = sub i32 %537, 2
  %539 = udiv i32 %538, 3
  br label %540

540:                                              ; preds = %536, %534
  %541 = phi i32 [ %535, %534 ], [ %539, %536 ]
  store i32 %541, ptr %27, align 4, !tbaa !9
  %542 = getelementptr inbounds [16 x i8], ptr %26, i64 0, i64 0
  %543 = load ptr, ptr %4, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.fstReaderContext, ptr %543, i32 0, i32 7
  %545 = load i32, ptr %544, align 8, !tbaa !19
  %546 = add i32 %545, 1
  call void @fstVcdID(ptr noundef %542, i32 noundef %546)
  %547 = load ptr, ptr %5, align 8, !tbaa !5
  %548 = load i32, ptr %10, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds [30 x ptr], ptr @vartypes, i64 0, i64 %549
  %551 = load ptr, ptr %550, align 8, !tbaa !5
  %552 = load i32, ptr %27, align 4, !tbaa !9
  %553 = getelementptr inbounds [16 x i8], ptr %26, i64 0, i64 0
  %554 = load ptr, ptr %6, align 8, !tbaa !5
  %555 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %547, ptr noundef @.str.32, ptr noundef %551, i32 noundef %552, ptr noundef %553, ptr noundef %554) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #8
  br label %556

556:                                              ; preds = %540, %528
  %557 = load ptr, ptr %4, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.fstReaderContext, ptr %557, i32 0, i32 7
  %559 = load i32, ptr %558, align 8, !tbaa !19
  %560 = add i32 %559, 1
  store i32 %560, ptr %558, align 8, !tbaa !19
  br label %616

561:                                              ; preds = %432
  %562 = load i32, ptr %10, align 4, !tbaa !9
  %563 = icmp eq i32 %562, 3
  br i1 %563, label %573, label %564

564:                                              ; preds = %561
  %565 = load i32, ptr %10, align 4, !tbaa !9
  %566 = icmp eq i32 %565, 4
  br i1 %566, label %573, label %567

567:                                              ; preds = %564
  %568 = load i32, ptr %10, align 4, !tbaa !9
  %569 = icmp eq i32 %568, 20
  br i1 %569, label %573, label %570

570:                                              ; preds = %567
  %571 = load i32, ptr %10, align 4, !tbaa !9
  %572 = icmp eq i32 %571, 29
  br i1 %572, label %573, label %586

573:                                              ; preds = %570, %567, %564, %561
  %574 = load i32, ptr %10, align 4, !tbaa !9
  %575 = icmp ne i32 %574, 29
  %576 = zext i1 %575 to i64
  %577 = select i1 %575, i32 64, i32 32
  store i32 %577, ptr %11, align 4, !tbaa !9
  %578 = load ptr, ptr %4, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.fstReaderContext, ptr %578, i32 0, i32 11
  %580 = load ptr, ptr %579, align 8, !tbaa !22
  %581 = load ptr, ptr %4, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.fstReaderContext, ptr %581, i32 0, i32 7
  %583 = load i32, ptr %582, align 8, !tbaa !19
  %584 = zext i32 %583 to i64
  %585 = getelementptr inbounds i8, ptr %580, i64 %584
  store i8 3, ptr %585, align 1, !tbaa !18
  br label %586

586:                                              ; preds = %573, %570
  %587 = load ptr, ptr %5, align 8, !tbaa !5
  %588 = icmp ne ptr %587, null
  br i1 %588, label %589, label %611

589:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  %590 = load i32, ptr %10, align 4, !tbaa !9
  %591 = icmp ne i32 %590, 18
  br i1 %591, label %592, label %594

592:                                              ; preds = %589
  %593 = load i32, ptr %11, align 4, !tbaa !9
  br label %598

594:                                              ; preds = %589
  %595 = load i32, ptr %11, align 4, !tbaa !9
  %596 = sub i32 %595, 2
  %597 = udiv i32 %596, 3
  br label %598

598:                                              ; preds = %594, %592
  %599 = phi i32 [ %593, %592 ], [ %597, %594 ]
  store i32 %599, ptr %29, align 4, !tbaa !9
  %600 = getelementptr inbounds [16 x i8], ptr %28, i64 0, i64 0
  %601 = load i32, ptr %12, align 4, !tbaa !9
  call void @fstVcdID(ptr noundef %600, i32 noundef %601)
  %602 = load ptr, ptr %5, align 8, !tbaa !5
  %603 = load i32, ptr %10, align 4, !tbaa !9
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds [30 x ptr], ptr @vartypes, i64 0, i64 %604
  %606 = load ptr, ptr %605, align 8, !tbaa !5
  %607 = load i32, ptr %29, align 4, !tbaa !9
  %608 = getelementptr inbounds [16 x i8], ptr %28, i64 0, i64 0
  %609 = load ptr, ptr %6, align 8, !tbaa !5
  %610 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %602, ptr noundef @.str.32, ptr noundef %606, i32 noundef %607, ptr noundef %608, ptr noundef %609) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #8
  br label %611

611:                                              ; preds = %598, %586
  %612 = load ptr, ptr %4, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.fstReaderContext, ptr %612, i32 0, i32 8
  %614 = load i64, ptr %613, align 8, !tbaa !20
  %615 = add i64 %614, 1
  store i64 %615, ptr %613, align 8, !tbaa !20
  br label %616

616:                                              ; preds = %611, %556
  br label %618

617:                                              ; preds = %161
  br label %618

618:                                              ; preds = %617, %616, %406, %392, %236, %229
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  br label %154, !llvm.loop !29

619:                                              ; preds = %154
  %620 = load ptr, ptr %5, align 8, !tbaa !5
  %621 = icmp ne ptr %620, null
  br i1 %621, label %622, label %625

622:                                              ; preds = %619
  %623 = load ptr, ptr %5, align 8, !tbaa !5
  %624 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %623, ptr noundef @.str.33) #8
  br label %625

625:                                              ; preds = %622, %619
  %626 = load ptr, ptr %4, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.fstReaderContext, ptr %626, i32 0, i32 7
  %628 = load i32, ptr %627, align 8, !tbaa !19
  %629 = icmp ne i32 %628, 0
  br i1 %629, label %630, label %634

630:                                              ; preds = %625
  %631 = load ptr, ptr %4, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.fstReaderContext, ptr %631, i32 0, i32 7
  %633 = load i32, ptr %632, align 8, !tbaa !19
  br label %635

634:                                              ; preds = %625
  br label %635

635:                                              ; preds = %634, %630
  %636 = phi i32 [ %633, %630 ], [ 1, %634 ]
  store i32 %636, ptr %17, align 4, !tbaa !9
  %637 = load ptr, ptr %4, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.fstReaderContext, ptr %637, i32 0, i32 10
  %639 = load ptr, ptr %638, align 8, !tbaa !21
  %640 = load i32, ptr %17, align 4, !tbaa !9
  %641 = zext i32 %640 to i64
  %642 = mul i64 %641, 4
  %643 = call ptr @realloc(ptr noundef %639, i64 noundef %642) #10
  %644 = load ptr, ptr %4, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.fstReaderContext, ptr %644, i32 0, i32 10
  store ptr %643, ptr %645, align 8, !tbaa !21
  %646 = load ptr, ptr %4, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.fstReaderContext, ptr %646, i32 0, i32 11
  %648 = load ptr, ptr %647, align 8, !tbaa !22
  %649 = load i32, ptr %17, align 4, !tbaa !9
  %650 = zext i32 %649 to i64
  %651 = mul i64 %650, 1
  %652 = call ptr @realloc(ptr noundef %648, i64 noundef %651) #10
  %653 = load ptr, ptr %4, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.fstReaderContext, ptr %653, i32 0, i32 11
  store ptr %652, ptr %654, align 8, !tbaa !22
  %655 = load ptr, ptr %4, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.fstReaderContext, ptr %655, i32 0, i32 12
  %657 = load ptr, ptr %656, align 8, !tbaa !30
  call void @free(ptr noundef %657) #8
  %658 = load i32, ptr %17, align 4, !tbaa !9
  %659 = add i32 %658, 7
  %660 = udiv i32 %659, 8
  %661 = zext i32 %660 to i64
  %662 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %661) #11
  %663 = load ptr, ptr %4, align 8, !tbaa !5
  %664 = getelementptr inbounds %struct.fstReaderContext, ptr %663, i32 0, i32 12
  store ptr %662, ptr %664, align 8, !tbaa !30
  %665 = load ptr, ptr %4, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.fstReaderContext, ptr %665, i32 0, i32 14
  %667 = load ptr, ptr %666, align 8, !tbaa !31
  call void @free(ptr noundef %667) #8
  %668 = load ptr, ptr %4, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.fstReaderContext, ptr %668, i32 0, i32 13
  %670 = load i32, ptr %669, align 8, !tbaa !11
  %671 = add i32 %670, 1
  %672 = zext i32 %671 to i64
  %673 = call noalias ptr @malloc(i64 noundef %672) #9
  %674 = load ptr, ptr %4, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.fstReaderContext, ptr %674, i32 0, i32 14
  store ptr %673, ptr %675, align 8, !tbaa !31
  %676 = load ptr, ptr %4, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.fstReaderContext, ptr %676, i32 0, i32 7
  %678 = load i32, ptr %677, align 8, !tbaa !19
  %679 = zext i32 %678 to i64
  %680 = load ptr, ptr %4, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.fstReaderContext, ptr %680, i32 0, i32 8
  %682 = load i64, ptr %681, align 8, !tbaa !20
  %683 = add i64 %679, %682
  %684 = load ptr, ptr %4, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.fstReaderContext, ptr %684, i32 0, i32 6
  store i64 %683, ptr %685, align 8, !tbaa !32
  %686 = load ptr, ptr %6, align 8, !tbaa !5
  call void @free(ptr noundef %686) #8
  store i32 1, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %687

687:                                              ; preds = %635, %44, %32
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  %688 = load i32, ptr %3, align 4
  ret i32 %688
}

; Function Attrs: nounwind uwtable
declare hidden void @fstVcdID(ptr noundef, i32 noundef) #6

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind allocsize(0,1) "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 #2 = { 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 #3 = { 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind allocsize(1) "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 = { 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 #7 = { "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 }
attributes #9 = { nounwind allocsize(0) }
attributes #10 = { nounwind allocsize(1) }
attributes #11 = { nounwind allocsize(0,1) }

!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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 104}
!12 = !{!"fstReaderContext", !6, i64 0, !6, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !10, i64 56, !13, i64 64, !13, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !10, i64 104, !6, i64 112, !7, i64 120, !7, i64 121, !10, i64 122, !10, i64 122, !10, i64 122, !10, i64 122, !10, i64 122, !10, i64 122, !10, i64 122, !10, i64 122, !7, i64 123, !7, i64 252, !13, i64 376, !6, i64 384, !6, i64 392, !13, i64 400, !10, i64 408, !6, i64 416, !6, i64 424, !13, i64 432, !13, i64 440, !10, i64 448, !6, i64 456, !13, i64 464, !13, i64 472, !6, i64 480, !13, i64 488, !6, i64 496, !6, i64 504, !13, i64 512, !13, i64 520, !6, i64 528, !10, i64 536, !10, i64 540, !6, i64 544, !10, i64 552, !10, i64 556, !10, i64 560, !13, i64 568, !10, i64 576, !14, i64 584, !6, i64 632, !10, i64 640, !6, i64 648, !10, i64 656, !10, i64 660, !7, i64 661, !7, i64 1174, !6, i64 1688, !10, i64 1696, !10, i64 1700, !10, i64 1704, !7, i64 1708, !6, i64 67248, !6, i64 67256}
!13 = !{!"long", !7, i64 0}
!14 = !{!"fstHier", !7, i64 0, !7, i64 8}
!15 = !{!12, !6, i64 8}
!16 = !{!12, !13, i64 376}
!17 = !{!12, !7, i64 120}
!18 = !{!7, !7, i64 0}
!19 = !{!12, !10, i64 56}
!20 = !{!12, !13, i64 64}
!21 = !{!12, !6, i64 80}
!22 = !{!12, !6, i64 88}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = !{!13, !13, i64 0}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = !{!12, !6, i64 96}
!31 = !{!12, !6, i64 112}
!32 = !{!12, !13, i64 48}


; 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"

@.str.19 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [19 x i8], align 1
@modtypes = external hidden local_unnamed_addr global [22 x ptr], align 16
@.str.25 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [30 x i8], align 1
@attrtypes = external hidden local_unnamed_addr global [4 x ptr], align 16
@arraytypes = external hidden local_unnamed_addr global [4 x ptr], align 16
@enumvaluetypes = external hidden local_unnamed_addr global [14 x ptr], align 16
@packtypes = external hidden local_unnamed_addr global [4 x ptr], align 16
@.str.28 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [23 x i8], align 1
@vartypes = external hidden local_unnamed_addr global [30 x ptr], align 16
@.str.33 = external hidden unnamed_addr constant [22 x i8], align 1

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

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

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

; 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 #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 #4

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

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #5

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

; Function Attrs: mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias noundef ptr @realloc(ptr allocptr nocapture noundef, i64 noundef) local_unnamed_addr #6

; Function Attrs: nounwind uwtable
declare dso_local i32 @fstReaderFseeko(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare hidden i32 @fstReaderRecreateHierFile(ptr noundef) local_unnamed_addr #7

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

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

; Function Attrs: nounwind uwtable
declare hidden i64 @fstReaderVarint64(ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare hidden i64 @fstGetVarint64(ptr noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
declare hidden i32 @fstReaderVarint32(ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @fstReaderProcessHier(ptr noundef %0, ptr noundef %1) local_unnamed_addr #7 {
  %3 = alloca [2 x i8], align 2
  %4 = alloca i32, align 4
  %5 = alloca [16 x i8], align 16
  %6 = alloca [16 x i8], align 16
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %287, label %7

7:                                                ; preds = %2
  %8 = getelementptr inbounds i8, ptr %0, i64 104
  store i32 32, ptr %8, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %.not252 = icmp eq ptr %10, null
  br i1 %.not252, label %11, label %13

11:                                               ; preds = %7
  %12 = tail call i32 @fstReaderRecreateHierFile(ptr noundef nonnull %0)
  %.not253 = icmp eq i32 %12, 0
  br i1 %.not253, label %287, label %13

13:                                               ; preds = %11, %7
  %14 = tail call noalias dereferenceable_or_null(69633) ptr @malloc(i64 noundef 69633) #9
  %.not254 = icmp eq ptr %1, null
  br i1 %.not254, label %53, label %15

15:                                               ; preds = %13
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %3) #10
  store i16 0, ptr %3, align 2
  %16 = getelementptr inbounds i8, ptr %0, i64 252
  %17 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.20, ptr noundef nonnull %16) #10
  %18 = getelementptr inbounds i8, ptr %0, i64 123
  %19 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.21, ptr noundef nonnull %18) #10
  %20 = getelementptr inbounds i8, ptr %0, i64 376
  %21 = load i64, ptr %20, align 8, !tbaa !14
  %.not255 = icmp eq i64 %21, 0
  br i1 %.not255, label %24, label %22

22:                                               ; preds = %15
  %23 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.22, i64 noundef %21) #10
  br label %24

24:                                               ; preds = %22, %15
  %25 = getelementptr inbounds i8, ptr %0, i64 120
  %26 = load i8, ptr %25, align 8, !tbaa !15
  switch i8 %26, label %50 [
    i8 2, label %27
    i8 1, label %28
    i8 0, label %29
    i8 -1, label %30
    i8 -2, label %31
    i8 -3, label %32
    i8 -4, label %33
    i8 -5, label %34
    i8 -6, label %35
    i8 -10, label %36
    i8 -11, label %37
    i8 -12, label %38
    i8 -13, label %39
    i8 -14, label %40
    i8 -15, label %41
    i8 -16, label %42
    i8 -17, label %43
    i8 -18, label %44
    i8 -19, label %45
    i8 -20, label %46
    i8 -21, label %47
    i8 -7, label %48
    i8 -8, label %49
  ]

27:                                               ; preds = %24
  store i8 0, ptr %3, align 2, !tbaa !16
  br label %51

28:                                               ; preds = %24
  br label %29

29:                                               ; preds = %28, %24
  %.0216 = phi i32 [ 1, %24 ], [ 10, %28 ]
  store i8 0, ptr %3, align 2, !tbaa !16
  br label %51

30:                                               ; preds = %24
  store i8 109, ptr %3, align 2, !tbaa !16
  br label %51

31:                                               ; preds = %24
  br label %32

32:                                               ; preds = %31, %24
  %.1 = phi i32 [ 1, %24 ], [ 10, %31 ]
  store i8 109, ptr %3, align 2, !tbaa !16
  br label %51

33:                                               ; preds = %24
  store i8 117, ptr %3, align 2, !tbaa !16
  br label %51

34:                                               ; preds = %24
  br label %35

35:                                               ; preds = %34, %24
  %.2 = phi i32 [ 1, %24 ], [ 10, %34 ]
  store i8 117, ptr %3, align 2, !tbaa !16
  br label %51

36:                                               ; preds = %24
  store i8 112, ptr %3, align 2, !tbaa !16
  br label %51

37:                                               ; preds = %24
  br label %38

38:                                               ; preds = %37, %24
  %.3 = phi i32 [ 1, %24 ], [ 10, %37 ]
  store i8 112, ptr %3, align 2, !tbaa !16
  br label %51

39:                                               ; preds = %24
  store i8 102, ptr %3, align 2, !tbaa !16
  br label %51

40:                                               ; preds = %24
  br label %41

41:                                               ; preds = %40, %24
  %.4 = phi i32 [ 1, %24 ], [ 10, %40 ]
  store i8 102, ptr %3, align 2, !tbaa !16
  br label %51

42:                                               ; preds = %24
  store i8 97, ptr %3, align 2, !tbaa !16
  br label %51

43:                                               ; preds = %24
  br label %44

44:                                               ; preds = %43, %24
  %.5 = phi i32 [ 1, %24 ], [ 10, %43 ]
  store i8 97, ptr %3, align 2, !tbaa !16
  br label %51

45:                                               ; preds = %24
  store i8 122, ptr %3, align 2, !tbaa !16
  br label %51

46:                                               ; preds = %24
  br label %47

47:                                               ; preds = %46, %24
  %.6 = phi i32 [ 1, %24 ], [ 10, %46 ]
  store i8 122, ptr %3, align 2, !tbaa !16
  br label %51

48:                                               ; preds = %24
  store i8 110, ptr %3, align 2, !tbaa !16
  br label %51

49:                                               ; preds = %24
  br label %50

50:                                               ; preds = %49, %24
  %.7 = phi i32 [ 1, %24 ], [ 10, %49 ]
  store i8 110, ptr %3, align 2, !tbaa !16
  br label %51

51:                                               ; preds = %27, %29, %30, %32, %33, %35, %36, %38, %39, %41, %42, %44, %45, %47, %48, %50
  %.8 = phi i32 [ %.7, %50 ], [ 100, %48 ], [ %.6, %47 ], [ 100, %45 ], [ %.5, %44 ], [ 100, %42 ], [ %.4, %41 ], [ 100, %39 ], [ %.3, %38 ], [ 100, %36 ], [ %.2, %35 ], [ 100, %33 ], [ %.1, %32 ], [ 100, %30 ], [ %.0216, %29 ], [ 100, %27 ]
  %52 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.23, i32 noundef %.8, ptr noundef nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %3) #10
  br label %53

53:                                               ; preds = %51, %13
  %54 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %54, align 8, !tbaa !17
  %55 = getelementptr inbounds i8, ptr %0, i64 64
  store i64 0, ptr %55, align 8, !tbaa !18
  %56 = getelementptr inbounds i8, ptr %0, i64 80
  %57 = load ptr, ptr %56, align 8, !tbaa !19
  call void @free(ptr noundef %57) #10
  %58 = call noalias dereferenceable_or_null(262144) ptr @malloc(i64 noundef 262144) #9
  store ptr %58, ptr %56, align 8, !tbaa !19
  %59 = getelementptr inbounds i8, ptr %0, i64 88
  %60 = load ptr, ptr %59, align 8, !tbaa !20
  call void @free(ptr noundef %60) #10
  %61 = call noalias dereferenceable_or_null(65536) ptr @malloc(i64 noundef 65536) #9
  store ptr %61, ptr %59, align 8, !tbaa !20
  %62 = load ptr, ptr %9, align 8, !tbaa !13
  %63 = call i32 @fstReaderFseeko(ptr noundef nonnull %0, ptr noundef %62, i64 noundef 0, i32 noundef 0)
  %64 = load ptr, ptr %9, align 8, !tbaa !13
  %65 = call i32 @feof(ptr noundef %64) #10
  %.not256285 = icmp eq i32 %65, 0
  br i1 %.not256285, label %.lr.ph289, label %._crit_edge290

.lr.ph289:                                        ; preds = %53
  %66 = getelementptr inbounds i8, ptr %0, i64 122
  br label %67

67:                                               ; preds = %.lr.ph289, %257
  %.0217287 = phi i32 [ 0, %.lr.ph289 ], [ %.2219, %257 ]
  %.0229286 = phi i32 [ 65536, %.lr.ph289 ], [ %.2231, %257 ]
  %68 = load ptr, ptr %9, align 8, !tbaa !13
  %69 = call i32 @fgetc(ptr noundef %68)
  switch i32 %69, label %257 [
    i32 254, label %70
    i32 255, label %99
    i32 252, label %102
    i32 253, label %162
    i32 0, label %168
    i32 1, label %168
    i32 2, label %168
    i32 3, label %168
    i32 4, label %168
    i32 5, label %168
    i32 6, label %168
    i32 7, label %168
    i32 8, label %168
    i32 9, label %168
    i32 10, label %168
    i32 11, label %168
    i32 12, label %168
    i32 13, label %168
    i32 14, label %168
    i32 15, label %168
    i32 16, label %168
    i32 17, label %168
    i32 18, label %168
    i32 19, label %168
    i32 20, label %168
    i32 21, label %168
    i32 22, label %168
    i32 23, label %168
    i32 24, label %168
    i32 25, label %168
    i32 26, label %168
    i32 27, label %168
    i32 28, label %168
    i32 29, label %168
  ]

70:                                               ; preds = %67
  %71 = load ptr, ptr %9, align 8, !tbaa !13
  %72 = call i32 @fgetc(ptr noundef %71)
  %or.cond = icmp ugt i32 %72, 21
  %spec.store.select = select i1 %or.cond, i32 0, i32 %72
  %73 = load ptr, ptr %9, align 8, !tbaa !13
  %74 = call i32 @fgetc(ptr noundef %73)
  %.not268279 = icmp eq i32 %74, 0
  br i1 %.not268279, label %._crit_edge283.thread, label %.lr.ph282

.lr.ph282:                                        ; preds = %70, %82
  %75 = phi i32 [ %84, %82 ], [ %74, %70 ]
  %.0220280 = phi i32 [ %.1221, %82 ], [ 0, %70 ]
  %76 = icmp slt i32 %.0220280, 69632
  br i1 %76, label %77, label %82

77:                                               ; preds = %.lr.ph282
  %78 = trunc i32 %75 to i8
  %79 = add nsw i32 %.0220280, 1
  %80 = sext i32 %.0220280 to i64
  %81 = getelementptr inbounds i8, ptr %14, i64 %80
  store i8 %78, ptr %81, align 1, !tbaa !16
  br label %82

82:                                               ; preds = %77, %.lr.ph282
  %.1221 = phi i32 [ %79, %77 ], [ %.0220280, %.lr.ph282 ]
  %83 = load ptr, ptr %9, align 8, !tbaa !13
  %84 = call i32 @fgetc(ptr noundef %83)
  %.not268 = icmp eq i32 %84, 0
  br i1 %.not268, label %._crit_edge283, label %.lr.ph282, !llvm.loop !21

._crit_edge283:                                   ; preds = %82
  %.not269 = icmp eq i32 %.1221, 0
  br i1 %.not269, label %._crit_edge283.thread, label %87

._crit_edge283.thread:                            ; preds = %70, %._crit_edge283
  %85 = add nsw i32 %.0217287, 1
  %86 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %14, i64 noundef 512, ptr noundef nonnull @.str.19, i32 noundef %.0217287) #10
  br label %87

87:                                               ; preds = %._crit_edge283.thread, %._crit_edge283
  %.2222 = phi i32 [ %.1221, %._crit_edge283 ], [ %86, %._crit_edge283.thread ]
  %.1218 = phi i32 [ %.0217287, %._crit_edge283 ], [ %85, %._crit_edge283.thread ]
  %88 = sext i32 %.2222 to i64
  %89 = getelementptr inbounds i8, ptr %14, i64 %88
  store i8 0, ptr %89, align 1, !tbaa !16
  br label %90

90:                                               ; preds = %90, %87
  %91 = load ptr, ptr %9, align 8, !tbaa !13
  %92 = call i32 @fgetc(ptr noundef %91)
  %.not270 = icmp eq i32 %92, 0
  br i1 %.not270, label %93, label %90, !llvm.loop !23

93:                                               ; preds = %90
  br i1 %.not254, label %257, label %94

94:                                               ; preds = %93
  %95 = zext nneg i32 %spec.store.select to i64
  %96 = getelementptr inbounds [22 x ptr], ptr @modtypes, i64 0, i64 %95
  %97 = load ptr, ptr %96, align 8, !tbaa !24
  %98 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.24, ptr noundef %97, ptr noundef %14) #10
  br label %257

99:                                               ; preds = %67
  br i1 %.not254, label %257, label %100

100:                                              ; preds = %99
  %101 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.25) #10
  br label %257

102:                                              ; preds = %67
  %103 = load ptr, ptr %9, align 8, !tbaa !13
  %104 = call i32 @fgetc(ptr noundef %103)
  %105 = load ptr, ptr %9, align 8, !tbaa !13
  %106 = call i32 @fgetc(ptr noundef %105)
  %107 = load ptr, ptr %9, align 8, !tbaa !13
  %108 = call i32 @fgetc(ptr noundef %107)
  %.not265273 = icmp eq i32 %108, 0
  br i1 %.not265273, label %._crit_edge277, label %.lr.ph276

.lr.ph276:                                        ; preds = %102, %116
  %109 = phi i32 [ %118, %116 ], [ %108, %102 ]
  %.3223274 = phi i32 [ %.4224, %116 ], [ 0, %102 ]
  %110 = icmp slt i32 %.3223274, 69632
  br i1 %110, label %111, label %116

111:                                              ; preds = %.lr.ph276
  %112 = trunc i32 %109 to i8
  %113 = add nsw i32 %.3223274, 1
  %114 = sext i32 %.3223274 to i64
  %115 = getelementptr inbounds i8, ptr %14, i64 %114
  store i8 %112, ptr %115, align 1, !tbaa !16
  br label %116

116:                                              ; preds = %111, %.lr.ph276
  %.4224 = phi i32 [ %113, %111 ], [ %.3223274, %.lr.ph276 ]
  %117 = load ptr, ptr %9, align 8, !tbaa !13
  %118 = call i32 @fgetc(ptr noundef %117)
  %.not265 = icmp eq i32 %118, 0
  br i1 %.not265, label %._crit_edge277, label %.lr.ph276, !llvm.loop !25

._crit_edge277:                                   ; preds = %116, %102
  %.3223.lcssa = phi i32 [ 0, %102 ], [ %.4224, %116 ]
  %119 = sext i32 %.3223.lcssa to i64
  %120 = getelementptr inbounds i8, ptr %14, i64 %119
  store i8 0, ptr %120, align 1, !tbaa !16
  %121 = load i8, ptr %14, align 1, !tbaa !16
  %.not266 = icmp eq i8 %121, 0
  br i1 %.not266, label %122, label %124

122:                                              ; preds = %._crit_edge277
  %123 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %14, ptr noundef nonnull dereferenceable(1) @.str.26) #10
  br label %124

124:                                              ; preds = %122, %._crit_edge277
  %125 = load ptr, ptr %9, align 8, !tbaa !13
  %126 = call i64 @fstReaderVarint64(ptr noundef %125)
  br i1 %.not254, label %257, label %127

127:                                              ; preds = %124
  %128 = load i8, ptr %66, align 2
  %129 = and i8 %128, 1
  %.not267 = icmp eq i8 %129, 0
  br i1 %.not267, label %257, label %130

130:                                              ; preds = %127
  switch i32 %104, label %149 [
    i32 1, label %131
    i32 2, label %137
    i32 3, label %143
  ]

131:                                              ; preds = %130
  %or.cond3 = icmp ugt i32 %106, 3
  %spec.store.select22 = select i1 %or.cond3, i32 0, i32 %106
  %132 = load ptr, ptr getelementptr inbounds (i8, ptr @attrtypes, i64 8), align 8, !tbaa !24
  %133 = zext nneg i32 %spec.store.select22 to i64
  %134 = getelementptr inbounds [4 x ptr], ptr @arraytypes, i64 0, i64 %133
  %135 = load ptr, ptr %134, align 8, !tbaa !24
  %136 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.27, ptr noundef %132, ptr noundef %135, ptr noundef nonnull %14, i64 noundef %126) #10
  br label %257

137:                                              ; preds = %130
  %or.cond5 = icmp ugt i32 %106, 15
  %spec.store.select23 = select i1 %or.cond5, i32 0, i32 %106
  %138 = load ptr, ptr getelementptr inbounds (i8, ptr @attrtypes, i64 16), align 16, !tbaa !24
  %139 = zext nneg i32 %spec.store.select23 to i64
  %140 = getelementptr inbounds [14 x ptr], ptr @enumvaluetypes, i64 0, i64 %139
  %141 = load ptr, ptr %140, align 8, !tbaa !24
  %142 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.27, ptr noundef %138, ptr noundef %141, ptr noundef nonnull %14, i64 noundef %126) #10
  br label %257

143:                                              ; preds = %130
  %or.cond7 = icmp ugt i32 %106, 3
  %spec.store.select24 = select i1 %or.cond7, i32 0, i32 %106
  %144 = load ptr, ptr getelementptr inbounds (i8, ptr @attrtypes, i64 24), align 8, !tbaa !24
  %145 = zext nneg i32 %spec.store.select24 to i64
  %146 = getelementptr inbounds [4 x ptr], ptr @packtypes, i64 0, i64 %145
  %147 = load ptr, ptr %146, align 8, !tbaa !24
  %148 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.27, ptr noundef %144, ptr noundef %147, ptr noundef nonnull %14, i64 noundef %126) #10
  br label %257

149:                                              ; preds = %130
  %150 = icmp eq i32 %106, 0
  br i1 %150, label %151, label %153

151:                                              ; preds = %149
  %152 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.28, ptr noundef nonnull %14) #10
  br label %257

153:                                              ; preds = %149
  %154 = and i32 %106, -2
  %or.cond9 = icmp eq i32 %154, 4
  br i1 %or.cond9, label %155, label %159

155:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #10
  store i32 0, ptr %4, align 4, !tbaa !26
  %156 = call i64 @fstGetVarint64(ptr noundef nonnull %14, ptr noundef nonnull %4)
  %157 = load ptr, ptr @attrtypes, align 16, !tbaa !24
  %158 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.29, ptr noundef %157, i32 noundef %106, i64 noundef %156, i64 noundef %126) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #10
  br label %257

159:                                              ; preds = %153
  %160 = load ptr, ptr @attrtypes, align 16, !tbaa !24
  %161 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.30, ptr noundef %160, i32 noundef %106, ptr noundef nonnull %14, i64 noundef %126) #10
  br label %257

162:                                              ; preds = %67
  br i1 %.not254, label %257, label %163

163:                                              ; preds = %162
  %164 = load i8, ptr %66, align 2
  %165 = and i8 %164, 1
  %.not264 = icmp eq i8 %165, 0
  br i1 %.not264, label %257, label %166

166:                                              ; preds = %163
  %167 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.31) #10
  br label %257

168:                                              ; preds = %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67, %67
  %169 = load ptr, ptr %9, align 8, !tbaa !13
  %170 = call i32 @fgetc(ptr noundef %169)
  %171 = load ptr, ptr %9, align 8, !tbaa !13
  %172 = call i32 @fgetc(ptr noundef %171)
  %.not258271 = icmp eq i32 %172, 0
  br i1 %.not258271, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %168, %180
  %173 = phi i32 [ %182, %180 ], [ %172, %168 ]
  %.5225272 = phi i32 [ %.6226, %180 ], [ 0, %168 ]
  %174 = icmp slt i32 %.5225272, 69632
  br i1 %174, label %175, label %180

175:                                              ; preds = %.lr.ph
  %176 = trunc i32 %173 to i8
  %177 = add nsw i32 %.5225272, 1
  %178 = sext i32 %.5225272 to i64
  %179 = getelementptr inbounds i8, ptr %14, i64 %178
  store i8 %176, ptr %179, align 1, !tbaa !16
  br label %180

180:                                              ; preds = %175, %.lr.ph
  %.6226 = phi i32 [ %177, %175 ], [ %.5225272, %.lr.ph ]
  %181 = load ptr, ptr %9, align 8, !tbaa !13
  %182 = call i32 @fgetc(ptr noundef %181)
  %.not258 = icmp eq i32 %182, 0
  br i1 %.not258, label %._crit_edge, label %.lr.ph, !llvm.loop !27

._crit_edge:                                      ; preds = %180, %168
  %.5225.lcssa = phi i32 [ 0, %168 ], [ %.6226, %180 ]
  %183 = sext i32 %.5225.lcssa to i64
  %184 = getelementptr inbounds i8, ptr %14, i64 %183
  store i8 0, ptr %184, align 1, !tbaa !16
  %185 = load ptr, ptr %9, align 8, !tbaa !13
  %186 = call i32 @fstReaderVarint32(ptr noundef %185)
  %187 = load ptr, ptr %9, align 8, !tbaa !13
  %188 = call i32 @fstReaderVarint32(ptr noundef %187)
  %.not259 = icmp eq i32 %188, 0
  br i1 %.not259, label %189, label %236

189:                                              ; preds = %._crit_edge
  %190 = load i32, ptr %54, align 8, !tbaa !17
  %191 = icmp eq i32 %190, %.0229286
  br i1 %191, label %192, label %._crit_edge291

._crit_edge291:                                   ; preds = %189
  %.pre292 = load ptr, ptr %59, align 8, !tbaa !20
  br label %200

192:                                              ; preds = %189
  %193 = shl i32 %.0229286, 1
  %194 = load ptr, ptr %56, align 8, !tbaa !19
  %195 = zext i32 %193 to i64
  %196 = shl nuw nsw i64 %195, 2
  %197 = call ptr @realloc(ptr noundef %194, i64 noundef %196) #11
  store ptr %197, ptr %56, align 8, !tbaa !19
  %198 = load ptr, ptr %59, align 8, !tbaa !20
  %199 = call ptr @realloc(ptr noundef %198, i64 noundef %195) #11
  store ptr %199, ptr %59, align 8, !tbaa !20
  %.pre = load i32, ptr %54, align 8, !tbaa !17
  br label %200

200:                                              ; preds = %._crit_edge291, %192
  %201 = phi ptr [ %199, %192 ], [ %.pre292, %._crit_edge291 ]
  %202 = phi i32 [ %.pre, %192 ], [ %190, %._crit_edge291 ]
  %.1230 = phi i32 [ %193, %192 ], [ %.0229286, %._crit_edge291 ]
  %203 = load ptr, ptr %56, align 8, !tbaa !19
  %204 = zext i32 %202 to i64
  %205 = getelementptr inbounds i32, ptr %203, i64 %204
  store i32 %186, ptr %205, align 4, !tbaa !26
  %206 = trunc i32 %69 to i8
  %207 = load i32, ptr %54, align 8, !tbaa !17
  %208 = zext i32 %207 to i64
  %209 = getelementptr inbounds i8, ptr %201, i64 %208
  store i8 %206, ptr %209, align 1, !tbaa !16
  %210 = load i32, ptr %8, align 8, !tbaa !5
  %211 = icmp ugt i32 %186, %210
  br i1 %211, label %212, label %213

212:                                              ; preds = %200
  store i32 %186, ptr %8, align 8, !tbaa !5
  br label %213

213:                                              ; preds = %212, %200
  switch i32 %69, label %220 [
    i32 29, label %214
    i32 20, label %214
    i32 4, label %214
    i32 3, label %214
  ]

214:                                              ; preds = %213, %213, %213, %213
  %.not260 = icmp eq i32 %69, 29
  %215 = select i1 %.not260, i32 32, i32 64
  %216 = load ptr, ptr %59, align 8, !tbaa !20
  %217 = load i32, ptr %54, align 8, !tbaa !17
  %218 = zext i32 %217 to i64
  %219 = getelementptr inbounds i8, ptr %216, i64 %218
  store i8 3, ptr %219, align 1, !tbaa !16
  br label %220

220:                                              ; preds = %213, %214
  %.0227 = phi i32 [ %215, %214 ], [ %186, %213 ]
  br i1 %.not254, label %233, label %221

221:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #10
  %.not261 = icmp eq i32 %69, 18
  br i1 %.not261, label %222, label %225

222:                                              ; preds = %221
  %223 = add i32 %.0227, -2
  %224 = udiv i32 %223, 3
  br label %225

225:                                              ; preds = %221, %222
  %226 = phi i32 [ %224, %222 ], [ %.0227, %221 ]
  %227 = load i32, ptr %54, align 8, !tbaa !17
  %228 = add i32 %227, 1
  call void @fstVcdID(ptr noundef nonnull %5, i32 noundef %228)
  %229 = sext i32 %69 to i64
  %230 = getelementptr inbounds [30 x ptr], ptr @vartypes, i64 0, i64 %229
  %231 = load ptr, ptr %230, align 8, !tbaa !24
  %232 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.32, ptr noundef %231, i32 noundef %226, ptr noundef nonnull %5, ptr noundef nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #10
  br label %233

233:                                              ; preds = %225, %220
  %234 = load i32, ptr %54, align 8, !tbaa !17
  %235 = add i32 %234, 1
  store i32 %235, ptr %54, align 8, !tbaa !17
  br label %257

236:                                              ; preds = %._crit_edge
  switch i32 %69, label %243 [
    i32 29, label %237
    i32 20, label %237
    i32 4, label %237
    i32 3, label %237
  ]

237:                                              ; preds = %236, %236, %236, %236
  %.not262 = icmp eq i32 %69, 29
  %238 = select i1 %.not262, i32 32, i32 64
  %239 = load ptr, ptr %59, align 8, !tbaa !20
  %240 = load i32, ptr %54, align 8, !tbaa !17
  %241 = zext i32 %240 to i64
  %242 = getelementptr inbounds i8, ptr %239, i64 %241
  store i8 3, ptr %242, align 1, !tbaa !16
  br label %243

243:                                              ; preds = %236, %237
  %.1228 = phi i32 [ %238, %237 ], [ %186, %236 ]
  br i1 %.not254, label %254, label %244

244:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #10
  %.not263 = icmp eq i32 %69, 18
  br i1 %.not263, label %245, label %248

245:                                              ; preds = %244
  %246 = add i32 %.1228, -2
  %247 = udiv i32 %246, 3
  br label %248

248:                                              ; preds = %244, %245
  %249 = phi i32 [ %247, %245 ], [ %.1228, %244 ]
  call void @fstVcdID(ptr noundef nonnull %6, i32 noundef %188)
  %250 = sext i32 %69 to i64
  %251 = getelementptr inbounds [30 x ptr], ptr @vartypes, i64 0, i64 %250
  %252 = load ptr, ptr %251, align 8, !tbaa !24
  %253 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.32, ptr noundef %252, i32 noundef %249, ptr noundef nonnull %6, ptr noundef nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #10
  br label %254

254:                                              ; preds = %248, %243
  %255 = load i64, ptr %55, align 8, !tbaa !18
  %256 = add i64 %255, 1
  store i64 %256, ptr %55, align 8, !tbaa !18
  br label %257

257:                                              ; preds = %67, %233, %254, %162, %163, %166, %124, %127, %151, %159, %155, %143, %137, %131, %99, %100, %93, %94
  %.2231 = phi i32 [ %.0229286, %67 ], [ %.0229286, %254 ], [ %.1230, %233 ], [ %.0229286, %166 ], [ %.0229286, %163 ], [ %.0229286, %162 ], [ %.0229286, %151 ], [ %.0229286, %155 ], [ %.0229286, %159 ], [ %.0229286, %143 ], [ %.0229286, %137 ], [ %.0229286, %131 ], [ %.0229286, %127 ], [ %.0229286, %124 ], [ %.0229286, %100 ], [ %.0229286, %99 ], [ %.0229286, %94 ], [ %.0229286, %93 ]
  %.2219 = phi i32 [ %.0217287, %67 ], [ %.0217287, %254 ], [ %.0217287, %233 ], [ %.0217287, %166 ], [ %.0217287, %163 ], [ %.0217287, %162 ], [ %.0217287, %151 ], [ %.0217287, %155 ], [ %.0217287, %159 ], [ %.0217287, %143 ], [ %.0217287, %137 ], [ %.0217287, %131 ], [ %.0217287, %127 ], [ %.0217287, %124 ], [ %.0217287, %100 ], [ %.0217287, %99 ], [ %.1218, %94 ], [ %.1218, %93 ]
  %258 = load ptr, ptr %9, align 8, !tbaa !13
  %259 = call i32 @feof(ptr noundef %258) #10
  %.not256 = icmp eq i32 %259, 0
  br i1 %.not256, label %67, label %._crit_edge290, !llvm.loop !28

._crit_edge290:                                   ; preds = %257, %53
  br i1 %.not254, label %262, label %260

260:                                              ; preds = %._crit_edge290
  %261 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %1, ptr noundef nonnull @.str.33) #10
  br label %262

262:                                              ; preds = %260, %._crit_edge290
  %263 = load i32, ptr %54, align 8, !tbaa !17
  %spec.select = call i32 @llvm.umax.i32(i32 %263, i32 1)
  %264 = load ptr, ptr %56, align 8, !tbaa !19
  %265 = zext i32 %spec.select to i64
  %266 = shl nuw nsw i64 %265, 2
  %267 = call ptr @realloc(ptr noundef %264, i64 noundef %266) #11
  store ptr %267, ptr %56, align 8, !tbaa !19
  %268 = load ptr, ptr %59, align 8, !tbaa !20
  %269 = call ptr @realloc(ptr noundef %268, i64 noundef %265) #11
  store ptr %269, ptr %59, align 8, !tbaa !20
  %270 = getelementptr inbounds i8, ptr %0, i64 96
  %271 = load ptr, ptr %270, align 8, !tbaa !29
  call void @free(ptr noundef %271) #10
  %272 = add i32 %spec.select, 7
  %273 = lshr i32 %272, 3
  %274 = zext nneg i32 %273 to i64
  %275 = call noalias ptr @calloc(i64 noundef 1, i64 noundef %274) #12
  store ptr %275, ptr %270, align 8, !tbaa !29
  %276 = getelementptr inbounds i8, ptr %0, i64 112
  %277 = load ptr, ptr %276, align 8, !tbaa !30
  call void @free(ptr noundef %277) #10
  %278 = load i32, ptr %8, align 8, !tbaa !5
  %279 = add i32 %278, 1
  %280 = zext i32 %279 to i64
  %281 = call noalias ptr @malloc(i64 noundef %280) #9
  store ptr %281, ptr %276, align 8, !tbaa !30
  %282 = load i32, ptr %54, align 8, !tbaa !17
  %283 = zext i32 %282 to i64
  %284 = load i64, ptr %55, align 8, !tbaa !18
  %285 = add i64 %284, %283
  %286 = getelementptr inbounds i8, ptr %0, i64 48
  store i64 %285, ptr %286, align 8, !tbaa !31
  call void @free(ptr noundef %14) #10
  br label %287

287:                                              ; preds = %11, %2, %262
  %.0 = phi i32 [ 1, %262 ], [ 0, %2 ], [ 0, %11 ]
  ret i32 %.0
}

; Function Attrs: nounwind uwtable
declare hidden void @fstVcdID(ptr noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #8

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) 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 #2 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #6 = { mustprogress nounwind willreturn allockind("realloc") allocsize(1) 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 #7 = { 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 #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind allocsize(0) }
attributes #10 = { nounwind }
attributes #11 = { nounwind allocsize(1) }
attributes #12 = { nounwind allocsize(0,1) }

!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, !11, i64 104}
!6 = !{!"fstReaderContext", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !11, i64 104, !7, i64 112, !8, i64 120, !8, i64 121, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !11, i64 122, !8, i64 123, !8, i64 252, !10, i64 376, !7, i64 384, !7, i64 392, !10, i64 400, !11, i64 408, !7, i64 416, !7, i64 424, !10, i64 432, !10, i64 440, !11, i64 448, !7, i64 456, !10, i64 464, !10, i64 472, !7, i64 480, !10, i64 488, !7, i64 496, !7, i64 504, !10, i64 512, !10, i64 520, !7, i64 528, !11, i64 536, !11, i64 540, !7, i64 544, !11, i64 552, !11, i64 556, !11, i64 560, !10, i64 568, !11, i64 576, !12, i64 584, !7, i64 632, !11, i64 640, !7, i64 648, !11, i64 656, !11, i64 660, !8, i64 661, !8, i64 1174, !7, i64 1688, !11, i64 1696, !11, i64 1700, !11, i64 1704, !8, i64 1708, !7, i64 67248, !7, i64 67256}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"fstHier", !8, i64 0, !8, i64 8}
!13 = !{!6, !7, i64 8}
!14 = !{!6, !10, i64 376}
!15 = !{!6, !8, i64 120}
!16 = !{!8, !8, i64 0}
!17 = !{!6, !11, i64 56}
!18 = !{!6, !10, i64 64}
!19 = !{!6, !7, i64 80}
!20 = !{!6, !7, i64 88}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!7, !7, i64 0}
!25 = distinct !{!25, !22}
!26 = !{!11, !11, i64 0}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}
!29 = !{!6, !7, i64 96}
!30 = !{!6, !7, i64 112}
!31 = !{!6, !10, i64 48}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass