; LLVM IR from devicehive/esp8266-firmware :: firmware-src/sources (dhcommand_parser)

; 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.jsonparse_state = type { ptr, i32, i32, i32, i32, i32, i8, i8, [10 x i8] }
%struct.gpio_command_params = type { i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i32, i32, %union.anon, i16, i32, i8, i8, i8, [264 x i8], i32, i32, i32, i32, i32, i32, i32, i32, float }
%union.anon = type { [16 x i32] }
%struct.anon = type { [60 x i8], i8 }

@.str = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [12 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @parse_params_pins_set(ptr noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, ptr noundef %6) #0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca %struct.jsonparse_state, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca float, align 4
  %30 = alloca i32, align 4
  %31 = alloca i8, align 1
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca float, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i32 %1, ptr %10, align 4, !tbaa !9
  store ptr %2, ptr %11, align 8, !tbaa !5
  store i32 %3, ptr %12, align 4, !tbaa !9
  store i32 %4, ptr %13, align 4, !tbaa !9
  store i32 %5, ptr %14, align 4, !tbaa !9
  store ptr %6, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %16) #3
  %46 = load i32, ptr %10, align 4, !tbaa !9
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %51

48:                                               ; preds = %7
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = load i32, ptr %10, align 4, !tbaa !9
  call void @jsonparse_setup(ptr noundef %16, ptr noundef %49, i32 noundef %50)
  br label %56

51:                                               ; preds = %7
  %52 = load i32, ptr %14, align 4, !tbaa !9
  %53 = icmp ne i32 %52, 0
  br i1 %53, label %54, label %55

54:                                               ; preds = %51
  store ptr @.str, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1133

55:                                               ; preds = %51
  br label %56

56:                                               ; preds = %55, %48
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %57 = load ptr, ptr %15, align 8, !tbaa !5
  store i32 0, ptr %57, align 4, !tbaa !9
  %58 = load ptr, ptr %11, align 8, !tbaa !5
  %59 = load i32, ptr %13, align 4, !tbaa !9
  call void @load_defaults(ptr noundef %58, i32 noundef %59)
  br label %60

60:                                               ; preds = %1130, %667, %602, %552, %505, %462, %446, %430, %414, %398, %383, %318, %273, %257, %242, %239, %56
  %61 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 1
  %62 = load i32, ptr %61, align 8, !tbaa !11
  %63 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 2
  %64 = load i32, ptr %63, align 4, !tbaa !13
  %65 = icmp slt i32 %62, %64
  br i1 %65, label %66, label %1131

66:                                               ; preds = %60
  %67 = call i32 @jsonparse_next(ptr noundef %16)
  store i32 %67, ptr %18, align 4, !tbaa !9
  %68 = load i32, ptr %18, align 4, !tbaa !9
  %69 = icmp eq i32 %68, 78
  br i1 %69, label %70, label %1125

70:                                               ; preds = %66
  %71 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.1)
  %72 = icmp eq i32 %71, 0
  br i1 %72, label %73, label %243

73:                                               ; preds = %70
  %74 = load i32, ptr %14, align 4, !tbaa !9
  %75 = and i32 %74, 32768
  %76 = icmp eq i32 %75, 0
  br i1 %76, label %77, label %82

77:                                               ; preds = %73
  %78 = load i32, ptr %14, align 4, !tbaa !9
  %79 = and i32 %78, 4194304
  %80 = icmp eq i32 %79, 0
  br i1 %80, label %81, label %82

81:                                               ; preds = %77
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

82:                                               ; preds = %77, %73
  %83 = call i32 @jsonparse_next(ptr noundef %16)
  %84 = call i32 @jsonparse_next(ptr noundef %16)
  %85 = icmp ne i32 %84, 0
  br i1 %85, label %86, label %242

86:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %87 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.3)
  %88 = icmp eq i32 %87, 0
  br i1 %88, label %89, label %99

89:                                               ; preds = %86
  %90 = load i32, ptr %14, align 4, !tbaa !9
  %91 = and i32 %90, 32768
  %92 = icmp ne i32 %91, 0
  br i1 %92, label %93, label %99

93:                                               ; preds = %89
  %94 = load ptr, ptr %15, align 8, !tbaa !5
  %95 = load i32, ptr %94, align 4, !tbaa !9
  %96 = or i32 %95, 32768
  store i32 %96, ptr %94, align 4, !tbaa !9
  %97 = load ptr, ptr %11, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.gpio_command_params, ptr %97, i32 0, i32 15
  store i32 0, ptr %98, align 4, !tbaa !14
  store i32 2, ptr %17, align 4
  br label %239, !llvm.loop !18

99:                                               ; preds = %89, %86
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %100 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %101 = load ptr, ptr %100, align 8, !tbaa !20
  %102 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %103 = load i32, ptr %102, align 4, !tbaa !21
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds i8, ptr %101, i64 %104
  %106 = call i32 @strToUInt(ptr noundef %105, ptr noundef %22)
  store i32 %106, ptr %23, align 4, !tbaa !9
  %107 = load i32, ptr %23, align 4, !tbaa !9
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %110, label %109

109:                                              ; preds = %99
  store ptr @.str.4, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %238

110:                                              ; preds = %99
  %111 = load i32, ptr %14, align 4, !tbaa !9
  %112 = and i32 %111, 32768
  %113 = icmp ne i32 %112, 0
  br i1 %113, label %114, label %226

114:                                              ; preds = %110
  %115 = load ptr, ptr %15, align 8, !tbaa !5
  %116 = load i32, ptr %115, align 4, !tbaa !9
  %117 = or i32 %116, 32768
  store i32 %117, ptr %115, align 4, !tbaa !9
  %118 = load i32, ptr %22, align 4, !tbaa !9
  %119 = load ptr, ptr %11, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.gpio_command_params, ptr %119, i32 0, i32 15
  store i32 %118, ptr %120, align 4, !tbaa !14
  %121 = load i32, ptr %23, align 4, !tbaa !9
  %122 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %123 = load i32, ptr %122, align 8, !tbaa !22
  %124 = icmp slt i32 %121, %123
  br i1 %124, label %125, label %225

125:                                              ; preds = %114
  %126 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %127 = load ptr, ptr %126, align 8, !tbaa !20
  %128 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %129 = load i32, ptr %128, align 4, !tbaa !21
  %130 = load i32, ptr %23, align 4, !tbaa !9
  %131 = add nsw i32 %129, %130
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i8, ptr %127, i64 %132
  %134 = load i8, ptr %133, align 1, !tbaa !23
  %135 = sext i8 %134 to i32
  %136 = icmp eq i32 %135, 32
  br i1 %136, label %137, label %225

137:                                              ; preds = %125
  br label %138

138:                                              ; preds = %157, %137
  %139 = load i32, ptr %23, align 4, !tbaa !9
  %140 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %141 = load i32, ptr %140, align 8, !tbaa !22
  %142 = icmp slt i32 %139, %141
  br i1 %142, label %143, label %155

143:                                              ; preds = %138
  %144 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %145 = load ptr, ptr %144, align 8, !tbaa !20
  %146 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %147 = load i32, ptr %146, align 4, !tbaa !21
  %148 = load i32, ptr %23, align 4, !tbaa !9
  %149 = add nsw i32 %147, %148
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds i8, ptr %145, i64 %150
  %152 = load i8, ptr %151, align 1, !tbaa !23
  %153 = sext i8 %152 to i32
  %154 = icmp eq i32 %153, 32
  br label %155

155:                                              ; preds = %143, %138
  %156 = phi i1 [ false, %138 ], [ %154, %143 ]
  br i1 %156, label %157, label %160

157:                                              ; preds = %155
  %158 = load i32, ptr %23, align 4, !tbaa !9
  %159 = add nsw i32 %158, 1
  store i32 %159, ptr %23, align 4, !tbaa !9
  br label %138, !llvm.loop !24

160:                                              ; preds = %155
  %161 = load i32, ptr %23, align 4, !tbaa !9
  %162 = add nsw i32 %161, 3
  %163 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %164 = load i32, ptr %163, align 8, !tbaa !22
  %165 = icmp eq i32 %162, %164
  br i1 %165, label %166, label %224

166:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #3
  %167 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %168 = load ptr, ptr %167, align 8, !tbaa !20
  %169 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %170 = load i32, ptr %169, align 4, !tbaa !21
  %171 = load i32, ptr %23, align 4, !tbaa !9
  %172 = add nsw i32 %170, %171
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i8, ptr %168, i64 %173
  %175 = load i8, ptr %174, align 1, !tbaa !23
  %176 = sext i8 %175 to i32
  %177 = sub nsw i32 %176, 48
  %178 = trunc i32 %177 to i8
  store i8 %178, ptr %24, align 1, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #3
  %179 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %180 = load ptr, ptr %179, align 8, !tbaa !20
  %181 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %182 = load i32, ptr %181, align 4, !tbaa !21
  %183 = load i32, ptr %23, align 4, !tbaa !9
  %184 = add nsw i32 %182, %183
  %185 = add nsw i32 %184, 1
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds i8, ptr %180, i64 %186
  %188 = load i8, ptr %187, align 1, !tbaa !23
  store i8 %188, ptr %25, align 1, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #3
  %189 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8, !tbaa !20
  %191 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %192 = load i32, ptr %191, align 4, !tbaa !21
  %193 = load i32, ptr %23, align 4, !tbaa !9
  %194 = add nsw i32 %192, %193
  %195 = add nsw i32 %194, 2
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i8, ptr %190, i64 %196
  %198 = load i8, ptr %197, align 1, !tbaa !23
  %199 = sext i8 %198 to i32
  %200 = sub nsw i32 %199, 48
  %201 = trunc i32 %200 to i8
  store i8 %201, ptr %26, align 1, !tbaa !23
  %202 = load i8, ptr %24, align 1, !tbaa !23
  %203 = zext i8 %202 to i32
  %204 = icmp slt i32 %203, 10
  br i1 %204, label %205, label %219

205:                                              ; preds = %166
  %206 = load i8, ptr %26, align 1, !tbaa !23
  %207 = zext i8 %206 to i32
  %208 = icmp slt i32 %207, 10
  br i1 %208, label %209, label %219

209:                                              ; preds = %205
  %210 = load i8, ptr %24, align 1, !tbaa !23
  %211 = load ptr, ptr %11, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.gpio_command_params, ptr %211, i32 0, i32 16
  store i8 %210, ptr %212, align 4, !tbaa !25
  %213 = load i8, ptr %25, align 1, !tbaa !23
  %214 = load ptr, ptr %11, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.gpio_command_params, ptr %214, i32 0, i32 17
  store i8 %213, ptr %215, align 1, !tbaa !26
  %216 = load i8, ptr %26, align 1, !tbaa !23
  %217 = load ptr, ptr %11, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.gpio_command_params, ptr %217, i32 0, i32 18
  store i8 %216, ptr %218, align 2, !tbaa !27
  br label %220

219:                                              ; preds = %205, %166
  store ptr @.str.5, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %221

220:                                              ; preds = %209
  store i32 0, ptr %17, align 4
  br label %221

221:                                              ; preds = %220, %219
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #3
  %222 = load i32, ptr %17, align 4
  switch i32 %222, label %238 [
    i32 0, label %223
  ]

223:                                              ; preds = %221
  br label %224

224:                                              ; preds = %223, %160
  br label %225

225:                                              ; preds = %224, %125, %114
  br label %226

226:                                              ; preds = %225, %110
  %227 = load i32, ptr %14, align 4, !tbaa !9
  %228 = and i32 %227, 4194304
  %229 = icmp ne i32 %228, 0
  br i1 %229, label %230, label %237

230:                                              ; preds = %226
  %231 = load ptr, ptr %15, align 8, !tbaa !5
  %232 = load i32, ptr %231, align 4, !tbaa !9
  %233 = or i32 %232, 4194304
  store i32 %233, ptr %231, align 4, !tbaa !9
  %234 = load i32, ptr %22, align 4, !tbaa !9
  %235 = load ptr, ptr %11, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.gpio_command_params, ptr %235, i32 0, i32 25
  store i32 %234, ptr %236, align 4, !tbaa !28
  br label %237

237:                                              ; preds = %230, %226
  store i32 0, ptr %17, align 4
  br label %238

238:                                              ; preds = %237, %221, %109
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %239

239:                                              ; preds = %238, %93
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  %240 = load i32, ptr %17, align 4
  switch i32 %240, label %1132 [
    i32 0, label %241
    i32 2, label %60
  ]

241:                                              ; preds = %239
  br label %242

242:                                              ; preds = %241, %82
  br label %60, !llvm.loop !18

243:                                              ; preds = %70
  %244 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.6)
  %245 = icmp eq i32 %244, 0
  br i1 %245, label %246, label %259

246:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  %247 = load ptr, ptr %11, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.gpio_command_params, ptr %247, i32 0, i32 12
  %249 = load i32, ptr %14, align 4, !tbaa !9
  %250 = load ptr, ptr %15, align 8, !tbaa !5
  %251 = call ptr @readUIntField(ptr noundef %16, i32 noundef 4096, ptr noundef %248, i32 noundef %249, ptr noundef %250, i32 noundef 0)
  store ptr %251, ptr %27, align 8, !tbaa !5
  %252 = load ptr, ptr %27, align 8, !tbaa !5
  %253 = icmp ne ptr %252, null
  br i1 %253, label %254, label %256

254:                                              ; preds = %246
  %255 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %255, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %257

256:                                              ; preds = %246
  store i32 2, ptr %17, align 4
  br label %257, !llvm.loop !18

257:                                              ; preds = %256, %254
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  %258 = load i32, ptr %17, align 4
  switch i32 %258, label %1132 [
    i32 2, label %60
  ]

259:                                              ; preds = %243
  %260 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.7)
  %261 = icmp eq i32 %260, 0
  br i1 %261, label %262, label %275

262:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  %263 = load ptr, ptr %11, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.gpio_command_params, ptr %263, i32 0, i32 21
  %265 = load i32, ptr %14, align 4, !tbaa !9
  %266 = load ptr, ptr %15, align 8, !tbaa !5
  %267 = call ptr @readUIntField(ptr noundef %16, i32 noundef 262144, ptr noundef %264, i32 noundef %265, ptr noundef %266, i32 noundef 0)
  store ptr %267, ptr %28, align 8, !tbaa !5
  %268 = load ptr, ptr %28, align 8, !tbaa !5
  %269 = icmp ne ptr %268, null
  br i1 %269, label %270, label %272

270:                                              ; preds = %262
  %271 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %271, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %273

272:                                              ; preds = %262
  store i32 2, ptr %17, align 4
  br label %273, !llvm.loop !18

273:                                              ; preds = %272, %270
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  %274 = load i32, ptr %17, align 4
  switch i32 %274, label %1132 [
    i32 2, label %60
  ]

275:                                              ; preds = %259
  %276 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.8)
  %277 = icmp eq i32 %276, 0
  br i1 %277, label %278, label %320

278:                                              ; preds = %275
  %279 = load i32, ptr %14, align 4, !tbaa !9
  %280 = and i32 %279, 2048
  %281 = icmp eq i32 %280, 0
  br i1 %281, label %282, label %283

282:                                              ; preds = %278
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

283:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  %284 = call i32 @jsonparse_next(ptr noundef %16)
  %285 = call i32 @jsonparse_next(ptr noundef %16)
  %286 = icmp ne i32 %285, 0
  br i1 %286, label %287, label %317

287:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %288 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %289 = load ptr, ptr %288, align 8, !tbaa !20
  %290 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %291 = load i32, ptr %290, align 4, !tbaa !21
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds i8, ptr %289, i64 %292
  %294 = call i32 @strToFloat(ptr noundef %293, ptr noundef %29)
  store i32 %294, ptr %30, align 4, !tbaa !9
  %295 = load i32, ptr %30, align 4, !tbaa !9
  %296 = icmp ne i32 %295, 0
  br i1 %296, label %298, label %297

297:                                              ; preds = %287
  store ptr @.str.9, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %314

298:                                              ; preds = %287
  %299 = load float, ptr %29, align 4, !tbaa !29
  %300 = fcmp olt float %299, 0x3F40624BA0000000
  br i1 %300, label %301, label %304

301:                                              ; preds = %298
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.gpio_command_params, ptr %302, i32 0, i32 11
  store i32 2000004000, ptr %303, align 4, !tbaa !30
  br label %310

304:                                              ; preds = %298
  %305 = load float, ptr %29, align 4, !tbaa !29
  %306 = fdiv float 1.000000e+06, %305
  %307 = fptoui float %306 to i32
  %308 = load ptr, ptr %11, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.gpio_command_params, ptr %308, i32 0, i32 11
  store i32 %307, ptr %309, align 4, !tbaa !30
  br label %310

310:                                              ; preds = %304, %301
  %311 = load ptr, ptr %15, align 8, !tbaa !5
  %312 = load i32, ptr %311, align 4, !tbaa !9
  %313 = or i32 %312, 2048
  store i32 %313, ptr %311, align 4, !tbaa !9
  store i32 0, ptr %17, align 4
  br label %314

314:                                              ; preds = %310, %297
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  %315 = load i32, ptr %17, align 4
  switch i32 %315, label %318 [
    i32 0, label %316
  ]

316:                                              ; preds = %314
  br label %317

317:                                              ; preds = %316, %283
  store i32 2, ptr %17, align 4
  br label %318, !llvm.loop !18

318:                                              ; preds = %317, %314
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  %319 = load i32, ptr %17, align 4
  switch i32 %319, label %1132 [
    i32 2, label %60
  ]

320:                                              ; preds = %275
  %321 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.10)
  %322 = icmp eq i32 %321, 0
  br i1 %322, label %323, label %384

323:                                              ; preds = %320
  %324 = load i32, ptr %14, align 4, !tbaa !9
  %325 = and i32 %324, 524288
  %326 = icmp eq i32 %325, 0
  br i1 %326, label %327, label %328

327:                                              ; preds = %323
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

328:                                              ; preds = %323
  %329 = call i32 @jsonparse_next(ptr noundef %16)
  %330 = call i32 @jsonparse_next(ptr noundef %16)
  %331 = icmp ne i32 %330, 0
  br i1 %331, label %332, label %383

332:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  %333 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %334 = load ptr, ptr %333, align 8, !tbaa !20
  %335 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %336 = load i32, ptr %335, align 4, !tbaa !21
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds i8, ptr %334, i64 %337
  %339 = load i8, ptr %338, align 1, !tbaa !23
  %340 = sext i8 %339 to i32
  %341 = icmp eq i32 %340, 48
  br i1 %341, label %342, label %354

342:                                              ; preds = %332
  %343 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %344 = load ptr, ptr %343, align 8, !tbaa !20
  %345 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %346 = load i32, ptr %345, align 4, !tbaa !21
  %347 = add nsw i32 %346, 1
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds i8, ptr %344, i64 %348
  %350 = load i8, ptr %349, align 1, !tbaa !23
  %351 = sext i8 %350 to i32
  %352 = icmp eq i32 %351, 120
  br i1 %352, label %353, label %354

353:                                              ; preds = %342
  store i32 2, ptr %32, align 4, !tbaa !9
  br label %355

354:                                              ; preds = %342, %332
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %355

355:                                              ; preds = %354, %353
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  %356 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %357 = load ptr, ptr %356, align 8, !tbaa !20
  %358 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %359 = load i32, ptr %358, align 4, !tbaa !21
  %360 = load i32, ptr %32, align 4, !tbaa !9
  %361 = add nsw i32 %359, %360
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds i8, ptr %357, i64 %362
  %364 = call i32 @hexToByte(ptr noundef %363, ptr noundef %31)
  store i32 %364, ptr %33, align 4, !tbaa !9
  %365 = load i32, ptr %33, align 4, !tbaa !9
  %366 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %367 = load i32, ptr %366, align 8, !tbaa !22
  %368 = load i32, ptr %32, align 4, !tbaa !9
  %369 = sub nsw i32 %367, %368
  %370 = icmp ne i32 %365, %369
  br i1 %370, label %371, label %372

371:                                              ; preds = %355
  store ptr @.str.11, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %380

372:                                              ; preds = %355
  %373 = load i8, ptr %31, align 1, !tbaa !23
  %374 = sext i8 %373 to i32
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.gpio_command_params, ptr %375, i32 0, i32 22
  store i32 %374, ptr %376, align 4, !tbaa !31
  %377 = load ptr, ptr %15, align 8, !tbaa !5
  %378 = load i32, ptr %377, align 4, !tbaa !9
  %379 = or i32 %378, 524288
  store i32 %379, ptr %377, align 4, !tbaa !9
  store i32 0, ptr %17, align 4
  br label %380

380:                                              ; preds = %372, %371
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #3
  %381 = load i32, ptr %17, align 4
  switch i32 %381, label %1132 [
    i32 0, label %382
  ]

382:                                              ; preds = %380
  br label %383

383:                                              ; preds = %382, %328
  br label %60, !llvm.loop !18

384:                                              ; preds = %320
  %385 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.12)
  %386 = icmp eq i32 %385, 0
  br i1 %386, label %387, label %400

387:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  %388 = load ptr, ptr %11, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.gpio_command_params, ptr %388, i32 0, i32 23
  %390 = load i32, ptr %14, align 4, !tbaa !9
  %391 = load ptr, ptr %15, align 8, !tbaa !5
  %392 = call ptr @readUIntField(ptr noundef %16, i32 noundef 1048576, ptr noundef %389, i32 noundef %390, ptr noundef %391, i32 noundef 0)
  store ptr %392, ptr %34, align 8, !tbaa !5
  %393 = load ptr, ptr %34, align 8, !tbaa !5
  %394 = icmp ne ptr %393, null
  br i1 %394, label %395, label %397

395:                                              ; preds = %387
  %396 = load ptr, ptr %34, align 8, !tbaa !5
  store ptr %396, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %398

397:                                              ; preds = %387
  store i32 2, ptr %17, align 4
  br label %398, !llvm.loop !18

398:                                              ; preds = %397, %395
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  %399 = load i32, ptr %17, align 4
  switch i32 %399, label %1132 [
    i32 2, label %60
  ]

400:                                              ; preds = %384
  %401 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.13)
  %402 = icmp eq i32 %401, 0
  br i1 %402, label %403, label %416

403:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  %404 = load ptr, ptr %11, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.gpio_command_params, ptr %404, i32 0, i32 24
  %406 = load i32, ptr %14, align 4, !tbaa !9
  %407 = load ptr, ptr %15, align 8, !tbaa !5
  %408 = call ptr @readUIntField(ptr noundef %16, i32 noundef 2097152, ptr noundef %405, i32 noundef %406, ptr noundef %407, i32 noundef 0)
  store ptr %408, ptr %35, align 8, !tbaa !5
  %409 = load ptr, ptr %35, align 8, !tbaa !5
  %410 = icmp ne ptr %409, null
  br i1 %410, label %411, label %413

411:                                              ; preds = %403
  %412 = load ptr, ptr %35, align 8, !tbaa !5
  store ptr %412, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %414

413:                                              ; preds = %403
  store i32 2, ptr %17, align 4
  br label %414, !llvm.loop !18

414:                                              ; preds = %413, %411
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  %415 = load i32, ptr %17, align 4
  switch i32 %415, label %1132 [
    i32 2, label %60
  ]

416:                                              ; preds = %400
  %417 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.14)
  %418 = icmp eq i32 %417, 0
  br i1 %418, label %419, label %432

419:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  %420 = load ptr, ptr %11, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.gpio_command_params, ptr %420, i32 0, i32 26
  %422 = load i32, ptr %14, align 4, !tbaa !9
  %423 = load ptr, ptr %15, align 8, !tbaa !5
  %424 = call ptr @readUIntField(ptr noundef %16, i32 noundef 8388608, ptr noundef %421, i32 noundef %422, ptr noundef %423, i32 noundef -1)
  store ptr %424, ptr %36, align 8, !tbaa !5
  %425 = load ptr, ptr %36, align 8, !tbaa !5
  %426 = icmp ne ptr %425, null
  br i1 %426, label %427, label %429

427:                                              ; preds = %419
  %428 = load ptr, ptr %36, align 8, !tbaa !5
  store ptr %428, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %430

429:                                              ; preds = %419
  store i32 2, ptr %17, align 4
  br label %430, !llvm.loop !18

430:                                              ; preds = %429, %427
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  %431 = load i32, ptr %17, align 4
  switch i32 %431, label %1132 [
    i32 2, label %60
  ]

432:                                              ; preds = %416
  %433 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.15)
  %434 = icmp eq i32 %433, 0
  br i1 %434, label %435, label %448

435:                                              ; preds = %432
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  %436 = load ptr, ptr %11, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.gpio_command_params, ptr %436, i32 0, i32 27
  %438 = load i32, ptr %14, align 4, !tbaa !9
  %439 = load ptr, ptr %15, align 8, !tbaa !5
  %440 = call ptr @readUIntField(ptr noundef %16, i32 noundef 16777216, ptr noundef %437, i32 noundef %438, ptr noundef %439, i32 noundef 0)
  store ptr %440, ptr %37, align 8, !tbaa !5
  %441 = load ptr, ptr %37, align 8, !tbaa !5
  %442 = icmp ne ptr %441, null
  br i1 %442, label %443, label %445

443:                                              ; preds = %435
  %444 = load ptr, ptr %37, align 8, !tbaa !5
  store ptr %444, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %446

445:                                              ; preds = %435
  store i32 2, ptr %17, align 4
  br label %446, !llvm.loop !18

446:                                              ; preds = %445, %443
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  %447 = load i32, ptr %17, align 4
  switch i32 %447, label %1132 [
    i32 2, label %60
  ]

448:                                              ; preds = %432
  %449 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.16)
  %450 = icmp eq i32 %449, 0
  br i1 %450, label %451, label %464

451:                                              ; preds = %448
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  %452 = load ptr, ptr %11, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.gpio_command_params, ptr %452, i32 0, i32 28
  %454 = load i32, ptr %14, align 4, !tbaa !9
  %455 = load ptr, ptr %15, align 8, !tbaa !5
  %456 = call ptr @readFloatField(ptr noundef %16, i32 noundef 33554432, ptr noundef %453, i32 noundef %454, ptr noundef %455)
  store ptr %456, ptr %38, align 8, !tbaa !5
  %457 = load ptr, ptr %38, align 8, !tbaa !5
  %458 = icmp ne ptr %457, null
  br i1 %458, label %459, label %461

459:                                              ; preds = %451
  %460 = load ptr, ptr %38, align 8, !tbaa !5
  store ptr %460, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %462

461:                                              ; preds = %451
  store i32 2, ptr %17, align 4
  br label %462, !llvm.loop !18

462:                                              ; preds = %461, %459
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  %463 = load i32, ptr %17, align 4
  switch i32 %463, label %1132 [
    i32 2, label %60
  ]

464:                                              ; preds = %448
  %465 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.17)
  %466 = icmp eq i32 %465, 0
  br i1 %466, label %467, label %506

467:                                              ; preds = %464
  %468 = load i32, ptr %14, align 4, !tbaa !9
  %469 = and i32 %468, 65536
  %470 = icmp eq i32 %469, 0
  br i1 %470, label %476, label %471

471:                                              ; preds = %467
  %472 = load ptr, ptr %11, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.gpio_command_params, ptr %472, i32 0, i32 20
  %474 = load i32, ptr %473, align 4, !tbaa !32
  %475 = icmp ne i32 %474, 0
  br i1 %475, label %476, label %477

476:                                              ; preds = %471, %467
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

477:                                              ; preds = %471
  %478 = call i32 @jsonparse_next(ptr noundef %16)
  %479 = call i32 @jsonparse_next(ptr noundef %16)
  %480 = icmp ne i32 %479, 0
  br i1 %480, label %481, label %505

481:                                              ; preds = %477
  %482 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %483 = load ptr, ptr %482, align 8, !tbaa !20
  %484 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %485 = load i32, ptr %484, align 4, !tbaa !21
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds i8, ptr %483, i64 %486
  %488 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %489 = load i32, ptr %488, align 8, !tbaa !22
  %490 = load ptr, ptr %11, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.gpio_command_params, ptr %490, i32 0, i32 19
  %492 = getelementptr inbounds [264 x i8], ptr %491, i64 0, i64 0
  %493 = call i32 @dhdata_decode(ptr noundef %487, i32 noundef %489, ptr noundef %492, i32 noundef 264)
  %494 = load ptr, ptr %11, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.gpio_command_params, ptr %494, i32 0, i32 20
  store i32 %493, ptr %495, align 4, !tbaa !32
  %496 = load ptr, ptr %11, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.gpio_command_params, ptr %496, i32 0, i32 20
  %498 = load i32, ptr %497, align 4, !tbaa !32
  %499 = icmp eq i32 %498, 0
  br i1 %499, label %500, label %501

500:                                              ; preds = %481
  store ptr @.str.18, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

501:                                              ; preds = %481
  %502 = load ptr, ptr %15, align 8, !tbaa !5
  %503 = load i32, ptr %502, align 4, !tbaa !9
  %504 = or i32 %503, 65536
  store i32 %504, ptr %502, align 4, !tbaa !9
  br label %505

505:                                              ; preds = %501, %477
  br label %60, !llvm.loop !18

506:                                              ; preds = %464
  %507 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.19)
  %508 = icmp eq i32 %507, 0
  br i1 %508, label %509, label %553

509:                                              ; preds = %506
  %510 = load i32, ptr %14, align 4, !tbaa !9
  %511 = and i32 %510, 67108864
  %512 = icmp eq i32 %511, 0
  br i1 %512, label %518, label %513

513:                                              ; preds = %509
  %514 = load ptr, ptr %11, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.gpio_command_params, ptr %514, i32 0, i32 20
  %516 = load i32, ptr %515, align 4, !tbaa !32
  %517 = icmp ne i32 %516, 0
  br i1 %517, label %518, label %519

518:                                              ; preds = %513, %509
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

519:                                              ; preds = %513
  %520 = call i32 @jsonparse_next(ptr noundef %16)
  %521 = call i32 @jsonparse_next(ptr noundef %16)
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %523, label %552

523:                                              ; preds = %519
  %524 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %525 = load ptr, ptr %524, align 8, !tbaa !20
  %526 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %527 = load i32, ptr %526, align 4, !tbaa !21
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds i8, ptr %525, i64 %528
  %530 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %531 = load i32, ptr %530, align 8, !tbaa !22
  %532 = load ptr, ptr %11, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.gpio_command_params, ptr %532, i32 0, i32 13
  %534 = getelementptr inbounds %struct.anon, ptr %533, i32 0, i32 0
  %535 = getelementptr inbounds [60 x i8], ptr %534, i64 0, i64 0
  %536 = call i32 @dhdata_decode(ptr noundef %529, i32 noundef %531, ptr noundef %535, i32 noundef 60)
  %537 = trunc i32 %536 to i8
  %538 = load ptr, ptr %11, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.gpio_command_params, ptr %538, i32 0, i32 13
  %540 = getelementptr inbounds %struct.anon, ptr %539, i32 0, i32 1
  store i8 %537, ptr %540, align 4, !tbaa !23
  %541 = load ptr, ptr %11, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.gpio_command_params, ptr %541, i32 0, i32 13
  %543 = getelementptr inbounds %struct.anon, ptr %542, i32 0, i32 1
  %544 = load i8, ptr %543, align 4, !tbaa !23
  %545 = zext i8 %544 to i32
  %546 = icmp eq i32 %545, 0
  br i1 %546, label %547, label %548

547:                                              ; preds = %523
  store ptr @.str.20, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

548:                                              ; preds = %523
  %549 = load ptr, ptr %15, align 8, !tbaa !5
  %550 = load i32, ptr %549, align 4, !tbaa !9
  %551 = or i32 %550, 67108864
  store i32 %551, ptr %549, align 4, !tbaa !9
  br label %552

552:                                              ; preds = %548, %519
  br label %60, !llvm.loop !18

553:                                              ; preds = %506
  %554 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.21)
  %555 = icmp eq i32 %554, 0
  br i1 %555, label %556, label %603

556:                                              ; preds = %553
  %557 = load i32, ptr %14, align 4, !tbaa !9
  %558 = and i32 %557, 131072
  %559 = icmp eq i32 %558, 0
  br i1 %559, label %565, label %560

560:                                              ; preds = %556
  %561 = load ptr, ptr %11, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.gpio_command_params, ptr %561, i32 0, i32 20
  %563 = load i32, ptr %562, align 4, !tbaa !32
  %564 = icmp ne i32 %563, 0
  br i1 %564, label %565, label %566

565:                                              ; preds = %560, %556
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

566:                                              ; preds = %560
  %567 = call i32 @jsonparse_next(ptr noundef %16)
  %568 = call i32 @jsonparse_next(ptr noundef %16)
  %569 = icmp ne i32 %568, 0
  br i1 %569, label %570, label %602

570:                                              ; preds = %566
  %571 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %572 = load i32, ptr %571, align 8, !tbaa !22
  %573 = sext i32 %572 to i64
  %574 = icmp ugt i64 %573, 263
  br i1 %574, label %575, label %576

575:                                              ; preds = %570
  store ptr @.str.22, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

576:                                              ; preds = %570
  %577 = load ptr, ptr %11, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.gpio_command_params, ptr %577, i32 0, i32 19
  %579 = getelementptr inbounds [264 x i8], ptr %578, i64 0, i64 0
  %580 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %581 = load ptr, ptr %580, align 8, !tbaa !20
  %582 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %583 = load i32, ptr %582, align 4, !tbaa !21
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds i8, ptr %581, i64 %584
  %586 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %587 = load i32, ptr %586, align 8, !tbaa !22
  %588 = call ptr @ets_memcpy(ptr noundef %579, ptr noundef %585, i32 noundef %587)
  %589 = load ptr, ptr %11, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.gpio_command_params, ptr %589, i32 0, i32 19
  %591 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %592 = load i32, ptr %591, align 8, !tbaa !22
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds [264 x i8], ptr %590, i64 0, i64 %593
  store i8 0, ptr %594, align 1, !tbaa !23
  %595 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 5
  %596 = load i32, ptr %595, align 8, !tbaa !22
  %597 = load ptr, ptr %11, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.gpio_command_params, ptr %597, i32 0, i32 20
  store i32 %596, ptr %598, align 4, !tbaa !32
  %599 = load ptr, ptr %15, align 8, !tbaa !5
  %600 = load i32, ptr %599, align 4, !tbaa !9
  %601 = or i32 %600, 131072
  store i32 %601, ptr %599, align 4, !tbaa !9
  br label %602

602:                                              ; preds = %576, %566
  br label %60, !llvm.loop !18

603:                                              ; preds = %553
  %604 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.23)
  %605 = icmp eq i32 %604, 0
  br i1 %605, label %606, label %612

606:                                              ; preds = %603
  %607 = load i32, ptr %20, align 4, !tbaa !9
  %608 = icmp ne i32 %607, 0
  br i1 %608, label %609, label %610

609:                                              ; preds = %606
  store ptr @.str.24, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

610:                                              ; preds = %606
  store i32 -1, ptr %20, align 4, !tbaa !9
  %611 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %611, ptr %21, align 4, !tbaa !9
  store i32 -1, ptr %19, align 4, !tbaa !9
  br label %647

612:                                              ; preds = %603
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  %613 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %614 = load ptr, ptr %613, align 8, !tbaa !20
  %615 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %616 = load i32, ptr %615, align 4, !tbaa !21
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds i8, ptr %614, i64 %617
  %619 = call i32 @strToUInt(ptr noundef %618, ptr noundef %19)
  store i32 %619, ptr %39, align 4, !tbaa !9
  %620 = load i32, ptr %39, align 4, !tbaa !9
  %621 = icmp ne i32 %620, 0
  br i1 %621, label %622, label %636

622:                                              ; preds = %612
  %623 = load i32, ptr %19, align 4, !tbaa !9
  %624 = icmp slt i32 %623, 0
  br i1 %624, label %636, label %625

625:                                              ; preds = %622
  %626 = load i32, ptr %19, align 4, !tbaa !9
  %627 = icmp sge i32 %626, 16
  br i1 %627, label %636, label %628

628:                                              ; preds = %625
  %629 = load i32, ptr %20, align 4, !tbaa !9
  %630 = load i32, ptr %19, align 4, !tbaa !9
  %631 = zext i32 %630 to i64
  %632 = shl i64 1, %631
  %633 = trunc i64 %632 to i32
  %634 = and i32 %629, %633
  %635 = icmp ne i32 %634, 0
  br i1 %635, label %636, label %637

636:                                              ; preds = %628, %625, %622, %612
  store ptr @.str.24, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %644

637:                                              ; preds = %628
  %638 = load i32, ptr %19, align 4, !tbaa !9
  %639 = shl i32 1, %638
  %640 = load i32, ptr %20, align 4, !tbaa !9
  %641 = or i32 %640, %639
  store i32 %641, ptr %20, align 4, !tbaa !9
  %642 = load i32, ptr %19, align 4, !tbaa !9
  %643 = shl i32 1, %642
  store i32 %643, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %17, align 4
  br label %644

644:                                              ; preds = %637, %636
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  %645 = load i32, ptr %17, align 4
  switch i32 %645, label %1132 [
    i32 0, label %646
  ]

646:                                              ; preds = %644
  br label %647

647:                                              ; preds = %646, %610
  br label %648

648:                                              ; preds = %647
  br label %649

649:                                              ; preds = %648
  br label %650

650:                                              ; preds = %649
  br label %651

651:                                              ; preds = %650
  br label %652

652:                                              ; preds = %651
  br label %653

653:                                              ; preds = %652
  br label %654

654:                                              ; preds = %653
  br label %655

655:                                              ; preds = %654
  br label %656

656:                                              ; preds = %655
  br label %657

657:                                              ; preds = %656
  br label %658

658:                                              ; preds = %657
  br label %659

659:                                              ; preds = %658
  br label %660

660:                                              ; preds = %659
  %661 = call i32 @jsonparse_next(ptr noundef %16)
  %662 = call i32 @jsonparse_next(ptr noundef %16)
  %663 = icmp ne i32 %662, 0
  br i1 %663, label %664, label %1124

664:                                              ; preds = %660
  %665 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.25)
  %666 = icmp eq i32 %665, 0
  br i1 %666, label %667, label %668

667:                                              ; preds = %664
  br label %60, !llvm.loop !18

668:                                              ; preds = %664
  %669 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.26)
  %670 = icmp eq i32 %669, 0
  br i1 %670, label %671, label %687

671:                                              ; preds = %668
  %672 = load i32, ptr %14, align 4, !tbaa !9
  %673 = and i32 %672, 4
  %674 = icmp eq i32 %673, 0
  br i1 %674, label %675, label %676

675:                                              ; preds = %671
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

676:                                              ; preds = %671
  %677 = load i32, ptr %21, align 4, !tbaa !9
  %678 = load ptr, ptr %11, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.gpio_command_params, ptr %678, i32 0, i32 2
  %680 = load i16, ptr %679, align 4, !tbaa !33
  %681 = zext i16 %680 to i32
  %682 = or i32 %681, %677
  %683 = trunc i32 %682 to i16
  store i16 %683, ptr %679, align 4, !tbaa !33
  %684 = load ptr, ptr %15, align 8, !tbaa !5
  %685 = load i32, ptr %684, align 4, !tbaa !9
  %686 = or i32 %685, 4
  store i32 %686, ptr %684, align 4, !tbaa !9
  br label %1122

687:                                              ; preds = %668
  %688 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.27)
  %689 = icmp eq i32 %688, 0
  br i1 %689, label %690, label %706

690:                                              ; preds = %687
  %691 = load i32, ptr %14, align 4, !tbaa !9
  %692 = and i32 %691, 8
  %693 = icmp eq i32 %692, 0
  br i1 %693, label %694, label %695

694:                                              ; preds = %690
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

695:                                              ; preds = %690
  %696 = load i32, ptr %21, align 4, !tbaa !9
  %697 = load ptr, ptr %11, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.gpio_command_params, ptr %697, i32 0, i32 3
  %699 = load i16, ptr %698, align 2, !tbaa !34
  %700 = zext i16 %699 to i32
  %701 = or i32 %700, %696
  %702 = trunc i32 %701 to i16
  store i16 %702, ptr %698, align 2, !tbaa !34
  %703 = load ptr, ptr %15, align 8, !tbaa !5
  %704 = load i32, ptr %703, align 4, !tbaa !9
  %705 = or i32 %704, 8
  store i32 %705, ptr %703, align 4, !tbaa !9
  br label %1121

706:                                              ; preds = %687
  %707 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.28)
  %708 = icmp eq i32 %707, 0
  br i1 %708, label %709, label %725

709:                                              ; preds = %706
  %710 = load i32, ptr %14, align 4, !tbaa !9
  %711 = and i32 %710, 16
  %712 = icmp eq i32 %711, 0
  br i1 %712, label %713, label %714

713:                                              ; preds = %709
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

714:                                              ; preds = %709
  %715 = load i32, ptr %21, align 4, !tbaa !9
  %716 = load ptr, ptr %11, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.gpio_command_params, ptr %716, i32 0, i32 4
  %718 = load i16, ptr %717, align 4, !tbaa !35
  %719 = zext i16 %718 to i32
  %720 = or i32 %719, %715
  %721 = trunc i32 %720 to i16
  store i16 %721, ptr %717, align 4, !tbaa !35
  %722 = load ptr, ptr %15, align 8, !tbaa !5
  %723 = load i32, ptr %722, align 4, !tbaa !9
  %724 = or i32 %723, 16
  store i32 %724, ptr %722, align 4, !tbaa !9
  br label %1120

725:                                              ; preds = %706
  %726 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.3)
  %727 = icmp eq i32 %726, 0
  br i1 %727, label %728, label %833

728:                                              ; preds = %725
  %729 = load i32, ptr %14, align 4, !tbaa !9
  %730 = and i32 %729, 8192
  %731 = icmp eq i32 %730, 0
  br i1 %731, label %732, label %741

732:                                              ; preds = %728
  %733 = load i32, ptr %14, align 4, !tbaa !9
  %734 = and i32 %733, 16384
  %735 = icmp eq i32 %734, 0
  br i1 %735, label %736, label %741

736:                                              ; preds = %732
  %737 = load i32, ptr %14, align 4, !tbaa !9
  %738 = and i32 %737, 32
  %739 = icmp eq i32 %738, 0
  br i1 %739, label %740, label %741

740:                                              ; preds = %736
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

741:                                              ; preds = %736, %732, %728
  %742 = load i32, ptr %14, align 4, !tbaa !9
  %743 = and i32 %742, 8192
  %744 = icmp ne i32 %743, 0
  br i1 %744, label %745, label %779

745:                                              ; preds = %741
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  %746 = load i32, ptr %19, align 4, !tbaa !9
  %747 = icmp sgt i32 %746, 0
  br i1 %747, label %748, label %754

748:                                              ; preds = %745
  %749 = load ptr, ptr %11, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.gpio_command_params, ptr %749, i32 0, i32 13
  %751 = load i32, ptr %19, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds [16 x i32], ptr %750, i64 0, i64 %752
  store i32 0, ptr %753, align 4, !tbaa !23
  br label %768

754:                                              ; preds = %745
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %755

755:                                              ; preds = %764, %754
  %756 = load i32, ptr %40, align 4, !tbaa !9
  %757 = icmp slt i32 %756, 16
  br i1 %757, label %758, label %767

758:                                              ; preds = %755
  %759 = load ptr, ptr %11, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.gpio_command_params, ptr %759, i32 0, i32 13
  %761 = load i32, ptr %40, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds [16 x i32], ptr %760, i64 0, i64 %762
  store i32 0, ptr %763, align 4, !tbaa !23
  br label %764

764:                                              ; preds = %758
  %765 = load i32, ptr %40, align 4, !tbaa !9
  %766 = add nsw i32 %765, 1
  store i32 %766, ptr %40, align 4, !tbaa !9
  br label %755, !llvm.loop !36

767:                                              ; preds = %755
  br label %768

768:                                              ; preds = %767, %748
  %769 = load i32, ptr %21, align 4, !tbaa !9
  %770 = load ptr, ptr %11, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.gpio_command_params, ptr %770, i32 0, i32 14
  %772 = load i16, ptr %771, align 4, !tbaa !37
  %773 = zext i16 %772 to i32
  %774 = or i32 %773, %769
  %775 = trunc i32 %774 to i16
  store i16 %775, ptr %771, align 4, !tbaa !37
  %776 = load ptr, ptr %15, align 8, !tbaa !5
  %777 = load i32, ptr %776, align 4, !tbaa !9
  %778 = or i32 %777, 8192
  store i32 %778, ptr %776, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  br label %779

779:                                              ; preds = %768, %741
  %780 = load i32, ptr %14, align 4, !tbaa !9
  %781 = and i32 %780, 16384
  %782 = icmp ne i32 %781, 0
  br i1 %782, label %783, label %817

783:                                              ; preds = %779
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  %784 = load i32, ptr %19, align 4, !tbaa !9
  %785 = icmp sgt i32 %784, 0
  br i1 %785, label %786, label %792

786:                                              ; preds = %783
  %787 = load ptr, ptr %11, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.gpio_command_params, ptr %787, i32 0, i32 13
  %789 = load i32, ptr %19, align 4, !tbaa !9
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds [16 x float], ptr %788, i64 0, i64 %790
  store float 0.000000e+00, ptr %791, align 4, !tbaa !23
  br label %806

792:                                              ; preds = %783
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %793

793:                                              ; preds = %802, %792
  %794 = load i32, ptr %41, align 4, !tbaa !9
  %795 = icmp slt i32 %794, 16
  br i1 %795, label %796, label %805

796:                                              ; preds = %793
  %797 = load ptr, ptr %11, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.gpio_command_params, ptr %797, i32 0, i32 13
  %799 = load i32, ptr %41, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds [16 x float], ptr %798, i64 0, i64 %800
  store float 0.000000e+00, ptr %801, align 4, !tbaa !23
  br label %802

802:                                              ; preds = %796
  %803 = load i32, ptr %41, align 4, !tbaa !9
  %804 = add nsw i32 %803, 1
  store i32 %804, ptr %41, align 4, !tbaa !9
  br label %793, !llvm.loop !38

805:                                              ; preds = %793
  br label %806

806:                                              ; preds = %805, %786
  %807 = load i32, ptr %21, align 4, !tbaa !9
  %808 = load ptr, ptr %11, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.gpio_command_params, ptr %808, i32 0, i32 14
  %810 = load i16, ptr %809, align 4, !tbaa !37
  %811 = zext i16 %810 to i32
  %812 = or i32 %811, %807
  %813 = trunc i32 %812 to i16
  store i16 %813, ptr %809, align 4, !tbaa !37
  %814 = load ptr, ptr %15, align 8, !tbaa !5
  %815 = load i32, ptr %814, align 4, !tbaa !9
  %816 = or i32 %815, 16384
  store i32 %816, ptr %814, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  br label %817

817:                                              ; preds = %806, %779
  %818 = load i32, ptr %14, align 4, !tbaa !9
  %819 = and i32 %818, 32
  %820 = icmp ne i32 %819, 0
  br i1 %820, label %821, label %832

821:                                              ; preds = %817
  %822 = load i32, ptr %21, align 4, !tbaa !9
  %823 = load ptr, ptr %11, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.gpio_command_params, ptr %823, i32 0, i32 5
  %825 = load i16, ptr %824, align 2, !tbaa !39
  %826 = zext i16 %825 to i32
  %827 = or i32 %826, %822
  %828 = trunc i32 %827 to i16
  store i16 %828, ptr %824, align 2, !tbaa !39
  %829 = load ptr, ptr %15, align 8, !tbaa !5
  %830 = load i32, ptr %829, align 4, !tbaa !9
  %831 = or i32 %830, 32
  store i32 %831, ptr %829, align 4, !tbaa !9
  br label %832

832:                                              ; preds = %821, %817
  br label %1119

833:                                              ; preds = %725
  %834 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.29)
  %835 = icmp eq i32 %834, 0
  br i1 %835, label %836, label %852

836:                                              ; preds = %833
  %837 = load i32, ptr %14, align 4, !tbaa !9
  %838 = and i32 %837, 64
  %839 = icmp eq i32 %838, 0
  br i1 %839, label %840, label %841

840:                                              ; preds = %836
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

841:                                              ; preds = %836
  %842 = load i32, ptr %21, align 4, !tbaa !9
  %843 = load ptr, ptr %11, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.gpio_command_params, ptr %843, i32 0, i32 6
  %845 = load i16, ptr %844, align 4, !tbaa !40
  %846 = zext i16 %845 to i32
  %847 = or i32 %846, %842
  %848 = trunc i32 %847 to i16
  store i16 %848, ptr %844, align 4, !tbaa !40
  %849 = load ptr, ptr %15, align 8, !tbaa !5
  %850 = load i32, ptr %849, align 4, !tbaa !9
  %851 = or i32 %850, 64
  store i32 %851, ptr %849, align 4, !tbaa !9
  br label %1118

852:                                              ; preds = %833
  %853 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.30)
  %854 = icmp eq i32 %853, 0
  br i1 %854, label %855, label %871

855:                                              ; preds = %852
  %856 = load i32, ptr %14, align 4, !tbaa !9
  %857 = and i32 %856, 128
  %858 = icmp eq i32 %857, 0
  br i1 %858, label %859, label %860

859:                                              ; preds = %855
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

860:                                              ; preds = %855
  %861 = load i32, ptr %21, align 4, !tbaa !9
  %862 = load ptr, ptr %11, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.gpio_command_params, ptr %862, i32 0, i32 7
  %864 = load i16, ptr %863, align 2, !tbaa !41
  %865 = zext i16 %864 to i32
  %866 = or i32 %865, %861
  %867 = trunc i32 %866 to i16
  store i16 %867, ptr %863, align 2, !tbaa !41
  %868 = load ptr, ptr %15, align 8, !tbaa !5
  %869 = load i32, ptr %868, align 4, !tbaa !9
  %870 = or i32 %869, 128
  store i32 %870, ptr %868, align 4, !tbaa !9
  br label %1117

871:                                              ; preds = %852
  %872 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.31)
  %873 = icmp eq i32 %872, 0
  br i1 %873, label %874, label %890

874:                                              ; preds = %871
  %875 = load i32, ptr %14, align 4, !tbaa !9
  %876 = and i32 %875, 256
  %877 = icmp eq i32 %876, 0
  br i1 %877, label %878, label %879

878:                                              ; preds = %874
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

879:                                              ; preds = %874
  %880 = load i32, ptr %21, align 4, !tbaa !9
  %881 = load ptr, ptr %11, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.gpio_command_params, ptr %881, i32 0, i32 8
  %883 = load i16, ptr %882, align 4, !tbaa !42
  %884 = zext i16 %883 to i32
  %885 = or i32 %884, %880
  %886 = trunc i32 %885 to i16
  store i16 %886, ptr %882, align 4, !tbaa !42
  %887 = load ptr, ptr %15, align 8, !tbaa !5
  %888 = load i32, ptr %887, align 4, !tbaa !9
  %889 = or i32 %888, 256
  store i32 %889, ptr %887, align 4, !tbaa !9
  br label %1116

890:                                              ; preds = %871
  %891 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.32)
  %892 = icmp eq i32 %891, 0
  br i1 %892, label %893, label %909

893:                                              ; preds = %890
  %894 = load i32, ptr %14, align 4, !tbaa !9
  %895 = and i32 %894, 512
  %896 = icmp eq i32 %895, 0
  br i1 %896, label %897, label %898

897:                                              ; preds = %893
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

898:                                              ; preds = %893
  %899 = load i32, ptr %21, align 4, !tbaa !9
  %900 = load ptr, ptr %11, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.gpio_command_params, ptr %900, i32 0, i32 9
  %902 = load i16, ptr %901, align 2, !tbaa !43
  %903 = zext i16 %902 to i32
  %904 = or i32 %903, %899
  %905 = trunc i32 %904 to i16
  store i16 %905, ptr %901, align 2, !tbaa !43
  %906 = load ptr, ptr %15, align 8, !tbaa !5
  %907 = load i32, ptr %906, align 4, !tbaa !9
  %908 = or i32 %907, 512
  store i32 %908, ptr %906, align 4, !tbaa !9
  br label %1115

909:                                              ; preds = %890
  %910 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.33)
  %911 = icmp eq i32 %910, 0
  br i1 %911, label %912, label %928

912:                                              ; preds = %909
  %913 = load i32, ptr %14, align 4, !tbaa !9
  %914 = and i32 %913, 1024
  %915 = icmp eq i32 %914, 0
  br i1 %915, label %916, label %917

916:                                              ; preds = %912
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

917:                                              ; preds = %912
  %918 = load i32, ptr %21, align 4, !tbaa !9
  %919 = load ptr, ptr %11, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.gpio_command_params, ptr %919, i32 0, i32 10
  %921 = load i16, ptr %920, align 4, !tbaa !44
  %922 = zext i16 %921 to i32
  %923 = or i32 %922, %918
  %924 = trunc i32 %923 to i16
  store i16 %924, ptr %920, align 4, !tbaa !44
  %925 = load ptr, ptr %15, align 8, !tbaa !5
  %926 = load i32, ptr %925, align 4, !tbaa !9
  %927 = or i32 %926, 1024
  store i32 %927, ptr %925, align 4, !tbaa !9
  br label %1114

928:                                              ; preds = %909
  %929 = load i32, ptr %14, align 4, !tbaa !9
  %930 = and i32 %929, 16384
  %931 = icmp ne i32 %930, 0
  br i1 %931, label %932, label %981

932:                                              ; preds = %928
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  %933 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %934 = load ptr, ptr %933, align 8, !tbaa !20
  %935 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %936 = load i32, ptr %935, align 4, !tbaa !21
  %937 = sext i32 %936 to i64
  %938 = getelementptr inbounds i8, ptr %934, i64 %937
  %939 = call i32 @strToFloat(ptr noundef %938, ptr noundef %42)
  %940 = icmp ne i32 %939, 0
  br i1 %940, label %942, label %941

941:                                              ; preds = %932
  store ptr @.str.34, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %978

942:                                              ; preds = %932
  %943 = load i32, ptr %19, align 4, !tbaa !9
  %944 = icmp sgt i32 %943, 0
  br i1 %944, label %945, label %952

945:                                              ; preds = %942
  %946 = load float, ptr %42, align 4, !tbaa !29
  %947 = load ptr, ptr %11, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.gpio_command_params, ptr %947, i32 0, i32 13
  %949 = load i32, ptr %19, align 4, !tbaa !9
  %950 = sext i32 %949 to i64
  %951 = getelementptr inbounds [16 x float], ptr %948, i64 0, i64 %950
  store float %946, ptr %951, align 4, !tbaa !23
  br label %967

952:                                              ; preds = %942
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %953

953:                                              ; preds = %963, %952
  %954 = load i32, ptr %43, align 4, !tbaa !9
  %955 = icmp slt i32 %954, 16
  br i1 %955, label %956, label %966

956:                                              ; preds = %953
  %957 = load float, ptr %42, align 4, !tbaa !29
  %958 = load ptr, ptr %11, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.gpio_command_params, ptr %958, i32 0, i32 13
  %960 = load i32, ptr %43, align 4, !tbaa !9
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds [16 x float], ptr %959, i64 0, i64 %961
  store float %957, ptr %962, align 4, !tbaa !23
  br label %963

963:                                              ; preds = %956
  %964 = load i32, ptr %43, align 4, !tbaa !9
  %965 = add nsw i32 %964, 1
  store i32 %965, ptr %43, align 4, !tbaa !9
  br label %953, !llvm.loop !45

966:                                              ; preds = %953
  br label %967

967:                                              ; preds = %966, %945
  %968 = load i32, ptr %21, align 4, !tbaa !9
  %969 = load ptr, ptr %11, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.gpio_command_params, ptr %969, i32 0, i32 14
  %971 = load i16, ptr %970, align 4, !tbaa !37
  %972 = zext i16 %971 to i32
  %973 = or i32 %972, %968
  %974 = trunc i32 %973 to i16
  store i16 %974, ptr %970, align 4, !tbaa !37
  %975 = load ptr, ptr %15, align 8, !tbaa !5
  %976 = load i32, ptr %975, align 4, !tbaa !9
  %977 = or i32 %976, 16384
  store i32 %977, ptr %975, align 4, !tbaa !9
  store i32 0, ptr %17, align 4
  br label %978

978:                                              ; preds = %967, %941
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  %979 = load i32, ptr %17, align 4
  switch i32 %979, label %1132 [
    i32 0, label %980
  ]

980:                                              ; preds = %978
  br label %1113

981:                                              ; preds = %928
  %982 = load i32, ptr %14, align 4, !tbaa !9
  %983 = and i32 %982, 8192
  %984 = icmp ne i32 %983, 0
  br i1 %984, label %985, label %1071

985:                                              ; preds = %981
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #3
  %986 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 0
  %987 = load ptr, ptr %986, align 8, !tbaa !20
  %988 = getelementptr inbounds %struct.jsonparse_state, ptr %16, i32 0, i32 4
  %989 = load i32, ptr %988, align 4, !tbaa !21
  %990 = sext i32 %989 to i64
  %991 = getelementptr inbounds i8, ptr %987, i64 %990
  %992 = call i32 @strToUInt(ptr noundef %991, ptr noundef %44)
  %993 = icmp ne i32 %992, 0
  br i1 %993, label %995, label %994

994:                                              ; preds = %985
  store ptr @.str.35, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1068

995:                                              ; preds = %985
  %996 = load i32, ptr %19, align 4, !tbaa !9
  %997 = icmp sgt i32 %996, 0
  br i1 %997, label %998, label %1005

998:                                              ; preds = %995
  %999 = load i32, ptr %44, align 4, !tbaa !9
  %1000 = load ptr, ptr %11, align 8, !tbaa !5
  %1001 = getelementptr inbounds %struct.gpio_command_params, ptr %1000, i32 0, i32 13
  %1002 = load i32, ptr %19, align 4, !tbaa !9
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds [16 x i32], ptr %1001, i64 0, i64 %1003
  store i32 %999, ptr %1004, align 4, !tbaa !23
  br label %1020

1005:                                             ; preds = %995
  store i32 0, ptr %45, align 4, !tbaa !9
  br label %1006

1006:                                             ; preds = %1016, %1005
  %1007 = load i32, ptr %45, align 4, !tbaa !9
  %1008 = icmp slt i32 %1007, 16
  br i1 %1008, label %1009, label %1019

1009:                                             ; preds = %1006
  %1010 = load i32, ptr %44, align 4, !tbaa !9
  %1011 = load ptr, ptr %11, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.gpio_command_params, ptr %1011, i32 0, i32 13
  %1013 = load i32, ptr %45, align 4, !tbaa !9
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds [16 x i32], ptr %1012, i64 0, i64 %1014
  store i32 %1010, ptr %1015, align 4, !tbaa !23
  br label %1016

1016:                                             ; preds = %1009
  %1017 = load i32, ptr %45, align 4, !tbaa !9
  %1018 = add nsw i32 %1017, 1
  store i32 %1018, ptr %45, align 4, !tbaa !9
  br label %1006, !llvm.loop !46

1019:                                             ; preds = %1006
  br label %1020

1020:                                             ; preds = %1019, %998
  %1021 = load i32, ptr %21, align 4, !tbaa !9
  %1022 = load ptr, ptr %11, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.gpio_command_params, ptr %1022, i32 0, i32 14
  %1024 = load i16, ptr %1023, align 4, !tbaa !37
  %1025 = zext i16 %1024 to i32
  %1026 = or i32 %1025, %1021
  %1027 = trunc i32 %1026 to i16
  store i16 %1027, ptr %1023, align 4, !tbaa !37
  %1028 = load ptr, ptr %15, align 8, !tbaa !5
  %1029 = load i32, ptr %1028, align 4, !tbaa !9
  %1030 = or i32 %1029, 8192
  store i32 %1030, ptr %1028, align 4, !tbaa !9
  %1031 = load i32, ptr %44, align 4, !tbaa !9
  %1032 = icmp eq i32 %1031, 1
  br i1 %1032, label %1033, label %1048

1033:                                             ; preds = %1020
  %1034 = load i32, ptr %14, align 4, !tbaa !9
  %1035 = and i32 %1034, 1
  %1036 = icmp ne i32 %1035, 0
  br i1 %1036, label %1037, label %1048

1037:                                             ; preds = %1033
  %1038 = load i32, ptr %21, align 4, !tbaa !9
  %1039 = load ptr, ptr %11, align 8, !tbaa !5
  %1040 = getelementptr inbounds %struct.gpio_command_params, ptr %1039, i32 0, i32 0
  %1041 = load i16, ptr %1040, align 4, !tbaa !47
  %1042 = zext i16 %1041 to i32
  %1043 = or i32 %1042, %1038
  %1044 = trunc i32 %1043 to i16
  store i16 %1044, ptr %1040, align 4, !tbaa !47
  %1045 = load ptr, ptr %15, align 8, !tbaa !5
  %1046 = load i32, ptr %1045, align 4, !tbaa !9
  %1047 = or i32 %1046, 1
  store i32 %1047, ptr %1045, align 4, !tbaa !9
  br label %1067

1048:                                             ; preds = %1033, %1020
  %1049 = load i32, ptr %44, align 4, !tbaa !9
  %1050 = icmp eq i32 %1049, 0
  br i1 %1050, label %1051, label %1066

1051:                                             ; preds = %1048
  %1052 = load i32, ptr %14, align 4, !tbaa !9
  %1053 = and i32 %1052, 2
  %1054 = icmp ne i32 %1053, 0
  br i1 %1054, label %1055, label %1066

1055:                                             ; preds = %1051
  %1056 = load i32, ptr %21, align 4, !tbaa !9
  %1057 = load ptr, ptr %11, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.gpio_command_params, ptr %1057, i32 0, i32 1
  %1059 = load i16, ptr %1058, align 2, !tbaa !48
  %1060 = zext i16 %1059 to i32
  %1061 = or i32 %1060, %1056
  %1062 = trunc i32 %1061 to i16
  store i16 %1062, ptr %1058, align 2, !tbaa !48
  %1063 = load ptr, ptr %15, align 8, !tbaa !5
  %1064 = load i32, ptr %1063, align 4, !tbaa !9
  %1065 = or i32 %1064, 2
  store i32 %1065, ptr %1063, align 4, !tbaa !9
  br label %1066

1066:                                             ; preds = %1055, %1051, %1048
  br label %1067

1067:                                             ; preds = %1066, %1037
  store i32 0, ptr %17, align 4
  br label %1068

1068:                                             ; preds = %1067, %994
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  %1069 = load i32, ptr %17, align 4
  switch i32 %1069, label %1132 [
    i32 0, label %1070
  ]

1070:                                             ; preds = %1068
  br label %1112

1071:                                             ; preds = %981
  %1072 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.36)
  %1073 = icmp eq i32 %1072, 0
  br i1 %1073, label %1074, label %1090

1074:                                             ; preds = %1071
  %1075 = load i32, ptr %14, align 4, !tbaa !9
  %1076 = and i32 %1075, 1
  %1077 = icmp eq i32 %1076, 0
  br i1 %1077, label %1078, label %1079

1078:                                             ; preds = %1074
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

1079:                                             ; preds = %1074
  %1080 = load i32, ptr %21, align 4, !tbaa !9
  %1081 = load ptr, ptr %11, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.gpio_command_params, ptr %1081, i32 0, i32 0
  %1083 = load i16, ptr %1082, align 4, !tbaa !47
  %1084 = zext i16 %1083 to i32
  %1085 = or i32 %1084, %1080
  %1086 = trunc i32 %1085 to i16
  store i16 %1086, ptr %1082, align 4, !tbaa !47
  %1087 = load ptr, ptr %15, align 8, !tbaa !5
  %1088 = load i32, ptr %1087, align 4, !tbaa !9
  %1089 = or i32 %1088, 1
  store i32 %1089, ptr %1087, align 4, !tbaa !9
  br label %1111

1090:                                             ; preds = %1071
  %1091 = call i32 @strcmp_value(ptr noundef %16, ptr noundef @.str.37)
  %1092 = icmp eq i32 %1091, 0
  br i1 %1092, label %1093, label %1109

1093:                                             ; preds = %1090
  %1094 = load i32, ptr %14, align 4, !tbaa !9
  %1095 = and i32 %1094, 2
  %1096 = icmp eq i32 %1095, 0
  br i1 %1096, label %1097, label %1098

1097:                                             ; preds = %1093
  store ptr @.str.2, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

1098:                                             ; preds = %1093
  %1099 = load i32, ptr %21, align 4, !tbaa !9
  %1100 = load ptr, ptr %11, align 8, !tbaa !5
  %1101 = getelementptr inbounds %struct.gpio_command_params, ptr %1100, i32 0, i32 1
  %1102 = load i16, ptr %1101, align 2, !tbaa !48
  %1103 = zext i16 %1102 to i32
  %1104 = or i32 %1103, %1099
  %1105 = trunc i32 %1104 to i16
  store i16 %1105, ptr %1101, align 2, !tbaa !48
  %1106 = load ptr, ptr %15, align 8, !tbaa !5
  %1107 = load i32, ptr %1106, align 4, !tbaa !9
  %1108 = or i32 %1107, 2
  store i32 %1108, ptr %1106, align 4, !tbaa !9
  br label %1110

1109:                                             ; preds = %1090
  store ptr @.str.38, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

1110:                                             ; preds = %1098
  br label %1111

1111:                                             ; preds = %1110, %1079
  br label %1112

1112:                                             ; preds = %1111, %1070
  br label %1113

1113:                                             ; preds = %1112, %980
  br label %1114

1114:                                             ; preds = %1113, %917
  br label %1115

1115:                                             ; preds = %1114, %898
  br label %1116

1116:                                             ; preds = %1115, %879
  br label %1117

1117:                                             ; preds = %1116, %860
  br label %1118

1118:                                             ; preds = %1117, %841
  br label %1119

1119:                                             ; preds = %1118, %832
  br label %1120

1120:                                             ; preds = %1119, %714
  br label %1121

1121:                                             ; preds = %1120, %695
  br label %1122

1122:                                             ; preds = %1121, %676
  br label %1123

1123:                                             ; preds = %1122
  br label %1124

1124:                                             ; preds = %1123, %660
  br label %1130

1125:                                             ; preds = %66
  %1126 = load i32, ptr %18, align 4, !tbaa !9
  %1127 = icmp eq i32 %1126, 0
  br i1 %1127, label %1128, label %1129

1128:                                             ; preds = %1125
  store ptr @.str.39, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

1129:                                             ; preds = %1125
  br label %1130

1130:                                             ; preds = %1129, %1124
  br label %60, !llvm.loop !18

1131:                                             ; preds = %60
  store ptr null, ptr %8, align 8
  store i32 1, ptr %17, align 4
  br label %1132

1132:                                             ; preds = %1131, %1128, %1109, %1097, %1078, %1068, %978, %916, %897, %878, %859, %840, %740, %713, %694, %675, %644, %609, %575, %565, %547, %518, %500, %476, %462, %446, %430, %414, %398, %380, %327, %318, %282, %273, %257, %239, %81
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  br label %1133

1133:                                             ; preds = %1132, %54
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #3
  %1134 = load ptr, ptr %8, align 8
  ret ptr %1134
}

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

declare void @jsonparse_setup(ptr noundef, ptr noundef, i32 noundef) #2

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

declare i32 @jsonparse_next(ptr noundef) #2

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

declare i32 @strToUInt(ptr noundef, ptr noundef) #2

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

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

declare i32 @strToFloat(ptr noundef, ptr noundef) #2

declare i32 @hexToByte(ptr noundef, ptr noundef) #2

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

declare i32 @dhdata_decode(ptr noundef, i32 noundef, ptr noundef, i32 noundef) #2

declare ptr @ets_memcpy(ptr noundef, ptr noundef, i32 noundef) #2

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 }

!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 8}
!12 = !{!"jsonparse_state", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !7, i64 28, !7, i64 29, !7, i64 30}
!13 = !{!12, !10, i64 12}
!14 = !{!15, !10, i64 100}
!15 = !{!"", !16, i64 0, !16, i64 2, !16, i64 4, !16, i64 6, !16, i64 8, !16, i64 10, !16, i64 12, !16, i64 14, !16, i64 16, !16, i64 18, !16, i64 20, !10, i64 24, !10, i64 28, !7, i64 32, !16, i64 96, !10, i64 100, !7, i64 104, !7, i64 105, !7, i64 106, !7, i64 107, !10, i64 372, !10, i64 376, !10, i64 380, !10, i64 384, !10, i64 388, !10, i64 392, !10, i64 396, !10, i64 400, !17, i64 404}
!16 = !{!"short", !7, i64 0}
!17 = !{!"float", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!12, !6, i64 0}
!21 = !{!12, !10, i64 20}
!22 = !{!12, !10, i64 24}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !19}
!25 = !{!15, !7, i64 104}
!26 = !{!15, !7, i64 105}
!27 = !{!15, !7, i64 106}
!28 = !{!15, !10, i64 392}
!29 = !{!17, !17, i64 0}
!30 = !{!15, !10, i64 24}
!31 = !{!15, !10, i64 380}
!32 = !{!15, !10, i64 372}
!33 = !{!15, !16, i64 4}
!34 = !{!15, !16, i64 6}
!35 = !{!15, !16, i64 8}
!36 = distinct !{!36, !19}
!37 = !{!15, !16, i64 96}
!38 = distinct !{!38, !19}
!39 = !{!15, !16, i64 10}
!40 = !{!15, !16, i64 12}
!41 = !{!15, !16, i64 14}
!42 = !{!15, !16, i64 16}
!43 = !{!15, !16, i64 18}
!44 = !{!15, !16, i64 20}
!45 = distinct !{!45, !19}
!46 = distinct !{!46, !19}
!47 = !{!15, !16, i64 0}
!48 = !{!15, !16, i64 2}


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

%struct.jsonparse_state = type { ptr, i32, i32, i32, i32, i32, i8, i8, [10 x i8] }

@.str = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [12 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local ptr @parse_params_pins_set(ptr noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, ptr noundef %6) local_unnamed_addr #0 {
  %8 = alloca %struct.jsonparse_state, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca float, align 4
  %12 = alloca i8, align 1
  %13 = alloca float, align 4
  %14 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #4
  %.not = icmp eq i32 %1, 0
  br i1 %.not, label %16, label %15

15:                                               ; preds = %7
  call void @jsonparse_setup(ptr noundef nonnull %8, ptr noundef %0, i32 noundef %1) #4
  br label %17

16:                                               ; preds = %7
  %.not278 = icmp eq i32 %5, 0
  br i1 %.not278, label %17, label %527

17:                                               ; preds = %16, %15
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #4
  store i32 0, ptr %6, align 4, !tbaa !5
  call void @load_defaults(ptr noundef %2, i32 noundef %4)
  %18 = getelementptr inbounds i8, ptr %8, i64 8
  %19 = getelementptr inbounds i8, ptr %8, i64 12
  %20 = load i32, ptr %18, align 8, !tbaa !9
  %21 = load i32, ptr %19, align 4, !tbaa !12
  %22 = icmp slt i32 %20, %21
  br i1 %22, label %.lr.ph367, label %.thread339

.lr.ph367:                                        ; preds = %17
  %23 = getelementptr inbounds i8, ptr %8, i64 20
  %24 = and i32 %5, 16384
  %.not282 = icmp eq i32 %24, 0
  %25 = getelementptr i8, ptr %2, i64 32
  %26 = getelementptr inbounds i8, ptr %2, i64 96
  %27 = and i32 %5, 8192
  %.not283 = icmp eq i32 %27, 0
  %28 = and i32 %5, 1
  %.not285 = icmp eq i32 %28, 0
  %29 = and i32 %5, 2
  %.not286 = icmp eq i32 %29, 0
  %30 = getelementptr inbounds i8, ptr %2, i64 2
  %31 = and i32 %5, 1024
  %32 = icmp eq i32 %31, 0
  %33 = getelementptr inbounds i8, ptr %2, i64 20
  %34 = and i32 %5, 512
  %35 = icmp eq i32 %34, 0
  %36 = getelementptr inbounds i8, ptr %2, i64 18
  %37 = insertelement <16 x i32> poison, i32 %5, i64 0
  %38 = shufflevector <16 x i32> %37, <16 x i32> poison, <16 x i32> zeroinitializer
  %39 = and <16 x i32> %38, <i32 4227072, i32 4194304, i32 32768, i32 2048, i32 524288, i32 65536, i32 67108864, i32 131072, i32 4, i32 8, i32 16, i32 24608, i32 32, i32 64, i32 128, i32 256>
  %40 = getelementptr inbounds i8, ptr %2, i64 16
  %41 = getelementptr inbounds i8, ptr %2, i64 14
  %42 = getelementptr inbounds i8, ptr %2, i64 12
  %43 = getelementptr inbounds i8, ptr %2, i64 10
  %44 = getelementptr inbounds i8, ptr %2, i64 8
  %45 = getelementptr inbounds i8, ptr %2, i64 6
  %46 = getelementptr inbounds i8, ptr %2, i64 4
  %47 = getelementptr inbounds i8, ptr %2, i64 372
  %48 = getelementptr inbounds i8, ptr %8, i64 24
  %49 = getelementptr inbounds i8, ptr %2, i64 107
  %50 = getelementptr inbounds i8, ptr %2, i64 92
  %51 = getelementptr inbounds i8, ptr %2, i64 404
  %52 = getelementptr inbounds i8, ptr %2, i64 400
  %53 = getelementptr inbounds i8, ptr %2, i64 396
  %54 = getelementptr inbounds i8, ptr %2, i64 388
  %55 = getelementptr inbounds i8, ptr %2, i64 384
  %56 = getelementptr inbounds i8, ptr %2, i64 380
  %57 = getelementptr inbounds i8, ptr %2, i64 24
  %58 = getelementptr inbounds i8, ptr %2, i64 376
  %59 = getelementptr inbounds i8, ptr %2, i64 28
  %60 = icmp eq <16 x i32> %39, zeroinitializer
  %61 = getelementptr inbounds i8, ptr %2, i64 100
  %62 = getelementptr inbounds i8, ptr %2, i64 104
  %63 = getelementptr inbounds i8, ptr %2, i64 105
  %64 = getelementptr inbounds i8, ptr %2, i64 106
  %65 = getelementptr inbounds i8, ptr %2, i64 392
  %66 = getelementptr i8, ptr %2, i64 48
  %67 = getelementptr i8, ptr %2, i64 64
  %68 = getelementptr i8, ptr %2, i64 80
  %69 = getelementptr i8, ptr %2, i64 48
  %70 = getelementptr i8, ptr %2, i64 64
  %71 = getelementptr i8, ptr %2, i64 80
  %72 = getelementptr i8, ptr %2, i64 84
  %73 = getelementptr i8, ptr %2, i64 88
  %74 = getelementptr i8, ptr %2, i64 92
  %75 = extractelement <16 x i1> %60, i64 0
  %76 = extractelement <16 x i1> %60, i64 1
  %77 = extractelement <16 x i1> %60, i64 2
  %78 = extractelement <16 x i1> %60, i64 3
  %79 = extractelement <16 x i1> %60, i64 4
  %80 = extractelement <16 x i1> %60, i64 5
  %81 = extractelement <16 x i1> %60, i64 6
  %82 = extractelement <16 x i1> %60, i64 7
  %83 = extractelement <16 x i1> %60, i64 8
  %84 = extractelement <16 x i1> %60, i64 9
  %85 = extractelement <16 x i1> %60, i64 10
  %86 = extractelement <16 x i1> %60, i64 11
  %87 = extractelement <16 x i1> %60, i64 12
  %88 = extractelement <16 x i1> %60, i64 13
  %89 = extractelement <16 x i1> %60, i64 14
  %90 = extractelement <16 x i1> %60, i64 15
  br label %91

91:                                               ; preds = %.lr.ph367, %.backedge
  %.0252366 = phi i32 [ 0, %.lr.ph367 ], [ %.0252.be, %.backedge ]
  %92 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  switch i32 %92, label %.backedge [
    i32 78, label %93
    i32 0, label %.thread339
  ]

93:                                               ; preds = %91
  %94 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.1)
  %95 = icmp eq i32 %94, 0
  br i1 %95, label %96, label %156

96:                                               ; preds = %93
  br i1 %75, label %.thread339, label %97

97:                                               ; preds = %96
  %98 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %99 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %.not308 = icmp eq i32 %99, 0
  br i1 %.not308, label %.backedge, label %100

100:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  %101 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.3)
  %102 = icmp ne i32 %101, 0
  %or.cond315 = or i1 %77, %102
  br i1 %or.cond315, label %103, label %150

103:                                              ; preds = %100
  %104 = load ptr, ptr %8, align 8, !tbaa !13
  %105 = load i32, ptr %23, align 4, !tbaa !14
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds i8, ptr %104, i64 %106
  %108 = call i32 @strToUInt(ptr noundef %107, ptr noundef nonnull %10) #4
  %.not310 = icmp eq i32 %108, 0
  br i1 %.not310, label %.thread329, label %109

109:                                              ; preds = %103
  br i1 %77, label %145, label %110

110:                                              ; preds = %109
  %111 = load i32, ptr %6, align 4, !tbaa !5
  %112 = or i32 %111, 32768
  store i32 %112, ptr %6, align 4, !tbaa !5
  %113 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %113, ptr %61, align 4, !tbaa !15
  %114 = load i32, ptr %48, align 8, !tbaa !19
  %115 = icmp slt i32 %108, %114
  br i1 %115, label %116, label %145

116:                                              ; preds = %110
  %117 = load ptr, ptr %8, align 8, !tbaa !13
  %118 = load i32, ptr %23, align 4, !tbaa !14
  %119 = add nsw i32 %118, %108
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds i8, ptr %117, i64 %120
  %122 = load i8, ptr %121, align 1, !tbaa !20
  %123 = icmp eq i8 %122, 32
  br i1 %123, label %.lr.ph.preheader, label %145

.lr.ph.preheader:                                 ; preds = %116
  %124 = sext i32 %108 to i64
  %125 = sext i32 %118 to i64
  %invariant.gep = getelementptr i8, ptr %117, i64 %125
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %128
  %indvars.iv = phi i64 [ %124, %.lr.ph.preheader ], [ %indvars.iv.next, %128 ]
  %gep = getelementptr i8, ptr %invariant.gep, i64 %indvars.iv
  %126 = load i8, ptr %gep, align 1, !tbaa !20
  %127 = icmp eq i8 %126, 32
  br i1 %127, label %128, label %.critedge.split.loop.exit

128:                                              ; preds = %.lr.ph
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond.not = icmp eq i32 %114, %lftr.wideiv
  br i1 %exitcond.not, label %.critedge, label %.lr.ph, !llvm.loop !21

.critedge.split.loop.exit:                        ; preds = %.lr.ph
  %129 = trunc nsw i64 %indvars.iv to i32
  br label %.critedge

.critedge:                                        ; preds = %128, %.critedge.split.loop.exit
  %.0260.lcssa.ph = phi i32 [ %129, %.critedge.split.loop.exit ], [ %114, %128 ]
  %130 = add nsw i32 %.0260.lcssa.ph, 3
  %131 = icmp eq i32 %130, %114
  br i1 %131, label %132, label %145

132:                                              ; preds = %.critedge
  %133 = add nsw i32 %.0260.lcssa.ph, %118
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds i8, ptr %117, i64 %134
  %136 = load i8, ptr %135, align 1, !tbaa !20
  %137 = add i8 %136, -48
  %138 = getelementptr i8, ptr %135, i64 2
  %139 = load i8, ptr %138, align 1, !tbaa !20
  %140 = add i8 %139, -48
  %141 = icmp ult i8 %137, 10
  %142 = icmp ult i8 %140, 10
  %or.cond = select i1 %141, i1 %142, i1 false
  br i1 %or.cond, label %.thread, label %.thread329

.thread:                                          ; preds = %132
  %143 = getelementptr i8, ptr %135, i64 1
  %144 = load i8, ptr %143, align 1, !tbaa !20
  store i8 %137, ptr %62, align 4, !tbaa !23
  store i8 %144, ptr %63, align 1, !tbaa !24
  store i8 %140, ptr %64, align 2, !tbaa !25
  br label %145

145:                                              ; preds = %.thread, %110, %116, %.critedge, %109
  br i1 %76, label %.thread333, label %146

146:                                              ; preds = %145
  %147 = load i32, ptr %6, align 4, !tbaa !5
  %148 = or i32 %147, 4194304
  store i32 %148, ptr %6, align 4, !tbaa !5
  %149 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %149, ptr %65, align 4, !tbaa !26
  br label %.thread333

.thread329:                                       ; preds = %103, %132
  %.4.ph = phi ptr [ @.str.5, %132 ], [ @.str.4, %103 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  br label %.thread339

.thread333:                                       ; preds = %146, %145
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  br label %.backedge

150:                                              ; preds = %100
  %151 = load i32, ptr %6, align 4, !tbaa !5
  %152 = or i32 %151, 32768
  store i32 %152, ptr %6, align 4, !tbaa !5
  store i32 0, ptr %61, align 4, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  br label %.backedge

.backedge:                                        ; preds = %350, %395, %394, %415, %435, %512, %521, %445, %425, %405, %360, %340, %330, %91, %.thread346, %.preheader357, %507, %291, %297, %269, %282, %249, %260, %191, %.thread336, %97, %.thread333, %241, %236, %231, %226, %221, %164, %159, %333, %150, %186, %179
  %.0252.be = phi i32 [ %.0252366, %150 ], [ %.0252366, %159 ], [ %.0252366, %164 ], [ %.0252366, %186 ], [ %.0252366, %221 ], [ %.0252366, %226 ], [ %.0252366, %231 ], [ %.0252366, %236 ], [ %.0252366, %241 ], [ %.2254, %333 ], [ %.0252366, %179 ], [ %.0252366, %.thread333 ], [ %.0252366, %97 ], [ %.0252366, %.thread336 ], [ %.0252366, %191 ], [ %.0252366, %260 ], [ %.0252366, %249 ], [ %.0252366, %282 ], [ %.0252366, %269 ], [ %.0252366, %297 ], [ %.0252366, %291 ], [ %.2254, %340 ], [ %.2254, %350 ], [ %.2254, %360 ], [ %.2254, %395 ], [ %.2254, %394 ], [ %.2254, %405 ], [ %.2254, %415 ], [ %.2254, %425 ], [ %.2254, %435 ], [ %.2254, %445 ], [ %.2254, %.preheader357 ], [ %.2254, %507 ], [ %.2254, %512 ], [ %.2254, %521 ], [ %.2254, %330 ], [ %.0252366, %91 ], [ %.2254, %.thread346 ]
  %153 = load i32, ptr %18, align 8, !tbaa !9
  %154 = load i32, ptr %19, align 4, !tbaa !12
  %155 = icmp slt i32 %153, %154
  br i1 %155, label %91, label %.thread339, !llvm.loop !27

156:                                              ; preds = %93
  %157 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.6)
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %159, label %161

159:                                              ; preds = %156
  %160 = call ptr @readUIntField(ptr noundef nonnull %8, i32 noundef 4096, ptr noundef nonnull %59, i32 noundef %5, ptr noundef nonnull %6, i32 noundef 0)
  %.not307 = icmp eq ptr %160, null
  br i1 %.not307, label %.backedge, label %.thread339

161:                                              ; preds = %156
  %162 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.7)
  %163 = icmp eq i32 %162, 0
  br i1 %163, label %164, label %166

164:                                              ; preds = %161
  %165 = call ptr @readUIntField(ptr noundef nonnull %8, i32 noundef 262144, ptr noundef nonnull %58, i32 noundef %5, ptr noundef nonnull %6, i32 noundef 0)
  %.not306 = icmp eq ptr %165, null
  br i1 %.not306, label %.backedge, label %.thread339

166:                                              ; preds = %161
  %167 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.8)
  %168 = icmp eq i32 %167, 0
  br i1 %168, label %169, label %187

169:                                              ; preds = %166
  br i1 %78, label %.thread339, label %170

170:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #4
  %171 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %172 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %.not304 = icmp eq i32 %172, 0
  br i1 %.not304, label %186, label %173, !llvm.loop !27

173:                                              ; preds = %170
  %174 = load ptr, ptr %8, align 8, !tbaa !13
  %175 = load i32, ptr %23, align 4, !tbaa !14
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i8, ptr %174, i64 %176
  %178 = call i32 @strToFloat(ptr noundef %177, ptr noundef nonnull %11) #4
  %.not305.not = icmp eq i32 %178, 0
  br i1 %.not305.not, label %.thread349, label %179

.thread349:                                       ; preds = %173
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  br label %.thread339

179:                                              ; preds = %173
  %180 = load float, ptr %11, align 4, !tbaa !28
  %181 = fcmp olt float %180, 0x3F40624BA0000000
  %182 = fdiv float 1.000000e+06, %180
  %183 = fptoui float %182 to i32
  %storemerge = select i1 %181, i32 2000004000, i32 %183
  store i32 %storemerge, ptr %57, align 4, !tbaa !29
  %184 = load i32, ptr %6, align 4, !tbaa !5
  %185 = or i32 %184, 2048
  store i32 %185, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  br label %.backedge

186:                                              ; preds = %170
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  br label %.backedge

187:                                              ; preds = %166
  %188 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.10)
  %189 = icmp eq i32 %188, 0
  br i1 %189, label %190, label %218

190:                                              ; preds = %187
  br i1 %79, label %.thread339, label %191

191:                                              ; preds = %190
  %192 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %193 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %.not302 = icmp eq i32 %193, 0
  br i1 %.not302, label %.backedge, label %194

194:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #4
  %195 = load ptr, ptr %8, align 8, !tbaa !13
  %196 = load i32, ptr %23, align 4, !tbaa !14
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds i8, ptr %195, i64 %197
  %199 = load i8, ptr %198, align 1, !tbaa !20
  %200 = icmp eq i8 %199, 48
  br i1 %200, label %201, label %205

201:                                              ; preds = %194
  %202 = getelementptr i8, ptr %198, i64 1
  %203 = load i8, ptr %202, align 1, !tbaa !20
  %204 = icmp eq i8 %203, 120
  br i1 %204, label %206, label %205

205:                                              ; preds = %201, %194
  br label %206

206:                                              ; preds = %201, %205
  %.0261 = phi i32 [ 0, %205 ], [ 2, %201 ]
  %207 = add nsw i32 %.0261, %196
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i8, ptr %195, i64 %208
  %210 = call i32 @hexToByte(ptr noundef %209, ptr noundef nonnull %12) #4
  %211 = load i32, ptr %48, align 8, !tbaa !19
  %212 = sub nsw i32 %211, %.0261
  %.not303 = icmp eq i32 %210, %212
  br i1 %.not303, label %.thread336, label %217

.thread336:                                       ; preds = %206
  %213 = load i8, ptr %12, align 1, !tbaa !20
  %214 = sext i8 %213 to i32
  store i32 %214, ptr %56, align 4, !tbaa !30
  %215 = load i32, ptr %6, align 4, !tbaa !5
  %216 = or i32 %215, 524288
  store i32 %216, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #4
  br label %.backedge

217:                                              ; preds = %206
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #4
  br label %.thread339

218:                                              ; preds = %187
  %219 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.12)
  %220 = icmp eq i32 %219, 0
  br i1 %220, label %221, label %223

221:                                              ; preds = %218
  %222 = call ptr @readUIntField(ptr noundef nonnull %8, i32 noundef 1048576, ptr noundef nonnull %55, i32 noundef %5, ptr noundef nonnull %6, i32 noundef 0)
  %.not301 = icmp eq ptr %222, null
  br i1 %.not301, label %.backedge, label %.thread339

223:                                              ; preds = %218
  %224 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.13)
  %225 = icmp eq i32 %224, 0
  br i1 %225, label %226, label %228

226:                                              ; preds = %223
  %227 = call ptr @readUIntField(ptr noundef nonnull %8, i32 noundef 2097152, ptr noundef nonnull %54, i32 noundef %5, ptr noundef nonnull %6, i32 noundef 0)
  %.not300 = icmp eq ptr %227, null
  br i1 %.not300, label %.backedge, label %.thread339

228:                                              ; preds = %223
  %229 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.14)
  %230 = icmp eq i32 %229, 0
  br i1 %230, label %231, label %233

231:                                              ; preds = %228
  %232 = call ptr @readUIntField(ptr noundef nonnull %8, i32 noundef 8388608, ptr noundef nonnull %53, i32 noundef %5, ptr noundef nonnull %6, i32 noundef -1)
  %.not299 = icmp eq ptr %232, null
  br i1 %.not299, label %.backedge, label %.thread339

233:                                              ; preds = %228
  %234 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.15)
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %238

236:                                              ; preds = %233
  %237 = call ptr @readUIntField(ptr noundef nonnull %8, i32 noundef 16777216, ptr noundef nonnull %52, i32 noundef %5, ptr noundef nonnull %6, i32 noundef 0)
  %.not298 = icmp eq ptr %237, null
  br i1 %.not298, label %.backedge, label %.thread339

238:                                              ; preds = %233
  %239 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.16)
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %241, label %243

241:                                              ; preds = %238
  %242 = call ptr @readFloatField(ptr noundef nonnull %8, i32 noundef 33554432, ptr noundef nonnull %51, i32 noundef %5, ptr noundef nonnull %6)
  %.not297 = icmp eq ptr %242, null
  br i1 %.not297, label %.backedge, label %.thread339

243:                                              ; preds = %238
  %244 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.17)
  %245 = icmp eq i32 %244, 0
  br i1 %245, label %246, label %263

246:                                              ; preds = %243
  br i1 %80, label %.thread339, label %247

247:                                              ; preds = %246
  %248 = load i32, ptr %47, align 4, !tbaa !31
  %.not295 = icmp eq i32 %248, 0
  br i1 %.not295, label %249, label %.thread339

249:                                              ; preds = %247
  %250 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %251 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %.not296 = icmp eq i32 %251, 0
  br i1 %.not296, label %.backedge, label %252

252:                                              ; preds = %249
  %253 = load ptr, ptr %8, align 8, !tbaa !13
  %254 = load i32, ptr %23, align 4, !tbaa !14
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i8, ptr %253, i64 %255
  %257 = load i32, ptr %48, align 8, !tbaa !19
  %258 = call i32 @dhdata_decode(ptr noundef %256, i32 noundef %257, ptr noundef nonnull %49, i32 noundef 264) #4
  store i32 %258, ptr %47, align 4, !tbaa !31
  %259 = icmp eq i32 %258, 0
  br i1 %259, label %.thread339, label %260

260:                                              ; preds = %252
  %261 = load i32, ptr %6, align 4, !tbaa !5
  %262 = or i32 %261, 65536
  store i32 %262, ptr %6, align 4, !tbaa !5
  br label %.backedge

263:                                              ; preds = %243
  %264 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.19)
  %265 = icmp eq i32 %264, 0
  br i1 %265, label %266, label %285

266:                                              ; preds = %263
  br i1 %81, label %.thread339, label %267

267:                                              ; preds = %266
  %268 = load i32, ptr %47, align 4, !tbaa !31
  %.not293 = icmp eq i32 %268, 0
  br i1 %.not293, label %269, label %.thread339

269:                                              ; preds = %267
  %270 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %271 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %.not294 = icmp eq i32 %271, 0
  br i1 %.not294, label %.backedge, label %272

272:                                              ; preds = %269
  %273 = load ptr, ptr %8, align 8, !tbaa !13
  %274 = load i32, ptr %23, align 4, !tbaa !14
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds i8, ptr %273, i64 %275
  %277 = load i32, ptr %48, align 8, !tbaa !19
  %278 = call i32 @dhdata_decode(ptr noundef %276, i32 noundef %277, ptr noundef nonnull %25, i32 noundef 60) #4
  %279 = trunc i32 %278 to i8
  store i8 %279, ptr %50, align 4, !tbaa !20
  %280 = and i32 %278, 255
  %281 = icmp eq i32 %280, 0
  br i1 %281, label %.thread339, label %282

282:                                              ; preds = %272
  %283 = load i32, ptr %6, align 4, !tbaa !5
  %284 = or i32 %283, 67108864
  store i32 %284, ptr %6, align 4, !tbaa !5
  br label %.backedge

285:                                              ; preds = %263
  %286 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.21)
  %287 = icmp eq i32 %286, 0
  br i1 %287, label %288, label %308

288:                                              ; preds = %285
  br i1 %82, label %.thread339, label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %47, align 4, !tbaa !31
  %.not291 = icmp eq i32 %290, 0
  br i1 %.not291, label %291, label %.thread339

291:                                              ; preds = %289
  %292 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %293 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %.not292 = icmp eq i32 %293, 0
  br i1 %.not292, label %.backedge, label %294

294:                                              ; preds = %291
  %295 = load i32, ptr %48, align 8, !tbaa !19
  %296 = icmp ugt i32 %295, 263
  br i1 %296, label %.thread339, label %297

297:                                              ; preds = %294
  %298 = load ptr, ptr %8, align 8, !tbaa !13
  %299 = load i32, ptr %23, align 4, !tbaa !14
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds i8, ptr %298, i64 %300
  %302 = call ptr @ets_memcpy(ptr noundef nonnull %49, ptr noundef %301, i32 noundef %295) #4
  %303 = load i32, ptr %48, align 8, !tbaa !19
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds [264 x i8], ptr %49, i64 0, i64 %304
  store i8 0, ptr %305, align 1, !tbaa !20
  store i32 %303, ptr %47, align 4, !tbaa !31
  %306 = load i32, ptr %6, align 4, !tbaa !5
  %307 = or i32 %306, 131072
  store i32 %307, ptr %6, align 4, !tbaa !5
  br label %.backedge

308:                                              ; preds = %285
  %309 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.23)
  %310 = icmp eq i32 %309, 0
  br i1 %310, label %311, label %313

311:                                              ; preds = %308
  %.not280 = icmp eq i32 %.0252366, 0
  br i1 %.not280, label %312, label %.thread339

312:                                              ; preds = %311
  store i32 -1, ptr %9, align 4, !tbaa !5
  br label %330

313:                                              ; preds = %308
  %314 = load ptr, ptr %8, align 8, !tbaa !13
  %315 = load i32, ptr %23, align 4, !tbaa !14
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i8, ptr %314, i64 %316
  %318 = call i32 @strToUInt(ptr noundef %317, ptr noundef nonnull %9) #4
  %319 = icmp eq i32 %318, 0
  %320 = load i32, ptr %9, align 4
  %321 = icmp ugt i32 %320, 15
  %or.cond19 = select i1 %319, i1 true, i1 %321
  br i1 %or.cond19, label %.thread339, label %322

322:                                              ; preds = %313
  %323 = zext nneg i32 %320 to i64
  %324 = shl nuw nsw i64 1, %323
  %325 = trunc nuw nsw i64 %324 to i32
  %326 = and i32 %.0252366, %325
  %.not279 = icmp eq i32 %326, 0
  br i1 %.not279, label %327, label %.thread339

327:                                              ; preds = %322
  %328 = shl nuw nsw i32 1, %320
  %329 = or i32 %328, %.0252366
  br label %330

330:                                              ; preds = %327, %312
  %.2258 = phi i32 [ %3, %312 ], [ %328, %327 ]
  %.2254 = phi i32 [ -1, %312 ], [ %329, %327 ]
  %331 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %332 = call i32 @jsonparse_next(ptr noundef nonnull %8) #4
  %.not281 = icmp eq i32 %332, 0
  br i1 %.not281, label %.backedge, label %333

333:                                              ; preds = %330
  %334 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.25)
  %335 = icmp eq i32 %334, 0
  br i1 %335, label %.backedge, label %336

336:                                              ; preds = %333
  %337 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.26)
  %338 = icmp eq i32 %337, 0
  br i1 %338, label %339, label %346

339:                                              ; preds = %336
  br i1 %83, label %.thread339, label %340

340:                                              ; preds = %339
  %341 = load i16, ptr %46, align 4, !tbaa !32
  %342 = trunc i32 %.2258 to i16
  %343 = or i16 %341, %342
  store i16 %343, ptr %46, align 4, !tbaa !32
  %344 = load i32, ptr %6, align 4, !tbaa !5
  %345 = or i32 %344, 4
  store i32 %345, ptr %6, align 4, !tbaa !5
  br label %.backedge

346:                                              ; preds = %336
  %347 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.27)
  %348 = icmp eq i32 %347, 0
  br i1 %348, label %349, label %356

349:                                              ; preds = %346
  br i1 %84, label %.thread339, label %350

350:                                              ; preds = %349
  %351 = load i16, ptr %45, align 2, !tbaa !33
  %352 = trunc i32 %.2258 to i16
  %353 = or i16 %351, %352
  store i16 %353, ptr %45, align 2, !tbaa !33
  %354 = load i32, ptr %6, align 4, !tbaa !5
  %355 = or i32 %354, 8
  store i32 %355, ptr %6, align 4, !tbaa !5
  br label %.backedge

356:                                              ; preds = %346
  %357 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.28)
  %358 = icmp eq i32 %357, 0
  br i1 %358, label %359, label %366

359:                                              ; preds = %356
  br i1 %85, label %.thread339, label %360

360:                                              ; preds = %359
  %361 = load i16, ptr %44, align 4, !tbaa !34
  %362 = trunc i32 %.2258 to i16
  %363 = or i16 %361, %362
  store i16 %363, ptr %44, align 4, !tbaa !34
  %364 = load i32, ptr %6, align 4, !tbaa !5
  %365 = or i32 %364, 16
  store i32 %365, ptr %6, align 4, !tbaa !5
  br label %.backedge

366:                                              ; preds = %356
  %367 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.3)
  %368 = icmp eq i32 %367, 0
  br i1 %368, label %369, label %401

369:                                              ; preds = %366
  br i1 %86, label %.thread339, label %370

370:                                              ; preds = %369
  br i1 %.not283, label %382, label %371

371:                                              ; preds = %370
  %372 = load i32, ptr %9, align 4, !tbaa !5
  %373 = icmp sgt i32 %372, 0
  br i1 %373, label %374, label %.preheader353.preheader

.preheader353.preheader:                          ; preds = %371
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %25, i8 0, i64 64, i1 false), !tbaa !20
  br label %.loopexit354

374:                                              ; preds = %371
  %375 = zext nneg i32 %372 to i64
  %376 = getelementptr inbounds [16 x i32], ptr %25, i64 0, i64 %375
  store i32 0, ptr %376, align 4, !tbaa !20
  br label %.loopexit354

.loopexit354:                                     ; preds = %.preheader353.preheader, %374
  %377 = load i16, ptr %26, align 4, !tbaa !35
  %378 = trunc i32 %.2258 to i16
  %379 = or i16 %377, %378
  store i16 %379, ptr %26, align 4, !tbaa !35
  %380 = load i32, ptr %6, align 4, !tbaa !5
  %381 = or i32 %380, 8192
  store i32 %381, ptr %6, align 4, !tbaa !5
  br label %382

382:                                              ; preds = %.loopexit354, %370
  br i1 %.not282, label %394, label %383

383:                                              ; preds = %382
  %384 = load i32, ptr %9, align 4, !tbaa !5
  %385 = icmp sgt i32 %384, 0
  br i1 %385, label %386, label %.preheader352.preheader

.preheader352.preheader:                          ; preds = %383
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %25, i8 0, i64 64, i1 false), !tbaa !20
  br label %.loopexit

386:                                              ; preds = %383
  %387 = zext nneg i32 %384 to i64
  %388 = getelementptr inbounds [16 x float], ptr %25, i64 0, i64 %387
  store float 0.000000e+00, ptr %388, align 4, !tbaa !20
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader352.preheader, %386
  %389 = load i16, ptr %26, align 4, !tbaa !35
  %390 = trunc i32 %.2258 to i16
  %391 = or i16 %389, %390
  store i16 %391, ptr %26, align 4, !tbaa !35
  %392 = load i32, ptr %6, align 4, !tbaa !5
  %393 = or i32 %392, 16384
  store i32 %393, ptr %6, align 4, !tbaa !5
  br label %394

394:                                              ; preds = %.loopexit, %382
  br i1 %87, label %.backedge, label %395

395:                                              ; preds = %394
  %396 = load i16, ptr %43, align 2, !tbaa !36
  %397 = trunc i32 %.2258 to i16
  %398 = or i16 %396, %397
  store i16 %398, ptr %43, align 2, !tbaa !36
  %399 = load i32, ptr %6, align 4, !tbaa !5
  %400 = or i32 %399, 32
  store i32 %400, ptr %6, align 4, !tbaa !5
  br label %.backedge

401:                                              ; preds = %366
  %402 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.29)
  %403 = icmp eq i32 %402, 0
  br i1 %403, label %404, label %411

404:                                              ; preds = %401
  br i1 %88, label %.thread339, label %405

405:                                              ; preds = %404
  %406 = load i16, ptr %42, align 4, !tbaa !37
  %407 = trunc i32 %.2258 to i16
  %408 = or i16 %406, %407
  store i16 %408, ptr %42, align 4, !tbaa !37
  %409 = load i32, ptr %6, align 4, !tbaa !5
  %410 = or i32 %409, 64
  store i32 %410, ptr %6, align 4, !tbaa !5
  br label %.backedge

411:                                              ; preds = %401
  %412 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.30)
  %413 = icmp eq i32 %412, 0
  br i1 %413, label %414, label %421

414:                                              ; preds = %411
  br i1 %89, label %.thread339, label %415

415:                                              ; preds = %414
  %416 = load i16, ptr %41, align 2, !tbaa !38
  %417 = trunc i32 %.2258 to i16
  %418 = or i16 %416, %417
  store i16 %418, ptr %41, align 2, !tbaa !38
  %419 = load i32, ptr %6, align 4, !tbaa !5
  %420 = or i32 %419, 128
  store i32 %420, ptr %6, align 4, !tbaa !5
  br label %.backedge

421:                                              ; preds = %411
  %422 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.31)
  %423 = icmp eq i32 %422, 0
  br i1 %423, label %424, label %431

424:                                              ; preds = %421
  br i1 %90, label %.thread339, label %425

425:                                              ; preds = %424
  %426 = load i16, ptr %40, align 4, !tbaa !39
  %427 = trunc i32 %.2258 to i16
  %428 = or i16 %426, %427
  store i16 %428, ptr %40, align 4, !tbaa !39
  %429 = load i32, ptr %6, align 4, !tbaa !5
  %430 = or i32 %429, 256
  store i32 %430, ptr %6, align 4, !tbaa !5
  br label %.backedge

431:                                              ; preds = %421
  %432 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.32)
  %433 = icmp eq i32 %432, 0
  br i1 %433, label %434, label %441

434:                                              ; preds = %431
  br i1 %35, label %.thread339, label %435

435:                                              ; preds = %434
  %436 = load i16, ptr %36, align 2, !tbaa !40
  %437 = trunc i32 %.2258 to i16
  %438 = or i16 %436, %437
  store i16 %438, ptr %36, align 2, !tbaa !40
  %439 = load i32, ptr %6, align 4, !tbaa !5
  %440 = or i32 %439, 512
  store i32 %440, ptr %6, align 4, !tbaa !5
  br label %.backedge

441:                                              ; preds = %431
  %442 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.33)
  %443 = icmp eq i32 %442, 0
  br i1 %443, label %444, label %451

444:                                              ; preds = %441
  br i1 %32, label %.thread339, label %445

445:                                              ; preds = %444
  %446 = load i16, ptr %33, align 4, !tbaa !41
  %447 = trunc i32 %.2258 to i16
  %448 = or i16 %446, %447
  store i16 %448, ptr %33, align 4, !tbaa !41
  %449 = load i32, ptr %6, align 4, !tbaa !5
  %450 = or i32 %449, 1024
  store i32 %450, ptr %6, align 4, !tbaa !5
  br label %.backedge

451:                                              ; preds = %441
  br i1 %.not282, label %476, label %452

452:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #4
  %453 = load ptr, ptr %8, align 8, !tbaa !13
  %454 = load i32, ptr %23, align 4, !tbaa !14
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i8, ptr %453, i64 %455
  %457 = call i32 @strToFloat(ptr noundef %456, ptr noundef nonnull %13) #4
  %.not287.not = icmp eq i32 %457, 0
  br i1 %.not287.not, label %.thread344, label %458

.thread344:                                       ; preds = %452
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #4
  br label %.thread339

458:                                              ; preds = %452
  %459 = load i32, ptr %9, align 4, !tbaa !5
  %460 = icmp sgt i32 %459, 0
  %461 = load float, ptr %13, align 4, !tbaa !28
  br i1 %460, label %.thread346, label %.preheader357

.preheader357:                                    ; preds = %458
  %462 = insertelement <4 x float> poison, float %461, i64 0
  %463 = shufflevector <4 x float> %462, <4 x float> poison, <4 x i32> zeroinitializer
  store <4 x float> %463, ptr %25, align 4, !tbaa !20
  store <4 x float> %463, ptr %66, align 4, !tbaa !20
  store <4 x float> %463, ptr %67, align 4, !tbaa !20
  store <4 x float> %463, ptr %68, align 4, !tbaa !20
  %464 = load i16, ptr %26, align 4, !tbaa !35
  %465 = trunc i32 %.2258 to i16
  %466 = or i16 %464, %465
  store i16 %466, ptr %26, align 4, !tbaa !35
  %467 = load i32, ptr %6, align 4, !tbaa !5
  %468 = or i32 %467, 16384
  store i32 %468, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #4
  br label %.backedge

.thread346:                                       ; preds = %458
  %469 = zext nneg i32 %459 to i64
  %470 = getelementptr inbounds [16 x float], ptr %25, i64 0, i64 %469
  store float %461, ptr %470, align 4, !tbaa !20
  %471 = load i16, ptr %26, align 4, !tbaa !35
  %472 = trunc i32 %.2258 to i16
  %473 = or i16 %471, %472
  store i16 %473, ptr %26, align 4, !tbaa !35
  %474 = load i32, ptr %6, align 4, !tbaa !5
  %475 = or i32 %474, 16384
  store i32 %475, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #4
  br label %.backedge

476:                                              ; preds = %451
  br i1 %.not283, label %508, label %477

477:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #4
  %478 = load ptr, ptr %8, align 8, !tbaa !13
  %479 = load i32, ptr %23, align 4, !tbaa !14
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds i8, ptr %478, i64 %480
  %482 = call i32 @strToUInt(ptr noundef %481, ptr noundef nonnull %14) #4
  %.not284.not = icmp eq i32 %482, 0
  br i1 %.not284.not, label %.thread347, label %483

.thread347:                                       ; preds = %477
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #4
  br label %.thread339

483:                                              ; preds = %477
  %484 = load i32, ptr %9, align 4, !tbaa !5
  %485 = icmp sgt i32 %484, 0
  %486 = load i32, ptr %14, align 4, !tbaa !5
  br i1 %485, label %489, label %.preheader355

.preheader355:                                    ; preds = %483
  %487 = insertelement <4 x i32> poison, i32 %486, i64 0
  %488 = shufflevector <4 x i32> %487, <4 x i32> poison, <4 x i32> zeroinitializer
  store <4 x i32> %488, ptr %25, align 4, !tbaa !20
  store <4 x i32> %488, ptr %69, align 4, !tbaa !20
  store <4 x i32> %488, ptr %70, align 4, !tbaa !20
  store i32 %486, ptr %71, align 4, !tbaa !20
  store i32 %486, ptr %72, align 4, !tbaa !20
  store i32 %486, ptr %73, align 4, !tbaa !20
  br label %.loopexit356

489:                                              ; preds = %483
  %490 = zext nneg i32 %484 to i64
  %491 = getelementptr inbounds [16 x i32], ptr %25, i64 0, i64 %490
  br label %.loopexit356

.loopexit356:                                     ; preds = %.preheader355, %489
  %.sink = phi ptr [ %74, %.preheader355 ], [ %491, %489 ]
  store i32 %486, ptr %.sink, align 4, !tbaa !20
  %492 = load i16, ptr %26, align 4, !tbaa !35
  %493 = trunc i32 %.2258 to i16
  %494 = or i16 %492, %493
  store i16 %494, ptr %26, align 4, !tbaa !35
  %495 = load i32, ptr %6, align 4, !tbaa !5
  %496 = or i32 %495, 8192
  store i32 %496, ptr %6, align 4, !tbaa !5
  %497 = icmp ne i32 %486, 1
  %or.cond326 = or i1 %.not285, %497
  br i1 %or.cond326, label %501, label %498

498:                                              ; preds = %.loopexit356
  %499 = load i16, ptr %2, align 4, !tbaa !42
  %500 = or i16 %499, %493
  store i16 %500, ptr %2, align 4, !tbaa !42
  br label %.sink.split

501:                                              ; preds = %.loopexit356
  %502 = icmp ne i32 %486, 0
  %or.cond327 = or i1 %.not286, %502
  br i1 %or.cond327, label %507, label %503

503:                                              ; preds = %501
  %504 = load i16, ptr %30, align 2, !tbaa !43
  %505 = or i16 %504, %493
  store i16 %505, ptr %30, align 2, !tbaa !43
  br label %.sink.split

.sink.split:                                      ; preds = %503, %498
  %.sink516 = phi i32 [ 8193, %498 ], [ 8194, %503 ]
  %506 = or i32 %495, %.sink516
  store i32 %506, ptr %6, align 4, !tbaa !5
  br label %507

507:                                              ; preds = %.sink.split, %501
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #4
  br label %.backedge

508:                                              ; preds = %476
  %509 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.36)
  %510 = icmp eq i32 %509, 0
  br i1 %510, label %511, label %518

511:                                              ; preds = %508
  br i1 %.not285, label %.thread339, label %512

512:                                              ; preds = %511
  %513 = load i16, ptr %2, align 4, !tbaa !42
  %514 = trunc i32 %.2258 to i16
  %515 = or i16 %513, %514
  store i16 %515, ptr %2, align 4, !tbaa !42
  %516 = load i32, ptr %6, align 4, !tbaa !5
  %517 = or i32 %516, 1
  store i32 %517, ptr %6, align 4, !tbaa !5
  br label %.backedge

518:                                              ; preds = %508
  %519 = call i32 @strcmp_value(ptr noundef nonnull %8, ptr noundef nonnull @.str.37)
  %520 = icmp ne i32 %519, 0
  %brmerge = or i1 %520, %.not286
  br i1 %brmerge, label %.thread339.loopexit.split.loop.exit513, label %521

521:                                              ; preds = %518
  %522 = load i16, ptr %30, align 2, !tbaa !43
  %523 = trunc i32 %.2258 to i16
  %524 = or i16 %522, %523
  store i16 %524, ptr %30, align 2, !tbaa !43
  %525 = load i32, ptr %6, align 4, !tbaa !5
  %526 = or i32 %525, 2
  store i32 %526, ptr %6, align 4, !tbaa !5
  br label %.backedge

.thread339.loopexit.split.loop.exit513:           ; preds = %518
  %.str.38.mux.le = select i1 %520, ptr @.str.38, ptr @.str.2
  br label %.thread339

.thread339:                                       ; preds = %313, %322, %.backedge, %91, %511, %444, %434, %424, %414, %404, %369, %359, %349, %339, %311, %294, %288, %289, %272, %266, %267, %252, %246, %247, %190, %169, %96, %159, %164, %221, %226, %231, %236, %241, %.thread339.loopexit.split.loop.exit513, %17, %.thread349, %.thread347, %.thread344, %217, %.thread329
  %.23 = phi ptr [ @.str.11, %217 ], [ %.4.ph, %.thread329 ], [ @.str.34, %.thread344 ], [ @.str.35, %.thread347 ], [ @.str.9, %.thread349 ], [ null, %17 ], [ %.str.38.mux.le, %.thread339.loopexit.split.loop.exit513 ], [ @.str.24, %313 ], [ @.str.24, %322 ], [ null, %.backedge ], [ @.str.39, %91 ], [ @.str.2, %511 ], [ @.str.2, %444 ], [ @.str.2, %434 ], [ @.str.2, %424 ], [ @.str.2, %414 ], [ @.str.2, %404 ], [ @.str.2, %369 ], [ @.str.2, %359 ], [ @.str.2, %349 ], [ @.str.2, %339 ], [ @.str.24, %311 ], [ @.str.22, %294 ], [ @.str.2, %288 ], [ @.str.2, %289 ], [ @.str.20, %272 ], [ @.str.2, %266 ], [ @.str.2, %267 ], [ @.str.18, %252 ], [ @.str.2, %246 ], [ @.str.2, %247 ], [ @.str.2, %190 ], [ @.str.2, %169 ], [ @.str.2, %96 ], [ %160, %159 ], [ %165, %164 ], [ %222, %221 ], [ %227, %226 ], [ %232, %231 ], [ %237, %236 ], [ %242, %241 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #4
  br label %527

527:                                              ; preds = %16, %.thread339
  %.24 = phi ptr [ %.23, %.thread339 ], [ @.str, %16 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #4
  ret ptr %.24
}

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

declare void @jsonparse_setup(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

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

declare i32 @jsonparse_next(ptr noundef) local_unnamed_addr #2

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

declare i32 @strToUInt(ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

declare i32 @strToFloat(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @hexToByte(ptr noundef, ptr noundef) local_unnamed_addr #2

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

declare i32 @dhdata_decode(ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare ptr @ets_memcpy(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 8}
!10 = !{!"jsonparse_state", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !7, i64 28, !7, i64 29, !7, i64 30}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!10, !6, i64 12}
!13 = !{!10, !11, i64 0}
!14 = !{!10, !6, i64 20}
!15 = !{!16, !6, i64 100}
!16 = !{!"", !17, i64 0, !17, i64 2, !17, i64 4, !17, i64 6, !17, i64 8, !17, i64 10, !17, i64 12, !17, i64 14, !17, i64 16, !17, i64 18, !17, i64 20, !6, i64 24, !6, i64 28, !7, i64 32, !17, i64 96, !6, i64 100, !7, i64 104, !7, i64 105, !7, i64 106, !7, i64 107, !6, i64 372, !6, i64 376, !6, i64 380, !6, i64 384, !6, i64 388, !6, i64 392, !6, i64 396, !6, i64 400, !18, i64 404}
!17 = !{!"short", !7, i64 0}
!18 = !{!"float", !7, i64 0}
!19 = !{!10, !6, i64 24}
!20 = !{!7, !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!16, !7, i64 104}
!24 = !{!16, !7, i64 105}
!25 = !{!16, !7, i64 106}
!26 = !{!16, !6, i64 392}
!27 = distinct !{!27, !22}
!28 = !{!18, !18, i64 0}
!29 = !{!16, !6, i64 24}
!30 = !{!16, !6, i64 380}
!31 = !{!16, !6, i64 372}
!32 = !{!16, !17, i64 4}
!33 = !{!16, !17, i64 6}
!34 = !{!16, !17, i64 8}
!35 = !{!16, !17, i64 96}
!36 = !{!16, !17, i64 10}
!37 = !{!16, !17, i64 12}
!38 = !{!16, !17, i64 14}
!39 = !{!16, !17, i64 16}
!40 = !{!16, !17, i64 18}
!41 = !{!16, !17, i64 20}
!42 = !{!16, !17, i64 0}
!43 = !{!16, !17, i64 2}


; Effective O3 passes: ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass